이진 지점


15

이진수로 주어진 작업은 깊이가 2 인 해당 숫자의 '분기'를 만드는 것입니다.

예를 들어, 0입력으로 주어지면 정확히 다음을 출력해야합니다.

     /000
  /00
 /   \001
0
 \   /010
  \01
     \011

이것은 브랜치가 어떻게 생성되어야하는지에 대해 상당히 설명해야합니다. 깊이 2는 최대 2 개의 숫자까지 더 긴 가지를 계산 함을 의미합니다. 또한 0은 맨 위에, 1은 맨 아래에 순서대로 분기를 계산합니다.

더 많은 테스트 사례 :

0

     /000
  /00
 /   \001
0
 \   /010
  \01
     \011

1

     /100
  /10
 /   \101
1
 \   /110
  \11
     \111

00

       /0000
   /000
  /    \0001
00
  \    /0010
   \001
       \0011

01

       /0100
   /010
  /    \0101
01
  \    /0110
   \011
       \0111

10

       /1000
   /100
  /    \1001
10
  \    /1010
   \101
       \1011

11

       /1100
   /110
  /    \1101
11
  \    /1110
   \111
       \1111

규칙

  • 1및 이외의 입력으로는 문자를받지 않습니다 0.
  • 0 < length of input < 11.
  • 줄 끝에서 후행 공백이 허용됩니다.

4
0 < length of input < 11이다 11진수 또는 이진은? : P
ETHproductions

@ETHproductions Decimal : P
Okx

답변:


4

젤리 , 39 38 바이트

