Zaprojektowałem nową czcionkę, którą nazywam PrettyFont. Wiele czasu poświęciłem na doskonalenie go, ale ponieważ jestem pracującym człowiekiem, nie mam czasu, aby go ukończyć. Dlatego obecnie zawiera tylko 4 znaki. Pewnego dnia, gdy stanę się bogaty, stanie się moim życiowym celem, aby go ukończyć, ale na razie ...
To jest PrettyFont: (0, 1, 2, 3)
#### ## #### ####
# # # # # #
# # # # ###
# # # # #
#### ### #### ####
Każda postać ma szerokość 4 pikseli i wysokość 5 pikseli. Teraz! Chcę, żebyś napisał mi program, który wyświetla liczbę w PrettyFont, abym mógł rozpocząć wysyłanie projektów do wydrukowania.
Zasady:
Dane wejściowe to liczba ciągów w bazie 4 (tylko znaki 0-3), na przykład „01321”. Program powinien być w stanie obsłużyć co najmniej 10 znaków w ciągu. Punkty BONUS są przyznawane programowi, który przyjmuje rzeczywistą liczbę całkowitą podstawową 10 zamiast ciągu. EDIT wyjaśnienie: premia do liczby całkowitej oznacza, że można wprowadzić dowolną liczbę podstawową 10, np. 54321, a program przekonwertuje ją na bazę 4 i wyśle ją (w tym przypadku 31100301).
Wynik będzie liczbą wydrukowaną za pomocą PrettyFont. Przykładowe dane wejściowe i wyjściowe:
> "321"
####
#
###
#
####
####
# #
#
#
####
##
#
#
#
###
Ogromna premia dla programu, która może wyświetlać go w jednym rzędzie, tak jak to:
> "321"
#### #### ##
# # # #
### # #
# # #
#### #### ###
Znak „#” nie jest wymagany i można go zastąpić dowolnym znakiem.
W wyjściu pionowym wymagany jest pusty wiersz między każdym znakiem PrettyFont. Jeśli ktoś tworzy wynik w poziomie, między każdym znakiem PrettyFont wymagany jest jeden biały znak „” lub znak tabulacji.
To jest golf golfowy, wygrywa najkrótszy kod! (Potrzebuję go krótko, ponieważ mój komputer w biurze ma ograniczone miejsce).
banner -c '#' 0123
Odpowiedzi:
k (
118 117 72 71 6966 znaków)Nie poczyniłem wiele wysiłku, aby zagrać w golfa,ale osiąga on pożądany poziomy wynik w niezbyt wielu znakach:Pobiera dane wejściowe ze standardowego wejścia, drukuje dane wyjściowe na standardowe wyjście.
edycja: Wdrażając formę kompresji na wyjściowej „bitmapie”, zredukowałem ją do 72. Bitmapa jest teraz budowana przez konwersję 64-bitowych int na binarne i mapowanie zer i 1 na „#” lub „”.
Mógłbym to zrobić z hexa, jak kilka innych rozwiązań, ale myślę, że skończyłoby to dłużej. Okazuje się, że hex jest lepszy.Przykładowe dane wyjściowe dla 012301:
// edycja: -6 znaków
źródło
Python3 (124)
Przepraszam, pionowe nie było dla mnie interesujące.
źródło
J,
848281807569 znakówPobiera dane z klawiatury:
Liczby magiczne FTW (lub w tym przypadku na drugie miejsce) :-)
źródło
#:
wydawało się , że nie działa dla tego rozmiaru liczby.#:1166416635908028473935870
i#:1166416635908028473931775
obie dają mi tę samą odpowiedź.C -
164151 znaków w poziomieNa IDEone: http://ideone.com/gljc3
Kod (164 bajty):
EDYCJA - 151 bajtów
Dodałem sugestie z komentarzy, a następnie niektóre. Nie jest to jednak do końca bezpieczne (tablica o zerowej długości,
gets()
do której ...).Uwaga,
i=puts("")
jest niezdefiniowanym zachowaniem, ponieważ traktujęvoid
jakint
! Konsekwentnie zwraca0
moją wersję MinGW, ale zwraca1
kompilator, którego używa IDEOne.Akceptuje dziesiętne, wyjściowe bazy 4 (167 bajtów)
źródło
gets
wfor
(zapisz 1). Przejdźputs
dofor
przyrostu zewnętrznego i zapisz nawiasy klamrowe. Zapisz parantezę:(n[i]-48)*5+j
->n[i]*5-240+j
, ta sama sztuczka z+4*(..
.Rubin, 0123 znaków + bonus ([0123] vs '#')
Przykład:
EDYCJA: Ruby, 87 znaków
źródło
Rubin
Pionowo: 116 znaków
Przykładowy przebieg:
Poziomo:
150148 znakówPrzykładowy przebieg:
źródło
Mathematica
174145139118119123 znakiTeraz działa z danymi wejściowymi w bazie 10 (premia całkowita). Wcześniejsze wersje można znaleźć w edycjach.
Za pomocą ArrayPlot :
Za pomocą
ArrayPlot
możemy bezpośrednio przekonwertować jedynki i zera na czarne i białe kwadraty, oszczędzając przy tym kilka znaków. Na przykład n = 58021, czyli 32022211 w podstawie 4:Wyjaśnienie
Wejście jest parametr programu
n
.Zero może być reprezentowane przez
{{1,1,1,1},{1,0,0,1},{1,0,0,1},{1,0,0,1},{1,1,1,1}
lub przez odpowiednik heksadecymalnyf999f
.Wyrażenie „
f999f62227f924ff171f
zawiera informacje umożliwiające wyświetlenie wszystkich liczb {0,1,2,3}. (Uwaga: zaczyna się odf999f
, który, jak zauważyliśmy, wynosi zero w przebraniu.) Ponieważ Mathematica nie rozpoznaje tego jako liczby,89998622278924881718
zamiast tego użyłem (w czterech ciągach liczb całkowitych), podzieliłem liczbę na liczby całkowite, a następnie użyłem 15 w każdym miejscu pojawiło się 8. (To pozwoliło mi używać cyfr zamiast ciągów znaków w całym tekście).źródło
Mathematica ,
112107103Moje podejście do metody Davida.
105 z BONUSEM:
(dla
n = 54321
)źródło
APL (
5857)Wynik:
źródło
Python 2.7
Pionowa 160
Poziomo
234216Oba przyjmują dane wejściowe jako ciąg cytowany na stdin
przykład:
$. / pretty
„0123”
źródło