Biorąc pod uwagę 7-segmentowy wyświetlacz z niektórymi segmentami włączonymi, a niektórymi wyłączonymi, znajdź sekwencję cyfr (0-9), tak że po przełączeniu odpowiednich segmentów dla każdej cyfry wszystkie segmenty zostaną wyłączone.
Przykład
_
_ [3] => | [1] => [OFF]
_ |
Liczby i odpowiadające im segmenty:
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
Zasady
Codegolf ⊨ wygrywa najkrótszy wpis.
Wejście
Niepusta lista segmentów, które są włączone, podana jako
Sekwencja liczb. Segmenty są ponumerowane od góry do dołu, od lewej do prawej; zaczynając od 0 lub 1. Liczby nie muszą być uporządkowane.
Pojedyncza 7-bitowa cyfra. MSB / LSB nie określono (dlatego możesz wybrać).
Znaki nieliczbowe między liczbami są dozwolone (ale nie muszą być obsługiwane).
Na przykład. dla numeru 7
: 136
lub 1010010
lub0100101
Wynik
Sekwencja liczb do „zastosowania” na wyświetlaczu. Nie podlega żadnym ograniczeniom, takim jak kolejność cyfr. Na przykład. w stan początkowy odpowiadające liczbie 1
, ważne wyjścia będzie 1
, 111
, 010
itp
Alternatywnym wyjściem jest 10-bitowa cyfra (ponownie, MSB / LSB jest twoim wyborem). Na przykład. dla 1
jako danych wejściowych wyjściem byłoby 1000000000
lub 0000000001
.
Niektóre kombinacje mają kilka niepowtarzalnych rozwiązań, np. segmenty odpowiadające dużej literze H
można wyłączyć 013
, ale także 489
i 0258
.
Jeśli nie ma rozwiązania (które moim zdaniem nie jest możliwe), dane wyjściowe są puste.
źródło
301
dlaH
).17
,08
i1479
. Rozwiązania dla górnych segmentów pionowych, od lewej do prawej, to39
i59
. Rozwiązania dla dolnych segmentów pionowych, od lewej do prawej, to56
i2389
.2
nie zawsze jest konieczne, ponieważ możesz go zastąpić albo0468
,1358
albo1369
, w zależności od tego, czy chcesz0
,8
lub9
w swojej odpowiedzi, ale nie ma możliwości całkowitego wyeliminowania7
i myślę, że musisz mieć co najmniej jeden z1
i3
.Odpowiedzi:
Galaretka ,
2625 bajtówWypróbuj online!
Pobiera dane wejściowe jako 7-bitową liczbę całkowitą. Zwraca binarną postać 10-bitowej liczby całkowitej.
To brutalne zmusza wszystkie możliwości. Usuń,
Ḣ
aby uzyskać wszystkie możliwe dane wyjściowe, lub zastąp je,X
aby uzyskać losową możliwą wartość wyjściową.Program magicznej wizualizacji!
Jak to działa
źródło
“wØ][:koR¶z‘
) może zawierać błąd. W twoim numerze9
brakuje dolnego segmentu (porównaj9
w wizualizacji z tym w opisie zadania). W przeciwnym razie bardzo ładne, szczególnie wizualizacja!JavaScript (ES6), 60 bajtów
Działa to, ponieważ:
źródło
JavaScript (ES6),
1171071018684 bajtówZaoszczędzono 15 bajtów dzięki Neilowi
Pobiera dane wejściowe jako 7-bitową liczbę całkowitą, gdzie LSB jest górnym segmentem. Zwraca 10-bitową liczbę całkowitą, w której LSB jest cyfrą
0
.Próbny
Pokaż fragment kodu
źródło
f=(n,k=1023)=>[83,0,57,73,10,71,87,1,91,75].reduce((n,v,i)=>n^=k>>i&1&&v+36,n)?k--&&f(n,k):k
. Lub jeśli zakładamy odpowiedź istniejef=(n,k=0)=>[83,0,57,73,10,71,87,1,91,75].reduce((n,v,i)=>n^=k>>i&1&&v+36,n)?f(n,k+1):k
.1-7
, możesz zapisać kolejne 8 bajtów, usuwając znaki83
i,91,75
ik+2
.Mathematica, 40 bajtów
(Można bardziej grać w golfa, wybierając ostrożnie dane wyjściowe dla każdego segmentu i przełączając między LSB i MSB.)
Weźmy na przykład dane wejściowe jako listę pozycji
{2,4,5,7}
i wyprowadzamy 10-bitową liczbę (384
=0110000000
binarnie) w kolejności MSB (0, ..., 9).W tym przykładzie odpowiada
a dane wyjściowe odpowiadają
{7,8}
.Wyjaśnienie:
Liczby magiczne (lista zakodowana na stałe) to dane wyjściowe zwracane dla każdego segmentu. (zakodowany w formacie binarnym) A jeśli liczba pojawi się na liście dwa razy, efekt jest taki sam, że nie pojawia się, więc używany jest bitowy XOR. Musimy tylko XOR wyprowadzić możliwą wartość włączonych segmentów.
źródło
Galaretka , 12 bajtów
Wypróbuj online!
To nie jest brutalna siła i jest znacznie krótsza niż moje inne rozwiązanie. Pobiera dane wejściowe jako listę włączonych segmentów i wysyła dane, ponieważ LSB jest segmentem górnym.
Wyjście jako lista ruchów cyfr.
Jak to działa
To będzie szybkie
źródło
1*use digit 1 + 2*use digit 2 + 4*use digit 3 ... 64*use digit 7
, a następnie XOR zmniejsza je @ ais523. Spłaszczanie działałoby na liście użytych cyfr, które wymagają więcej znaków.