Napisz program, który pobiera niepusty ciąg cyfr od 0 do 9 i drukuje, jak będą wyświetlane na siedmiosegmentowym wyświetlaczu za pomocą ukośników ( /
, \
).
Są to dokładne kształty cyfr:
/\
\ \
\/
\
\
/\
/
\/
/\
/\
/
\
\/\
/
\/\
/
/
\/\
\/
/\
\
/\
\/\
\/
/\
\/\
/
Kiedy jedna cyfra występuje po drugiej, są one powiązane łańcuchem po przekątnej w górę i w prawo, z odstępem po przekątnej między nimi. Na przykład 203
stałoby się tak:
/\
/\
/\ /
\ \
/\ \/
/
\/
Zauważ, że 1
postać zajmuje tyle samo miejsca co pozostałe. Dwie linie 1
znajdują się po prawej stronie wyświetlacza, a nie po lewej stronie.
Stałoby 159114
się tak:
\
\/\
\
\
\
\
/\
\/\
/ /
\/\
\ /
\
Na wyjściu może znajdować się dowolna ilość i kombinacja wiodących / końcowych znaków nowej linii lub spacji, o ile cyfry znajdują się we właściwej pozycji względem siebie.
Tak więc 159114
, byłoby to również ważne:
\
\/\
\
\
\
\
/\
\/\
/ /
\/\
\ /
\
Pobierz dane wejściowe ze standardowego wiersza poleceń lub wiersza poleceń albo napisz funkcję, która pobiera ciąg znaków. Wydrukuj wynik na standardowe wyjście lub możesz zwrócić jako ciąg, jeśli napiszesz funkcję.
Dowolny niepusty ciąg cyfr od 0 do 9 powinna działać, w tym pojedynczych cyfr (np strun 8
) i smyczki z wiodącymi zerami (np 007
, zera nie muszą być drukowane).
Najkrótszy kod w bajtach wygrywa.
Odpowiedzi:
CJam,
777170696362 bajtówWszystkie znaki można drukować, więc kopiowanie i wklejanie powinno działać dobrze.
Wypróbuj online w interpretatorze CJam .
Pomysł
Zaczynamy od zbadania liczby cyfr n na wejściu i przesunięcia kwadratu spacji wystarczająco dużego, aby pokryć wynik. W realizacji ten kwadrat zostanie zakodowany jako dwuwymiarowa tablica ciągów jednoznakowych.
Kwadrat o długości 2n + 1 byłby w sam raz (tj. Bez otaczających białych znaków) dla prostej implementacji, ale użyjemy jednego o długości 5n, aby zaoszczędzić kilka bajtów. Na szczęście otaczające spacje są dozwolone.
Jeśli odwrócimy linie reprezentacji siedmiu ukośników 8 , otrzymamy:
Reprezentacja wszystkich cyfr może być zakodowana jako 8-bitowa liczba całkowita, przy czym i- ty bit ma wartość 0, a i- ty znak należy zastąpić spacją. Dla cyfr od 0 do 9 wynikowe liczby całkowite to
które odpowiadają następującym znakom ISO-8559-1:
Dla każdej cyfry w wejściu, po wybraniu odpowiedniej 8-bitową liczbę całkowitą, powtarzamy I th charakteru reprezentacji 8 dokładnie ciągu í czasach, gdzie ja Czy I th bitu liczby całkowitej. To popycha tablicę ciągów jednego lub zera znaków. Dzieląc tę tablicę na części o długości 3, otrzymujemy tablicę, w której każdy element odpowiada linii reprezentacji.
Teraz obliczamy wektoryzowane maksimum łańcuchów reprezentujących kwadrat i łańcuchów reprezentujących cyfrę. Ciągi
, więc zastąpią spacje w kwadracie. Pusty ciąg jest jednak mniejszy niż ciąg
, więc puste ciągi w reprezentacji cyfrowej zachowają spacje w kwadracie.
/
i\
są większe niż ciągObracamy teraz wiersze i kolumny o dwie jednostki, aby umieścić następującą cyfrę w odpowiedniej części kwadratu i powtórzyć proces dla pozostałych cyfr na wejściu.
Na koniec odwracamy każdy wiersz i wstawiamy linię między poszczególnymi wierszami.
Kod
Ostatnie obroty zakłóciłyby wynik, gdyby długość boku kwadratu była mniejsza niż 2n + 3 . Ponieważ 5n ≥ 2n + 3 dla wszystkich dodatnich liczb całkowitych n , kwadrat jest wystarczająco duży, aby temu zapobiec.
źródło
Python 3,
189183174 bajtówKompresja wygląda dla mnie dobrze, ale mam problem z wymyśleniem dobrego sposobu wyrzucenia siedmiu zmiennych ...
Na szczęście specyfikacja jest dość luźna w regułach białych znaków, ponieważ istnieje wiele wiodących / końcowych białych znaków.
Rozszerzony:
Wyjaśnienie
Pozycje segmentu reprezentowane przez zmienne to:
Każdy segment jest kodowany przez pojedynczy 2-bajtowy znak Unicode. Na przykład
ϻ
kodujeg
segment w taki sposób:Rzeczywiście,
2
jest to jedyna cyfra, która nie używa prawego dolnego segmentu siedmiosegmentowego wyświetlacza.źródło
C,
1098345323319 bajtówPierwszadrugatrzecia próba. W końcu postanowiłem porzucić bufor ekranu, aby zaoszczędzić kilka bajtów. Ten program pobiera parametr cyfr i drukuje cyfry w formacie 7-segmentowym.Uczestnik po raz pierwszy. Dla żartu. Bądź delikatny.
Rozszerzony, bez ostrzeżeń:
źródło
JavaScript,
192178167162 bajtówZastosowanie:
f("1337");
powróciWykorzystuje funkcje ES6 i może zachowywać się zależnie od implementacji z powodu pominięcia średników i nawiasów, ale działa w przeglądarce Firefox.
Rozszerzony:
Wyjaśnienie:
l
to tablica zawierająca 10 jednobajtowych znaków, które odpowiadają kształtowi każdej cyfry. Na przykład cyfra 0 jest reprezentowana przez znakî
:Znaki wejściowe są używane jako klucze do tablicy o kształcie odpowiadającym odpowiednikom, które są odczytywane krok po kroku.
źródło
==0
i==1
rzeczywiście konieczne wcześniej?
. Czy int nie jest uważany za boolean w js? @Regret"w\x05k/\x1D>~\x07\x7F?"
z każdym odwróconym bitowym znakiem"\xee\xa0\xd6\xf4\xb8|~\xe0\xfe\xfc"
każdy z nich można wydrukować. To daje 8 dodatkowych bajtów. Chociaż za mało ...f=(x)=>{}
- nie są potrzebne tylko z jednym argumentem.Perl - 103 bajtów
Powyższe zawiera 6 niedrukowalnych znaków (źródło można pobrać z Ideone ) i jest równoważne z następującymi:
Każdy
^F
może być zastąpiony literalnym znakiem 6 (ACK) i\177
zastąpiony znakiem 127 (DEL).Shebang jest liczony jako 1, druga nowa linia jest niepotrzebna. Dane wejściowe są pobierane ze standardowego wejścia.
Przykładowe użycie
Wyjaśnienie
Dane wyjściowe są generowane jeden bajt na raz. Każdy znak jest transliterowany, a następnie interpretowany jako tablica bitów przy użyciu
vec
. Bity są przechowywane w następujący sposób:Wyjście zmienia się między 3 a 5 ukośnikami, tak że bity
56
przenoszą się01
na następną cyfrę. Bit7
nie jest używany.źródło
C #,
360 355331 bajtówCześć, pierwsza próba golfa kodowego. Mam nadzieję, że nie osiąga to zbyt słabego wyniku dla wpisu C #.
Zastosowanie:
p("159114");
powróciRozszerzony:
źródło
string s(string n)
nan=>
za pomocą lambda. Ach cóż, możesz to tak zostawić, jeśli wolisz. :) Stworzyłem jednak port do Javy, który ci przypisuje. ;)python 2,
317298278273,15Podczas liczenia rozważałem 4 spacje jako tabulatory.
Nieskompresowane i czytelne:
źródło
l[y+dy][x+dx]=c if r[map(int,s)[x/2]][i]=='1' else ' '
nal[y+dy][x+dx]=[' ',c][r[map(int,s)[x/2]][i]=='1']
zapis 5 bajtów, zmianareturn '\n'.join(''.join(x) for x in l)
naprint'\n'.join(''.join(x)for x in l)
zapis 3 bajtów i kilka innych zmian. Oto link do Gist, w której mam bajt odliczany do 440 z 508.KDB (Q),
172136 bajtówWyjaśnienie
1) Utwórz
d
mapę ze wszystkimi kształtami cyfr.2) Wypełnij matrycę dodatkowymi zerami i dodaj je razem. tzn. „01”
3) Użyj indeksu do mapowania
" /\"
i drukowania-1
.Test
Jestem pewien, że może to być krótsze !!
Dzięki @hjk
źródło
1 2 0 2 1 2 0 2 1
z(9#1 2 0 2)
(-6).enlist
z1#
uczynków, aby się kolejny -5.enlist
ponieważcount[a 0]#0
nie jest atomem :(Pip, 122 + 1 = 123 bajty
Używa
-n
flagi. Pobiera dane wejściowe za pomocą argumentu wiersza polecenia.Znaki w ciągu UTF-8 mają następujące punkty kodowe:
11152, 19190, 12535, 12547, 17651, 11575, 11557, 12629, 11071, 11089
.Nieznacznie nie golfista:
Podstawową strategią jest znalezienie znaków składających się na poszczególne liczby, a następnie odpowiednie ich przekrzywienie. Na przykład,
8
chcemy, aby to (spacje reprezentowane przez kropki):co zamieni się w to:
Zaletą tej strategii jest to, że wiele wstępnie wypaczonych liczb można po prostu połączyć obok siebie.
Teraz możemy zakodować
/.\\/.\\/.
w bazie 3 jako1200120012
. Następnie możemy przekonwertować to na dziesiętne i potraktować jako punkt kodowy UTF-8.Wyrażenie
J"\/ "@^(A_TB3M"⮐䫶ヷ䓳ⴷⴥㅕ⬿⭑")@_.2<>2Ma
pobiera wstępnie wypaczone dane w następujący sposób:Po połączeniu tych ciągów obok siebie
$.
, tworzymy siatkę spacji (2 * n +2 kwadrat), zapętlamy wstępnie skośną siatkę i zastępujemy odpowiednie spacje w skośnej siatce odpowiednie postacie. Aby zobaczyć, jak to się dzieje, można zmodyfikować kod w celu wydrukowania każdego etapu i wstrzymać wprowadzanie przez użytkownika:Siatka jest faktycznie zbudowana do góry nogami, ponieważ wydawało się to ułatwiać matematykę.
Jestem pewien, że są lepsze algorytmy do użycia. Ale chciałem wymyślić własny pomysł, niż kopiować czyjś pomysł.
Więcej na Pip
źródło
Brainfuck - 719 bajtów
Tylko w kontekście historycznym, przypisy Danielowi Cristofani. Nie jestem do końca pewien, kiedy to zostało utworzone, ale jest ono dostępne z Archiwum Internetowego już 9 maja 2003.
Wynik działania
9
jest inny niż w opisie problemu.źródło
Perl, 270 bajtów
Naprawdę nie powinienem tracić na to czasu.
źródło
[$1]while/(.)/g
z[$_]for/./g
uratować 4 bajty. wymienićfor($i=0;$i<=$l;$i++)
zfor$i(0..$l)
uratować 9 bajtów.JavaScript ( ES6 ), 191
206Uruchom snippet w przeglądarce Firefox, aby przetestować.
źródło
Java 8, 341 bajtów
Port @Shion „s C # .NET odpowiedzi , więc upewnij się upvote go tak dobrze!
Wypróbuj online.
Wyjaśnienie:
źródło