L⁶ẋ,W;“/0¶\1 ”ṃ@“ð&ẏ{×ẏĊfẏȷ®ỤṪ⁻ʠaƇGⱮȷ’

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

어떻게?

인쇄 할 기술은 다음과 같습니다.

L  L /N00
L /N0
L/ L \N01
N
L\ L /N10
L \N1
L  L \N11

N입력 문자열은 어디에 있고 입력 문자열 L길이의 공백 문자열입니다.

따라서이 여덟 가지 구성 요소로 구성된다 ( L, N, /, 0, 개행 문자 \, 1및 공백 문자) 따라서는 (젤리의베이스 (250) 번호로 압축 될 수있다)는베이스 (8) 숫자로 저장 될 수있다. 리스트로 원자 콤바인 기재 변환 색인 (효과적으로 한 임의의 숫자를 정의 할 수있다 사용될).

L⁶ẋ,W;“/0¶\1 ”ṃ@“ð&ẏ{×ẏĊfẏȷ®ỤṪ⁻ʠaƇGⱮȷ’ - Main link: binary string s  e.g. "100"
 ⁶                                     - space character
  ẋ                                    - repeat by:
L                                      -     length(s)                    [' ',' ',' ']
    W                                  - wrap s in a list                 [['1','0','0']]
   ,                                   - pair               [[' ',' ',' '],['1','0','0']]
      “/0¶\1 ”                         - char list: ['/','0',<newline>,'\',','1',' ']

     ;                                 - concatenate        [[' ',' ',' '],['1','0','0'],'/','0',<newline>,'\',','1',' ']
                “ð&ẏ{×ẏĊfẏȷ®ỤṪ⁻ʠaƇGⱮȷ’ - base 250 number: 91531517467460683226372755994113932025707662527
              ṃ@                       - base decompression [reversed @arguments]
                                        -     this uses the concatenated list above as
                                        -     the 8 digits of that number in base 8.
                                        - implicit print

5

배치, 178 (170) 159 바이트

@set/pb=
@set s=%b:0= %
@set s=%s:1= %
@set e=@echo %s%
%e%  %s% /%b%00
%e% /%b%0
%e%/ %s% \%b%01
@echo %b%
%e%\ %s% /%b%10
%e% \%b%1
%e%  %s% \%b%11

편집 : @ ConorO'Brien 덕분에 11 바이트가 절약되었습니다.


나는 단지 149 바이트를 센다 .
엔지니어 토스트

Neil은 줄 바꿈을 Windows 스타일 CRLF로 계산하고 TIO는 LF로 계산한다고 가정합니다. LF가 Windows의 Batch에서 작동하는지 잘 모르겠습니다.
Alex A.

4

자바 스크립트 (ES6), 112 바이트

s=>`22   /300
2 /30
2/2  4301
3
242  /310
2 431
22   4311`.replace(/./g,n=>[s.replace(/./g,' '),s,'\\'][n-2]||n)

데모


왜 안돼 [n,n,s.replace(/./g,' '),s,'\\'][n]?
tsh

@tsh 숫자가 아닌 문자를 무시하지 /\d/g않고 검색해야합니다 /./g.
Arnauld

4

파이썬 3 , 117109 바이트

lambda k:'ll   /g00\nl /g0\nl/l  \g01\ng\nl\l  /g10\nl \g1\nll   \g11'.replace('l',' '*len(k)).replace('g',k)

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

  • JonathanAllan 덕분에 8 바이트 절약 (람다 함수 사용)

인쇄시 형식 문자열은 다음과 같습니다.

ll   /g00
l /g0
l/l  \g01
g
l\l  /g10
l \g1
ll   \g11

이것은 길이가 1 인 문자열에 대해 이미 좋아 보인다. 우리가해야 할 일은 l을 g의 길이와 같은 길이의 공백으로 바꾸는 것뿐 아니라 g는 원래 문자열로 바꾸어야한다.


1
명명되지 않은 람다를 사용하여 바이트를 저장할 수 있습니다. 이는 문자열을 반환해야하므로 인쇄를 제거하고 다른 7 바이트를 저장할 수 있음을 의미합니다. 그런 다음 여러 줄로 된 문자열을 사용하여 두 개를 더 절약 할 수 있습니다. TIO
Jonathan Allan

4

파이썬 3.6 172 153 128 바이트

말 그대로 이것보다 더 간단 해지지는 않습니다 ... 이것은 실제로 알고리즘으로 그것을 생성하려는 원래의 시도보다 짧습니다. 얼마나 슬픈.

k=input()
l=len(k)
b=' '*l
print(f'{b*2}   /{k}00\n{b} /{k}0\n{b}/ {b}\\{k}01\n{k}\n{b}\\ {b}/{k}10\n{b} \\{k}1\n{b*2} \\{k}01')

@Leo 덕분에 -19 바이트
@ L3viathan 덕분에 -25 바이트


a, c 및 d를 삭제하고 최종 문자열에 b와 공백 만 사용하는 것이 더 짧을 것이라고 생각합니다. (a이다 b*2+' ')
레오

이상하게도 여전히 172 바이트 인 것 같습니다.
programmer5000

@ programmer5000 죄송합니다. 코드 자체 업데이트를 잊었 기 때문입니다.
HyperNeutrino

형식 문자열을 사용하여 26자를 저장하십시오.print(f'{a}/{k}00\n{b} /{k}0\n{b}/ {b}\\{k}01\n{k}\n{b}\\ {b}/{k}10\n{b} \\{k}1\n{b*2} \\{k}01')
L3viathan

@ L3viathan 구문을 확인할 수 있습니까? 구문 오류가 발생했습니다.
HyperNeutrino

3

C, 170 168 바이트

2 바이트를 절약 한 @Neil에게 감사합니다!

n;f(char*s){n=strlen(s);printf("%*c%s00\n%*c%s0\n %*c%*c%s01\n%s\n %*c%*c%s10\n%*c%s1\n%*c%s11",2*n+4,47,s,n+2,47,s,n,47,n+3,92,s,s,n,92,n+3,47,s,n+2,92,s,2*n+4,92,s);}

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


1
a /또는 ` padded to width n + 1을 인쇄하는 대신, why not print a space, and then a /`를\ 너비로 채 웁니다 n.
Neil

어, 다시 시도하겠습니다. 오히려 인쇄보다 /\폭에 패딩을 n+1, 왜 다음에 공백을 인쇄, 그리고 /\패딩 폭에 n?
Neil

3

파이썬 3 , 96 바이트

lambda s:"""   /00
 /0
/  \01

\  /10
 \1
   \11""".translate([s,' '*len(s),s])

온라인으로 사용해보십시오! 인쇄 할 수없는 문자가 올바르게 표시되지 않습니다. 문자열 형식은 officialaimm과 동일 하지만 \x01for l\x02for g입니다.

ll   /g00
l /g0
l/l  \g01
g
l\l  /g10
l \g1
ll   \g11

Python 3의 flexible로translate 문자열 대체를 사용합니다 . 번역사 목록 [s,' '*len(s),s]매핑 \x01' '*len(s)\x02s. 큰 문자는 목록의 범위를 벗어난 인덱스를 제공하기 때문에 변경되지 않습니다. \x00널 바이트가 프로그램 끝으로 읽혀 지므로 첫 번째 항목이 낭비되므로 사용할 수 없습니다.



2

쌓인 , 81 바이트

{!n#'' '*@s's  s /n00
s /n0
s/ s \n01
n
s\ s /n10
s \n1
s  s \n11' '\l'$#~1/repl}

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

불행히도 흥미롭지 않습니다. 가장 흥미로운 부분은 다음과 같습니다.

'\l'$#~1/repl
         repl     replace all
'\l'              letters
    $#~           by evaluating
       1/         over one argument (otherwise, it would evaluate the "last" thingy)

이것은 기본적으로 문자열 보간이지만 내장보다 10 바이트 짧습니다.


2

/// , 116 바이트

/[/\\\///x///*/[y\\0[ y\/\/y\\1[ y\//**********/y///s/yx//~/  /~ ss[x00
 s[x0
s[~s\\x01
x
s\\~s[x10
 s\\x1
~ ss\\x11

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

입력은 다음과 같습니다.

/[/\\\///x/INPUT HERE!!!!!!!!//*/[y\\0[ y\/\/y\\1[ y\//**********/y///s/yx//~/  /~ ss[x00
 s[x0
s[~s\\x01
x
s\\~s[x10
 s\\x1
~ ss\\x11

기본 템플릿을 사용하고 필요한 곳에 공백과 문자를 추가하여 작동합니다.

Ørjan Johansen이 처음에는 간격을 처리하지 않았다는 것을 깨달았 기 때문에 바이트 수가 증가했습니다. 그러나 문제는 해결되었습니다.


나는 그것이 작동하는지 확인하기 전에 당신에게 공감대를 주었지만 간격의 길이를 조정하지는 않습니다. 그런 리터럴 입력 형식으로 간결한 방법을 찾지 못했습니다.
Ørjan Johansen

또는 입력 길이 제한이 11이기 때문에 전혀 희망이 없습니다.
Ørjan Johansen

와 같은 /*/\/y0\/ y\/\/y1\/ y\//**********/y///s/yx/간격이 s있습니다.
Ørjan Johansen

@ ØrjanJohansen 죄송합니다. 간격을 잊어 버렸습니다 ... 감사합니다. 코드를 답변에 어떻게 통합합니까?
스파클 포니 동지

FWIW /00/0|0//01/0|1//10/1|0//11/1|1//|/<\\y>//z/<y>x//<y>0/ //<y>1/ //<\\y\>///s/z/는 임의의 길이를 처리 할 수 ​​있습니다.
Ørjan Johansen

1

파이썬 2 , 101,91 바이트 113 바이트

lambda y:'   ++/_00\n +/_0\n+/  +\\_01\n_\n+\\  +/_10\n +\\_1\n   ++\\_11'.replace('_',y).replace('+',' '*len(y))

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

입력은 길이가 0 또는 1이고 길이가 1 또는 2 인 문자열입니다! 0,01,10 또는 11입니다!

+12 바이트-길이 2 입력의 간격을 \로 수정했습니다.


3
문자열 길이에 따라 출력이 조정되지 않습니다.
officialaimm

1
... 그리고 질문은 " 0 < length of input < 11"를 지정합니다 .
Jonathan Allan

1
@officialaimm 예. 방금 알았습니다. 감사. 내 답변을 업데이트하겠습니다! Jonathan .. 오타였습니다. 감사합니다. 수정했습니다.
Keerthana Prabhakaran

0

, 34 바이트

P<³←⮌θF²«J³⁻×⁴ι²θP<²Iι↗F²«P⁺⁺θικ↓↓

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

P<³

/s와 \s 의 왼쪽 쌍을 인쇄하십시오 .

←⮌θ

현재 위치에서 오른쪽 정렬 된 입력을 인쇄하십시오.

F²«

가지를 반복합니다.

J³⁻×⁴ι²

지점의 위치를 ​​옮깁니다. 루트가 오른쪽 정렬로 인쇄되어 중간 분기가 항상 동일한 절대 위치에 있기 때문에이 작업을 수행 할 수 있습니다.

θ

입력을 인쇄하십시오.

P<²

의 오른쪽 쌍을 인쇄 /하고\ .

Iι

분기 접미사를 인쇄하십시오.

첫 번째 잎으로 이동하십시오.

F²«

나뭇잎을 반복합니다.

P⁺⁺θικ

입력과 분기 및 리프 접미사를 인쇄하십시오.

↓↓

다음 잎으로 이동하십시오. 참고 : 후행 공백이 허용되는 경우 F²⁺⁺⁺θι궶바이트를 저장합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.