Wyzwanie jest w rzeczywistości niezwykle proste. Wybierz 5 różnych liter (możesz po prostu wybrać 5, które pozwolą ci najkrótszy kod, jeśli chcesz) i wyślij je do konsoli. Jednak obrót polega na tym, że muszą pochodzić z następującej listy:
AAA BBBB CCCC DDDD EEEEE FFFFF GGG H H
A A B B C D D E F G H H
AAAAA BBBB C D D EEEE FFFF G GG HHHHH
A A B B C D D E F G G H H
A A BBBB CCCC DDDD EEEEE F GGG H H
IIIII J K K L M M N N OOO
I J K K L MM MM NN N O O
I J KKK L M M M N N N O O
I J J K K L M M N NN O O
IIIII JJJ K K LLLLL M M N N OOO
PPPP QQQ RRRR SSSS TTTTT U U V V W W
P P Q Q R R S T U U V V W W
PPPP Q Q RRRR SSS T U U V V W W
P Q QQ R R S T U U V V W W W
P QQQQ R R SSSS T UUU V W W
X X Y Y ZZZZZ
X X Y Y Z
X Y Z
X X Y Z
X X Y ZZZZZ
Dodatkowe zasady:
- 5 tej samej litery jest niedozwolone, bez powtarzalnych wyborów.
- Każda litera musi użyć stolicy samego siebie jako znaku ascii, aby ją narysować.
- Każda litera wyjściowa musi znajdować się w „tej samej linii” i mieć 5 spacji między każdą literą.
- Możesz wybrać dowolne 5 liter, co pozwoli ci ponownie użyć kodu i zmniejszyć liczbę bajtów. Ustalenie, które litery pozwolą ci to zrobić najskuteczniej, stanowi część wyzwania.
- Dopuszczalne są spacje końcowe.
- Pojedynczy znak nowej linii jest akceptowalny, ale nie więcej niż jeden znak nowej linii.
- To jest golf golfowy, wygrana o najniższej liczbie bajtów.
Przykłady:
ABCDE
AAA BBBB CCCC DDDD EEEEE
A A B B C D D E
AAAAA BBBB C D D EEEE
A A B B C D D E
A A BBBB CCCC DDDD EEEEE
EFLIP
EEEEE FFFFF L IIIII PPPP
E F L I P P
EEEE FFFF L I PPPP
E F L I P
EEEEE F LLLLL IIIII P
ZWARIOWANY
CCCC RRRR AAA ZZZZZ Y Y
C R R A A Z Y Y
C RRRR AAAAA Z Y
C R R A A Z Y
CCCC R R A A ZZZZZ Y
Nie bój się przesyłać za każdym razem więcej niż jednej odpowiedzi z różnymi literami lub różnymi strategiami, można to osiągnąć na różne sposoby.
code-golf
ascii-art
kolmogorov-complexity
Urna Magicznej Ośmiornicy
źródło
źródło
J
sekundy.\n
, pozwolę na to.Odpowiedzi:
Galaretka , 41 bajtów
LICTE
TryItOnline!
Pomysł
Użyj dekodowania długości przebiegu z literami, które mają możliwie podobny środek, z tylko jedną długością przebiegu dla każdej „wartości piksela” na wiersz na literę.
Umieść płaski początek, taki jak „L”, aby uniknąć różnych wartości dekodowania długości przebiegu dla wierszy.
Umieść jedną inną literę (nie można znaleźć 5) trzech środkowych rzędów na końcu, aby najmniejszą różnicę można było dodać arytmetycznie.
Potrzebne wyjście; długości przebiegu; i te przekonwertowane z podstawy 11:
Te trzy wartości
399633415
,431646160
oraz1179122455
w bazie250
jako Jelly indeksów strony kodowej są następnieðƁ ƥ
,ȷɓSɠ
iJrŀṘ
który może być używany do hermetyzacji informacje run-length.Kod
źródło
Węgiel drzewny ,
5149 bajtów (ECXKI)Wyjścia
Wypróbuj online!
Używając znaków symetrycznych pionowo, rysuje górne połówki, a następnie odbija. Większość z nich korzysta z Polygon (
G
) i PolygonHollow (GH
), aby narysować serię połączonych segmentów linii o określonym znaku.I
łatwiej można to zrobić za pomocą MultiPrint (P
), używającT
jako kierunku.Uwaga: PolygonHollow po prostu rysuje określone segmenty, nie wypełniając ani nie wypełniając wielokąta. Wielokąt wypełni się i wypełni (nie to, czego chcemy), jeśli wielokąt można uzupełnić prostą linią w jednym z ośmiu kierunków kardynalnych lub międzysercowych. W przeciwnym razie zachowuje się jak PolygonHollow, co pozwala zaoszczędzić jeden bajt.
Kolejność znaków została wybrana, aby wymagać tylko ruchów poziomych od punktu końcowego jednego do początku następnego. Oto przebieg kursora:
źródło
GH
do dokumentacji]PowerShell v2 +,
138128114112106105 bajtów (LICTD)Chodzi o to, aby zmaksymalizować odstępy między literami, abyśmy mogli uzyskać powtarzane kompresje.
Pożycza sztuczkę deduplikacji w środkowym rzędzie od odpowiedzi Florenta . Zaoszczędzono 6 bajtów dzięki Benowi Owenowi , stosując mnożenie ciągów dla środkowych trzech rzędów, a dodatkowy bajt dzięki Matowi .
Dane wyjściowe wyglądają następująco przy 227 bajtach, dla zmniejszenia 53,7% -
źródło
$("L11 I1 C11 T1 D D`n"*3)
zamiast środkowych 3 liniiJavaScript,
110109 bajtów (chmurka)Pokaż fragment kodu
Dane wyjściowe to 227 bajtów:
źródło
ES6 (JavaScript),
194, 181 bajtów (IGOLF / ANY)Ten jest długi i nie jest tak naprawdę zoptymalizowany (przynajmniej jeszcze nie), ale można go zmodyfikować, aby wydrukować dowolny konkretny komunikat, zmieniając tylko dane bitmapy.
EDIT: Wymieniłem wewnętrzna zmniejszyć z mapy , użyj bitowe przesunięcie dla obicia
Grał w golfa
Próbny
Teoria
Weź list:
przekonwertować na macierz binarną (bitmapę)
zrób to samo dla pozostałych 4 liter, zeskanuj wiersz, usuwając „górne” 5 bitów z każdego
11111 01110 01110 10000 11111
przekonwertować na ciąg szesnastkowy (tutaj należy użyć base36 lub nawet ASCII do wydruku)
0x1f73a1f
zastosuj ten sam algorytm do innych 4 linii, aby uzyskać mapę bitową.
Renderuj w odwrotnej kolejności.
źródło
[32979487,4736528,4834846,4769296,32979952]
jest krótszy niż jego reprezentacja szesnastkowa/(1|0)/g
przez,/\d/g
aby zaoszczędzić kilka bajtów. Również\n
może być zastąpić rzeczywistej nowej linii.PHP,
1071041029486 bajtówOk, jestem pewien, że mam teraz najmniejsze możliwe źródło tej metody. Napisałem skrypt do generowania, a następnie gzipowania każdej możliwej kombinacji pięciu liter. Istnieją dwa rozwiązania, które pasują do najkrótszego skompresowanego - LODIC i LDOIC. Idę z tym pierwszym, ponieważ fajniej jest powiedzieć.
Źródło:
Wynik:
źródło
'
s: ciąg zostanie potraktowany jako stała z wartością samą w sobie.05AB1E , 44 bajty
To było zabawne.
Czuję, że muszę wrócić i spróbować pograć w golfa, kiedy będę miał czas.
Wykorzystuje kodowanie CP-1252 .
Zainspirowany carusocomputing za odpowiedź .
ECOIH
Wypróbuj online!
Wyjaśnienie
‘ÓÑOIHH‘
popycha sznur"ECOOIHH"
.SðýJ3×S
łączy ciąg przez spacje, trzy razy go powtarza i konwertuje na listę.Wynikowa lista to
['E', ' ', 'C', ' ', 'O', ' ', 'O', ' ', 'I', ' ', 'H', ' ', 'H', 'E', ' ', 'C', ' ', 'O', ' ', 'O', ' ', 'I', ' ', 'H', ' ', 'H', 'E', ' ', 'C', ' ', 'O', ' ', 'O', ' ', 'I', ' ', 'H', ' ', 'H']
.•Td<UÕ‘áÓ?¢tWvkÔÚ•
popycha numer564631055513119191317171314619131717500
.S)ø
zamyka listę i numer razem.ü×J
wykonuje parowanie ciągów znaków i łączy je razem.Wynikiem jest ciąg
EEEEE CCCC OOO IIIII H HE C O O I H HEEEE C O O I HHHHH
.3äû»
dzieli to na 3 części, dodaje pierwszą i drugą część w odwrotnej kolejności i łączy znak nowej linii.źródło
•Td<UÕ‘áÓ?¢tWvkÔÚ•
wypycha liczbę564631055513119191317171314619131717500
”, bo dlaczego by nie miał ...JavaScript (ES6), 96 bajtów (DIOCL)
Chodzi tutaj o to, aby nie tylko identyczne trzy środkowe linie, ale także uczynić pierwszą linię prawie identyczną z ostatnią. Ponieważ są tylko 4 litery, które idealnie pasują do tego opisu
CDIO
,L
jest następną najlepszą opcją, ponieważ wymaga tylko 4 dodanych znaków na końcu łańcucha.Podobnie jak w przypadku odpowiedzi Florenta , jest to fragment, który zwraca wynik. Dodaj 3 bajty, jeśli musi to być funkcja.
Testowy fragment kodu
Pokaż fragment kodu
źródło
D
pierwszy.C
przeszłość,I
aO
takżeI
zaraz po tymC
, chociaż co ciekawe, ulepsza to moje rozwiązanie Batch, z tego samego powodu.Bash + coreutils z figletem, 55440 roztworów,
112106 bajtów każdyWynik:
Hej, mamy już program do sztuki ASCII! Transparent czcionki prawie spełnia swoje zadanie, oprócz tego, że wysyła listów 7x7. Hmm, po prostu usuńmy 3 i 5 kolumnę oraz 2 i 5 wiersz i zobaczmy, co daje ...
Okazuje się, że wiele liter zostanie wydrukowanych w wymagany sposób, a mianowicie BDEFHJLPTU Z.
Wystarczy zastąpić argumenty pierwszego zestawu poleceń dowolną kombinacją tych liter, aby nadal uzyskać poprawny wynik! Daje nam to 11 * 10 * 9 * 8 * 7 = 55440 rozwiązań, każde o długości 106 bajtów.
źródło
05AB1E ,
102908969 bajtów (EOIXC)Wypróbuj online!
Wyjście (230 bajtów):
Wyjaśnienie:
Teoria polegała na wybraniu liter pionowo symetrycznych, a następnie zakodowaniu pierwszych 3 linii i ich palindromizacji. Zasadniczo zakodowałem jako {#} z {Letter} w 2 parach bajtów. Jestem pewien, że jest na to lepszy sposób.
-20 bajtów dzięki Emignie, będę na czacie, aby wkrótce zadać kilka pytań;).
źródło
•Cv¶ÉH&9;´ß{ø‰¿šq3d$µ_©Û¶«K>Ò±sÒ9ÍÊC4ÊÚîòvÅr葾)jM•34B2ð:
. Wskocz na czat 05AB1E, jeśli masz pytania dotyczące kodowania.45ô
może być3ä
.A
nie jest symetryczna w pionie i nie jestF
. Czy zgadniesz, że kiedy zaczniesz używaćG
lub wyżej, zrujnujesz to, o czym mówisz, prawda? Ponadto dzięki mojej metodologii kompresji chciałem unikać liter, które miały więcej niż 1 wystąpienie na wiersz. Jeśli chcesz zagrać w golfa w tym rozwiązaniu i pobić mnie, z zadowoleniem przyjąłbym przykład :).0
wO
(środkowy rząd, prawa strona)•Cv¶ÉH&9;´ß{ø‰¿šq3d$µ_©Û¶«K>Ò±sÒ9ÍÊC4ÊÚúNÏŒº9¨gÚSÞ•
naprawia tęO
samą liczbę bajtów.JavaScript ES6, 168 bajtów, CHAMP
Możemy przestać szukać facetów, mamy
CHAMP
tutajźródło
Brainf ***
512411 bajtówLepsze ponowne wykonanie:
Ten lepiej radzi sobie z optymalizacją taśmy, poświęcając znaki konfiguracji do drukowania znaków. Taśma w tym wygląda
'C' 'E' ' ' 'F' 'I' 'L' '\n'
, poprawiając wydajność. Wybrałem je, ponieważ brakuje im wewnętrznych przestrzeni, dzięki czemu nie muszą chodzić tam iz powrotem między postacią a przestrzenią więcej niż to konieczneJeśli chcesz przeczytać, co robi:
Wynik:
Poprzednie zgłoszenie:
Wybrałem ABCDE, ponieważ znacznie ułatwia to ustawienie taśmy wyjściowej, ale czas i znaki, które zmarnowałem, przechodząc od litery do „” dla całej ujemnej przestrzeni wewnątrz A, B i D oraz umieszczenia myślę, że koniec na końcu taśmy mnie zabił.
Skończyłem z taśmą, która miała wartości,
0 0 'A' 'B' 'C' 'D' 'E' ' ' \n
a następnie stamtąd wyprowadzałaWynik:
źródło
[<]>
3 razy, aby zapisać 6 bajtów.Vim,
116 bajtów99 bajtówELITC
Grał w golfa poniżej 100 z pomocą @DrMcMoylex.
Zawiera znaki niedrukowalne, więc dodałem je poniżej (styl Vima), abyś mógł je zobaczyć.
TryItOnline!
Zasadniczo używa tego samego dekodowania, co galaretka. Użyłem liter, w których mógłbym (mam nadzieję) powtórzyć górę na dole, a wszystkie środki byłyby takie same. Po utworzeniu górnych, dolnych i środkowych elementów edytuję znaki, aby je poprawić:
Muszę dodać dwie spacje do I, ponieważ nie pozwoliłem na liczby dwucyfrowe (więc nie potrzebowałbym separatora. Prowadzi to do 9 spacji, gdzie potrzebuję 11.
źródło
Y
zamiastVy
,FI
zamiast?I<cr>
,{
zamiastgg
,w
zamiastfl
. 3) Jeśli używaszr
zamiastR
, możesz usunąć<esc>
.MATL , 49 bajtów
Wypróbuj online!
To tworzy litery
TIHZN
:Wyjaśnienie
T
jest stosunkowo łatwy do zbudowania od podstaw.I
można uzyskać zasadniczo jakoT
plus jego odbicie pionowe.H
jestI
transponowany.N
jestZ
transponowane i odbijane pionowo.źródło
V ,
62, 53 bajtówWypróbuj online!
To daje
C I D O Z
:źródło
Perl, 109 bajtów (ABCDE)
Uwaga : zawiera znaki niedrukowalne, które zostały tu ukryte dla ułatwienia testowania,
xxd
zrzut poniżej.Przechowuje binarną reprezentację pozycji liter jako liczbę, a następnie rozpakowuje z powrotem do postaci binarnej, zastępując
0
s spacjami is1
si odpowiednią literą, za pomocą odnośnika. Przechowywanie reprezentacji liter jest dość łatwe, ale ich wymiana okazała się trudniejsza niż się spodziewałem. Jestem pewien, że są lepsze sposoby na zrobienie tego, więc mogę kontynuować grę.Aby ponownie utworzyć plik, uruchom
xxd -r > favourite-letter.pl
, wklej poniżej i naciśnij Ctrl+ D:Stosowanie
źródło
Python 2, 124 bajty
Podobne do mojej innej odpowiedzi , ale z lepszymi wyborami liter. Wyprowadza to:
źródło
Befunge, 120 bajtów (CKYTF)
Źródło
Wynik
Wypróbuj online!
W przypadku, gdy ma to znaczenie, powinienem zaznaczyć, że moje wyjście ma wiodące miejsce w każdej linii. Reguły wyraźnie tego nie zabraniały, więc mam nadzieję, że to w porządku. Jeśli nie, proszę uznać to za wpis niekonkurujący.
Wyjaśnienie
Litery tego słowa są kodowane jako prosta sekwencja 25 liczb całkowitych, przy czym każda liczba całkowita jest reprezentacją binarną 5 pikseli. Ponieważ Befunge wymaga wykonania obliczeń w celu utworzenia dowolnej liczby całkowitej większej niż 9, litery zostały wybrane tak, aby zminimalizować liczbę wymaganych obliczeń, i uporządkowane, aby potencjalne powtarzające się wartości mogły być powielane, a nie przeliczane.
Musimy także przechowywać wartość ASCII każdej litery, przesuniętą o 32, w tablicy indeksowanej przez moduł 5 indeksu malejącego (czyli 0 4 3 2 1 ...). Przyczyną przesunięcia o 32 jest to, że wartość można pomnożyć przez bit piksela (1 lub 0), a następnie dodać do 32, aby uzyskać wymaganą spację lub znak.
Ta tablica wartości liter jest przechowywana w pierwszych 5 bajtach kodu, więc jest łatwo dostępna. Wpłynęło to również na wybór liter, ponieważ wartości te musiały mieć znaczenie, gdy interpretowano je jako sekwencję kodu. To jest sekwencja
#&49+
. W#
przeskakuje&
i49+
po prostu wypycha 13 na stos, który następnie jest ignorowany.źródło
&
, ale twój program tak naprawdę nie przyjmuje danych wejściowych ... co się dzieje?Rubin,
110107102 bajtów (DOCIL)Wydruki
EDYCJA: Zapisano niektóre znaki, unikając
join
i przenosząc różne rzeczyźródło
Befunge-98 ,
10998 bajtów (FUNGE / ANY)Wypróbuj online!
Wprowadzanie (115 znaków):
Dane wejściowe to całkowita liczba liczb binarnych w formacie, w
aaaaabbbbbb
którymaaaaa
odwrócona mapa znaku do wydrukowania (na przykład drugi wiersz w N toNN N
, więc maska jest10011
), ibbbbbb
to znak ascii do wydrukowania, minus 32 .Stworzyłem również program befunge-98, aby utworzyć moje dane wejściowe:
Wypróbuj online!
Dane wyjściowe (255 znaków):
Wyjaśnienie:
Jest to prawdopodobnie dość golfa; Prawie nigdy nie zastanawiałem się nad potencjalnymi obniżkami.
Teoretycznie może to wydrukować dowolną sekwencję sztuki ascii 5x5.
Dzięki Jamesowi Holdernessowi za pomoc w wydostaniu się z potrójnych cyfr!
źródło
48*
można go zastąpić'
(ponieważ w końcu jest to 98) i88*
można go zastąpić'@
. Dzięki za pomoc w wydostaniu się z potrójnych cyfr!C #,
290279267265 bajtówEdycja: Zapisano 12 bajtów dzięki @milk! I jeszcze 2 dzięki @TheLethalCoder
Gra w golfa:
Nie golfowany:
Wyjścia:
źródło
Func<string,string>j=a=>a.Replace("|",g)+"\r\n";
Stax , 33 bajty „BCDEO”
Uruchom i debuguj
Wybrałem to litery
Te właściwości oznaczają, że każda litera może być reprezentowana przez siatkę 3x3. Oto 9 regionów reprezentowanych przez cyfry.
Rozważ literę „B”. To może być reprezentowana przez 3 cyfry ósemkowe:
656
. Każda cyfra zawiera trzy bity, które kontrolują, które regiony są włączone dla tej litery. Ta technika działa również w przypadku „CDEO”.Program po rozpakowaniu, niepolowaniu i komentowaniu wygląda tak.
Uruchom ten
źródło
Python 3,
234228227166 bajtów (chmurka):Wydruki:
źródło
Python 3, 178 bajtów
Nie wygra, ale nie używa żadnej kompresji. To sprawia, że:
Każda pomoc jest mile widziana, prawdopodobnie coś przeoczyłem. Nie używałem Pythona 2, ponieważ nie możesz tego zrobić
p=print
, a to oszczędza 17 bajtów. Wypróbuj na repl.it.źródło
p=print
, możesz użyć pojedynczejprint
instrukcji z argumentem kwsep='\n'
.Rubinowy, 101 bajtów (TIFLE)
Wybrałem litery wymagające jednego bloku liter (o długości 1,4 lub 5 liter) w każdej linii. F, L i E są wyrównane do lewej, ale T i I wymagają spacji wiodących, na których drukowana jest jedna litera (część pionowa). Kod dodawania tych spacji wygląda na to, że można go ulepszyć.
bez golfa
źródło
C 176 bajtów
Jeśli dozwolone są wartości niejawne, możliwe jest odcięcie kolejnych 8 bajtów.
Wyjście: EDCBA
Jak to działa: Makro R po prostu powtarza fragment kodu 5 razy. Biorąc pod uwagę, jak często pojawiają się piątki w tym problemie, bardzo przydatne. Teraz: oto, co robi T (int). T przyjmuje liczbę całkowitą i używa jej jako pola bitowego, aby określić, gdzie drukować litery i gdzie należy drukować białe znaki. Na przykład, jeśli podane
T(0b11111111100111111110011100)
, to będzie wyjście:EEEEE DDDD CCCC BBBB AAA
. Stopniowo odlicza, jaką literę drukuje. Najpierw wypisuje E, następnie D, następnie C, a następnie B, a następnie A. Wywołanie f () spowoduje wydrukowanie całej rzeczy.źródło
Partia, 135 bajtów (DOCILe)
Uwaga: pierwsza linia kończy się 5 spacjami.
źródło
GRZMOTNĄĆ,
95, 111 bajtów (EBASH)Grał w golfa
Wyjaśnienie
Base64 przez surowy strumień bajtów LZMA
Próbny
Zrzeczenie się
Tak, jestem w pełni świadomy, że to nie jest tak naprawdę przenośne, dlatego zapłaciłem bajt, aby ukryć ostrzeżenia xz za pomocą opcji -q w pierwszym przypadku> :)
źródło
Python 2,
208194193 bajtówTo mój pierwszy golf w kodzie;) Zabawne
Wynik:
Korzystanie ze słownika niszczy porządek sortowania liter, ale nie było to wymagane
źródło
perl 94 bajty.
Pierwsze 4 liter (
D
,O
,I
,C
) są wybrane w szczególności mieć górne i dolne linie podobne, a środkowe podobne. Ponieważ nie ma innej podobnej litery, wybrałem „L”, aby móc zastosować ten sam algorytm i dodać brakujące 4L.Zaoszczędziłem trochę dodatkowych bajtów, zastępując
\n
w kodzie prawdziwą nową linią.Wynik:
źródło