Minesweeper ist ein Logikspiel, das auf den meisten Betriebssystemen zu finden ist. Das Ziel des Spiels ist es, zu bestimmen, wo sich die Minen auf einem Gitter befinden. Die angegebenen Zahlen geben die Anzahl der Minen um diesen Punkt an.
Erstellen Sie bei gegebener Rastergröße und einer Reihe von Minen das Minesweeper-Raster für diese Minen.
Eingabe: Zwei Ganzzahlen, die die Rastergröße angeben, und eine undefinierte Anzahl von Ganzzahlen, die die Minenpositionen angeben. Die Positionen werden als (Spaltenposition, Zeilenposition) angegeben und die Indizes beginnen in Zeile 1.
Ausgabe: Das Minesweeper-Gitter. Wenn sich um einen Block keine Minen befinden, drucken Sie ein x
. Drucken Sie für jede neue Zeile eine neue Zeile. Bitte geben Sie alle Minen als Stern aus *
. Lassen Sie beim Drucken kein Leerzeichen zwischen den Werten in der Zeile.
Testfälle:
Eingabe "5 5 1 3 3 5 2 4":
xxxxx
11xxx
*21xx
2*21x
12*1x
Eingabe "3 4 3 1 1 4 2 3 3 2":
x2*
13*
2*2
*21
Kürzester Code gewinnt.
quelle
5 5 1
wird nie bestanden?Antworten:
GolfScript
122 98 94 93 91 88 87 85 82 81 8071Online-Demos:
Testfall 1: Link
Testfall 2: Link
quelle
!!{a}{b}if
Verwendet ein Zeichen mehr als nötig.'*'
kann durch ersetzt werden,42
da Sie es in ein Array einfügen und dann das Array stringifizieren. Ebenso können Sie ASCII-Codes für die anderen Ausgabezeichen verwenden und ein Zeichen mit speichernor
, um den Sonderfall zu behandeln.!!{a}{b}if
war in der Tat wirklich dumm. :) Es ist lustig, welche Fehler Sie auf höchster Ebene machen können, während Sie sich auf Details konzentrieren. Ich kann nicht herausfinden, was Sie damit gemeint habenor
.,,
Sie eine Nummer haben. Sie möchten es in den entsprechenden String (oder ASCII-Code) konvertieren, es sei denn, es ist 0. In diesem Fall möchten Sie x. Die ASCII-Codes für Ziffern sind sequentiell und werden ab 48 ausgeführt.x
ASCII 120 entspricht 72 + 48. So können Sie72or 48+
ein Zeichen über den String-basierten Ansatz erstellen und speichern..48 120if+
, aber deinor
Trick ist zwei Zeichen kürzer.J,
1241161121018786858483827976757268 ZeichenIch habe gefunden, wonach ich gesucht habe - eine Möglichkeit, die Leerzeichen loszuwerden (
1":
) - und schließlich bin ich wettbewerbsfähig. Jetzt muss ich nur noch das Problem mit den leeren Minensätzen herausfinden.Übernimmt Eingaben von der Tastatur.
Bearbeiten
Neue Version nutzt einen Nebeneffekt von
1":
- Zahlen größer als 9 werden durch ersetzt*
.quelle
0
, nichtx
; 2. Scheitert, wenn der10 10
|length error
x
nur ein Leerzeichen. Ich habe nicht bemerkt, dass es sich geändert hat. Hmm, hätte nie gedacht, dass die Minen leer sind ... Daran muss ich arbeiten.Mathematica - 247 Zeichen
Beispiele:
Ausgabe:
ChessboardDistance
berechnet, wie weit jede Zelle von einer Mine entfernt ist, wobei 1 "neben einer Mine" entspricht. DieCount
von 1 ergibt die Nummer der Zelle. Dann werden Minen (*) in das Array eingefügt.quelle
Mathematica ,
140,139,137Schreiben Sie das in einer besser lesbaren Form:
quelle
ListCorrelate[BoxMatrix@1, %, 2, 0]
seine Magie funktioniert.ListCorrelate
Überlagert effektiv den Kernel (BoxMatrix@1
) an jeder Position im Gitter, multipliziert und gibt die Summe. (Pingen Sie mich im MMA-Chat an, wenn Sie eine Illustration wünschen.) - Ihr Kommentar erinnert mich daran, dass dies auchListConvolve
hier funktionieren sollte, da es eine Art Spiegelbild von istListCorrelate
und mein Kernel symmetrisch ist. Das wird mir einen Charakter ersparen. :-)2
in##2
. Ich werde es jetzt reparieren. ps: Wie sind Sie darauf aufmerksam geworden?VBA - 298 Zeichen
Überspringen von Fehlern mit
On Error Resume Next
gespeicherten Zeichen, aber dies ist bei weitem nicht so gut wie bei einigen anderen Antworten. : - /quelle
Python,
192182180 ZeichenIch könnte einiges sparen, wenn die Eingabe durch Kommas getrennt wäre. Dann wäre die erste Zeile
d=input()
und die Länge 171 Zeichen.Es wäre auch hilfreich, wenn die Minenkoordinaten auf 0 und nicht auf 1 basieren würden. Die Überwindung hat mich 8 Zeichen gekostet.
Ungolfed-Version:
quelle
Scala, 280 Zeichen
quelle
C ++ - 454 Zeichen
Dies ist schlimmer als meine VBA-Antwort, was wahrscheinlich bedeutet, dass ich nicht weiß, was ich in C ++ tue. Ich versuche jedoch, auf dem aufzubauen, was ich über C ++ weiß. Wenn jemand Verbesserungsvorschläge hat, wäre ich dankbar, wenn ich sie höre!
quelle
return 0
. Und Sie können#include<cstdio>
,#include<cstdlib>
. Sie können diese beiden Includes sogar löschen !. Was mehr ist,using name.....
ist zu lang, können Siestd::cin, std::cout, std::string
stattdessen verwenden.std::
Anrufe, die es mehr wert gemacht hätten (ich denke, ein weitererstring
hätte es getan) ). Danke auch für die Infos zu den#include
Leitungen. Ich bin kein C ++ - Experte. ;-)C # (691 Zeichen)
Nicht Golf Version:
quelle
K 175
.
quelle
ECMAScript 2019 (Modernes Javascript) - 116 Bytes
ungolfed version
Diese Lösung hält sich nicht strikt an das Eingabe- / Ausgabeformat, sondern demonstriert einen prägnanten Algorithmus.
Beispiel: https://gist.github.com/missinglink/ee02084cfb523665e8c9d34c24f01537
quelle
Brainfuck ,
1001896 BytesProbieren Sie es online! oder probieren Sie die alte Version mit Integer-Eingabe
Ein Tag Programmieren und drei Tage Bugfixing ^^
Dabei werden einige Teile meines Game Of Life-Codes verwendet. Anstatt lebende Zellen zu zählen, zählt dies Bomben. Da die Eingabe als Codepunkte nach den allgemeinen Regeln zulässig ist, werden diese anstelle von "lesbaren" Ganzzahlen verwendet.
quelle
Dies ist der Beginn einer Brainfuck-Lösung. Es sollte mit Einrückungen und Stapelkommentaren gut lesbar sein (
@
gibt den Stapelzeiger an):Es ist jedoch alles andere als vollständig und ich beginne zu zweifeln, ob mein Ansatz optimal ist. Bisher werden nur die ersten beiden eingegebenen Zeichen berücksichtigt und eine Tabelle mit Xs gedruckt. Zum Beispiel würde "43" Ihnen geben:
Ich würde gerne sehen, ob jemand anderes das Zeug dazu hat und in der Lage ist, dieses Problem in Brainfuck zu lösen.
quelle