이것은 난해한 프로그래밍 언어 를 발명 하려는 나의 탐구와 관련이 있습니다 .
이진수 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에게 감사합니다. 여기 에 첫 번째 메시지 가 있고 마지막 메시지가 있습니다 (다른 토론도 발생했습니다). 그의 도움으로, 나는 거의 (거의) 점수를 제곱했다.
답변
답변
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();
}
}
}