Istnieje wiele zagadek z dopasowaniami, które polegają na dodawaniu, usuwaniu lub przenoszeniu określonej liczby dopasowań w celu utworzenia nowych liczb lub kształtów. Tak jest z zegarem cyfrowym.
Biorąc pod uwagę prawidłowy czas na 12-godzinnym zegarze cyfrowym, wypisz cyfrę, która wymaga przesunięcia jak najmniejszej liczby linii, aby każda widoczna cyfra na zegarze stała się tą cyfrą. Jeśli więcej niż jedna cyfra jest minimum, wypisz je wszystkie. Jeśli nie jest możliwe, aby każda cyfra była taka sama, wartość wyjściowa -1
lub wartość fałszowania inna niż 0 (dostaniesz ich dużo).
Cyfry zegara wyglądają tak:
|
|
_
_|
|_
_
_|
_|
|_|
|
_
|_
_|
_
|_
|_|
_
|
|
_
|_|
|_|
_
|_|
_|
_
| |
|_|
Przypadki testowe:
Wejście: 123
Wyświetlanie zegara:
_ _
| : _| _|
| : |_ _|
Wynik: 4
Objaśnienie: Wyświetlenie 1:23
wymaga narysowania łącznie 12 linii. Dlatego, aby każda cyfra była taka sama, każda cyfra musiałaby mieć 4 linie. Jedyna cyfra zawierająca 4 linie to 4
. Dlatego odpowiedź musi być 4
.
Wejście: 1212
Wyświetlanie zegara:
_ _
| _| : | _|
| |_ : | |_
Wynik: -1
Objaśnienie: Wskazanie dla 12:12
wymaga 14 linii. 14 podzielone przez 4 nie jest liczbą całkowitą, dlatego niemożliwe jest, aby każda cyfra była taka sama.
Wejście: 654
Wyświetlanie zegara:
_ _
|_ : |_ |_|
|_| : _| |
Wynik: 5
Objaśnienie: Całkowita liczba linii wynosi 15. 15 podzielone przez 3 to 5, więc każda cyfra musi mieć 5 linii. Jedynymi cyfry, które mają 5 linii są 2
, 3
i 5
. Odpowiedź jest taka, 5
że potrzeba tylko 2 ruchów, aby każda cyfra 5. Po prostu przenieś linię w lewym dolnym rogu 6 do dolnej 4, a następnie:
_ _
|_ : |_ |_|
_| : _| _|
Następnie, jak widać, wystarczy przesunąć linię w prawym górnym rogu cyfry, która pierwotnie wynosiła 4 na górę, i otrzymujesz 5:55
. Aby każda cyfra a 2
lub 3
wymagała więcej niż 2 ruchów.
Wejście: 609
Wyświetlanie zegara:
_ _ _
|_ : | | |_|
|_| : |_| _|
Wyjście: 609
( 6,0,9
lub [6,0,9]
też ok).
Objaśnienie: 6
, 0
, i 9
są tylko cyfry, które mają 6 linii. Jako takie są również jedynymi możliwymi rozwiązaniami. Nietrudno dostrzec, że wykonanie jednego z nich jako jedynej cyfry wymagałoby dwóch ruchów. Dlatego wyprowadzasz wszystkie trzy cyfry.
Uwagi:
- Chociaż czas wejściowy musi być prawidłowy, czas wyjściowy nie (np.
999
Ponieważ wyjście jest OK.) - Jestem bardzo elastyczny z wkładem. Możesz wymagać wiodącego 0. Możesz użyć liczby z przecinkiem dziesiętnym. Możesz użyć ciągu. Możesz użyć tablicy. Możesz mieć parametr dla każdej cyfry.
Odpowiedzi:
Julia,
160157154To jest funkcja lambda. Przypisz ją do zmiennej, aby ją wywołać. Akceptuje wektor liczb całkowitych z zakresu
0-9
dowolnej długości i zwraca (prawdopodobnie pusty) wektor wyników.Przypadki testowe
Wyjaśnienie
Zliczyć siedem segmentów i przedstawić je jako wektor bitowy.
Przykład:
1
(włączone segmenty 2 + 5) staje się36
(ustawione bity 2 + 5).Oto reprezentacje cyfr
0-9
.Możemy użyć cyfry jako indeksu, aby uzyskać reprezentację wektora bitowego.
+1
z powodu indeksowania 1 w Julii.Funkcja
c=count_ones;
zlicza liczbę 1-bitów w liczbie całkowitej. Przypisujemy alias, ponieważ potrzebujemy go częściej.Pełny program, nieco nie golfowy:
Teraz szczegółowo dwa ostatnie wiersze:
mean(map(c,m))
oblicza średnią liczbę wierszy na cyfrę wejściową.n=map(a->...,l)
zapętla reprezentację wektorową wszystkich cyfr.Jeśli liczba wierszy naszej bieżącej cyfry
a
jest nierówna w stosunku do średniej liczby wierszy wejścia, zwróćinf
.Jeśli nie, zwróć sumę odległości Hamminga między naszą obecną a wszystkimi cyframi wejściowymi.
Mamy teraz wektor
n
długości10
reprezentujący liczby,0-9
który daje nam całkowitą liczbę dodań / usunięć, które musimy wykonać, aby przekształcić wszystkie cyfry wejściowe na tę liczbę lubinf
, jeśli taka transformacja jest niemożliwa bez zmiany liczby linii.Na koniec wypisz położenia (oparte na 0) wszystkich minimów, które nie są
inf
.źródło