교수의 기본 건물 번호 변환기


12

영양가 많은 수학 교수는 경쟁자 중 가장 현명한 사람까지 여우로 만드는 시스템을 사용하여 모든 연구를 인코딩하려고합니다!

이를 위해 교수는 글을 쓰는 숫자뿐만 아니라 그 숫자의 모든 한 자리의 기준을 변경하기로 결정했습니다. 예를 들면 다음과 같습니다.

숫자 0에는 하나의 숫자가 있으므로 밑수 1에 표시됩니다.

숫자 1은 기본 10 자리에 1 자리를 갖지만 교수의 시스템에는 유효하지 않습니다. 첫 번째 자리는 기본 1 자리 전용입니다! 이것은베이스 2가 허용되는 두 번째 장소에 충돌해야 함을 의미합니다.

숫자 2는 최소 3을 쓸 것을 요구합니다 : 100

그러나 이제 두 번째 자리의 숫자를 변경하여 숫자 3을 쓸 수 있습니다.

그리고 4 : 200

아이디어를 얻는 데 도움이되는 몇 가지 예는 다음과 같습니다.

5 : 210

6 : 1000

7 : 1010

8 : 1100

9 : 1110

10 : 1200

11 : 1210

12 : 2000

13 : 2010

14 : 2100

15 : 2110

16 : 2200

17 : 2210

18 : 3000

이 시스템을 사용하면 교수의 메모는 다른 사람에게는 아무 의미가 없으며 결국 세상을 장악 할 수 있습니다! 밤에 잘 자요.

물론 인코딩 방법은 가능한 한 모호해야합니다.


당신의 임무는 각각 10 자리 코드 중 하나를 나타내는 10 개의 코드 스 니펫을 작성하는 것입니다

012 34 5678 9 9

이것은 변환 될 숫자의 순서로 결합 될 때 교수의 악마 넘버링 시스템에 쓰여진 숫자를 생성 할 것입니다 (출력 방법은 사용자가 선택할 수 있지만 숫자 0-9 만 사용하여 사람이 읽을 수있는 숫자 여야합니다)

예를 들어 내 스 니펫이 다음과 같은 경우

0 = 몽키 1 = 예, 2 = 코드, 3 = 골프 및 9 = 테스트

그때

19 = 모범 사례-> 3010

20 = 코드 키-> 3100

21 = 코드 예-> 3110

22 = 코드 코드-> 3200

23 = 암호-> 3210

10 자리 이상의 입력 숫자 나 음수를 고려할 필요는 없지만, 추가 숫자의 코드를 작성하려면 추가 정보를 얻을 수 있습니다. 이것은 코드 골프이므로 최단 답변 (모든 스 니펫의 총 바이트 합계 사용)이 이기고 표준 허점은 허용되지 않습니다.

부록 : 기초 1에서 0이 0을 올바르게 나타내는 지 여부를 시작하기 전에이 교수가 결석하다는 것을 상기하고 싶습니다. 함께 살아라.


1
참고 : 교수 시스템은 계승 시스템 이라고도 합니다 .
ETHproductions


@ETHproductions 교수의 인코딩이 좋다고 말한 적이 없습니다 .
Joe Bloggs 2016

@KritixiLithos 감사합니다! 나는 그것을 확인으로 사용할 것을 찾고있었습니다.
Joe Bloggs 2016

4
PPCG에 오신 것을 환영합니다 :-)
ETHproductions

답변:


1

Mathematica (REPL 환경), 총 858 바이트

다음은 숫자 9에 대한 86 바이트 코드 스 니펫입니다.

1;ValueQ@a||(a=0;b=3);a=10a+9;b++;FromDigits[a~IntegerDigits~MixedRadix@Range[b,1,-1]]

1에서 8까지의 코드 스 니펫은 9가 적절한 숫자로 대체된다는 점을 제외하면 동일합니다. 숫자 0에 대한 코드 스 니펫 +9은 단순히 삭제 되는 것을 제외하고 동일합니다 .

a~IntegerDigits~MixedRadix@Range[b,1,-1]의 계승 번호 시스템 숫자의리스트를 계산 a긴만큼, b자릿수 한 큰 적어도이고; FromDigits출력을 위해 해당 자릿수 목록을 일반 10 진 정수로 변환합니다. (목록 요소 중 하나가 9를 초과하면 재미있는 일이 발생합니다.)

Mathematica의 REPL 환경에서 계산을 세미콜론으로 종료하여 출력을 억제 할 수 있습니다. 세미콜론으로 구분 된 체인의 마지막 출력 만 표시됩니다. a스 니펫으로 지정된 정수 와 b필요한 계승 시스템 자릿수에 대한 경계 를 재귀 적으로 정의 합니다. 이 명령은 ValueQ@a||(a=0;b=3)그들이 (즉, 첫 번째 조각에서) 혼자 달리 잎을 초기화되지 않은하는 경우 이러한 변수를 초기화; 그런 다음 a=10a+9;b++재귀 를 수행합니다. 마지막으로, 초기 1;는 스 니펫을 함께 붙이기위한 것입니다. 중간 계산에 1을 곱합니다 (어쨌든 볼 수 없음).


나는 세미콜론 남용을 즐깁니다.
Joe Bloggs

0

Goruby, 790 (810) 980

다음은 기본적으로 모든 쉘에서 개행 ( ​​"\ n")없이 캐리지 리턴 ( "\ r")을 인쇄하면 이전에 인쇄 된 줄을 덮어 쓰고 결국 마지막 비트 만 인쇄한다는 사실에 의존하는 두 번째 시도입니다. (즉, 최종 결과)가 표시됩니다.

예를 들어 쉘에서 실행해야합니다 ruby name_of_file.rb.

무제한 길이의 양수에 작동합니다.

코드는 아래의 스 니펫 사본 10 개이며 X(위)는 스니 펫당 하나씩 0-9의 숫자로 바뀝니다.

->*t{n,d,o="X#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}

즉, 예를 들어 8을 나타내는 스 니펫은 다음과 같습니다.

->*t{n,d,o="8#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}

이 문제는 스 니펫이 여러 자리 숫자를 나타 내기 위해 "결합"되어야하므로 숫자를 숫자에 추가하려면 간단히 숫자 끝에있는 대괄호 안에 넣으십시오. 따라서 숫자 103 (10 진수)은 다음과 같습니다.

->*t{n,d,o="1#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}[->*t{n,d,o="0#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}[->*t{n,d,o="8#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}[]]]

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