Erstellen Sie ein Programm, um ein Kreuzworträtsel richtig zu nummerieren.
Eingang
Die Eingabe ist der Name einer Datei, die das Kreuzworträtsel darstellt. Der Eingabedateiname kann als Argument, für die Standardeingabe oder auf andere herkömmliche Weise als durch Hardcodierung übergeben werden.
Rasterdateiformat: Eine Textdatei. Die erste Zeile besteht aus zwei durch Leerzeichen getrennten Ganzzahlkonstanten M
und N
. Nach dieser Zeile folgen M
Zeilen, die jeweils aus N
Zeichen (plus einer neuen Zeile) bestehen [#A-Z ]
. Diese Zeichen werden so interpretiert, dass sie '#'
ein blockiertes Quadrat, ' '
ein offenes Quadrat im Puzzle ohne bekannten Inhalt und einen Buchstaben ein offenes Quadrat anzeigen, das diesen Buchstaben enthält.
Ausgabe
Die Ausgabe ist eine Nummerierungsdatei und kann an die Standardausgabe, an eine Datei, deren Name vom Eingabedateinamen abgeleitet ist, an eine benutzerdefinierte Datei oder an ein anderes herkömmliches Ziel gesendet werden.
Nummerierungsdateiformat Eine Textdatei. Zeilen, die mit '#' beginnen, werden ignoriert und können für Kommentare verwendet werden. Alle anderen Zeilen enthalten eine Lasche getrennt Triplett i
, m
, n
wobei i
eine Reihe auf dem Raster gedruckt werden soll , darstellt, und m
und n
die Zeile und Spalte des Quadrates darstellen , wo sie gedruckt werden sollen. Die Anzahl der Zeilen und Spalten beginnt bei 1.
Nummerierungsschema
Ein korrekt nummeriertes Raster hat die folgenden Eigenschaften:
- Die Nummerierung beginnt bei 1.
- Keine Spalte oder Spanne offener Quadrate ist nicht nummeriert. (Sie können davon ausgehen, dass das Problem keine Einzelzeichenantwort enthält.)
- Zahlen werden in Zählreihenfolge gefunden, indem von der oberen bis zur unteren Reihe gescannt wird, wobei jede Reihe von links nach rechts genommen wird. (Jede horizontale Spanne ist also am äußersten linken Quadrat nummeriert, und jede Spalte ist am obersten Quadrat nummeriert.)
Testeingabe und erwartete Ausgabe
Eingang:
5 5
# ##
#
#
#
## #
Ausgabe (Vernachlässigung von Kommentarzeilen):
1 1 2
2 1 3
3 2 2
4 2 4
5 2 5
6 3 1
7 3 4
8 4 1
9 4 3
10 5 3
Beiseite
Dies ist die erste von hoffentlich mehreren Herausforderungen im Zusammenhang mit Kreuzworträtseln. Ich plane, durchgehend eine konsistente Reihe von Dateiformaten zu verwenden und dabei eine seriöse Suite von Kreuzworträtsel-bezogenen Dienstprogrammen aufzubauen. Zum Beispiel erfordert ein nachfolgendes Puzzle das Drucken einer ASCII-Version des Kreuzworträtsels basierend auf der Eingabe und Ausgabe dieses Puzzles.
'\n'
auf allen Plattformen wie in c dargestellt. Es wird davon ausgegangen, dass die Eingabedatei auf demselben System erstellt wurde, auf dem sie verarbeitet wird. Daher sollte dieses Problem transparent sein. Ein allgemeiner Hinweis zum Code-Golf: Wenn Sie in einer fremden Sprache oder auf einer fremden Plattform arbeiten, notieren Sie sich einfach alles, was den Leser überraschen könnte. Die Leute werden dies bei der Beurteilung Ihrer Einreichung berücksichtigen.Antworten:
Ruby -
210139 ZeichenGetestet mit Rubin 1.9.
quelle
./temp.ruby:4: wrong argument type Symbol (expected Proc) (TypeError)
.ruby1.9 test.rb
.PHP - 175 Zeichen
quelle
Python,
194177176172 Zeichenquelle
h.join(f)
denke ichnext(f)
anstattf.readline()
wenn du> = 2.6 sonstf.next()
echo test_input_file_name | python golf.py
, ist das falsch?C ++
270264260256253 charBenutzen:
Schön formatiert:
Ich habe versucht, das gesamte Kreuzworträtsel auf einmal zu lesen und eine einzige Schleife zu verwenden.
Aber die Kosten für die Kompensation des '\ n-Charakters überwogen alle Gewinne:
Komprimiert: 260 Zeichen
quelle
C,
184189 ZeichenHier gibt es nicht viel zu sagen; Die Logik ist ziemlich einfach. Das Programm übernimmt zur Laufzeit den Dateinamen bei der Standardeingabe. (Es ist so ärgerlich, dass das Programm mit einem Dateinamen arbeiten muss und nicht einfach den Dateiinhalt direkt von der Standardeingabe lesen kann. Aber derjenige, der den Piper bezahlt, nennt die Melodie!)
Das seltsame
fscanf()
Muster ist mein Versuch, die gesamte erste Zeile zu scannen, einschließlich der neuen Zeile, jedoch ohne führende Leerzeichen in der folgenden Zeile. Es gibt einen Grund, warum niemand verwendetscanf()
.quelle
5 5
, nehmen Sie die erste 5 als Breite, wenn Sie die zweite hätten nehmen sollen (was in diesem Beispiel natürlich keine Rolle spielt).Referenzimplementierung:
c99 ungolfed und eher mehr als 2000 Zeichen, einschließlich verschiedener Debugging-Kittel, die noch vorhanden sind.
quelle
PerlTeX : 1143 Zeichen (aber ich habe es noch nicht gespielt)
Es benötigt eine Datei, die
grid.txt
mit der Spezifikation aufgerufen und dann mit kompiliert wirdquelle
Scala 252:
Zusammenstellung und Aufruf:
quelle
SHELL-SKRIPT
Beispiel-E / A:
./numberCrossWord.sh crosswordGrid.txt
quelle
/bin/sh
Beschwerden über Zeile 11. Können Sie sagen, welche Shell Sie verwenden (einschließlich Versionsnummer)?ANSI C 694 Zeichen
Dies ist eine C-Version, die nach horizontalen oder vertikalen Läufen von zwei Leerzeichen sucht, die entweder gegen die Kante oder gegen ein # -Zeichen stoßen.
Die Eingabedatei stammt von stdin und muss sein:
Alle Tipps zum Verdichten werden dankbar entgegengenommen.
Ausgabe für das bereitgestellte Beispiel
quelle