비트 제직 시각화 그것은 본질적으로 바이트의

난해한 프로그래밍 언어 인 은 “위빙 (weaving)”이라고하는 바이트 값에 대한 흥미로운 연산을 가지고 있습니다. 그것은 본질적으로 바이트의 8 비트의 순열입니다 (패턴이 대칭이기 때문에 어떤 끝에서 계산을 시작하는지는 중요하지 않습니다).

  • 비트 0이 비트 2로 이동
  • 비트 1이 비트 0으로 이동
  • 비트 2가 비트 4로 이동
  • 비트 3이 비트 1로 이동
  • 비트 4가 비트 6으로 이동
  • 비트 5가 비트 3으로 이동
  • 비트 6이 비트 7로 이동
  • 비트 7이 비트 5로 이동

편의상 순열에 대한 두 가지 다른 표현이 있습니다. 사이클로서 :

(02467531)

그리고 매핑 쌍의 목록으로 :

[[0,2], [1,0], [2,4], [3,1], [4,6], [5,3], [6,7], [7,5]]

당신의 작업은 상자 그리기 문자를 사용하여,이 순열을 시각화하는 것입니다 , , , , , , (Unicode 코드 포인트 : U + 2500, U + 2502, U + 250C, U + 2510 + 2514 U, U + 2518, U를 + 253C). 이 시각화는 다음 제약 조건을 충족해야합니다.

첫 번째 줄과 마지막 줄은 정확히 다음과 같습니다.

0 1 2 3 4 5 6 7

그 사이에는 상자 그리기 문자에 맞게 최대 15 자까지 줄을 사용할 수 있습니다 (4 줄 이상 필요). 행은 첫 번째 행의 숫자 중 하나 아래에서 수직으로 시작하고 마지막 행의 해당 숫자 위의 수직으로 끝나야합니다. 8 개의 선은 반드시 연결되어 있어야하며 비아 만 통과 할 수 있습니다 (항상 2 개의 선이 닿지 않아야 함). 라인의 정확한 경로는 당신에게 달려 있습니다 (특히 골프 가능한 레이아웃을 찾는 것이이 도전의 핵심입니다). 유효한 출력은 다음과 같습니다.

0 1 2 3 4 5 6 7
│ │ └─┼┐│ │ └┐│
└─┼─┐ ││└─┼─┐││
┌─┘ │ ││  │ │││
│ ┌─┼─┘│  │ │││
│ │ │ ┌┼──┘ │││
│ │ │ │└┐ ┌─┼┼┘
│ │ │ │ │ │ │└┐
0 1 2 3 4 5 6 7

그러나 올바른 숫자를 올바르게 연결하는 다른 레이아웃도 좋습니다. 답변에 선택한 결과를 보여주십시오.

프로그램이나 기능을 작성할 수 있으며 입력을받지 않습니다. 다이어그램을 STDOUT (또는 가장 가까운 대안)으로 출력하거나 문자열 또는 문자열 목록 (각각 한 줄을 나타내는) 형식의 함수 리턴 값으로 출력하십시오.

표준 규칙이 적용되므로 가장 짧은 코드 (바이트)가 이깁니다.



답변

실제로 69 바이트

"│ ┌┘│ │└┐ │└┐└┐""┌┘└┼┐└┼┐ └┼┐└┐""└┼┐│└┐┌┘└┐┌┘│""┌┼─┘"3*"│┌┘"+8r' j;)

온라인으로 사용해보십시오! (온라인 통역사에서 정렬이 약간 엉망입니다)

실제로이 거대한 여기에 이용 – 그들은 단지 바이트 각이야 있도록 문자를 그리기 상자의 모든, CP437에 있습니다. 필요한 각 문자는 이론적으로 4 비트로 인코딩 될 수 있지만 (고유 문자는 9 개뿐이므로) 문자열을 압축하여 절약 된 31 바이트는 실제로는 매우 열악한 문자열 처리 기능으로 인해 손실됩니다. 또한 8×4 구성의 점수는 동일합니다. 8×4가 (수직으로) 가능한 가장 짧은 구성 인 것으로 보이므로 이것이 최적입니다.

3 바이트의 Martin에게 감사합니다!

4 바이트 더 TimmyD에 감사합니다!

설명:

"│ ┌┘│ │└┐ │└┐└┐""┌┘└┼┐└┼┐ └┼┐└┐""└┼┐│└┐┌┘└┐┌┘│""┌┼─┘"3*"│┌┘"+8r' j;)
"│ ┌┘│ │└┐ │└┐└┐""┌┘└┼┐└┼┐ └┼┐└┐""└┼┐│└┐┌┘└┐┌┘│""┌┼─┘"3*"│┌┘"+         push the individual lines, using string multiplication to shorten repeated sections
                                                              8r' j   push the string "0 1 2 3 4 5 6 7" (range(8), join on spaces)
                                                                   ;)  make a copy and move it to the bottom of the stack

답변

PowerShell을 V2 +, 172 153 148 145 142 131 123 바이트 (81 개 문자)

($a=""+0..7)
$b='┌┘'
"│$b$('┌┼─┘'*3)
└┼┐$('│└─┐'*3)
$b$('└┼─┐'*3)│
│ $($b*6)│"
$a

인라인 코드 블록을 사용하여 여러 변수가 필요하지 않도록 직조를 한층 더 발전 시켰습니다. 이것은 아마도 최적의 몇 바이트 안에있을 것입니다.

공백과 함께 결합 된 $a범위와 동일하게 설정 하여 시작 0..7합니다. $ofs배열 의 기본 (출력 필드 구분 기호)이 공백이므로 배열이 문자열로 표시되면 ""+(이와 같은 연산자를 사용하면 PowerShell은 오른쪽 개체를 왼쪽 개체로 암시 적으로 캐스팅하려고 시도합니다.) 결과는 공백으로 구분 된 범위입니다.

