Proste wyzwanie: spróbuj wydrukować następujący tekst w jak najmniejszej liczbie bajtów:
the answer
toli fetheuniv
ersea nde ver
ything the ans
wer tol ife the
uni ver sean
dev ery thin
gth ean swer
tolifetheuni ver
seandeveryth ing
the ans wer
tol ifetheuniver
sea ndeverything
Oryginalny rysunek zawiera 332 znaki.
Zasady
- Brak danych wejściowych lub nieużywane dane wejściowe.
- Dane wyjściowe mogą mieć dowolny rozsądny format (ciąg, lista ciągów, macierz znaków i tak dalej).
- Możesz użyć wielkich liter zamiast małych liter do rysowania, jeśli wolisz.
- Końcowe białe znaki i znaki nowej linii są dozwolone.
- To jest golf golfowy , więc może wygrać najkrótszy program / funkcja dla każdego języka!
Notatki
- Zostało to zidentyfikowane jako możliwy duplikat Nie jesteśmy obcy, aby kodować golfa, znasz zasady i ja też . To pytanie dotyczyło wyszukiwania i zastępowania tekstu. Tutaj musisz narysować kształt przy użyciu danego tekstu, a co najmniej dwie z obecnych odpowiedzi pokazują, że języki golfa mogą w tym przypadku pokonać proste algorytmy kompresji.
42
ze*
znaków, a następnie zastąpić je z tekstu, który pasuje idealnie. Nie musiałem modyfikować oryginalnego rysunku, aby dopasować zdanie. Zbieg okoliczności?Odpowiedzi:
Python 3 ,
224 220 219 215 211194 bajtów15 bajtów:if(j%27<1)*j
zamiastif j*(j%27<1)
uproszczonej instrukcji drukowania.7*'0'
Wypróbuj online!
Wyjaśnienie:
Używa kompresji base-36 do kompresji tej liczby binarnej (z wyłączeniem nowej linii)
Zasadniczo mamy dwa liczniki
i
ij
. Po napotkaniu1
drukujemy przestrzeń; W przeciwnym razie0
wypisujemy kolejną literę z łańcucha i zwiększamyi
.j
podwyżki dla każdego0 or 1
. Drukujemy również nowe wiersze, gdy jest to konieczne, tj. Kiedyj%27<1
staje się prawdą.źródło
if j*(j%27<1):
naif(j%27<1)*j:
Python 2 ,
235218213 bajtówWypróbuj online!
Przełączono na bazę 36 zakodowaną wewnątrz pozycji liter, jak wskazano w pytaniu „w”.
Zastępuje każdą postać pojedynczo.
Edycja: Wydaje się, że oficjalnie użył bazy 36 przede mną.
źródło
Bubblegum , 125 bajtów
Wypróbuj online!
źródło
05AB1E ,
837974 bajty-4 bajty dzięki Erikowi Outgolferowi
Wyświetla listę ciągów znaków do zapisania bajtu.
Wypróbuj online!
Wyjaśnienie
2ÖH₆Ôn₅Ò\ÊÑĆ¸Ý¾*£„ÔûC∞qΘœ™‚¹µ—₃₄fm
jest podstawową reprezentacją 255 liczby dziesiętnej:Który koduje przebiegi odpowiednio
1
s i0
s, nawet indeksy są1
si, a nierówne indeksuje0
s. To ocenia na liczbę binarną:Kod
źródło
"ÔAo îιË3š1ĆRÕ₃FWš{ÓÛÏ.!XµM§&¶ñD°3PŸ{óNι2Ðbмh"253ö
z•—."Ôq‚Ā0Ál0j¿«ªžé¨0õ₄7“Ÿ!½ÏiæÆø-δq–Å05q½Yñá+•
do -4.•
jest :)Python 2 ,
220 213212 bajtów-1 bajt przez przejście
()*4
przez%39
z @officialaimmWypróbuj online!
Jest to inne podejście niż inne odpowiedzi w języku Python. Używam
szesnastkowegokodowania base-36 (zapisanych 7 bajtów) kodowania obrazu wstyluRLE wstylu PNG(ciąg cyfr wskazujący liczbę kolejnych powtarzających się pikseli).Ciąg cyfr to :
Następnie iteruję te cyfry i naprzemiennie wypisuję tę liczbę znaków lub znaków z palety („odpowiedź…”). Gdy powtórzy się więcej niż 9 znaków, po prostu dodam 0, a następnie resztę.
źródło
"theanswertolifetheuniverseandeverything"[w%39]
TIOSOGL V0.12 , 74 bajty
Wypróbuj tutaj!
źródło
Pozwól mi odpowiedzieć na własne pytanie ...
Węgiel drzewny ,
140 126112 bajtówWypróbuj online!
Masz tutaj link do najbliższej pełnej wersji.
Objaśnienie (szczegółowe informacje znajdują się w pełnej wersji):
)%*(+&(+)''%'%'('%'%&%#%'%'%%%$%-&%%%%+&&%&%)&(.&%*.%%2%'%(%)%'.)%'.
Łańcuch (68 bajtów, 48 bajtów sprężone) jest reprezentacją RLE kodowania rysunku. Każdy kod znaku minus 34 to liczba spacji (pozycji parzystych) lub liczba znaków tekstowych (pozycji nieparzystych) do wydrukowania po kolei.gtheanswertolifetheuniverseandeverythin
ciągu (39 bajtów, skompresowany 27 bajtów) za każdym razem, gdy trzeba zapisać znak spacji. Gdy sprawdzam długość listy, aby uzyskać następny znak, a ta lista zaczyna się od jednego elementu, ostatni znak ciągu jest zapisywany na pierwszej pozycji.Podziękowanie
źródło
Assign(Minus(1, c), c);
, możesz po prostu użyćif (c) { ... } else Print(" ");
.for (68)
aAtIndex("...", i)
następnie możesz użyćModulo(i, 2)
zamiast tego i wcale nie potrzebujeszc
.if (Not(Modulo(Length(PushOperator(u, w)), 27)))
, to nie potrzebujesza
.AtIndex
robi automat,Modulo
więcModulo(b, 39)
może być po prostub
.u
jest predefiniowaną zmienną, która jest tylko pustą tablicą (oszczędza przy użyciuA⟦⟧υ
). Za każdym razem, gdy coś do niego naciskasz, jego długość wzrasta o 1. Jest to mniej niż wyraźne przypisanie przyrostu.JavaScript (ES6),
207205203 bajtówZwraca tablicę ciągów znaków z pewnymi końcowymi spacjami.
źródło
Siatkówka , 183 bajty
Wypróbuj online! Objaśnienie: Pierwszy etap dodaje kodowanie RLE mapy bitowej komórki i tekst, który następnie jest powielany na drugim etapie do odpowiedniej długości, podczas gdy trzeci etap dekoduje kodowanie RLE. Czwarty etap przenosi następnie tekst do komórek.
źródło
Galaretka , 83 bajty
Wypróbuj online!
Jak to działa
źródło
Dodaj ++ , 1398 bajtów
Wypróbuj online!
Wygląda na to, że kodowanie jest najkrótszą drogą (przynajmniej w Add ++)
źródło
Vim, 239 naciśnięć klawiszy
Dodano podział linii dla „czytelności”
Wyjaśnienie
Pierwszy wiersz odchodzi
life, the universe and everything
od strony pomocy, która jest o jeden bajt krótsza niż zwykłe wpisanie. Następnie zamienia to w to:Druga linia dzieli ciąg na:
A następnie ostatnia linia wcina go, aby:
źródło
Galaretka , 76 bajtów
Wypróbuj online!
źródło
Siatkówka , 185 bajtów
Wypróbuj online!
źródło
JavaScript, 215 bajtów
rozwiązanie oparte na guest44851
źródło
Rubinowy , 216 bajtów
Wypróbuj online!
Objaśnienie Podobne do rozwiązań w języku Python, ale przed konwersją na bazę 36 użyłem kodowania długości działania. Ciąg danych ma więc tylko 54 znaki zamiast 68.
Ale ostatecznie skończyło się to dłużej, miejmy nadzieję, że można dalej grać w golfa.
źródło
Port mojej odpowiedzi na węgiel drzewny :
C # (.NET Core) , 229 bajtów
Wypróbuj online!
źródło
C (gcc) ,
220219217213210 bajtów-1 bajt dzięki pułapkowi cat
-3 bajty dzięki Jerry'emu Jeremiaszowi
Wypróbuj online!
źródło
JavaScript,
265237219 bajtówKilka bajtów mniej dzięki @tsh.
JSFiddle
źródło
join
Pyth , 121 bajtów
Zawierał on zbyt wiele bajtów, których nie mogłem wyświetlić w TIO, więc oto zrzut heksowy:
Wypróbuj online!
Możesz dodać wywołanie do
wc
lubxxd
w skrypcie bash, aby zobaczyć długość bajtu lub zrzut heksowy, który utworzyłem powyżej.Co ciekawe, program ten pokazuje niewielki błąd (?) W Pyth. Wszelkie bajty powrotu karetki (0x0d) są odczytywane jako bajty nowej linii (0x0a) w literałach łańcuchowych. Zmusza mnie to do dodania 6 bajtów:
X ... ]T]13
zamiany niepoprawnej dziesiątki na trzynaście.W przeciwnym razie idea tego kodu była dość prosta: zapisz każdą pozycję, w której występuje ciąg białych znaków. Następnie sparuj każdy z tych wskaźników z liczbą spacji w tym przebiegu. Następnie zrekonstruuj oryginalny ciąg znaków, powtarzając czterokrotnie frazę, a następnie wstawiając w odpowiednich miejscach. Jeśli liczba zarejestrowanych spacji wynosiła zero, zamiast tego wstawiana jest nowa linia.
źródło
Java (OpenJDK 8) ,
258252251 bajtówWypróbuj online!
To raczej naiwna implementacja. Najpierw maska dla drukowanych znaków, a następnie przewiń tekst do końca.
źródło
int[]{16515968,33489856,x=58950624,x+16,x-40,31458204,7865230,1966983,462847,233471,117670784,x=134185856,x}
.JavaScript, przybliżony rysunek. 319 bajtów
^ za to, co jest warte, nie za bardzo, ale zanim usunę uszkodzony kod.
źródło