Napisz najkrótszy program, który weźmie ciąg liczb (o długości co najmniej 20) jako dane wejściowe i wyświetli dane wyjściowe przy użyciu standardowych liczb w stylu zegara cyfrowego. Na przykład dla danych wejściowych 81 rozwiązanie z wyjściem ascii dałoby:
_
|_| |
|_| |
Wyjściowa grafika jest również akceptowalna, jeśli pomaga.
Odpowiedzi:
APL (Dyalog) (45)
Ciąg
ા8धगɯેࣃଏ૽
,, są znakami Unicode2750 56 2343 2327 623 2759 2777 2243 2831 2813
(jednak powinieneś być w stanie po prostu skopiować i wkleić). Kodują liczby. Program odczytuje wiersz z klawiatury.Wyjaśnienie:
1+⍎¨⍞
: odczytaj wiersz z klawiatury, przeanalizuj każdy znak jako cyfrę, a następnie dodaj 1 do każdej liczby (tablice APL są domyślnie oparte na 1).⎕UCS'ા8धगɯેࣃଏ૽'[
...]
: Wybierz znaki należące do cyfr wprowadzonych cyfr i wyszukaj wartości Unicode.{
...}¨
: dla każdej z tych wartości:1+⍵⊤⍨9⍴3
: pobierz pierwsze 9 cyfr podstawy 3 z wartości wyrażonej w podstawie 3 i dodaj 1 (ponieważ tablice są oparte na ar 1).' _|'[
...]
: wybierz spację, linię poziomą lub linię pionową w zależności od tych cyfr3 3⍴
: formatuj jako pole 3 na 3.źródło
Funciton
Nie jest to język odpowiedni do gry w golfa ... ale niezależnie od tego starałem się zachować możliwie najmniejszy rozmiar kodu - zupełnie inne wyzwanie niż w „zwykłych” językach. Jest to 1555 znaków lub 3110 bajtów (jeśli kodowane są jako UTF-16; UTF-8 jest większy).
Oto zrzut ekranu z uruchomionego programu. To naprawdę działa :)
Ponieważ wygląda to brzydko w StackExchange ze względu na dodatkowe odstępy między wierszami, rozważ uruchomienie następującego kodu w konsoli JavaScript przeglądarki, aby to naprawić:
$('pre').css('line-height',1)
Prawdopodobnie mógłby być mniejszy, gdybym nie popełnił błędu, z powodu którego wyjście było z powrotem do przodu; Naprawiłem to, dodając dodatkową funkcję do odwrócenia wejścia. W przeciwnym razie prawdopodobnie musiałbym przerobić to wszystko.
Popełniłem także kolejny błąd (zamiana operandów w dwóch wywołaniach do
‼
), co spowodowało, że konieczne było zadeklarowanie dodatkowej‡
funkcji, ale ta jest tak mała, że mieści się w głównej funkcji i dlatego nie dodaje żadnych znaków!źródło
wxpython, wiele znaków
Test
ps: nie jest to poważny wpis, ale wygląda na to, że wyjście graficzne jest również dopuszczalne, więc po prostu spróbowałem :-)
źródło
Golfscript - 66 znaków
xxd
: (użyj,xxd -r
aby przywrócić)Wynika to z większości innych odpowiedzi, ponieważ nie ma spacji między liczbami, a końcowe spacje są zachowywane. Spację między liczbami można łatwo dodać
1+
wcześniej{"_ |"=}%
. Pakowany w podstawową liczbę 3, a następnie jako podstawa 243 w ciąg.źródło
J,
90,7868 znaków[ aktualizacja: przy użyciu kodowania Unicode (1 bajt):
działa jak poprzednio:]
Kluczem jest kodowanie cyfr jako liczb całkowitych base-3. Na przykład zero to:
lub
' _ | ||_|'
, który staje się 010202212 3 = 2750.źródło
http://codegolf.stackexchange.com/q/1000
)Mathematica
205 209 198179Stosowanie
źródło
JavaScript (145)
148145Ponieważ JavaScript nie ma tak naprawdę standardowego wejścia / wyjścia, jest on zapisywany jako funkcja, która pobiera ciąg znaków i zwraca dane wyjściowe jako ciąg znaków.
Rozmieszczone:
Oto jak to działa:
Pierwsze trzy bity dotyczą pierwszego rzędu itp.
W każdej grupie trzech bitów pierwszy określa, czy pierwszym znakiem jest
|
spacja, drugi czy to jest_
spacja, a trzeci ponownie|
czy spacja.Te trzy bity są odzyskiwane
c&1
,c&2
ac&4
, które są następnie używane jako wskaźniki w łańcuchub
.Przy każdej iteracji
i%L
znajduje się „współrzędna x”, tj. Cyfra na wejściun
Przy każdej iteracji
i/L
jest „współrzędna y”, tj. Wiersz, ale musimy|0
uczynić ją liczbą całkowitąWreszcie, spacje między cyframi i nowe linie między wierszami są również pobierane przez indeksowanie do
b
, ponowne użycie znaku spacji i w przeciwnym razie nieużywaną pozycję 3 w tym ciągu! :)źródło
Ruby, 142
oczekuje danych wejściowych w zmiennej
x
. przykłady:źródło
Golfscript - 97 znaków
źródło
Windows PowerShell, 127
Ponieważ ciągi zawierają pewne nieprzyjemne do pisania znaki, zrzut heksowy dla Twojej wygody:
źródło
g Dalej,
186175 znakówNowa wersja:
To faktycznie przeszkadza również wyjść (+3 znaki) :). Oto bardziej czytelna wersja, robi trochę upakowania bitów, aby zmniejszyć rozmiar LUT o 1/3, ale wynikowy kod jest bardziej złożony, więc nie stanowi dużej oszczędności:
Stara wersja:
To powoduje, że stos jest niezrównoważony i nie przeszkadza mu wyjść z interpretera. Oto czystsza, bardziej czytelna wersja
źródło
C # 369 Znaków
Mogłem z łatwością wyciąć kilka postaci. Chodziło raczej o nadużycie LINQ :)
Więcej wersji białych znaków:
źródło
using
(409). Jest też trochę niepotrzebnych białych znaków, które można usunąć (402). Zadanie stanowi, że spacje między cyframi należy pominąć (399).g
jest używany tylko raz, więc możesz zapisać 7 znaków, wkładając go.b
jest również używany tylko raz, więc możesz go również wstawić. Ponadto możesz zapisać wiele znaków, jeśli zmienisz tablicę liczb całkowitych na"{H=mNgwI\x7fo"
, lub nawet krótszą, jeśli zmienisz\x7f
na rzeczywisty znak # 127 (który jest drukowalny, ale dopuszczalny).>>
Będzie nadal działać, ponieważ istnieje niejawna konwersja odchar
celuint
..ToCharArray()
i.ToArray()
to zarówno zbędne, można je po prostu usunąć :)Rozwiązanie Java:
585570 znakówNie sądzę, że będę próbował grać w golfa w Javie ...
źródło
Pyton,
218180176b=map(int,raw_input());a=map(int,bin(914290166014670372457936330)[2:]);c=' |_';p=lambda k:''.join(c[a[9*n+k]]+c[2*a[9*n+1+k]]+c[a[9*n+2+k]]for n in b)+'\n';print p(6)+p(0)+p(3)
Z podziałami linii:
źródło
Bash, 11 znaków
Tak, wiem, oszukuję.
Musisz mieć zainstalowaną toaletę.
źródło
figlet
też by działał.Java, 2,095
PRZYKŁADOWE I / O
źródło
D: 295 znaków
Bardziej czytelnie:
źródło
Ocaml, 268
Wersja do odczytu
źródło
Perl (
182180)czyta ze STDIN.
źródło
Ghostscript
(270)(248)(214)Edycja: więcej podstawień. Usunięto spację między cyframi.
Edycja: jeszcze więcej zmian. Główna pętla wygląda teraz tak, jak działa!
Wykorzystuje funkcję przetwarzania argumentów ghostscript: wywołaj za pomocą
gs -dNODISPLAY -- digit.ps 012 345 6789
.źródło
Delfy || 453 (568 z formatem)
Nie dość blisko, by wygrać, ale fajnie było to zrobić ^. ^
W formacie
koniec.
źródło
PHP,
140136133131129128 bajtówMógłbym zaoszczędzić
57 więcej dzięki rozszerzonemu ascii: po jednym dla"| _"
i podział wiersza, trzy za~"z/]{4lno~|"
(negacja bitowa zamieniłaby wszystko w rozszerzone znaki ascii = żadnych znaków specjalnych, a PHP nie potrzebuje tam cudzysłowów), dwa dla-1
(to tylko tam, aby zachować mapę w standardowym ascii). Ale dla czytelności i kompatybilności pozostaję przy standardowym ascii.mapa bitowa
_
,|_|
,|_|
jako bity-6-
,024
,135
(liczba bitów jest 0 i 2 dla diody LED pionowych)[123,48,94,124,53,109,111,112,127,125]
"z/]{4lno~|"
~"z/]{4lno~|"
(zezwala na trójskładnikowy skrót podczas wyboru postaci)szablon
7
do pomieszczeń ->767
,024
,135
701
,623
,745
(świadczy$p=0
przestarzałe)547326107
(czytaj mapę od prawej do lewej; umożliwia zapętlenie arytmetyczne)5473261070
(pozwala połączyć shift z testem w głowicy pętli)753754680
(dwa bajty krótsze: jedna cyfra i prefiks)awaria
źródło
ord(~"z/]{4lno~|v.J=NF"[hexdec($c)])-1
Java 8, 280 bajtów
Wyjaśnienie:
Wypróbuj tutaj.
W funkcji byłoby to 218 bajtów .
źródło
Python, 227 znaków
Prosty i bezpośredni.
źródło
Perl, 145 znaków
Nie golfowany:
źródło
Python 3.4.3 -
1514858 bajtówPokusa, aby rozwiązać ten problem, była zbyt wielka, aby się nie zarejestrować i odpowiedzieć = P.
Jestem trochę nowy w Pythonie, więc sformatowałem swój program ładnie i schludnie (a przynajmniej tak zrobiłem). Ulepszenia są bardzo mile widziane!
Edycja: użyto skróconych nazw zmiennych; aby skrócić, tylko jedna spacja na końcu liczb wyjściowych, wszystkie zmienne zdefiniowane jednocześnie.
Nowe wiersze mają 2 bajty (CRLF) i użyłem tabulatorów zamiast 4 spacji.
źródło
SmileBASIC, 216 bajtów
Używanie grafiki zamiast tekstu, ponieważ prawdopodobnie jest ona krótsza.
Wyjaśnienie:
źródło
C ++,
230229225223218207204198 bajtówOdczytuje ze standardowego wejścia i wyświetla na standardowe wyjście.
Wyjaśnienie:
źródło
PowerShell, 114 bajtów
Skrypt testowy:
Wydajność:
Główny pomysł:
Każdy standardowy numer stylu zegara cyfrowego zawiera 3 linie. Co więcej, pierwszy wiersz zawiera tylko 2 opcje. Łącznie 6 opcji. Dlatego 7 bitów wystarcza do zakodowania każdej cyfry.
Zatem ciąg
f-SR5Z^mvr
koduje wszystkie segmenty dla wszystkich standardowych numerów stylów zegara cyfrowego.Uwaga: Kolejność
line str
została specjalnie wybrana, aby wszystkie kody znajdowały się w przedziale32..126
.źródło