그것은 parens로 캡슐화되어 결과를 파이프 라인에 추가합니다. 그런 다음 하나의 도우미 변수를 설정 한 다음 $b적절한 변수가있는 4 줄의 출력 (문자 그대로 줄 바꿈으로 분할)을 반복하고 반복 섹션에 인라인 코드 블록을 사용한 다음 $a다시 입력합니다. 4 개의 라인 $a은 파이프 라인에 배치되며 출력은 암시 적입니다.

PS C:\Tools\Scripts\golfing> .\visualize-bit-weaving.ps1
0 1 2 3 4 5 6 7
│┌┘┌┼─┘┌┼─┘┌┼─┘
└┼┐│└─┐│└─┐│└─┐
┌┘└┼─┐└┼─┐└┼─┐│
│ ┌┘┌┘┌┘┌┘┌┘┌┘│
0 1 2 3 4 5 6 7

답변

자바 스크립트 ES6, 168 167 바이트

편집 : 웁스, 기능의 일부로 업데이트 된 바이트 수를 나타내는 |U + 2502 대신 파이프 문자를 사용하고있는 것으로 나타났습니다 .

_=>((n=`0 1 2 3 4 5 6 7 `)+[...`6452301`].map(i=>`${(d=n=>`│ `.repeat(n))(i)}└┐│ ${r=d(6)}┌┼┘ ${r}│└┐ ${d(6-i)}`).join``+n).match(/.{16}/g).join`
`

문자열을 반환합니다.

산출:

0 1 2 3 4 5 6 7
│ │ │ │ │ │ └┐│
│ │ │ │ │ │ ┌┼┘
│ │ │ │ │ │ │└┐
│ │ │ │ └┐│ │ │
│ │ │ │ ┌┼┘ │ │
│ │ │ │ │└┐ │ │
│ │ │ │ │ └┐│ │
│ │ │ │ │ ┌┼┘ │
│ │ │ │ │ │└┐ │
│ │ └┐│ │ │ │ │
│ │ ┌┼┘ │ │ │ │
│ │ │└┐ │ │ │ │
│ │ │ └┐│ │ │ │
│ │ │ ┌┼┘ │ │ │
│ │ │ │└┐ │ │ │
└┐│ │ │ │ │ │ │
┌┼┘ │ │ │ │ │ │
│└┐ │ │ │ │ │ │
│ └┐│ │ │ │ │ │
│ ┌┼┘ │ │ │ │ │
│ │└┐ │ │ │ │ │
0 1 2 3 4 5 6 7

추가 : @TimmyD의 방법을 사용하면 다른 167 바이트 솔루션이 있습니다.

(n=`0 1 2 3 4 5 6 7
`,a=`│┌┘ `,b=`└┼─┐`,d=`┌┼─┘`,f=` │└┐`)=>[n,a,a,a,a,`
`,b,b,b,`└┼┐
┌┘`,d,d,d,`│
│`,f,f,f,` │
`,n].join``

답변

자바 스크립트 (ES6) 137 134 바이트

f=
_=>`0
2525252
1 1 1 1
24242423525252 3 1 1 1 3 242424
0`.replace(/\d/g,d=>`0 1 2 3 4 5 6 7,└┼┐,┌┘,│
│,│ , │`.split`,`[d])
;
o.textContent=f();
<pre id=o></pre>

종소리로 나는 이것을 즉시 Plain Hunt Major 의 첫 두 행으로 인식했습니다 (링크 된 이미지는 0-7 대신 1-8을 사용합니다).


답변

Pyth – 119 104 100 81 바이트

매우 간단합니다. (실제로는 바이트입니다).

js[KjdU8cX."sz¨ú¨ãÆhÆ?\ÕüÓ¼xFNøa"_G"│┌┘└┼─┐ "15K

여기에서 온라인으로 사용해보십시오 .

또한 @TimmyD의 출력을 훔쳤습니다.

0 1 2 3 4 5 6 7
│┌┘ │┌┘ │┌┘ │ │
└┼─┐└┼─┐└┼─┐└┐│
┌┘┌┼─┘ └┐│┌┼─┼┘
│ │└┐ ┌─┼┘│└┐└┐
0 1 2 3 4 5 6 7

답변

MS-DOS 배치, 136 바이트

@echo 0 1 2 3 4 5 6 7
@echo ³ÚÙ ³ÚÙ ³ÚÙ ³ÚÙ
@echo ÀÅÄ¿ÀÅÄ¿ÀÅÄ¿ÀÅ¿
@echo ÚÙÚÅÄÙÚÅÄÙÚÅÄÙ³
@echo ³ ³À¿ ³À¿ ³À¿ ³
@echo 0 1 2 3 4 5 6 7

@TimmyD의 출력을 사용합니다. 이것은 Windows Batch에서도 작동하지만 내 코드 페이지에는 CP437이 아닌 CP850이 있습니다.


답변

MATLAB / 옥타브 112 109 바이트

a='0 1 2 3 4 5 6 7';d=['└┐│ ';'┌┼┘ ';'│└┐ '];e=repmat('│ ',3,1);[a;d d d d;e d d d e;a]

산출:

0 1 2 3 4 5 6 7
└┐│ └┐│ └┐│ └┐│
┌┼┘ ┌┼┘ ┌┼┘ ┌┼┘
│└┐ │└┐ │└┐ │└┐
│ └┐│ └┐│ └┐│ │
│ ┌┼┘ ┌┼┘ ┌┼┘ │
│ │└┐ │└┐ │└┐ │
0 1 2 3 4 5 6 7

내 코드의으로 출력한다 기반으로 @Dendrobium@Neil .