내 대답 중 몇 가지를 골라내는 동안 가능한 한 적은 문자로 큰 정수를 작성해야했습니다.
지금은 그렇게 할 수있는 가장 좋은 방법을 알고 : 나는 점점됩니다 당신이 이 프로그램을 작성 할 수 있습니다.
도전
- 양의 정수가 주어지면 stdout 또는 이와 동등한 것으로 인쇄하는 프로그램을 출력하는 프로그램을 작성하십시오.
- 출력 프로그램이 작성자와 동일한 언어 일 필요는 없습니다.
- 출력은 최대 128 바이트 여야합니다.
- stdin 또는 이와 동등한 입력을받을 수 있습니다 (기능 입력 아님)
- 결과 프로그램을 stdout 또는 이와 동등한 것으로 출력 할 수 있습니다.
- 숫자 출력은 10 진수 여야합니다 (기본 10).
채점
당신의 점수는 프로그램이 인코딩 할 수없는 가장 작은 양의 정수와 같습니다.
가장 큰 점수를 얻은 항목이 이깁니다.
답변
CJam 파이썬 → 3 (163 122 – 1)의 · 162분의 255 + 1 ≈ 1.213 * 10 (270)
import sys
n = int(input())
for b in range(163, 1, -1):
s = []
m = n
while m:
m, r = divmod(m - 93, b)
if m < 0:
break
s.append(r + 93)
else:
sys.stdout.buffer.write(b'"%s"%db' % (bytes(s[::-1]), b))
break
else:
sys.stdout.buffer.write(b'%d' % n)
그것이 나오는 것 (163 내지 1023 매 정수 122 – 1)의 · 162분의 255은 기지국에 의해 상기 적어도 하나 개의 방식으로 표현 될 수있다 (B) 를 통해 코드 (93)와 최대 122 개 문자의 문자열로부터 ≤ 163 변환 B + 92 일반적인 출력 0- b -1이 아니라 추가 출력 코드없이 번거로운 문자 34 (큰 따옴표) 및 92 (백 슬래시)를 피합니다.
답변
Pyth, 252 (111) ≈ 3.593 × 10 (266)
Js[
"ixL-rC1`H``N"
N
s@L-rC1`H``NjQ252
N
"252")$import sys$$sys.stdout.buffer.write(J.encode('iso-8859-1'))$
Pyth는에서 print
인쇄 할 수 없기 때문에 약간의 Python 구문을 사용해야 했습니다 iso-8859-1
.
이 숫자는 밑 252로 인코딩되어 해당 밑의 각 숫자를 iso-8859-1 문자로 나타냅니다. 문자 \
와 "
이스케이프가 필요하므로 사용되지 않습니다. char `
은 골프 때문에 사용되지 않습니다 … 또한 null 바이트도 사용되지 않으므로 Pyth 컴파일러는이를 금지합니다.
출력은 17 바이트의 오버 헤드를 가진 프로그램입니다.
ixL-rC1`H``N""252
다음은 가능한 가장 큰 사용법의 예입니다.
설명
출력 프로그램의.
ixL-rC1`H``N""252
rC1`H create the range of chars: ['\x01', '\x02', ..., '{}']
``N creates a string containing the 3 chars " ' \
- remove strings which consists of these 3 chars
xL "" determine the index of each char in "" (encoded number)
i 252 convert from base 253 to base 10
답변
CJam 254 109 ≈ 1.34 × 106 262
q~254b{_33>+_91>+c}%`"{_'[>-_'!>-}%254b"
I는 기지국 (254)에서 숫자를 인코딩 및 ISO 8859-1 문자로 그베이스에 각 디지트를 나타내는 스킵 야 "
하고 \
. 출력은 19 바이트의 오버 헤드를 가지 ""{_'[>-_'!>-}%254b
므로 254 128-19 미만의 모든 것을 명시 적으로 나타낼 수 있습니다.
13392914970384089616967895168962602841770234460440231501234736723328784159136966979592516521814270581662903357791625539571324435618053333498444654631269141250284088221909534717492397543057152353603090337012149759082408143603558512232742912453092885969482645766144
예를 들어, 다음 6153501
과 같이 인코딩됩니다
"abc"{_'[>-_'!>-}%254b
다음은 인코딩 된 정수를 인쇄 한 다음 길이를 인쇄 한 다음 유효성을 보여주기 위해 즉시 실행 하는 테스트 프로그램 입니다 (인쇄 할 수없는 문자를 새 프로그램으로 복사 해야하는 문제를 피할 수 있습니다. 항상 작동하지는 않습니다) 온라인 통역사와 함께).
답변
펄, 10216
print"print unpack'h*',q{",(pack'h*',<>),"}"
또한 기본 100 인코딩은 약간 더 우아합니다. 출력 12345678
은 다음과 같습니다.
print unpack'h*',q{!Ce‡}
분리 문자 {
및 }
16 진수 값에 해당 b7
하고 d7
, 따라서 입력에 표시 할 수없고 각각은, 이스케이프 할 필요가 없습니다.
(10)의 최대 값에 도달하는 부호화 오버 헤드 (108)를 떠나 20 바이트있다 216 -1.
펄, 10206
print"ord=~print\$' for'",(map chr"1$_",<>=~/.{1,2}/g),"'=~/.|/g"
간단한 기본 100 인코딩. 에 대한 출력 12345678
은 다음과 같습니다.
ord=~print$' for'p†œ²'=~/.|/g
(10)의 최대 값에 도달하는 부호화 오버 헤드 (103)를 떠나 25 바이트있다 206 -1.
답변
커먼 리스프, 36 (114) – 1 내지 2.62 × 10 (117)
(lambda(x)(format t"(lambda()#36r~36r)"x))
가장 큰 숫자는 다음과 같습니다.
2621109035105672045109358354048170185329363187071886946329003212335230440027818091139599929524823562064749950789402494298276879873503833622348138409040138018400021944463278473215
기본 36을 사용하십시오. 최대 입력의 경우 128 바이트 길이 출력은 다음과 같습니다.
(lambda()#36rzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz)
답변
CJam 233 114 ≈ 7.561⋅10 269
ri233b{Kms/m]_34=+c}%s`"{iKms*}%233b"
출력 프로그램 "…"{iKms*}%233b
은 문자열의 8 비트 문자를 n ↦ ⌊ n ⋅ sin 20⌋ = ⌊ n ⋅ 0.913⌋ 으로 기본 233 자리로 디코딩합니다. 이 변환은 중요한 코드 포인트 34 (큰 따옴표) 및 92 (백 슬래시)를 입력으로 요구하지 않고 예상치 못한 결과를 낳습니다.