Dzisiaj był dzień rejestracji do egzaminu AP w mojej szkole i chociaż skrupulatnie bulgotałem na stronach i wymaganych stronach z informacjami, wpadłem na pomysł tego wyzwania. Tak więc, biorąc pod uwagę ciąg liter i cyfr, wypisz odpowiednio wypełniony wykres bąbelkowy.
Zasady:
- Dla każdego znaku w ciągu wejściowym zamień ten znak w odpowiedniej kolumnie na
#
lub@
inny rozsądny symbol (jeśli twój język może to obsłużyć, znak Unicode „full_block”: █ wygląda naprawdę dobrze) - Spacja jest reprezentowana przez pustą kolumnę (patrz przykłady)
- Poprawnym wprowadzeniem będzie ciąg znaków, który składa się tylko z wielkich liter, cyfr i spacji.
- Dane wejściowe będą miały długość minimum 1 i maksymalnie 32 znaki.
- Dane wyjściowe muszą być duże
- Jeśli długość wejściowa jest mniejsza niż maksymalna długość 32, twój program musi nadal wypisywać pozostałe puste kolumny
- Twój program nie musi obsługiwać małych liter tak samo, jakby były dużymi literami, ale punkty bonusowe, jeśli to możliwe.
Format płyty:
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
00000000000000000000000000000000
11111111111111111111111111111111
22222222222222222222222222222222
33333333333333333333333333333333
44444444444444444444444444444444
55555555555555555555555555555555
66666666666666666666666666666666
77777777777777777777777777777777
88888888888888888888888888888888
99999999999999999999999999999999
Przykłady:
CODE GOLF ->
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
█CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
DD█DDDDDDDDDDDDDDDDDDDDDDDDDDDDD
EEE█EEEEEEEEEEEEEEEEEEEEEEEEEEEE
FFFFFFFF█FFFFFFFFFFFFFFFFFFFFFFF
GGGGG█GGGGGGGGGGGGGGGGGGGGGGGGGG
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
LLLLLLL█LLLLLLLLLLLLLLLLLLLLLLLL
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
O█OOOO█OOOOOOOOOOOOOOOOOOOOOOOOO
PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
00000000000000000000000000000000
11111111111111111111111111111111
22222222222222222222222222222222
33333333333333333333333333333333
44444444444444444444444444444444
55555555555555555555555555555555
66666666666666666666666666666666
77777777777777777777777777777777
88888888888888888888888888888888
99999999999999999999999999999999
ABCDEFGHIJKLMNOPQRSTUVWXYZ012345 ->
@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
B@BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
CC@CCCCCCCCCCCCCCCCCCCCCCCCCCCCC
DDD@DDDDDDDDDDDDDDDDDDDDDDDDDDDD
EEEE@EEEEEEEEEEEEEEEEEEEEEEEEEEE
FFFFF@FFFFFFFFFFFFFFFFFFFFFFFFFF
GGGGGG@GGGGGGGGGGGGGGGGGGGGGGGGG
HHHHHHH@HHHHHHHHHHHHHHHHHHHHHHHH
IIIIIIII@IIIIIIIIIIIIIIIIIIIIIII
JJJJJJJJJ@JJJJJJJJJJJJJJJJJJJJJJ
KKKKKKKKKK@KKKKKKKKKKKKKKKKKKKKK
LLLLLLLLLLL@LLLLLLLLLLLLLLLLLLLL
MMMMMMMMMMMM@MMMMMMMMMMMMMMMMMMM
NNNNNNNNNNNNN@NNNNNNNNNNNNNNNNNN
OOOOOOOOOOOOOO@OOOOOOOOOOOOOOOOO
PPPPPPPPPPPPPPP@PPPPPPPPPPPPPPPP
QQQQQQQQQQQQQQQQ@QQQQQQQQQQQQQQQ
RRRRRRRRRRRRRRRRR@RRRRRRRRRRRRRR
SSSSSSSSSSSSSSSSSS@SSSSSSSSSSSSS
TTTTTTTTTTTTTTTTTTT@TTTTTTTTTTTT
UUUUUUUUUUUUUUUUUUUU@UUUUUUUUUUU
VVVVVVVVVVVVVVVVVVVVV@VVVVVVVVVV
WWWWWWWWWWWWWWWWWWWWWW@WWWWWWWWW
XXXXXXXXXXXXXXXXXXXXXXX@XXXXXXXX
YYYYYYYYYYYYYYYYYYYYYYYY@YYYYYYY
ZZZZZZZZZZZZZZZZZZZZZZZZZ@ZZZZZZ
00000000000000000000000000@00000
111111111111111111111111111@1111
2222222222222222222222222222@222
33333333333333333333333333333@33
444444444444444444444444444444@4
5555555555555555555555555555555@
66666666666666666666666666666666
77777777777777777777777777777777
88888888888888888888888888888888
99999999999999999999999999999999
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ->^^^
I oczywiście jest to golf golfowy , więc wygrywa najkrótsza odpowiedź
[A-Z0-9]{1,32}
i zezwolić na dowolne zachowanie danych wejściowych, które nie są zgodne.$
nie pojawi się w danych wejściowychOdpowiedzi:
Łuska , 23 bajty
Wypróbuj online lub wypróbuj fantazyjną postać but (ale nieprawidłową liczbę bajtów)!
Niestety nie udało mi się połączyć dwóch
map
s w jedno (z wyjątkiem użycia nawiasów, co kosztuje 24 bajty) ..Wyjaśnienie
źródło
Rubin , 62 bajty
Wypróbuj online!
Zwraca tablicę ciągów. Można by dalej grać w golfa, odrzucając łączenia ciągów i zwracając tablicę znaków 2D, jak to zwykle jest normą, ale nie jestem pewien, czy jest to dozwolone tutaj.
źródło
C (gcc) ,
132126 bajtówWypróbuj online!
Podziękowania dla Jonathana Frecha za uratowanie 6 bajtów.
źródło
puts("")
jest równoważne zputchar(10)
.++a)putchar((x[a-s]-*_)?*_:64);
->)putchar(x[a++-s]-*_?*_:64);
.64
w golfa1
.putchar
połączenie można zagrać w golfaputchar(*_*(*_!=a[x-s]));
.Czerwony , 177 bajtów
Wypróbuj online!
Bardziej czytelny:
źródło
Węgiel drzewny , 21 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Poprzednia wersja z weryfikacją danych wejściowych,
3432 bajty. Edycja: zapisano 2 bajty dzięki tylko @ ASCII.Wypróbuj online! Link jest do pełnej wersji kodu.
źródło
StringReplace
) Na marginesie: wbudowana zamiana byłaby bardzo przydatna, prawdaCast
R , 104 bajty
Wypróbuj online!
źródło
Galaretka ,
1817 bajtówUżywa znaku spacji. Aby użyć
#
zastąpić⁶
z”#
na koszt jednego bajta.Wypróbuj online!
W jaki sposób?
źródło
³Ḣ,⁶yØA;ØD¤µ32СZY
18 lat, które, moim zdaniem, również mogą być ulepszone! Wychodzę jednak ...C ++ 14,
319 bajtów237To pierwszy raz, kiedy robię to w najgorszym możliwym języku CodeGolf: P
Wypróbuj online!
źródło
Node.js, 85 bajtów
Port do Node.js sugerowany przez @DanielIndie
Wypróbuj online!
JavaScript (ES6),
10398 bajtówWypróbuj online!
źródło
+""
, prawda?)x/32
aby zapisać 2 kolejne bajty, ponieważBuffer
wymusza to liczby całkowite.f=(s,x=561,c=Buffer([48+x/33%43]))=>x<1749?(s[x++%33]==c?'@':x%33?c:`\n`)+f(s,x):''
Perl 5
-F
, 47 bajtówWypróbuj online!
źródło
Haskell , 86 bajtów
Aby uzyskać znacznie ładniejsze podejście (i mniej bajtów), zobacz rozwiązanie Laikoni !
Wypróbuj online!
Alternatywnie dla tej samej liczby bajtów moglibyśmy użyć:
Wypróbuj online!
Wyjaśnienie / Niegolfowany
Operator
(#)
jest bardzo podobny dozipWith
tej funkcji, jednak funkcja jest zakodowana na stałe, st. używa,#
jeśli dwa znaki są równe, a w przeciwnym razie zachowuje drugi, nie golfisty:Jeśli pierwsza lista jest wyczerpana, po prostu dołącza pozostałe elementy drugiej:
Za pomocą tego pomocnika musimy tylko wygenerować ciąg
"A..Z0..9"
, replikować każdy element 32 razy i spakować dane wejściowe każdym ciągiem, bez golfa:źródło
max
. Myślę, że powinieneś opublikować to jako własne rozwiązanie, ponieważ bardzo różni się od mojego rozwiązania.Haskell , 74 bajty
Wypróbuj online! Łańcuch wejściowy
x
jest wypełniony spacjami do długości 32 za pomocątake 32$x++cycle" "
. Dla każdego znakuc
odA
doZ
i0
do9
, patrzymy na znakia
z wypełnionego ciągu wejściowego i zastępujemy je,~
kiedya
ic
są równe, ic
inaczej. Osiąga się to poprzezmax[c]['~'|a==c]
, np.max "A" "~" = "~"
Kiedya = c = 'A'
, amax "A" "" = "A"
kiedyc = 'A'
ia = 'B'
. Ponieważ daje to ciąg singletonu zamiast znaku,do
używana jest adnotacja, która łączy ciąg singletonu w jeden ciąg.Na podstawie rozwiązania BMK firmy Haskell .
źródło
Python 2, 138 bajtów
Obsługuje zarówno wielkie jak i małe litery oraz pozostawia niewypełnioną kolumnę dla spacji.
Jeśli bonus nie jest tego wart, wybiorę 125 bajtów i będę obsługiwał tylko duże litery:
źródło
Stax , 15 bajtów
Uruchom i debuguj
To używa
'#'
do wskazania wypełnionego bąbelka.Rozpakowane, niepolowane i skomentowane, wygląda to tak.
Uruchom ten
źródło
Pyth,
2320 bajtówWypróbuj tutaj
Wyjaśnienie
źródło
APL + WIN, 56 bajtów
Monituje o ciąg wejściowy i używa # znaku jako identyfikatora:
Wyjaśnienie:
źródło
C (gcc) , 124 bajty
Wypróbuj online!
Zamiast tablicy zakodowanej na stałe zastąpiłem ją funkcją wyszukiwania. Na szczęście zestaw znaków ASCII ma ciągłe zakresy alfabetyczne i numeryczne (patrzę na ciebie, EBCDIC!) Również upewniłem się, że dane wyjściowe mają dokładnie 32 znaki, używając
sprintf()
: jeśli nie było to wymaganiem zadania, funkcja miałaby 97 bajtów:Wypróbuj online!
źródło
CJam , 31 bajtów
Wypróbuj online! Używa spacji jako znaku „dołka”.
Jeśli końcowe białe znaki są dozwolone, działa to dla 29 bajtów :
Wypróbuj online!
Oto 34-bajtowa odmiana, która
█
zamiast tego używa pełnego bloku Unicode ( ):Wypróbuj online!
Wyjaśnienie
źródło
Python 2 ,
1039694 bajty-7 bajtów dzięki Mnemonic
-2 bajtów dzięki Jonathan Frech
Wykorzystuje
'
jako symbolWypróbuj online!
źródło
05AB1E , 19 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
a[b]
nie działa tak, jak tego chcesz, prawda: P?MATL , 21 bajtów
Używa spacji jako znaku znacznika.
Wypróbuj online!
Wyjaśnienie
źródło
Common Lisp , 150 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Java 10,
120118117 bajtówWypróbuj online (dla TIO użyłem „█” (
9608
zamiast35
) dla lepszej widoczności).Wyjaśnienie:
źródło
Siatkówka , 64 bajty
Wypróbuj online!
Uzupełnia łańcuch wejściowy po prawej stronie spacjami do 36 znaków
Następnie umieść każdy znak w osobnej linii i dodaj
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
przed nim.Dopasuj parę tego samego znaku w tej samej linii, która jest jedna wtedy i tylko wtedy, gdy znak dla tej linii pasuje do jednego z nich
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
. Zamień pierwszy na@
i usuń drugi.Jedynymi niedopasowanymi liniami są linie ze spacjami, więc znaki spacji to blok kwadratowy 36 × 36. Transponuj to.
Zachowaj tylko pierwsze 32 znaki w każdym wierszu
źródło
Tcl ,
153145 bajtówDzięki @sergiol za -8 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
SNOBOL4 (CSNOBOL4) ,
155150 bajtówWypróbuj online!
Wyjaśnienie:
źródło
Prolog (SWI) ,
235229228222214198173167165 bajtów-6 bajtów dzięki kwakowi @Cows , -6 bajtów dzięki @ 0 '
Wypróbuj online!
Wyjaśnienie
źródło
SOGL V0.12 , 19 bajtów
Wypróbuj tutaj!
źródło
Oktawa , 61 bajtów
Wypróbuj online!
Funkcja działa w następujący sposób:
źródło
Perl 6 , 57 bajtów
Wypróbuj online!
źródło