Minesweeper ist ein Puzzlespiel, bei dem Minen um ein Brett mit unscheinbaren Kacheln versteckt sind, um den Standort aller Minen zu ermitteln. Wenn Sie auf eine Mine klicken, verlieren Sie das Spiel. Wenn Sie jedoch auf ein anderes Plättchen klicken, wird eine Zahl zwischen 0 und 8 angezeigt, die angibt, wie viele Minen die Mine direkt umgeben.
Bei einer gegebenen Zahl müssen Sie eine zufällige * mögliche Kombination leerer Kacheln und Minen anzeigen, die sie umgeben. Dies sollte in Form eines 3x3-Arrays erfolgen. Die mittlere Kachel sollte die Anzahl der Minen sein, die als Eingabe verwendet wurden.
* Muss eine Chance ungleich Null haben, damit alle Kombinationen auftreten.
Beispiele
_ = blank square
X = mine
0
___
_0_
___
1
_X_
_1_
___
1
___
_1_
X__
___
_1_
__X
4
_X_
X4X
_X_
4
X_X
_4_
X_X
4
___
X4X
X_X
8
XXX
X8X
XXX
Eingang
- Die Anzahl der Minen, die das Mittelplättchen umgeben (0-8)
Ausgabe
- Jede sinnvolle Ausgabeform, die das 3x3-Array von Kacheln anzeigt
Andere Regeln
- Jede Kombination muss nicht die gleiche Chance haben. Es muss nur eine Wahrscheinlichkeit ungleich Null für jede Kombination geben, um bei der Ausführung Ihres Programms aufzutreten.
- Für die Mine und das leere Plättchen können 2 beliebige Zeichen gewählt werden.
- Dies ist Codegolf, das Programm mit den wenigsten Bytes gewinnt.
code-golf
random
minesweeper
Aoemica
quelle
quelle
1
und0
?Antworten:
Gelee , 9 Bytes
Probieren Sie es online!
leer =
1
meins =
0
Beachten Sie, dass
1
und0
ganze Zahlen sind.Noch ein Hinweis: Dies ähnelt in etwa der 10-Byte-Antwort von Jonathan Allan, wird jedoch in keiner Weise wirklich beeinflusst, und der Mechanismus ist, wenn Sie genau hinschauen, tatsächlich anders als auf den ersten Blick.
quelle
APL (Dyalog Unicode) ,
2815 Bytes-13 bytes dank ngn!
Erläuterung:
{...}
Eine direkte Funktion (D-Fn)⍵
ist das richtige Argument.8?8
Deal 8 Zufallszahlen aus der Liste 1..8:⍵≥
Ist das Argument größer oder gleich jedem von ihnen ?:⍵,
Stellen Sie das Argument vor die Boolesche Liste:5⌽
Drehe die Liste um 5 Positionen nach links, so dass das Argument in der Mitte ist:3 3⍴
Formt die Liste in eine 3x3 Matrix um:Probieren Sie es online!
J , 15 Bytes
Auch viele Bytes dank ngn!
Probieren Sie es online!
quelle
(8↑1⍴⍨⍵)[8?8]
->⍵>8?8
(unter der Annahme⎕io←0
)3 3⍴1↓,⍵,2 4⍴
->3 3⍴5⌽⍵,
JavaScript (ES6), 67 Byte
Kürzere Version von @tsh vorgeschlagen
Leere Slots sind
0
Minen1
.Probieren Sie es online!
Ursprüngliche Trial-and-Error-Version, 78 Byte
Leere Slots sind
_
Minen7
.Probieren Sie es online!
Kommentiert
quelle
Jelly ,
1310 BytesIn der zurückgegebenen Liste der Listen ist die angezeigte Ganzzahl in der Mitte von Nullen und Einsen umgeben, die Minen bzw. Leerzeichen darstellen.
Probieren Sie es online! (Fußzeile druckt hübsch das Array)
Wie?
quelle
ŒH
funktioniert auch anstelle vons4
.Pyth,
16 bis14 Bytes2 Bytes dank isaacg gespart.
Verwendet Räume für sichere Stellen und Anführungszeichen für Minen.
Probieren Sie es hier aus
Erläuterung
quelle
.[d8
statt>8+*8d
Oracle 18 SQL, 230 Byte
Keine Golfsprache, aber ...
Der Eingabewert befindet sich in einer Tabelle
n
mit Spalten
:Probieren Sie es online aus - melden Sie sich bei https://livesql.oracle.com an und fügen Sie es in ein Arbeitsblatt ein.
Ausgabe:
So erhalten Sie alle möglichen Kombinationen (183 Bytes):
Ausgabe:
quelle
Japt, 13 Bytes
Versuch es
Erläuterung
quelle
QBasic 1.1 ,
206186 Bytes-20 dank DLosc (neu eingestellter Golf-Trick).
Leer =
0
meins =
1
Beachten Sie, dass
0
und1
Ganzzahlen sind, aber ich benutze trotzdem STDOUT, also ...Die Ausgabe sieht folgendermaßen aus:
Wobei AH 0/1 ist und x die Eingabe ist.
quelle
Holzkohle , 19 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Verwendet
0
für eine Mine,1
für einen leeren Raum. Erläuterung:Peek
gibt ein Array von Strings zurück, dieSum
einfach verkettet werden. Deshalb müssen wir zuerst eine Ganzzahl setzen. (Sum(Sum(PeekAll()))
funktioniert auch.)Sum
GibtNone
für ein leeres Array zurück (erste Schleife), der einzige sichere Vergleich ist alsoNot(Equals(...))
.Random
kehrt immer zurück0
, obwohl in der Dokumentation etwas anderes steht.Alternative Lösung, war 19 Bytes, jetzt 17 Bytes nach einem Charcoal Bugfix:
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Verwendet
0
für eine Mine,1
für einen leeren Raum. Erläuterung:Drucken Sie die ursprüngliche Eingabe.
Drucken Sie eine
9
nach links. Dies bewegt den Cursor zurück über die ursprüngliche Eingabe und erzwingt auch mindestens eine Iteration der while-Schleife (andernfalls würde eine Eingabe von8
nichts bewirken).Wiederholen, während der Unterschied zwischen der Summe aller Ziffern auf der Zeichenfläche und 8 ungleich Null ist:
Ersetzen Sie jedes der umgebenden Zeichen nach dem Zufallsprinzip mit
0
oder1
.quelle
R ,
67 63 6259 BytesProbieren Sie es online!
Verwendet
1
und0
. Erstellen Sie einenn* 1 +(8-n)* 0
Vektor, mischen Sie ihn, fügen Sie ihn an, erstellen Sien
die unten gezeigte größere Matrix (wobeia...i
für die Elemente des ursprünglichen Vektors steht) und extrahieren Sie die richtige Submatrix in Großbuchstaben:quelle
matrix((c(sample(rep(1:0,c(n<-scan(),8-n))),n))[c(1:4,9:5)],3)
Python 2 , 93 Bytes
Probieren Sie es online!
0
für leer;1
für eine Mine; undn
für sich.quelle
iter
ist klug!Attache , 51 Bytes
Probieren Sie es online!
Erläuterung
Ähnlich wie bei der J / APL-Antwort von Galen besteht die grundlegende Technik darin, ein Array von Einsen und Nullen mit der richtigen Anzahl von Minen zu generieren, die Eingabe einzufügen, indem sie an das Ende angehängt und das Array so gedreht wird, dass die Eingabe dann in der Mitte liegt Umformen in eine 3x3-Matrix.
Teil 1: Erzeugen des binären Arrays
Es gibt viele Möglichkeiten, dies zu tun, aber ich habe hauptsächlich zwei Arten erlebt: rohe Gewalt und Selektion.
Die primäre Brute-Force-Methode sieht folgendermaßen aus:
Dies erzeugt zufällige Arrays mit 8 Binärziffern (
Random[8&2]
), deren Summe nicht mit der Eingabe übereinstimmt{Sum@_/=_2}&_
. Dies ist etwas ausführlich, da die folgenden hervorgehobenen Teile des Codes "nur damit es funktioniert":Und ich habe die Idee verworfen.
Auswahl ist interessanter. Das Hauptkonzept besteht darin, das
BaseBelow[b, n]
Builtin zu verwenden, das eine Liste aller Basis-b
Ganzzahlen der Breiten
(als Ziffern-Arrays) von0
bis generiertb^n-1
. Beispielsweise werdenBaseBelow[3, 2]
alle ternären Ganzzahlen der Breite 2 generiert:Wir verwenden speziell
BaseBelow[2, 8]
für alle binären Ganzzahlen der Breite 8. Diese repräsentieren alle möglichen Minenfelder aller Längen. Dies ist der erste Schritt.Der zweite Schritt ist die Auswahl aller solcher Arrays mit nur
N
1s, wobeiN
die Eingabe erfolgt. Meine erste Idee war, diese englische Aussage direkt in Attache zu übersetzen:Dies war jedoch nicht nur 1 Byte länger als der oben beschriebene Ansatz, sondern auch sehr repetitiv - und es ist noch nicht einmal randomisiert !. Sicher, ich könnte wahrscheinlich 1 Byte einsparen, indem ich den
BaseBelow
Aufruf reorganisiere , aber es lohnt sich einfach nicht, den Ansatz zu verwenden.Also habe ich beschlossen, zwei Fliegen mit einer Klappe zu schlagen und einen
Shuffle
basierten Ansatz zu wählen. Das Folgende gibt alle gültigen Minenfelder der LängeN
in zufälliger Reihenfolge an:Dann muss nur noch der erste ausgewählt werden. Aber ich kann es besser machen - wäre es sicher besser, einfach
Sample
das gefilterte Array zu verwenden? Dieser Ansatz sieht ungefähr so aus:Ich musste den
BaseBelow&8!2
Golf zurücksetzen, weil die\
Rangfolge zu hoch ist. Ansonsten bin ich zufrieden und habe ein Byte davon abgeschnitten:(Ich habe hier einen anderen Weg gefunden, um eine dyadische Funktion kurz und bündig zu nennen:
x&f@y
ist ein Ausdruck mit hoher Priorität, der sich als auswertetf[x, y]
.)Doch trotz dieser, erinnerte ich mich , dass die ganze Zeit , einen Aliasnamen für
2&BaseBelow
existierte:BinBelow
. Also habe ich das benutzt:Dies erzeugt das gewünschte Minenfeld. Ich bin überzeugt, dass dies nahezu optimal ist.
Teil 2: Bilden des Arrays
Wie bereits erwähnt, ähnelt die von mir verwendete Umformtechnik der J / APL-Antwort, sodass ich nicht auf allzu viele Details eingehen werde. Angenommen,
MINEFIELD
das Ergebnis stammt aus dem letzten Abschnitt. Die Funktion wird dann:MINEFIELD'_
verkettet das Minenfeld mit der ursprünglichen Eingabe_
und gibt uns so etwas:Dann
Rotate[MINEFIELD'_,4]
dreht sich diese Liste4
mal nach links, in der Mitte platzieren:Der letzte Schritt besteht darin
[3,3]&
, die Liste in eine 3x3-Matrix umzuformen:quelle
Java 10,
165157141 BytesLeere Kacheln sind
_
(jedes Zeichen mit einem Unicode-Wert über 58 ist in Ordnung) und Minen sind0
.Probieren Sie es online aus.
Erläuterung:
quelle
PowerShell , 77 Byte
Probieren Sie es online!
quelle
PHP ,
135134123117122121 BytesDas Durchlaufen von str zum Drucken spart stattdessen 1 Byte
str_split und implode zum Einfügen der Zentrumsnummer sparen 11 Bytes
Die Zeichenfolge muss nicht mehr $ s zugewiesen werden. Das spart 6 Byte.Ja, das tun Sie. Ansonsten wird die Saite nach jedem Echo gemischt ...
Durch das Entfernen von Leerzeichen nach dem Echo wird 1 Byte gespart
Durch Ersetzen von "\ n" durch einen tatsächlichen Zeilenumbruch wird 1 Byte gespart
Probieren Sie es online!
quelle
Alice , 24 Bytes
Probieren Sie es online!
Leere Slots sind
9
und Minen sind0
.Ich habe auch ein 27-Byte-Programm mit
1
für Minen und0
für leere Slots gemacht:Probieren Sie es online!
quelle
PowerShell ,
91.86Byte-5 Bytes dank mazzy
Probieren Sie es online!
Mischt eine generierte Zeichenfolge von
________
bisXXXXXXXX
(ersetzt von links). Es wird dann mehrmals durchgeschnitten und$n
in die Mitte eingefügt , um die Ausgabezeichenfolge zu erstellen. Dieser letzte Teil kann wahrscheinlich stark optimiert werden, da jeder Index mindestens 5 Bytes kostet.quelle
Ruby , 59 Bytes
Gibt eine Liste von Zeichenfolgen zurück (eine für jede Zeile).
Probieren Sie es online!
quelle
C (gcc) , 81 Bytes
Probieren Sie es online!
quelle
Perl 5
-pa
,105101 BytesProbieren Sie es online!
quelle
05AB1E , 12 Bytes
Verwendet
0
für Minen, Leerzeichen für leere Felder. Gibt eine Liste von Zeilen aus, die in den unten stehenden TIOs hübsch gedruckt ist, indem sie mit newline delimiter (»
) verknüpft wird .Probieren Sie es online aus oder überprüfen Sie einige weitere Testfälle auf einmal .
Erläuterung:
12 Bytes Alternative:
Verwendet
1
für Minen,0
für leere Quadrate. Gibt eine Ziffernmatrix aus, die in den unten stehenden TIOs hübsch gedruckt ist, indem jede Zeile und anschließend diese Zeilen mit einem Zeilenumbruchzeichen (J»
) verbunden werden.Probieren Sie es online aus oder überprüfen Sie einige weitere Testfälle auf einmal .
Erläuterung:
quelle