Zadanie
Zadanie polega na wyświetleniu dowolnego z 128 możliwych stanów wyświetlacza 7-segmentowego .
Twój program powinien przyjąć ciąg 7 znaków ( „bity”), które są albo 0
albo 1
. Pierwszy bit wejściowy odpowiada segmentowi A poniższej ilustracji, drugi do B itp. (Zignoruj dp
):
To, jak reprezentujesz wyświetlacz, zależy od Ciebie - pojedynczy symbol Unicode lub ASCII, grafika ASCII, graficznie lub cokolwiek, co możesz wymyślić. Jednak każde wejście musi mieć własne odrębne wyjście. Jeśli wpadniesz na coś wymyślnego, jestem pewien, że możesz zebrać głosy poparcia, pokazując kilka przykładów.
Wszystkie 128 możliwych stanów wyświetlacza to:
Zasady
- Codegolf
- Jak powiedziałem, każdy rodzaj danych wyjściowych jest dozwolony, ale byłoby miło, gdybyś je określił.
- Dane wejściowe mogą być argumentem stdin lub wiersza poleceń.
Przykłady
Wkład
1101101
Wydajność
Jako ASCII / Unicode:2
Różne rodzaje sztuki ASCII (nie jestem w tym zbyt dobry)
_ ╺┓ ╒╗ ---
_| ┏┛ ╔╝ |
|_ ┗╸ ╚╛ ---
|
---
Odpowiedzi:
J (51)
wydajność:
źródło
1 2 1#"1' #'{~5 3$,0,.502 A.".&>1!:1]1
.C, 106
Rozmiar wynosi 74 znaki, jeśli można zmienić nazwę programu „W00WG5WW1GW66WG4WW2GW33WG”
bieganie:
uwagi:
„W” i „G” (0x47 i 0x57) są wybierane w taki sposób, że wartość & 7 = 7, tzn. Bezpiecznie indeksują znak zerowy, który kończy łańcuch wejściowy.
źródło
Brainfuck - 224
Drukuje za pomocą wykrzykników:
Nie najbardziej czytelny, ale też niezbyt okropny.
Zaskoczony, jak blisko jest to nie być ostatnim miejscem.
źródło
Postscript
121107wymaga
n
zdefiniowania jako ciągu do przetworzenia, więc wywołaj podobniedostać
kompletny zestaw to
źródło
Mathematica:
135129118, wyświetlanie obrazuspacje dodane „dla przejrzystości”
Edytować
Dla wybrednych użytkowników witryny: bez użycia maski zewnętrznej:
źródło
&
.&
.APL,
5855Przykładowe dane wejściowe:
Wydajność:
⍞='1'
przyjmuje dane wejściowe jako tablicę znaków i konwertuje je na tablicę numeryczną.1 2 2 1 2 2 1×⍞='1'
konwertuje tę tablicę na:0
puste,1
for_
,2
for|
(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]
przypisz tę tablicę do zmiennejx
i ponownie uporządkuj, aby reprezentowała segmenty F, G, B, E, D, C.0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]
łączy półfabrykat, segment A i kolejny półfabrykat z przodu3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]
przekształć w matrycę 3x31+3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]
konwertuje na indeksowanie 1Na koniec używa łańcucha
' _|'
do konwersji znaków na znakiEdytować
Ogolono 3 znaki, łącząc a
0
z przodu tablicy i używając duplikatów wskazań, zapobiegając przypisaniu zmiennejźródło
{
jest o 1 znak krótsza niż indeksowanie nawiasów[]
.PHP 66 bajtów
Niewielka poprawa stosując
md5
magiczną wzoru, ale wymaga dodatkowych bajtów 3 Binary¡
,æ
iÚ
to znaki 161, 230 i 218, odpowiednio. Powinno działać tak, jakby było kopiowane bezpośrednio i zapisywane jako format ANSI.PHP 73 (70) bajtów
Jeśli pozwolisz mi na trzy znaki binarne, można to zmniejszyć do 70 bajtów :
gdzie
ƒ
,ß
iõ
są odpowiednio znakami 131, 223 i 245.Odbiera dane wejściowe jako argument wiersza poleceń. Przykładowe użycie:
źródło
php.ini
(domyślnie już są), lub w celu przetestowania można dołączyć do skryptu następujący kod:<? error_reporting(E_ALL & ~E_NOTICE); ?>
JavaScript + jQuery + HTML + CSS (
210201)To rozwiązanie wykorzystuje duszki CSS, a obraz podano jako przykład :
HTML (3)
CSS (
8271)Dzięki xem za sztuczkę „ background: url ”:
JavaScript (125 po usunięciu nowych linii dodanych tutaj dla czytelności)
Test online: http://jsfiddle.net/zhqJq/3/
źródło
<p>
tagu i unikaćdisplay:block
w CSS, aby zaoszczędzić miejsceR (65 znaków):
Opiera się na luźnych przybliżeniach dla niektórych liczb transcendentalnych ...
źródło
Python 2 - 65
Przykład:
źródło
PostScript:
53 binarny, 87 ASCII52 binarny, 86 ASCIIHexdump programu używającego tokenów binarnych:
Pobierz ten plik, aby go wypróbować.
Korzystanie z tokenów ASCII:
Pierwsza
forall
pętla umieszcza wszystkie wymagane współrzędne na stosie. Współrzędne są przechowywane w ciągu, aby zminimalizować wymaganą przestrzeń. Współrzędne są w odwrotnej kolejności, tzn. Ostatnie 4 znaki dotyczą segmentu A. Rysujemy linię od(0,8)
do(4,8)
dla tego segmentu (w rzeczywistości musimy dodać 48 do wszystkich współrzędnych, ponieważforall
umieszcza wszystkie kody ASCII na stosie).Druga
forall
pętla przechodzi przez wszystkie0
si1
si w ciągu wejściowym i zamienia je w szarą wartość.0
s są rysowane na biało (wartość szarości 1), a1
s są rysowane na czarno (wartość szarości 0). Następnie używamy współrzędnych, które są pierwszeforall
pozostawionych pętlę na stosie, aby narysować linie.Wywołaj program za pomocą Ghostscript, podobnie jak Geoff Reedy:
Wyświetla to:
źródło
neg 49 add
(co jest niesamowite btw) z1 and
.not 1 and
, prawda? Nadal zapisuje jeden bajt zarówno w ASCII, jak i binarny.bitshift
to takie długie słowo.APL
101 86 7369Wejście pochodzi z ekranu za pomocą ⍞
Który tworzy matrycę znaków 9x5 złożoną ze spacji i ⎕ w następujący sposób:
Siedmiocyfrowa liczba jest konwertowana na wektor podziału, aby wybrać współrzędne ⎕.
źródło
Mathematica
1121031009688, z wykorzystaniem wykresówźródło
[123]
[[123]], ani nieIntegerDigits[123]
pracuj dla mnie. Dostaję tylkoz
bez wyróżnienia.Python (107)
Zdecydowanie bardziej golfowy.
Wydajność:
Wyjaśnienie:
źródło
Python 2.7 (93 znaki):
Wyjaśnienie:
Z wejściem stdin użyj prowizorycznego operatora trójskładnikowego, aby dać wartość
*
prawda, a spację - fałsz. Weź te wartości i podłącz je do instrukcji formatu, która ma format 7-cyfrowego wyświetlacza. Byłoby to najwyżej 83 znaki, gdyby wyświetlacz działał w następujący sposób:ale kolejność jest dłuższa. Czy ktoś ma na to sposób?
Przykład:
źródło
print' {0}\n{5} {1}\n {6}\n{4} {2}\n {3}'.format(*[' *'[i=='1']for i in raw_input()])
) Nie potrzeba też nawiasów ani miejsca na instrukcję print.>'0'
zamiast=='1'
iinput()
(z backtickami, ale to nie pojawi się z powodu formatowania tutaj) zamiastraw_input()
.x = `input()`
Myślałem, że potrzebujemy lispy odpowiedzi ...
Clojure, 159 znaków
Powyższe będzie działać w REPL i zapewni prawidłową odpowiedź. Na przykład:
Rzucanie w to liczbami z małymi modyfikacjami:
daje:
Niełatwe do odczytania, ale już są!
źródło
JavaScript 123
Mogę obniżyć liczbę znaków (101), jeśli użyjemy tylko jednego znaku dla stanu „włączony”, ale jest to mniej czytelne:
źródło
Postscript 136
Nie zwycięzca, ale inne podejście.
Oczekuje, że ciąg wejściowy znajdzie się na stosie:
Ten jest jeszcze gorszy. 294, aby utworzyć „binarną” bitmapę. Zajęło mi trochę czasu, aby pamiętać, że każdy wiersz jest wypełniony parzystym bajtem. Tak więc mapa bitowa 3x5 ma pięć bajtów przy znaczących 3 bitach msb.
Wyjście jest tak samo brzydkie jak inne. :(
W porządku, oto taki, który wygląda dobrze. 190
Edycja: To było do góry nogami i do tyłu. Naprawiono teraz.
źródło
Mathematica 264
Poprawne wyprowadzenie wydruku wymagało wielu bajtów, więc tym razem bez cygara. Ale i tak jest tu pełny kod (264 znaków).
Pełny zestaw znaków:
Cyfry:
źródło
PHP - 155 znaków
byłoby 150 znaków, jeśli użyjemy deklaracji typu php 5.4, ale nie mam tego zainstalowanego na moim laptopie, więc nie mogłem go przetestować.
Próbki wypuszczają.
Wyjaśnienie:
Najpierw podzieliłem 7-segmentowy wyświetlacz na Pięć wierszy i 3 kolumny. Z havimg 1, 3 i 5 rzędu w środkowej kolumnie i spacją w przeciwnym razie.
Drugi i czwarty rząd ma rurkę „|” znak w pierwszej i ostatniej kolumnie. Teraz obecność tych znaków powinna kierować się wartościami wejściowymi.
Utworzyłem tabelę odnośników, która jest w zasadzie dwoma tabelami odnośników. Pierwszy do obliczania wartości dla 1., 3. i 5. rzędu. I jeszcze jeden z przesunięciem 2 (3. pozycja) do obliczenia rzędów 2. i 4..
źródło
Java - 204 znaki
Przykładowe dane wyjściowe:
Poprawnie sformatowany:
Naprawdę chciałbym tego uniknąć w pętli, ale spróbowałem kilku innych rzeczy i wszystkie były dłuższe. Prawdopodobnie jest na to lepszy sposób, ale to moja pierwsza próba gry w golfa kodowego. (A Java jest dla niego najgorszym językiem, dlatego uważałem, że będzie interesujący.) Nawet Brainfuck mnie pobił, ale przynajmniej moje wyniki wyglądają ładniej.
EDYCJA: można pozbyć się „publicznego” w klasie, oszczędza mi 7 znaków!
I dzięki, Daniero, za pokazanie mi printf! (18 znaków zapisanych)
Przepisano format wyjściowy, zmieniono literały znakowe na dziesiętne, zapisano 12 znaków.
źródło
printf
sposób kilka wcześniejszych wersji, która jest w zasadzieprintln
iformat
w jednej (na przykład funkcji C); Pozwoli ci to uratować niektóre postacie,for
pętli i część aktualizacyjną w jedną, oszczędzając jedną postać:for(int i=7;i>0;c[--i]=a[0].charAt(i)==49?(i%3==0?95:'|'):32);
VBA - 263
To brzydkie, ale myślę, że działa. Mam problem z wyświetleniem właściwej kolejności bitów, więc wnioskuję na podstawie odpowiedzi innych. Nawet jeśli ten fragment jest nieprawidłowy, długość kodu powinna pozostać taka sama.
źródło
VBScript - 178 znaków
źródło
CJam - 29
CJam to nowy język, który rozwijam, podobny do GolfScript - http://sf.net/p/cjam . Oto wyjaśnienie:
l
odczytuje wiersz od wejścia0
oznacza liczbę 0N
jest zmienną preinitialized do nowej linii ciąg]
gromadzi elementów na stosie w tablicys
konwertuje wartość (array) do sznurka, przez co dodanie zero i do nowej linii dla danego wejścia7078571876784728737
jest liczba (ten sam numer, którego użyłem w pythonie, ale tam był szesnastkowy)A
to zmienna wstępnie zainicjalizowana na 10,b
która dokonuje konwersji podstawowej, generując tablicę [7 0 7 8 ... 3 7]\
zamienia dwie ostatnie wartości na stosief=
stosuje=
operator (tutaj indeksowany dostęp do tablicy) do ciągu wejściowego (plus zero i znak nowej linii) i każdy numer 7, 0, 7, ...Indeks 7 odpowiada dołączonemu zeru, a 8 odpowiada dołączonemu znakowi nowej linii.
Moje rozwiązanie Pythona robi dokładnie to samo (z tym wyjątkiem, że separacja cyfr odbywa się poprzez konwersję ciągów)
źródło
VBA, 188 znaków
Zauważ, że musi on wpisać 188 znaków, jeśli zawiera tylko obowiązkowe białe znaki - IDE rozszerza je po skopiowaniu do edytora VBA.
Niestety, VBScript nie ma silnie typowanej tablicy Bajtów lub że ta metoda może być znacznie krótsza.
źródło
JavaScript (ECMAScript 2016) - 108 bajtów
To prawdopodobnie może być grałem dalej, ale nie mogę myśleć o niczym.
źródło
JavaScript, 148 bajtów
Wypróbuj online! (Stopka to Node.js do przeczytania
.input.tio
)Akceptuje wprowadzanie ABCDEFG w flagach binarnych i zwraca:
źródło
SmileBASIC, 136 bajtów
Dane wyjściowe są graficzne.
źródło
05AB1E , 4 bajty
Wypróbuj online lub sprawdź wszystkie możliwe dane wejściowe .
Zobacz weryfikację wszystkich możliwych danych wejściowych link powyżej, aby zobaczyć mapowanie zastosowane dla każdego wejścia.
Wyjaśnienie:
Narusza to zasady, w których stwierdza:
Alternatywą bardziej w duchu wyzwania przy użyciu formatu wyjściowego:
38 bajtów :
Z pewnością można grać w golfa ..
Wypróbuj online lub sprawdź wszystkie możliwe dane wejściowe .
Wyjaśnienie:
Zobacz moją wskazówkę 05AB1E ( rozdział Jak kompresować duże liczby całkowite? ), Aby zrozumieć, dlaczego tak
•L7ו
jest1367524
.źródło
PHP 5.6, 65 bajtów zwykły ASCII
lub bez końca linii, ale z odrobiną zabawy:
Uruchom jako potok z
-nR
lub wypróbuj je online .podział 1
podział 2
źródło