Próbując odegrać kilka moich odpowiedzi w golfa, musiałem pisać duże liczby całkowite w jak najmniejszej liczbie znaków.
Teraz wiem, jak to zrobić najlepiej: sprawię , że napiszesz ten program.
Wyzwanie
- Napisz program, który po otrzymaniu dodatniej liczby całkowitej, wyprowadza program, który wypisuje go do standardowego lub równoważnego.
- Programy wyjściowe nie muszą być w tym samym języku co twórca.
- Dane wyjściowe muszą mieć maksymalnie 128 bajtów.
- Możesz zaakceptować dane wejściowe ze standardowego lub równoważnego (nie wejściowego funkcji)
- Możesz wyprowadzić wynikowy program do standardowego lub równoważnego.
- Liczba wyjściowa musi być w systemie dziesiętnym (podstawa 10)
Punktacja
Twój wynik jest równy najmniejszej dodatniej liczbie całkowitej, której Twój program nie może zakodować.
Wpis z największą liczbą punktów wygrywa.
code-challenge
number
compression
code-generation
integer
niebieski
źródło
źródło
Odpowiedzi:
Pyton 3 → CJam (163 122 - 1) · 255/162 + 1 ≈ 1,213 x 10 270
Okazuje się, że każda liczba całkowita od 1023 do (163 122 - 1) · 255/162 może być reprezentowana co najmniej w jeden sposób przez konwersję bazy b ≤ 163 z ciągu co najwyżej 122 znaków o kodach 93 do b + 92, zamiast zwykłych od 0 do b - 1. Pozwala to uniknąć kłopotliwych znaków 34 (podwójny cudzysłów) i 92 (odwrotny ukośnik) bez dodatkowego kodu wyjściowego.
źródło
Pyth, 252 111 ≈ 3,593 × 10 266
Musiałem użyć trochę składni Pythona, ponieważ Pyth
print
nie może drukowaćiso-8859-1
.Liczba zostaje zakodowana w bazie 252 i reprezentuje każdą cyfrę w tej bazie jako znak iso-8859-1. Znaki
\
i"
będą musiały uciekać, a zatem nie są używane. Char`
nie jest używany, ponieważ gra w golfa ... A dodatkowo nie jest również używany bajt zerowy, kompilator Pyth zabrania go.Dane wyjściowe to program z narzutem 17 bajtów:
Oto przykładowe użycie z największą możliwą liczbą:
Wyjaśnienie
programu wyjściowego.
źródło
12
, ponieważ Pyth niestety czyta CR jako LF .CJam, 254 109 × 1,34 x 10 262
Koduję liczbę w bazie 254 i reprezentuję każdą cyfrę w tej bazie jako znak ISO 8859-1, pomijam
"
i\
. Dane wyjściowe mają narzut 19 bajtów,""{_'[>-_'!>-}%254b
więc mogę reprezentować wszystko mniej niż 254 128–19 lub jawnieJako przykład
6153501
zostałby zakodowany jakoOto program testowy, który drukuje zakodowaną liczbę całkowitą, a następnie drukuje jej długość, a następnie wykonuje ją od razu, aby pokazać jej ważność (pozwala to uniknąć kłopotów z koniecznością kopiowania znaków niedrukowalnych do nowego programu, co nie zawsze działa z tłumaczem online).
źródło
Perl, 10 216
Również kodowanie bazowe 100, nieco bardziej eleganckie. Dane wyjściowe dla
12345678
:Separatory
{
i}
odpowiednio odpowiadają wartościom szesnastkowymb7
id7
, które nie mogą pojawić się na wejściu, a zatem nie trzeba ich zmieniać.Jest 20 bajtów narzutu, pozostawiając 108 do kodowania, osiągając maksymalną wartość 10 216 -1.
Perl, 10 206
Proste kodowanie podstawowe 100. Dane wyjściowe dla
12345678
wygląda następująco:Narzut ma 25 bajtów, pozostawiając 103 do kodowania, osiągając maksymalną wartość 10 206 -1.
źródło
Wspólne Lisp, 36114-1 ~ 2,62 × 10 117
Największa liczba to:
26211090351056720451093583540481701853293631870718869463290032123352304400278180911395999295248235620647499507894024942982768798735038336223481384090401380184000219444632784
Wystarczy użyć bazy 36. W przypadku największego wejścia wyjście o długości 128 bajtów to:
źródło
CJam, 233 114 ≈ 7,561⋅10 269
Program wyjściowy
"…"{iKms*}%233b
dekoduje 8-bitowe znaki ciągu do bazowych 233 cyfr za pomocą n ↦ ⌊ n ⋅ sin 20⌋ = ⌊ n ⋅ 0,913⌋. Ta transformacja bywa zaskakująca bez konieczności wprowadzania krytycznych punktów kodowych 34 (podwójny cudzysłów) i 92 (odwrotny ukośnik) jako danych wejściowych.źródło