범용 이진 함수 조회 테이블 생성 –

이것은 난해한 프로그래밍 언어발명 하려는 나의 탐구와 관련이 있습니다 .

이진수 0 .. 15의 테이블을 사용하여 인덱싱 작업을 사용하여 범용 이진 함수를 구현할 수 있습니다. 2 개의 1 비트 입력 X와 Y가 주어지면 16 개의 가능한 모든 기능을 4 비트 opcode로 인코딩 할 수 있습니다.

X Y  F|0 1 2 3 4 5 6 7 8 9 A B C D E F
- -    - - - - - - - - - - - - - - - -
0 0    0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1    0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
1 0    0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
1 1    0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
       -     -   - -   -   -   -   - -
       0    ~X  ~Y ^   &   Y   X   | 1
      ZERO    NOT-Y   AND         OR
          NOT-X   XOR              ONE

따라서이 16 가지 기능 세트를 함수로 이진 입력에 적용 할 수 있습니다.

U (f, x, y) : (f >> ((x << 1) | y)) & 1 ,

또는

U (f, x, y) : (f / 2 ^ (x × 2 + y)) % 2 ,

또는 인덱싱 또는 매트릭스 파티셔닝으로.

이러한 유형의 이진 연산에 빌드 될 수있는 모든 언어에 대해 이러한 값 테이블을 나타내거나 생성하는 가장 간단한 방법을 아는 것이 유용합니다.

목표:

이 정확한 텍스트 출력을 생성하십시오.

0101010101010101
0011001100110011
0000111100001111
0000000011111111

그게 다야! 최단 코드 승리.



답변

J, 10 (13?) 자

|.|:#:i.16

번호 목록 :

   i.16
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15`

이진으로 :

   #:i.16
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 1
1 0 0 0
1 0 0 1
1 0 1 0
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1

바꾸어 놓다:

   |:#:i.16
0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

역:

   |.|:#:i.16
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1

공백을 제거해야합니까? 다른 J 답변을 보면 3자를 추가 1":하고 Jan의 답변 에서 빌려야합니다 .


답변

파이썬 2, 40

for n in 1,2,4,8:print 8/n*('0'*n+'1'*n)

답변

APL (14)

가정 ⎕IO=0(설정) :

⎕D[⊖(4⍴2)⊤⍳16]

설명:

  • ⍳16: 숫자 [0,16)
  • (4⍴2)⊤: 2 자리의 각 숫자를 4 자리 숫자로 인코딩
  • : 수평 반전 (MSB가 상단에 위치)
  • ⎕D[]: ⎕D문자열 인 값을 선택하십시오 0123456789. (숫자 행렬은 값 사이에 공백으로 표시되고 문자 행렬은 표시되지 않습니다. 따라서 각 숫자 비트를 char 중 하나로 변환합니다 '0' '1').

답변

Jelly , 42 7 바이트 (비경쟁)

⁴ḶBUz0Y

온라인으로 사용해보십시오!

도움을 주신 Dennis에게 감사합니다. 여기 에 첫 번째 메시지 가 있고 마지막 메시지가 있습니다 (다른 토론도 발생했습니다). 그의 도움으로, 나는 거의 (거의) 점수를 제곱했다.


답변

/// , 51 바이트

온라인으로 사용해보십시오

/a/0101/aaaa
/b/0011/bbbb
/z/0000//o/1111/zozo
zzoo

답변

GolfScript ( 18 17 15 자)

(하워드 덕분에)

16,zip{','-~n}%

나는 왜 10 문자를 이해할 수 없다

16,zip{n}/

작동하지 않습니다. 표준 인터프리터의 버그로 인해 스택에서 지원되지 않는 유형이 발생하는 것 같습니다.

내가 완전히 이해하는 18 자의 대안은 다음과 같습니다.

4,{2\?.2,*$8@/*n}%

보다 수학적 접근 방식은 28 자에서 조금 더 깁니다.

4,{2.@??)2.4??.@/+2base(;n}/

그것의 많은 것은 기본 변환과 제로 패딩을위한 것입니다. 그것들이 없으면 19 자로 떨어집니다.

4,{2.@??)2.4??\/n}/

출력

21845
13107
3855
255

답변

CJam-16

4,{G,f{\m>2%}N}/

동등한 Java 코드 (설명) :

public class Lookup {
    public static void main(final String... args) {
        for (int i = 0; i < 4; ++i) {
            for (int j = 0; j < 16; ++j) {
                System.out.print((j >> i) % 2);
            }
            System.out.println();
        }
    }
}