J 언어에는 상수를 지정하기위한 매우 어리석은 구문이 있습니다. 저는 특히 하나의 멋진 기능, 즉 임의의 기초로 작성할 수있는 기능에 중점을두고 싶습니다.
당신이 작성하는 경우 XbY
에 대한 X
임의의 숫자와 Y
알파벳과 숫자의 문자열, 다음 J 해석됩니다 Y
기본으로 X
번호 0
를 통해 9
자신의 통상적 인 의미를 가지고 a
통해 z
35을 통해 10를 나타냅니다.
그리고 X
어떤 숫자를 말할 때 , 나는 어떤 숫자를 의미 합니다 . 이 질문의 목적을 위해 X
양의 정수로 제한 하지만 J에서는 음수, 분수, 복소수 등 무엇이든 사용할 수 있습니다.
이상한 점은 사용 가능한 기호 모음 이 0-9와 az 로만 구성되므로 0에서 35까지의 숫자를 기본 숫자로 사용할 수 있다는 것입니다 .
문제
이 방법을 사용하여 2,933,774,030,998 과 같은 골프 매직 넘버를 도와주는 프로그램 이 필요합니다. 글쎄요, 아마 그렇게 크지 않을 것입니다, 나는 당신에게 쉽게 갈 것입니다. 그래서...
내 작업은 (주로 대형) 진수 걸리는 프로그램이나 함수를 작성하는
N
1 4,294,967,295 (= 2 사이에 32 형태의 짧은 표현 입력 -1) 및 출력 / 반품XbY
,X
양수이다Y
되고 영숫자로 구성되는 문자열 (0-9 및 az, 대 / 소문자 구분 안 함), 밑에서 같음으로Y
해석됩니다 .X
N
모든 표현
XbY
표현 의 길이가 의 자릿수보다 크거나 같으면 대신N
출력N
합니다. 다른 모든 관계에서 가장 짧은 표현의 비어 있지 않은 부분 집합을 출력 할 수 있습니다.
이것은 코드 골프이므로 짧을수록 좋습니다.
테스트 사례
Input | Acceptable outputs (case-insensitive)
------------+-------------------------------------------------------
5 | 5
|
10000000 | 79bkmom 82bibhi 85bgo75 99bauua 577buld
| 620bq9k 999baka
|
10000030 | 85bgo7z
|
10000031 | 10000031
|
12345678 | 76bs9va 79bp3cw 82bmw54 86bjzky 641buui
|
34307000 | 99bzzzz
|
34307001 | 34307001
|
1557626714 | 84bvo07e 87brgzpt 99bglush 420blaze
|
1892332260 | 35bzzzzzz 36bvan8x0 37brapre5 38bnxkbfe 40bij7rqk
| 41bgdrm7f 42bek5su0 45bablf30 49b6ycriz 56b3onmfs
| 57b38f9gx 62b244244 69b1expkf 71b13xbj3
|
2147483647 | 36bzik0zj 38br3y91l 39bnvabca 42bgi5of1 48b8kq3qv
(= 2^31-1) | 53b578t6k 63b2akka1 1022b2cof 1023b2661 10922bio7
| 16382b8wv 16383b8g7 32764b2gv 32765b2ch 32766b287
| 32767b241
|
2147483648 | 512bg000 8192bw00
|
4294967295 | 45bnchvmu 60b5vo6sf 71b2r1708 84b12mxf3 112brx8iv
(= 2^32-1) | 126bh5aa3 254b18owf 255b14640 1023b4cc3 13107bpa0
| 16383bgwf 21844b9of 21845b960 32765b4oz 32766b4gf
| 32767b483 65530b1cz 65531b1ao 65532b18f 65533b168
| 65534b143 65535b120
어떤 표현이 어떤 숫자와 같은지 확실하지 않으면 Try It Online 의 J 해석기와 같은 J 해석기를 사용할 수 있습니다 . 그냥 입력하면 stdout 0":87brgzpt
J가 다시 뱉어집니다 1557626714
. 이 문제는 대소 문자를 구분하지 않지만 J는 소문자 만 허용합니다.
도움이 될만한 이론
- 모든
N
미만 10,000,000, 소수점 표현은 다른 짧게하고 따라서 만 허용되는 출력된다. 무엇이든 저장하려면 새베이스에서 최소 4 자리 더 짧아야하고베이스가 99보다 큰 경우에는 더 커야합니다. - 의 제곱근의 천장까지 기지를 확인하면 충분합니다
N
. 어떤 큰베이스의 경우 B ,N
기본 대부분이 개 자리에있을 것입니다 B 유효한 첫 번째 자리 뭔가 주위에있을거야 처음 있도록, B ≈N
/ 35. 그러나 그 크기에서는 항상 최소한 십진수 표현만큼 크므로 시도 할 필요가 없습니다. ceil (sqrt (이 문제를 해결하도록 요청하는 가장 큰 숫자)) = 65536입니다. - 밑면에 36보다 작은 표현이 있으면, 밑면 36 표현은 최소한 짧을 것입니다. 따라서 36 미만의
35bzzzzzz
밑수 에서 실수로 짧은 해 를 구하는 것에 대해 걱정할 필요가 없습니다. 예를 들어, 1,892,332,260 의 표현 은 해당 염기에 대해 특이한 숫자를 사용하지만36bvan8x0
길이는 같습니다.