Zadanie jest proste: wydrukuj, The quick brown fox jumps over the lazy dog
używając jak najmniej różnych znaków w kodzie źródłowym.
print "The quick brown fox jumps over the lazy dog"
ma wynik 29 znaków, ponieważ wszystkie 26 małych liter pojawia się co najmniej raz, a także wielkie litery T, spacje i znaki cudzysłowu. Jestem pewien, że możesz być bardziej kreatywny!
Brainfuck, WhiteSpace i podobne języki (według mojego uznania) są niedozwolone. Podziały linii liczą się jako jeden znak. Kod może być tak długi, jak to konieczne. Przyjmę rozwiązanie 21 kwietnia, godz. 23.59 EST. W przypadku remisu krótsza odpowiedź zostanie zaakceptowana.
code-challenge
Fraxtil
źródło
źródło
least-characters
oficjalne kryteria i tag, na przykładcode-golf
Odpowiedzi:
dc: 4 różne znaki ( łącznie
384375363361360350 znaków)Krótka odpowiedź (ale daleko od najkrótszej możliwej, wciąż nad nią pracuję) przy użyciu tylko 4 różnych znaków i łącznie
384375363361360350 znaków, mam nadzieję, że okaże się, że jest to całkowicie zrozumiałe:Wcześniejsza odpowiedź, która jest nieco bardziej szczegółowa (zawiera 13916 1):
Ach, po prostu lubisz ten niezawodny kalkulator biurkowy!
źródło
64-bitowy kod maszynowy Intel dla systemu Linux w systemie binarnym: 2 różne znaki
Nie odmawiam przepisania go jednoznacznie.
źródło
Lua, 8 różnych znaków
Wszystkie znaki nowego wiersza muszą zostać usunięte z tego kodu, aby uzyskać pojedynczy wiersz o długości 1998.
Wymagany Lua 5.2
Jak można napisać dowolny program Lua, używając tylko 8 znaków
load"\05
Mając znaki
05\
, można napisać dosłowny ciąg dla dowolnego łańcucha składającego się z znaków0257\
. Rzeczywiście,"\\"
oznacza ukośnik odwrotny"2" == "\50"
i"7" == "\55"
("\ddd"
w Lua oznacza znak z kodem dziesiętnymddd
).Mając znaki
0257\
, można napisać dosłowny ciąg znaków dla dowolnego łańcucha składającego się z znaków024579\
(jak"4" == "\52"
i"9" == "\57"
).W następnym kroku znaki
01245679\
będą dostępne.Aby uzyskać wszystkie cyfry dziesiętne, wymagany jest jeszcze jeden krok.
Lua ma funkcję,
load
która traktuje ciąg znaków jako kod Lua i konwertuje go na funkcję.Np .
load("print\"Hello\"")()
OdciskiHello
.Można go zapisać bez nawiasów:
load"print\"Hello\""""
(ostatnie dwa cudzysłowy oznaczają pusty ciąg, który jest przekazywany do funkcji jako parametr opcjonalny).Każdy program Lua można przekonwertować na zredukowany alfabet w maksymalnie 5 krokach.
Przykład: jeśli nasz program składa się z jednej cyfry
9
, wymagane są tylko dwa kroki:krok 0:
9
krok 1:
load"\57"""
krok 2:
load"load\"\\5\55\"\"\""""
źródło
Python, 9
Korzystanie z tego pomysłu . (Podziały linii mają na celu zapewnienie czytelności i można je usunąć.)
To buduje ciąg
'print"The quick brown fox jumps over the lazy dog"'
i wykonuje go.źródło
exec
, powiedz, że uruchamiasz go na powłoce pytona i zabierasz 7 znaków.dc - 5 różnych znaków (2, i, 1,0, P)
źródło
Tcl 10 różnych znaków.
Użytych znaków:
,
0
,1
,2
,3
,4
,5
,6
,7
,\
To tylko każda część polecenia zakodowana jako sekwencja \ ooo. Dla Tcl nie ma znaczenia, czy robisz takie śmieszne rzeczy w nazwie polecenia lub w jego argumentach, w rzeczywistości
$object configure
jest to bardzo powszechne w Tcl / Tk.Dzięki tej technice
eval
możesz nawet napisać każdy program w Tcl z 10 różnymi bajtami :)Program testowy:
źródło
\uXXXX
dla 18 różnych bajtów.GolfScript (4 różne znaki, łącznie 441 znaków)
Użyte znaki:
]1(+
Objaśnienie: w GolfScript dodanie ciągu znaków do tablicy liczb całkowitych przekształca tablicę w ciąg znaków z liczbami całkowitymi jako punktami kodowymi, a następnie łączy dwa ciągi znaków. Jeśli nic nie jest dostarczane na standardowe wejście, stos zaczyna się od pustego łańcucha. Możemy więc zbudować tablicę liczb całkowitych z odpowiednimi punktami kodowymi, a następnie połączyć je z tym pustym ciągiem.
Będziemy potrzebować
+
konkatenacji,]
co najmniej, aby utworzyć tablicę (i albo,[
aby zapobiec dołączeniu do niej pustego ciągu lub jakiś sposób późniejszego wyodrębnienia go), i jakiś sposób na oddzielenie liczb całkowitych. Więc używam operatora dekrementacji(
do oddzielania liczb całkowitych, co wymaga pewnych dodatkowych dodatków w celu kompensacji w niektórych przypadkach, ale daje szybki sposób na uzyskanie np. 110; i ten operator jest również operatorem, który wyodrębnia pierwszy element z tablicy, więc służy do pobierania pustego łańcucha do konkatenacji.źródło
Ruby: 7 różnych znaków
(Dzięki dzięki randomra za komentarz .)
Przykładowy przebieg:
Rachunkowość:
źródło
Java: 18 różnych znaków
Program Java może być napisany w notacji UNC ... Ale wciąż jest pełny!
źródło
J, 6 różnych znaków
6 odrębnych wersji char (
u:10 +
) wykorzystujących pomysł trzęsienia ziemi . Metoda polega na dodawaniu wektorów0
1
11
i111
razem, aby dodać do pożądanego84 104 101 32 113 117 ...
wektora:Edycja :
1+:1
jest0
więc możliwe, że jest tutaj rozwiązanie 5 znaków ... (Również+:
jako podwójne można użyć skrócenia rozwiązania.)Wersja 13 odrębnych znaków:
Ulepszenie użytkownika anonimowego (DirkL): możliwe jest krótsze rozwiązanie, ale nadal
u:23 |
możliwe jest użycie 6 znaków ( ). Wykorzystanie|
jako operatora pozostałości po przecinku, np223 | 2333333 = 84
.źródło
Befunge-98, 3 różne postacie
Korzystanie z tego interpretera Befunge-98. Na początku dołączyłem do 4-znakowego konkursu,
@
który zakończył się. Ten program wielokrotnie wyświetla dane wyjścioweThe quick brown fox jumps over the lazy dog\r
, a zakończenie\r
usuwa poprzednie zdanie. Dlatego zdanie jest napisane raz.Befunge-98, 4 różne postacie (w sumie 1047 znaków)
Mniej cheatyczna wersja. Ten kończy się normalnie.
źródło
JavaScript (w konsoli Chrome) 17
Miałem taki sam pomysł jak trzęsienie ziemi, ale on też mnie pokonał. Więc wybrałem brzydki sposób, aby to zrobić!
źródło
constructor+[]
różni się od tego, co dostaję. Zakładam, że różne wersje chromu. Mówiłem ci, że to było brzydkieC, 15 różnych znaków
Trochę inspiracji z odpowiedzi Forsa (którą pokonałem przez postać) i komentarza ecatmur do tej odpowiedzi.
Spacje i znaki nowej linii służą wyłącznie przejrzystości i nie są liczone.
Jak to działa?
1. Każda grupa 3 znaków jest reprezentowana przez liczbę. Wskaźnik do tej liczby, traktowany jako wskaźnik znakowy, jest wskaźnikiem do ciągu tych 3 znaków plus końcowy null. Zakłada little-endian.
2. Funkcja
a
pomaga uzyskać adres liczby literalnej bez definiowania zmiennej.źródło
{}
w jednym z wierszy, co czyniło go wrażliwym naa
wartość zwracaną.vba (
168 różnych znaków)(przy użyciu pomysłów matatwork i AutomatedChaos)
zwróć uwagę, że jeśli chcesz to wstawić, musisz przełamać linię na 2, ponieważ jest to zbyt długo dla edytora VBA
źródło
Chr()
? Wydaje się działać prawidłowo bez:?Chr(&0124);Chr(&0150);Chr(&0145);…
.?chr(1+)
będzie to coś w stylu?chr(11+11+11+11+11+11+11+1+1+1+1+1+1+1)+chr(11+11+11+11+11+11+11+11+11+1+1+1+1+1)+ .... etc.
?Chr(&0124)Chr(&0150)Chr(&0145)…
.C: 16 różnych znaków
źródło
if(putchar(...)+putchar(...)){}
usuwa,;
ale dodajef
(ale opiera się na nieokreślonej kolejności oceny).if(putchar(...)){}if(putchar(...)){}
itd.if(putchar(...))if(putchar(...)){}
lubif(putchar(putchar(...)+...){}
, ale nadal to podejście nie uratuje postaci.Postscriptum (19 różnych znaków)
Do drukowania używa cyfr szesnastkowych 0–9, af, ograniczników szesnastkowych <> i =.
(13 różnych znaków)
Binarne liczby podstawowe pobierają dane w 4 znakach (0,1,2, #), ale potrzebuje pustego ciągu () i kilku liter (wstaw, dup (-up), print (-pt)), aby wstawić liczbę binarną tam.
źródło
APL 8
Następujące polecenie konwertuje ciąg znaków na jego binarny odpowiednik:
Jeśli przypiszemy wynikowy plik binarny do wektora s, aby uniknąć konieczności wyświetlania wszystkich zer i jedynek, możemy wydrukować wynik, odwracając proces, stosując:
Tak więc 8 unikalnych znaków to 8,2, ⎕, d, r, spacja oraz 0 i 1 w wektorze binarnym.
źródło
k
12 różnych znaków
Postacie są
10h$2/:'(b;)
źródło
PHP. 10 różnych znaków.
e, c, h, o, r, (, 1, +, ), ;
(Podziały linii można usunąć.)źródło
echo(chr(1+1+1+...));
, więc wróć ponownie do 10 znaków.Bash:
1816 różnych znakówPrzykładowy przebieg:
Rachunkowość:
źródło
cat
jest tylko rozwiązaniem 3-znakowym. Problem polega na tym, że musisz do niego wlać"The quick brown fox jumps over the lazy dog"
.K, 9
1 @ 0 godz. $ (+;)
źródło
Perl, 10 znaków
Zasadniczo zdzierstwo rozwiązania Python flornquake.
Korzystanie z podstawienia za pomocą
ee
jest tańszym sposobem na uzyskanieeval
. Niestety Perl używa.
do konkatenacji, która dodaje postać.Miałem nadzieję wyeliminować nawiasy (które są opcjonalne dla funkcji w Perlu), używając następującej składni:
(Tak,
s
jest prawidłowym ogranicznikiem wyrażenia regularnego). Jednak nie mogłem tego uruchomić, ponieważ priorytet.
jest zbyt wysoki, próbując połączyć się przed wywołaniem funkcji.źródło
Erlang 8 różnych znaków
Użyte znaki:
012#<>:.
źródło
C (23 różne znaki)
Uwaga: Nie uwzględniłem znaku nowej linii w osobnej liczbie znaków, ale można je łatwo usunąć w razie potrzeby, kosztem czytelności.
źródło