Ihre Aufgabe ist es also, einen 3x3-Block zu erstellen, in dem -
die mittleren Leerzeichen und *
die mittleren ausgefüllten Leerzeichen enthalten sind, zum Beispiel:
-**
-*-
*-*
und ordne den Block so an, dass die *
ein X bilden, wie folgt:
*-*
-*-
*-*
Eingabe: 3x3 Quadrate wie oben, es können 3 Zeilen sein, ein Array, oder wie Sie wollen.
Ausgabe: Die kürzeste Anzahl von Zügen, die in ein X umgeordnet werden müssen. Bei jedem Zug werden 2 Zeichen umgedreht, die sich berühren und horizontal, vertikal oder diagonal voneinander sind. Wenn dies nicht möglich ist, geben Sie eine unmögliche Ausgabe zurück, z. B. 999
oder -4242
. 5
ist die kleinste solche Zahl.
Testfälle:
1) Ausgabe: 1
-**
-*-
*-*
2) Ausgabe: -1
-*-
-*-
*-*
3) Ausgabe: 3
---
-**
***
4) Ausgabe: 0
*-*
-*-
*-*
Sie können die leeren und nicht leeren Zeichen ersetzen, aber achten Sie darauf, welche in Ihrem Beitrag enthalten ist
Code Golf
Denken Sie daran, dies ist Code Golf, der kürzeste Code gewinnt!
quelle
*
und umgekehrt oder das Austauschen von Zeichen ?*
? Können Sie weitere Testfälle hinzufügen?*
oder weniger als 5 zurückzugeben, wird dies unmöglich.-1
? Zum Beispiel5
(sonst unmöglich) oder einen Fehler werfen?Antworten:
Python 3 ,
10478 BytesProbieren Sie es online!
Bearbeiten: Wendet sowohl @ Jonathan Allans als auch @ xnors Vorschläge an, um die Byteanzahl drastisch zu reduzieren.
Die Eingabe ist eine
Stringlisteder Länge 9 mit Nullen und Einsen, wobei Einsen das*
s sind.Hier sind einige Beobachtungen:
Daher testen wir zuerst, ob der String fünf Einsen enthält, und zählen dann die folgenden Dinge:
0124
,0346
,2458
,4678
alle diejenigen zu sein)n[4]
, eins zu sein, und testen Sie dann jedes Entfernungs-Extraktions-Wesen'111'
.max
stattsum
.quelle
count
s durchsum
s und'111'
durch ersetzen[1]*3
). TIO (Ich habe versucht, mit einern[i::j]>=[1]*3
Schleife clever umzugehen, habe aber keine kürzere gefunden).max(n,n[6:],n[::3],n[2::3])>='1'*3
.Gelee , 26 Bytes
Probieren Sie es online!
Nehmen Sie eine flache Liste als Eingabe.
Schade, dass Jelly keine "multidimensionalen Wahrheitsindizes" hat ...
T€ṭ€"JẎ
funktioniert auch, benötigt aber 1 Byte mehr.Algorithmus: Es gibt 5 aktuelle Blockpositionen und 5 Ziele (Destinationen), der Algorithmus versucht jedes der 5! Matching und Ausgabe der minimalen Summe von [Quelle, Ziel] Chebyshev Entfernung.
quelle
Haskell ,
176132126104 BytesProbieren Sie es online!
Nimmt eine Liste von Ganzzahlen mit 1 als nicht leeres Zeichen. Summiert die Anzahl der Quadrate mit geradem Index ungleich Null und addiert dann 1, wenn eines der Doppelbewegungsmuster gefunden wird (mittleres Quadrat und Randspalte / -zeile vollständig ausgefüllt). Der letzte Teil ist meiner Meinung nach etwas verschwenderisch und könnte gegenüber dieser Brute-Force-Methode möglicherweise erheblich verbessert werden. Gibt 5 (eine unmögliche Ausgabe) für eine unmögliche Eingabe zurück.
quelle
length
Test kann auf verkürzt werdensum[1|1<-a]
. Funktions
auf:(1-e,n+sum[1|b>e])
welche Sie inline können, um ein weiteres Byte zu speichern. Sie können die Verwendungotherwise
Wache inm
zu speichern Paar()
. Schließlich kann&&
auf oberster Ebene in einer Wache durch ersetzt werden,
. ...sum
in einer Liste angegebenes Verständnis verwenden, um einen Booleschen Wert in int umzuwandeln. Probieren Sie es online!m
. Probieren Sie es online!a
muss,0
können Siesum a
stattdessen nicht verwendensum[1|1<-a]
? Probieren Sie es online!1
s geben kann, es sei denn, die Mitte ist0
, können Sie3<-
stattdessen tunelem 3$
. Auch können Siesum.map(a!!)
anstelle von verwendensum<$>map(a!!)
.Python 2 ,
194192 BytesProbieren Sie es online!
quelle
[0,1,0,1,0,1,1,1,0]
(erwartet: 4, tatsächlich: 13).JavaScript (ES6), 123 Byte
Übernimmt die Eingabe als 9-Bit-Ganzzahl. Löst das Rätsel durch naive Anwendung der Regeln, was sich als nicht der kürzeste Ansatz erwiesen hat.
Probieren Sie es online!
Kommentiert
NB : Dieser Code führt einige illegale Bewegungen über den oberen Rand des Spielfelds hinaus aus, wenn m mit 64 multipliziert wird. Sie werden jedoch einfach ignoriert, da sie möglicherweise nicht zu einer kürzeren Lösung führen können als die beste legale Lösung.
Unten sehen Sie die 9 Base-Swap-Bitmasken und das Zielmuster. Die obere linke Ecke ist das höchstwertige Bit.
quelle
Gelee , 26 Bytes
Probieren Sie es online!
Eine monadische Verbindung.
Wie?
Inspiriert von Bubblers Python-Antwort ; Golf nach Jelly ...
quelle
JavaScript, 85 Bytes
Dies ist eine Regex-Portierung von Bubblers Antwort .
Eingabe als String von 0/1.
Code-Snippet anzeigen
quelle
Stax ,
2322 BytesFühren Sie es aus und debuggen Sie es
Dieses Programm benötigt ein Array von
[0, 1]
als Eingabe und gibt eine ganze Zahl von Zügen oder eine leere Zeichenfolge zurück, wenn keine Lösung möglich ist.Betrachten Sie diese Indizes für das Raster
1
die Eingabe s enthält, gibt es keine Lösung, sodass keine Ausgabe erfolgt.1
an diesen Positionen ergibt das Endergebnis.1
in einer falschen Position ist der Abstand entweder 1 oder 2. Es ist 2, wenn es von anderen1
s umgeben ist. Zum Beispiel, wenn es gibt1
s bei den Indizes [0, 1, 2, 4] befinden, ist der Abstand für das falsche1
2.Berücksichtigen Sie in diesem Zusammenhang diesen Pseudocode, um den Abstand zu ermitteln, der durch den Index 1 zum Ergebnis beigetragen hat.
b
von 0 bis 15 um.0 <= b <= 7
der Abstand 0 ist. Wenn8 <= b <= 14
der Abstand 1 ist. Wennb == 15
der Abstand 2 ist. Dies kann unter Verwendung der Ganzzahldivision durch berechnet werdenb * 2 / 15
.Die Gesamtentfernung kann also berechnet werden, indem dieser Vorgang viermal wiederholt und das Gitter dazwischen gedreht wird.
Führen Sie dieses aus
quelle
Excel,
8681 BytesAlt: Als die "unmögliche" Ausgabe war
-1
Verwendet
1
für gefüllt und0
für leer, Eingabe im BereichA1:C3
.Weiter Golf spielen möglich, wenn wir andere Werte alsGibt a zurück-1
"unmöglich" zurückgeben können.#DIV/0!
Fehler bei unmöglichen Gittern zurückArbeitet nach der gleichen Logik wie die Python-Antwort von Bubbler .
quelle