이진 지점


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)와 \x02에 s. 큰 문자는 목록의 범위를 벗어난 인덱스를 제공하기 때문에 변경되지 않습니다. \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.