Jest to trochę podobne do tego pokrytego kurzem wpisu, ale mam nadzieję, że mój obrót sprawi, że będzie wystarczająco wyjątkowy. Nie mogłem znaleźć niczego, co mogłoby mnie odwieść od opublikowania tego, ale jest tam całkiem morze.
Tak czy siak! Wyzwanie:
Twój kod otrzymuje ciąg znaków; Konwertuje to na wersję tego samego łańcucha w stylu ASCII, ale z haczykiem.
Transformacja wejściowa
- Jedynymi obsługiwanymi znakami są AZ i 0-9
- Małe litery są przekształcane na wielkie litery
- Wszystko inne jest po cichu usuwane
Rysunek postaci
- Każdy „piksel” powiększonej czcionki jest pobierany z ciągu wejściowego
- N-ty piksel jest równy n-temu znaku w ciągu wejściowym. Jeśli n jest większe niż długość ciągu wejściowego, zawiń z powrotem na początek
- Poszczególne litery są rysowane od lewej do prawej, od góry do dołu
- Kolejne litery podnoszą indeks „znaków pikselowych” od miejsca, w którym ostatnia litera została przerwana (np. Przy długości wejściowej 10, jeśli pierwsza litera miała 9 pikseli, pierwszy piksel drugiej litery zostanie narysowany z 10-tym znakiem wejściowym, drugim piksel zostanie narysowany za pomocą pierwszego znaku wejściowego)
- Każda litera jest rysowana w siatce 5x5, wypełniona spacjami. Czcionkę, której chcesz użyć, wstępnie wyrenderowano dla Ciebie w tym pastebinie lub nieco dalej w tym poście
- Każda litera jest rysowana na tej samej linii, więc całkowita liczba podziałów linii na wyjściu wyniesie 4
- Każda litera jest oddzielona 2 kolumnami spacji
Czcionka
000
0 00
0 0 0
00 0
000
111
1
1
1
11111
2222
2
222
2
22222
3333
3
333
3
3333
44
4 4
44444
4
4
55555
5
5555
5
5555
6666
6
6666
6 6
666
77777
7
7
7
7
888
8 8
888
8 8
888
999
9 9
9999
9
9999
AAA
A A
AAAAA
A A
A A
BBBB
B B
BBBB
B B
BBBB
CCCC
C
C
C
CCCC
DDDD
D D
D D
D D
DDDD
EEEEE
E
EEE
E
EEEEE
FFFFF
F
FFF
F
F
GGGG
G
G GG
G G
GGGG
H H
H H
HHHHH
H H
H H
IIIII
I
I
I
IIIII
JJJJJ
J
J
J
JJ
K K
K K
KKK
K K
K K
L
L
L
L
LLLLL
M M
MM MM
M M M
M M
M M
N N
NN N
N N N
N NN
N N
OOO
O O
O O
O O
OOO
PPPP
P P
PPPP
P
P
QQ
Q Q
Q QQ
Q Q
QQ Q
RRRR
R R
RRRR
R R
R R
SSSS
S
SSS
S
SSSS
TTTTT
T
T
T
T
U U
U U
U U
U U
UUU
V V
V V
V V
V V
V
W W
W W
W W W
WW WW
W W
X X
X X
X
X X
X X
Y Y
Y Y
Y
Y
Y
ZZZZZ
Z
Z
Z
ZZZZZ
Tak, wiem, że 4 i Q są brzydkie
Przykład
Wejście
0123456789
Wynik
012 567 6789 0123 34 45678 9012 34567 234 567
3 45 8 0 4 5 6 9 3 8 5 6 8 9
6 7 8 9 123 567 78901 0123 4567 9 789 0123
90 1 0 4 8 2 4 8 9 0 0 1 4
234 12345 56789 9012 3 5678 012 1 234 5678
Inny przykład
Wejście
a3 B'2
Wynik
A3B B2A3 2A3B 2A3B
2 A B 2 A 2
3B2A3 2A3 3B2A A3B
B 2 B 3 B 2
A 3 2A3B 2A3B A3B2A
Standardowe luki są zabronione. Kod golfowy, więc nie zostanie podany zielony haczyk.
[A-Z\d]
- nie sądzę, że filtrowanie nieprawidłowych znaków coś wnosi do wyzwania.Odpowiedzi:
Python 2 ,
413411373364352345 bajtów-1 bajt dzięki Kevin Cruijssen .
-9 bajtów dzięki Jo King .
-1 bajt dzięki Lynn .
Łańcuch danych zawiera niedrukowalne wersje poniżej.
Wypróbuj online!
Ponieważ każdy znak ma 25 pikseli, można go łatwo zakodować w 25 bitach. Podstawowa liczba 126
'uM\x04<L\x10x\x14Se#ye\x0f>El4NpD@$\tgh>\x1d\x10\x15I,\x0em]a\x0e\x03B>e\x15,\x0c]\x03?kFL\x01\x0byglxV!\x18\x16\x0c\x0b\x10\x0b%w832wGj%uT{Hr*K,*[P\n6.&ED#T\x0c}^\x1c\x0fD\x17LI&p7\x17f\\d`*\x01l\x1bG\x12!Fac\x05\x08\x0eG\rz?!\x1aA'
koduje wszystkie znaki,0
kodowana jest przez najmniej znaczące 25 bitów,1
kolejne 25 bitów, aZ
kodowana jest przez 25 najbardziej znaczących bitów. Pojedynczy znak jest kodowany w następującej kolejności:(
00
jest najmniej znaczącym,25
najbardziej znaczącym)Spacje są kodowane przez zero, a spacje przez jeden. Przykład :
Nie golfił
Wypróbuj online!
źródło
+' '
powinno być+' '
. Niezła odpowiedź, ale +1 ode mnie..upper()
gdzieś jednak potrzebujesz , w przeciwnym razie wewnętrzne litery kończą się małymi literami>1
.APL (Dyalog Unicode) ,
228225224214 bajtówPełny program Monituje standardowe wejście o ciąg. Drukuje na standardowe wyjście. Około połowa kodu to tylko dekodowanie zakodowanego alfabetu.
_
…_
Reprezentuje następujący cytowany 143-bajtowy ciąg LZ4 w cudzysłowie:"⊥\u0004pæ€}€\\⊃⌿Æ€â<Å€∧€ÀÆ€Ð┬:Ëcü\u0000≥ðè⊤õ⍨¢∧·èý\u0005þÐÕ\u001EÐ :\u001Eè⌊×ßi[B⊂ɫoãà oéìÐ⍙⊃Ý∣à)≥èB⊃\u001B\u001F⊥ä{⌿⍨ G⍺\u001B⌿Æ\u001F∇x└îR`:└è→⊂\u0000ê∧⍒\u0003ɫqè$$ÛD⊥â∊\u001B\u001Eéu|\u001B@4A|⍪┌nàkááЀ€€€€€€"
Wypróbuj online!
_
…_
143-bajtowy ciąg znaków zakodowany w LZ4 w cudzysłowie⎕AV⍳
ɩ ndices tego w A Tomic V wtryskiwacza (zestaw znaków)¯125+
dodaj -125 do tego (aby uzyskać 8-bitowe liczby całkowite ze znakiem)¯1(219⌶)
Dekompresuj LZ40(220⌶)
deserializować do 36-warstwowej, 5-rzędowej, 5-kolumnowej tablicy boolowskiej(
…)⌷
Indeksuj za pomocą następujących wskaźników:⎕A
wielkie lphabet⎕D,
Dołączenie D igitsa←
przechowywać wa
(za pomocą lphabet)(
…)∩
Skrzyżowanie następujących elementów i tego (usuwa nieprawidłowe dane wejściowe):⍞
monit o wprowadzenie tekstu ze stdin (konsola)1(819⌶)
pasuj na wielkie litery (819
wygląda na toBig
, że 1 oznacza tak duże, a nie małe)i←
przechowuj wi
(dla i nput)a⍳
Informacje na ten temat wa
⊂
załącz (aby zindeksować każdy reprezentujący wiodącą współrzędną)t←
zapisz wt
(dla t ext),
ravel (spłaszczyć)r←
Przechowywać wr
(dla R avelled)+/
zsumuj to (tj. liczbę znaków potrzebnych do namalowania dzieła sztuki)i⍴⍨
cyklicznie r eshape wejście tej długościr\
rozwiń to; wstaw spacje w 0s, zużyj litery w 1s(
…) ⍴` przekształć w następujący kształt:⍴t
kształt tekstu↓
podziel macierz N na 5 na 5 na macierz linii artystycznych N na 5⍉
transponuj do matrycy linii artystycznych 5 x N (wyrównuje to odpowiednie linie znaków)Domyślnie APL oddziela proste elementy zagnieżdżonej tablicy 2 spacjami.
źródło
Python 2 , 428 bajtów
Wypróbuj online!
Litery są kodowane w następujący sposób:
Każda unikalna część (jest ich 23) jest konwertowana na binarną, a 1 dodaje się z przodu. Następnie jest konwertowany na bazę 36.
Wynikowe liczby podstawowe 36 to:
Inicjał
1
został usunięty, więc mamy jeden znak:Każda litera (
A-Z0-9
) jest następnie kodowana do pięciu nowych znaków.W pięć list:
Aby zmapować dane wejściowe na indeks na tych listach, porządek jest modyfikowany:
Ponieważ liczby porządkowe nie są równe 0–35, ale są nieco pomieszane, 5 list jest przestawianych i łączonych:
Dla każdego znaku na wejściu znajduje się 5 liter, które są konwertowane na ints (base36):
Jeśli numer jest poniżej
30
,36
jest dodawany (brakujące1
usunęliśmy wcześniej)Następnie liczba jest konwertowana z powrotem na binarną, a
0
s i1
s są konwertowane nai
.
. Dwie spacje są dodawane na końcu podczas konwersji.Na przykład.
Dla każdego
.
wyniku jest on zastępowany przez następny znak z danych wejściowych (iterowane przezx
)źródło
Java 8,
917907 bajtówMam nadzieję, że odtąd zagra w golfa co najmniej o połowę.
Wypróbuj online.
Wyjaśnienie:
źródło
i=-1
wnętrze lambda. Ale może się mylę i według meta nie jest to dozwolone? EDYCJA: Coś podobnego robi się dość często w odpowiedziach C.int i;f->{for(;i++<10;)print(i);}
jest o 1 bajt krótszy niżf->{for(int i=0;i++<10;)print(i);}
.i=-1
jest w funkcji lambda. Twój przykład nie działa, jeśli dwa razy uruchomisz tę samą lambda, moje działa, co jest tutaj kluczową różnicą.int i;f->{for(i=0;i++<10;)print(i);}
byłoby na przykład dozwolone (choć nie tak naprawdę krótsze).Japt v2.0a0
-R
,213211210209206193191190 bajtówZawiera wiodące miejsce w każdej linii.
Wypróbuj lub przetestuj wszystkie znaki (dodatkowe bajty są spowodowane tym, że TIO nie obsługuje jeszcze Japt v2)
Wyjaśnienie
Tabela przeglądowa
Każda grupa 4 znaków w łańcuchu (reprezentowana
...
tutaj w celu zaoszczędzenia miejsca i ponieważ zawiera wiązkę niedrukowalnych znaków) jest reprezentacją binarną każdego znaku (0
dla spacji,1
dla znaków) z usuniętymi znakami nowej linii i konwertowanymi na base-100.Przykład
Kod
źródło
Rubinowy , 366 bajtów
Wypróbuj online!
Można dużo grać w golfa, ale teraz zabrakło mi czasu i pomysłów. To było trudniejsze, niż początkowo myślałem, żeby to zadziałało.
Jak to działa:
Nie jest to trudne do zrozumienia, wyjaśnię tylko, jak alfabet jest zakodowany na przykładzie. Każda linia każdego znaku jest konwertowana na binarną, a następnie na base-36.
Pierwszym krokiem jest usunięcie wszystkich znaków niealfanumerycznych z ciągu wejściowego.
Następnie generuję tabelę przeglądową do ostatecznego renderowania, ponieważ chcę wydrukować wiersz po wierszu.
Następnie, iterując po linii alfabetu, tworzę binarny wzór liter.
Na koniec zamieniam 0 na spacje i 1 na znaki z tabeli odnośników.
Zapraszam do gry w golfa dalej, wiem, że może być o 20-30 bajtów krótszy (używając gsub zamiast tr itd.), Ale nie jestem teraz zainteresowany, chyba że mogę znacznie zmniejszyć tabelę alfabetu.
źródło
Węgiel drzewny ,
172164 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Prefiks cyfr do predefiniowanego dużego alfabetu.
Wielkie litery i odfiltruj wszystkie nieobsługiwane znaki.
Pętla nad pozostałymi postaciami.
Pętlę nad każdym rzędem, domyślnie drukując każdy wynik w osobnej linii.
Skompresowany ciąg jest dużą stałą całkowitą @ ovs, konwertowaną na binarną i odwróconą. Jest on następnie krojony na 180 podciągów o długości 5 znaków, a odpowiednie podciągi dla bieżącego znaku i wiersza są następnie zapętlane.
Jeśli bit został ustawiony, cyklicznie wypisuje następny znak filtrowanego wejścia, w przeciwnym razie wypisuje spację.
Ustaw kursor gotowy do wydrukowania następnego znaku.
źródło
Perl 5 z
-nlaF/[^A-Za-z0-9]+|/
247 bajtamiWypróbuj online!
Wyjaśnienie
Najpierw tworzona jest tabela odnośników
%l
przy użyciupack
danych ed. Te dane to 900-bitowy ciąg binarny każdego znaku zapakowany jako 25-bitowy ciąg binarny (przechowywany jako 113 bajtów - tylko 1 bajt więcej niż węgiel drzewny!), Podobny do niektórych innych odpowiedzi, więcA
jest:który, używając
0
przestrzeni i1
dla,A
jest:i bez podziału linii jest:
Po zainicjowaniu wyszukiwania, iterujemy po każdym poprawnym znaku
@F
(który jest wypełniany przy użyciu-a
opcji utosplit Perla ) dołączając do każdego z 5 elementów listy@;
dla każdego wiersza w tablicy z odnośnika, zastępując wszystkie1
s,uc$F[$i++%@F]
którym jest$i
th znak (modulo,@F
którego długość@F
) jest konwertowany nau
pperc
ase, a wszystkie0
s$"
domyślnie spacją. Po każdym indeksu@;
jest wypełniana dla każdego znaku w@F
,say
drukuje każdą linię z końcowym znakiem nowej linii.Uwaga : ciąg po
unpack
zawiera niezadrukowalne znaki, które są usuwane za pomocą\xXX
notacji. Weryfikacja wyniku 247 .źródło
SOGL V0.12 ,
165164163 bajtówWypróbuj tutaj!
Wyjaśnienie:
źródło
JavaScript (Node.js) ,
365347 bajtówZapisano 1 bajt dzięki @Scoots
Zwraca tablicę 5 ciągów znaków. Zawiera wiodące miejsce w każdym rzędzie.
3736 bajtów zostało utraconych podczas konwersji wszystkiego na wielkie litery i dopasowywania[A-Z0-9]
: - /Wypróbuj online!
Kodowanie znaków
Znaki są kodowane do góry nogami i konwertowane na niestandardową bazę-80 z przesunięciem 4 , przy użyciu zakresu ASCII [35..114] .
Wartości od 35 do 79 są bezpośrednio mapowane na odpowiedni znak ASCII, natomiast wartości od 0 do 34 są mapowane na znaki od 80 do 114 . Pozwala to na dekodowanie poprzez pobranie kodu modulo ASCII 80 .
Na przykład „F” jest kodowany jako
"RZW["
:Począwszy od i = v = 4 , dekoduje się go z powrotem do 25-bitowej liczby całkowitej, wykonując:
W pełnym kodzie faktycznie przetwarzamy niezwiązany wycinek () zakodowanego strumienia, co oznacza, że prawdopodobnie będziemy iterować znacznie więcej niż 4 razy. Nie stanowi to problemu, ponieważ wszystkie iteracje z i <0 będą miały wpływ tylko na dziesiętną część wyniku, która i tak jest ignorowana przez operacje bitowe, które następują natychmiast.
Wypróbuj online!
źródło
toUpperCase
zi
flagą w regex?[A-Z\d]
zamiast[A-Z0-9]
?C (gcc) ,
792690 bajtówWypróbuj online!
Udało się wycisnąć to poniżej 800 z pewnym zmiennym ponownym użyciem. Zdecydowałem się przechowywać czcionkę jako tablicęint
s, jakby chociaż przechowywanie jej jako jednego długiego łańcucha wyglądało jak atrakcyjny pomysł, tak wiele z 8-bitowych fragmentów czcionki nie było przyjemnym, wygodnym znakiem ASCII, który zajmowały kody ucieczki więcej znaków niżint
tablica.Edycja: osiągnąłem poniżej 700, przechodząc na kodowanie napisów - w pewnym sensie zainspirowane wieloma innymi odpowiedziami tutaj ułożyłem reprezentację base-92 przy użyciu (większości) drukowalnych znaków ASCII. Reprezentacja zawiera ukośniki odwrotne, które wymagają dodatkowego znaku, ale można to zrobić tylko raz w czcionce.
Poza tym nie dzieje się zbyt krzykliwie - dane wejściowe (składające się z pierwszego argumentu wiersza poleceń) są kopiowane do tablicy stosów, pomniejszone o znaki, które nie są w czcionce, a małe litery są zamieniane na ich wielkimi literami, jaki znak „piksela” zaczyna się od każdej pełnej litery (użycie
__builtin_popcount
ma boleśnie długą nazwę, ale wciąż było lepsze niż jakakolwiek metoda liczenia bitów, o której mogłem pomyśleć), a następnie drukowanie przechodzi przez linię po linii. Oczywiście kompilator wyświetla ostrzeżenia kilkakrotnie w stosunku do długości programu.Nieco degolfowane poniżej dla twojej przyjemności oglądania:
źródło
Excel VBA, 816 bajtów
Anonimowa funkcja bezpośredniego okna VBE, która pobiera dane wejściowe z zakresu
[A1]
i dane wyjściowe do konsoli.O ile mi wiadomo, jest to pierwsza odpowiedź VBA na
base64
kompresję.Uwaga: Ta odpowiedź zależy od
Microsoft XML, v3.0
referencji VBAPrzykład I / O
Nieoznakowany i wyjaśniony
Zasadnicza część tego rozwiązania przechowująca dużą czcionkę jako podstawowy ciąg 64. Odbywa się to najpierw poprzez konwersję czcionki na binarną, gdzie
1
reprezentuje piksel on, a0
piksel off. Na przykład dla0
jest reprezentowane jakoDzięki takiemu podejściu znaki alfanumeryczne można następnie przedstawić jako
Segmenty te zostały połączone i przekonwertowane na MSXML base 64, renderowanie
Poniższy podprogram bierze to, wstecz konwertuje na binarne i wykorzystuje to odwołanie, z którego buduje ciąg wyjściowy, linia po linii, chwytając najpierw 5 pierwszych pikseli każdego znaku, a następnie drugi rząd i tak dalej, aż łańcuch zostanie skonstruowany .
Podprogram następnie iteruje ciąg wyjściowy i zastępuje piksele „on” znakami z ciągu wejściowego.
źródło
K (ngn / k) ,
230231 bajtów(+1 bajt po zmianie języka impl)
Wypróbuj online!
gdzie
a
jest cytowanym literałem łańcuchowym, który koduje czcionkę. K widzi łańcuchy jako sekwencje bajtów, więc program zawierający taki literał jest poprawny, ale nie można go uruchomić na TIO, ponieważ jego forma HTML próbuje interpretować go jako UTF-8 i wprowadza w błąd.Liczba bajtów jest obliczana jako:
119 zgłoszonych przez TIO
-2 do nazwania funkcji
f:
-1 dla symbolu zastępczego
a
2 za parę cytatów
""
113 dla długości literału łańcucha,
a
który nie zawiera żadnych znaków, które wymagają zmiany znaczeniaźródło