Es gibt viele Rätsel mit Übereinstimmungen , bei denen eine bestimmte Anzahl von Übereinstimmungen hinzugefügt, entfernt oder verschoben wird, um neue Zahlen oder Formen zu erstellen. Das ist bei einer Digitaluhr so.
Geben Sie bei einer gültigen Zeit auf einer 12-Stunden-Digitaluhr die Ziffer aus, für die die wenigsten Zeilen verschoben werden müssen, damit jede sichtbare Ziffer auf der Uhr zu dieser Ziffer wird. Wenn mehr als eine Ziffer das Minimum ist, geben Sie alle aus. Wenn es nicht möglich ist, jede Ziffer gleich zu machen, wird eine Ausgabe -1
oder ein anderer falscher Wert als 0 ausgegeben (viele davon erhalten Sie).
Die Ziffern der Uhr sehen folgendermaßen aus:
|
|
_
_|
|_
_
_|
_|
|_|
|
_
|_
_|
_
|_
|_|
_
|
|
_
|_|
|_|
_
|_|
_|
_
| |
|_|
Testfälle:
Eingang: 123
Uhranzeige:
_ _
| : _| _|
| : |_ _|
Ausgabe: 4
Erläuterung: Für die Anzeige für 1:23
müssen insgesamt 12 Linien gezeichnet werden. Damit jede Ziffer gleich ist, müsste jede Ziffer 4 Zeilen haben. Die einzige Ziffer mit 4 Zeilen ist 4
. Daher muss die Antwort sein 4
.
Eingang: 1212
Uhranzeige:
_ _
| _| : | _|
| |_ : | |_
Ausgabe: -1
Erläuterung: Die Anzeige für 12:12
erfordert 14 Zeilen. 14 geteilt durch 4 ist keine ganze Zahl, daher ist es unmöglich, dass jede Ziffer gleich ist.
Eingang: 654
Uhranzeige:
_ _
|_ : |_ |_|
|_| : _| |
Ausgabe: 5
Erläuterung: Die Gesamtzahl der Zeilen beträgt 15. 15 geteilt durch 3 ist 5, daher muss jede Ziffer 5 Zeilen haben. Die einzigen Stellen , die 5 Linien sind 2
, 3
und 5
. Die Antwort ist, 5
weil es nur 2 Züge erfordert, um jede Ziffer 5 zu machen. Verschieben Sie einfach die Linie unten links von der 6 nach unten zur 4, dann haben Sie:
_ _
|_ : |_ |_|
_| : _| _|
Wie Sie sehen, müssen Sie dann nur noch die Linie oben rechts von der Ziffer, die ursprünglich 4 war, nach oben verschieben, und Sie erhalten 5:55
. Um jede Ziffer zu einem 2
oder zu machen, 3
wären mehr als 2 Züge erforderlich.
Eingang: 609
Uhranzeige:
_ _ _
|_ : | | |_|
|_| : |_| _|
Ausgabe: 609
( 6,0,9
oder [6,0,9]
auch ok).
Erläuterung: 6
, 0
, und 9
sind die einzigen Stellen , die 6 Zeilen haben. Als solche sind sie auch die einzig möglichen Lösungen. Es ist nicht schwer zu erkennen, dass zwei Schritte erforderlich sind, um eine dieser Ziffern zur einzigen zu machen. Daher geben Sie alle drei Ziffern aus.
Anmerkungen:
- Obwohl die Eingabezeit gültig sein muss, gilt dies nicht für die Ausgabezeit (z. B.
999
da eine Ausgabe in Ordnung ist). - Ich bin sehr flexibel mit Input. Sie können eine führende 0 benötigen. Sie können eine Zahl mit einem Dezimalpunkt verwenden. Sie können eine Zeichenfolge verwenden. Sie können ein Array verwenden. Sie können für jede Ziffer einen Parameter festlegen.
Antworten:
Julia,
160157154Dies ist eine Lambda-Funktion. Weisen Sie es einer Variablen zu, um es aufzurufen. Akzeptiert einen Vektor von Ganzzahlen im Bereich
0-9
beliebiger Länge und gibt einen (möglicherweise leeren) Ergebnisvektor zurück.Testfälle
Erläuterung
Zählen Sie die sieben Segmente auf und stellen Sie sie als Bitvektor dar.
Beispiel:
1
(Segmente 2 + 5 aktiviert) wird36
(Bits 2 + 5 gesetzt).Hier sind die Darstellungen für Ziffern
0-9
.Wir können die Ziffer als Index verwenden, um die Bitvektordarstellung zu erhalten.
+1
wegen 1-basierter indizierung in julia.Die Funktion
c=count_ones;
zählt die Anzahl der 1-Bits in einer Ganzzahl. Wir weisen einen Alias zu, weil wir ihn häufiger benötigen.Das vollständige Programm, etwas ungolfed:
Nun die letzten beiden Zeilen im Detail:
mean(map(c,m))
berechnet die durchschnittliche Anzahl von Zeilen pro Eingangsziffer.n=map(a->...,l)
Schleifen über die Vektordarstellung aller Ziffern.Wenn die Anzahl der Zeilen unserer aktuellen Ziffer nicht
a
der durchschnittlichen Zeilenanzahl der Eingabe entspricht, geben Sie zurückinf
.Wenn nicht, geben Sie die Summe der Hamming-Entfernungen zwischen unserer aktuellen und allen Eingangsziffern zurück.
Wir haben jetzt einen Vektor
n
der Länge,10
der die Zahlen darstellt0-9
, die uns die Gesamtzahl der Hinzufügungen / Löschungen geben, die wir durchführen müssen, um alle Eingangsziffern in diese Zahl umzuwandeln, oderinf
wenn eine solche Transformation unmöglich ist, ohne die Anzahl der Zeilen zu ändern.Geben Sie abschließend die Positionen (0-basiert) aller Minima aus, die nicht vorhanden sind
inf
.quelle