Prawdopodobnie wszyscy znacie 7-segmentowy wyświetlacz, który może wyświetlać między innymi wszystkie cyfry od :
Wyzwanie
Rozważamy tylko segmenty , Twoim zadaniem jest zdekodowanie pojedynczej cyfry, biorąc pod uwagę, które segmenty są włączone.
Można to zakodować jako 8-bitową liczbę całkowitą, oto tabela każdej cyfry z ich reprezentacją binarną oraz odpowiadającymi jej wartościami little-endian i big-endian:
Reguły i I / O
- Wejście będzie jednym z
- jedna liczba całkowita (jak w tabeli powyżej jednego z dwóch podanych zamówień)
- lista / tablica / .. bitów
- ciąg składający się ze znaków
ABCDEFG
(możesz założyć, że jest posortowany, jako przykładABC
koduje ), ich wielkość jest twoją decyzją (nie wielkimi literami)
- Wyjście będzie cyfrą, którą koduje
- Możesz założyć, że nie ma nieprawidłowych danych wejściowych (niepoprawny oznacza, że nie ma odpowiedniej cyfry)
Testy
Ponieważ to wyzwanie pozwala na wiele reprezentacji, zapoznaj się z tabelą.
Odpowiedzi:
JavaScript (ES6), 26 bajtów
Pobiera dane wejściowe w małym Endianie.
Wypróbuj online!
źródło
Python 3 , 18 bajtów
Wypróbuj online!
Wykorzystuje dane wejściowe little-endian. Zawiera surowy
\x7F
bajt.Python 2 , 27 bajtów
Wypróbuj online!
źródło
Wolfram Language (Mathematica) , 41 bajtów
Wypróbuj online!
Używa wejściowej kolumny little-endian liczb całkowitych. Zignoruj ostrzeżenie o składni.
Dla wejściowego X najpierw bierzemy X mod 41, a następnie bierzemy wynik mod 11. Wyniki są odmiennymi mod 11, więc możemy je wyodrębnić z tabeli. Na przykład 126 mod 41 mod 11 to 3, więc jeśli ustawimy pozycję 3 na 0, wówczas otrzymamy poprawną odpowiedź dla wejścia 126.
Stół jest
9[,6,0,8,2,3,1,7,5,4]
. Część 0 to głowa9
. Brakuje części 1, więc jest toNull
zapisanie bajtu: nigdy nie musimy brać udziału 1. Zatem część 2 jest6
, część 3 jest0
i tak dalej, jak zwykle.Odpowiedź Jonathana Allana daje nam
1[4,9,8,6,2,0,5,3,7][[384~Mod~#~Mod~13]]&
. Nie jest to wcale krótsze, ale pozwala uniknąć ostrzeżenia o składni!Wolfram Language (Mathematica) ,
2725 bajtów(Przykro nam, jest tu jakaś postać, która się nie pojawia. Kliknij poniższy link, a zobaczysz.)
Wypróbuj online!
Chodzi o brutalne zmuszanie jakiegoś łańcucha do wejścia,
Hash
aby hasze miały prawidłowe wartości mod 11. Większe brutalne wymuszenie prawdopodobnie doprowadzi nas do jeszcze krótszego rozwiązania.źródło
Galaretka , 12 bajtów
Akceptuje małą liczbę całkowitą.
Wypróbuj online!
Jest to naiwna implementacja, może istnieć sposób na uzyskanie kodu terser.
źródło
Python 2 , 31 bajtów
Wypróbuj online! przyjmuje dane wejściowe jako little-endian.
źródło
Java (JDK) , 32 bajty
Wypróbuj online!
Kredyty
źródło
JavaScript (Node.js) , 25 bajtów
Akceptuje małą liczbę całkowitą.
Wypróbuj online!
Porty dla 31 bajtów w Pythonie z
lambda n:'1498620537'[384%n%13]
źródło
Biała spacja , 152 bajty
Obowiązkowe „S, T i L tak naprawdę nie istnieją, są po prostu widocznymi reprezentacjami poleceń”.
Wypróbuj online!
Kończy się błędem.
Równoważna składnia podobna do złożenia:
źródło
pieprzenie mózgu ,
474176154151149 149137 bajtówZajmuje ciąg wejściowy ośmiu
0
i1
tym pierwszy0
na miejscu po przecinku.(jak w drugiej kolumnie tabeli w poście)
Wyprowadza cyfrę od 0 do 9.
Wypróbuj online!
Algorytm
Obserwując stan określonego segmentu, możemy podzielić zestaw możliwych cyfr na mniejsze podzbiory. Poniżej znajduje się statyczne drzewo wyszukiwania binarnego użyte w moim kodzie. Lewe poddrzewa odpowiada stanowi WŁĄCZENIA segmentu, prawe odpowiada Stanowi WYŁĄCZENIA segmentu.
Kilka uwag przydatnych podczas gry w golfa
+++++
dla obu wartości, a następnie+
tylko dla sześciu.+
poleceń, jeśli z góry dodamy 2 do wartości wyjściowej. W takim przypadku musimy zmniejszyć go0
, a1
tylko i uzyskać korzyści dla innych cyfr.źródło
Siatkówka , 96 bajtów
Wypróbuj online! Może nie jest to najlepszy sposób, ale jest to interesujący sposób programowania w Retina. Wyjaśnienie:
Próbuje uchwycić interesujące przypadki. Pozytywne przechwytywania po prostu przechwytują literę, jeśli jest obecna. Długość przechwytywania wynosi zatem 1, jeśli jest obecny, i 0, jeśli go nie ma. Przypadkami szczególnymi są zrzuty 4 i 6, które istnieją tylko wtedy, gdy odpowiednio D lub E są nieobecne. Te mogą być wyrażone tylko w postaci dziesiętnej, jak
$#4
i$#6
, ale to wszystko musimy tutaj. Przechwyty są następnie budowane w ciąg, którego długość jest pożądaną liczbą. Na przykład, jeśli piszemy,6*$1
to ten łańcuch ma długość 6, jeśli A jest obecny, i 0, jeśli jest nieobecny. Aby wybierać między różnymi wyrażeniami, używamy$.
(dla przechwytywania dodatniego) lub$#
(dla przechwytywania ujemnego), które oceniają na 0 lub 1, a do tej pory można to pomnożyć przez ciąg.F
powtarza się 6 razy iB
dwa razy (przez konkatenację, ponieważ jest golfistą). Jednak wynik jest ignorowany, chyba że jedno i drugieE
iG
są obecne. Obsługuje to przypadki2
,6
i8
.F
powtarza się 5 razy, a jeśliB
jest obecny, dodaje się go po raz szósty plus dodatkowe 3 (reprezentowane przez stały ciąg długości 3). Jednak wynik jest ignorowany, chyba żeD
jest obecny iE
nieobecny. Obsługuje to przypadki3
,5
i9
.A
powtarza się 6 razy iG
powtarza się 3 razy, a dodatkowo1
dodawany (reprezentowany przez stały znak między nimi, ponieważ jest bardziej golfowy). Jednak wynik jest ignorowany, chyba żeD
jest nieobecny. Obsługuje to przypadki1
,4
i7
.Powyższe ciągi są następnie łączone i brana jest długość. jeśli żadna z powyższych nie ma zastosowania, łańcuch nie jest generowany, a zatem jego długość wynosi
0
.Wynikowe ciągi (przed pobraniem długości) są następujące:
źródło
MATL , 14 bajtów
Dane wejściowe to liczba reprezentująca segmenty w formacie little-endian.
Wypróbuj online!
Wyjaśnienie
źródło
Perl 5 -pl, 24 bajty
Wypróbuj online!
Przyjmuje liczby całkowite little-endian.
źródło
Ruby , 29 bajtów
Wypróbuj online!
źródło
Japt, 15 bajtów
Pobiera na wejściu wartość big-endian.
Spróbuj
Wyjaśnienie
Ciąg zawiera znaki w każdym punkcie kodowym wartości big-endian;
Ud
pobiera znak w punkcie kodowym wejścia ib
znajduje indeks tego w ciągu.źródło
Neim , 15 bajtów
Wyjaśnienie:
Wypróbuj online!
źródło
Stax , 12 bajtów
Uruchom i debuguj
Dane wejściowe to mała liczba całkowita Endian.
Wykorzystuje tę samą stałą ciągu, co rozwiązanie MATL Luisa.
źródło
TI-BASIC (seria TI-83 + / 84 +), 15 bajtów
Wykorzystuje wejście little-endian. Skróty są dość powszechne w TI-BASIC, więc napisałem funkcję skrótu brute-forcer dla takich przypadków.
Mamy tu trochę szczęścia, ponieważ mnożnik ma 9 cyfr zamiast oczekiwanej 10.
źródło
05AB1E ,
17161512 bajtów-1 bajt dzięki @ErikTheOutgolfer .
-1 bajt, tworząc port odpowiedzi Mathematica @MishaLavrov .
-3 bajty dzięki @Grimy .
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
Zobacz moją wskazówkę 05AB1E (rozdział Jak kompresować duże liczby całkowite? ), Aby zrozumieć, dlaczego tak
•NŽyf¯•
jest99608231754
.źródło
128в
. Zapomniałem, że jest wbudowany do128
połowy256
. Dzięki!¦C•26¤æÈÛµÀš•2ô₂+sk
(19).Węgiel drzewny, 17 bajtów
Spróbuj!
Odpowiedź Portu Japt .
źródło