Bestimmen Sie anhand eines rechteckigen Texts als Wortsuchrätsel und einer Suchzeichenfolge, ob der Text die Suchzeichenfolge enthält. Die Suchzeichenfolge wird möglicherweise angezeigt:
- horizontal, vertikal oder diagonal
- vorwärts oder rückwärts
Sie können eine Funktion oder ein Programm schreiben und zwei Zeichenfolgen als Eingabe über das Funktionsargument ARGV oder STDIN verwenden. Die Ausgabe sollte ein wahres oder falsches Ergebnis sein, das entweder von der Funktion zurückgegeben oder in STDOUT geschrieben werden kann.
Angenommen, der Text enthält beliebige druckbare ASCII-Zeichen (Hex-Codes 20 bis 7E) und Zeilenumbruchzeichen. Buchstaben unterscheiden zwischen Groß- und Kleinschreibung. Sie können davon ausgehen, dass der Eingabetext rechteckig ist, dh alle Zeilen haben die gleiche Länge. Sie können festlegen, ob die Eingabe mit einem abschließenden Zeilenumbruch endet oder nicht (sofern dies für Ihre Übermittlung von Bedeutung ist).
Dies ist Code Golf, die kürzeste Antwort (in Bytes) gewinnt.
Beispiele
Verwenden dieses Rasters aus dem Wikipedia-Artikel zur Wortsuche als erste Eingabe:
WVERTICALL
ROOAFFLSAB
ACRILIATOA
NDODKONWDC
DRKESOODDK
OEEPZEGLIW
MSIIHOAERA
ALRKRRIRER
KODIDEDRCD
HELWSLEUTH
Die folgenden Suchzeichenfolgen sollten zutreffende oder falsche Ergebnisse liefern:
Truthy: RANDOM, VERTICAL, HORIZONTAL, WORDSEARCH, WIKIPEDIA, TAIL
Falsy: WordSearch, CODEGOLF, UNICORN
Alternativ können Sie diesen Eingabetext verwenden
Lorem ipsum dolor sit amet consectetu
r adipisicing elit sed do eiusmod tem
por incididunt ut labore et dolore ma
gna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco lab
oris nisi ut aliquip ex ea commodo co
nsequat. Duis aute irure dolor in rep
rehenderit in voluptate velit esse ci
llum dolore eu fugiat nulla pariatur.
Wir erhalten die folgenden Suchergebnisse (verwenden jetzt Anführungszeichen, da einige Suchzeichenfolgen Leerzeichen enthalten):
Truthy: "Lorem", "mine", "uma bop", "tuetdod", "snol,a", "texas", "pii.d v", "vexta"
Falsy: "lorem", "wordsearch", "pii.d v", "mute"
quelle
Antworten:
CJam,
4637 BytesLiest das Raster von STDIN und das Wort als Befehlszeilenargument. Gibt positive Ganzzahlen für Übereinstimmungen und 0 für Nichtübereinstimmungen aus.
Gegen zwei zusätzliche Bytes können beide Strings (Word, Linefeed, Grid) von STDIN gelesen werden:
Sie können diese Version online mit dem CJam-Interpreter testen .
Beispiellauf
Hintergrund
Angenommen, die Eingabe war das folgende Raster:
Bei der Aufteilung bei Zeilenvorschüben erhalten wir das folgende Array:
Dies umfasst Ostwörter (Wörter von links nach rechts).
Jetzt verbinden wir die Elemente der
A
Verwendung einer Zeichenfolge vonlen(A)
Zeilenumbrüchen als Trennzeichen:Dann hacken wir die resultierende Zeichenfolge in Stücke von Länge
len(A) + len(A[0]) + 1
:Wenn wir das Array "zip" (Zeilen und Spalten transponieren), erhalten wir:
Das deckt Südostwörter ab.
Wenn wir A komprimieren und die Reihenfolge der Ergebniszeilen umkehren, erhalten wir:
Das deckt den Süden und - nach Wiederholung des Prozesses für Diagonalen - den Südwesten ab.
Durch erneutes Zippen und Umkehren erhalten wir:
Das deckt West und - nach Wiederholung des Prozesses für Diagonalen - Nordwestwörter ab.
Durch erneutes Zippen und Umkehren erhalten wir:
Das deckt Norden und - nach Wiederholung des Prozesses für Diagonalen - Nordostwörter ab.
Wie es funktioniert
Der Code funktioniert wie im vorherigen Abschnitt erläutert, mit zwei geringfügigen Unterschieden:
len(A) + len(A[0])
alslen(A + zip(A))
.Schließlich werden alle Zeilen aller generierten Arrays mithilfe von Zeilenvorschüben als Trennzeichen verbunden und in der resultierenden Zeichenfolge nach dem Wort gesucht.
quelle
Java: 183
211321Eine grundlegende rohe Kraft. Es gibt wohl nicht viel mehr zu sagen. Die Eingabe erfolgt zuerst mit der Nadel und dann mit dem Heuhaufen. Angenommen, das Raster ist mit Zeilenumbruch beendet .
Eine etwas besser lesbare Version mit dem gezeigten Testfall:
quelle
if(e<1)return 1>0;
könnte esreturn e<1;
nicht sein?i=a*9,
undfor(;i-->0;)
und dannz=i/9;
undi%a!=4&
und so weiter?JavaScript (E6) 111
116Brute-Force-Suche nach jedem Charakter in jede Richtung - so gut ich kann
Test In FireFox / Firebug - Konsole
Ausgabe
quelle
Python, 175
Nicht sehr inspiriert, aber hier geht:
Das erste Argument ist Heuhaufen, das zweite ist Nadel.
quelle
h,n=input()
und speichernprint
. Funktioniert dies auch mit nicht quadratischen Eingaben? (m = len (n)? Ich gebe zu, nicht vollständig zu verstehen, was Sie tun, so könnte ich völlig falsch liegen!)while i>0
towhile i:
(dai
niemals negativ werden kann),if m<1:i=-1
toi-=m<1
.if m<1:i=-1
alsif m<1:i-=1
wie keiner von denen arbeiten , weil er setzti
negativ.Bash + Coreutils,
214169 BytesVerwendet 3 Transformationsfunktionen
r
,t
undd
umgekehrt, transponiert und diagonale Verschiebung in allen notwendigen Kombinationen.Update - Die
r
Funktion erzeugt jetzt eine invertierte und eine nicht invertierte Ausgabe für zusätzliche GolffreundlichkeitEingabe über Befehlszeilenargumente - Suchzeichenfolge, gefolgt von einem (durch Zeilenumbrüche getrennten) rechteckigen Wortsuchblock.
Die Ausgabe ist ein idiomatisch korrekter Shell-Exit-Statuscode - 0 bedeutet TRUE und 1 bedeutet FALSE.
Ausgabe:
quelle
T()(tee >(r) $@)
, aber das ist noch besser. 2. Ich glaube, ich habe diese Funktionssyntax noch nie gesehen. 3. Wenn Sie nicht leere Zeichenfolgen für wahr und leere Zeichenfolgen für falsch halten, können Sie dies meines Erachtens weglassen-q
.r()(tee >(rev) $@)
,r<<<"$2"|r >(d) >(r|t) >(r|d)|r|grep "$1"
sollte das auch funktionieren.-q
bleibt.C 163
Keine Neuordnung des Gitters, ich versuche einfach jeden Anfangsbuchstaben in alle Richtungen und gehe weiter, bis ich vom Gitter abkomme oder eine Nichtübereinstimmung finde.
Ich nutze die Tatsache, dass ein C-String in einem Null-Byte endet. Da das Gitter keine Null-Bytes enthält, kommt es IMMER zu einer Nichtübereinstimmung. Wenn die Nichtübereinstimmung jedoch bei dem Null-Byte auftritt, wissen wir, dass wir das Ende der zu suchenden Zeichenfolge gefunden haben, und zeichnen Sie es als Übereinstimmung auf.
Ungolfed in einem Testprogramm
Ausgabe
Beachten Sie, dass die Funktion die Gesamtzahl der Vorkommen der im Raster gesuchten Zeichenfolge zurückgibt. Damit für
OD
sie gibt 6. Wenn keine Vorfälle gefunden es 0 zurückgibt , die der einzige falsy Wert in C zu änderny|=d*!n[j]
ein Zeichen speichern würde , aber diese Funktionalität verlieren.quelle
C # -
218197186 BytesC # -Funktion, die zwei Zeichenfolgen verwendet: das erste Wort, nach dem gesucht werden soll, und das spätere Gitter mit Zeilenvorschüben (
\n
) zwischen den Zeilen. Die Dinge werden jetzt verzweifelt ... so verzweifelt in der Tat, dass meine vorherige Bearbeitung nicht funktioniert hat!Golf Code:
Weniger Golf mit Testcode:
quelle
Haskell - 173
Anstatt direkt im Raster zu suchen, transformiere ich das Raster auf unterschiedliche Weise und ordne das Wort jeder Zeile des neuen Rasters zu.
Beispielsweise,
Suche das Wort in jeder Zeile von G1, G2, G4 und G5, dann sind wir fertig. Beachten Sie, dass G3 nicht verwendet wird, ich poste es hier nur zur Veranschaulichung.
Eine ähnliche Idee gilt für die Suche vorwärts und rückwärts: Suchen Sie einfach das ursprüngliche Wort und das umgekehrte Wort.
Also haben wir jetzt 8 Richtungen gesucht. Hier ist der Code, dessen Richtigkeit von einem anderen Skript überprüft wurde .
Die Funktion
f
ist das, was wir wollen, und ihr Argumentr
ist die rechteckige Zeichenfolge,w
das zu suchende Wort.quelle
Python 2 - 246
259275308298297294313322Vielen Dank an Will für die Hilfe beim Umgang mit dem Druck und beim Definieren des Joins.
Vielen Dank an die U-Bahn, die mich an die richtigen Golfplätze erinnert hat
Bei schlechten Übereinstimmungen behoben, da ',' als Trennzeichen verwendet wurde.
Anscheinend ist der beste Weg zum Golfen das Hinzufügen von Tonnen von horizontalem Scrollen.
Eingabe als
LeerzeichenBangNeue - Zeile begrenzt Linien in Zitate: "WVERTICALL \ nROOAFFLSAB \ nACRILIATOA \ nNDODKONWDC \ nDRKESOODDK \ nOEEPZEGLIW \ nMSIIHOAERA \ nALRKRRIRER \ nKODIDEDRCD \ nHELWSLEUTH", "RANDOM"quelle
L=len;J=''.join
etc undprint any(s in(v,d,w,r...))
? Ich war auf dem gleichen Weg, als ich sah, dass du gepostet hast :))
oder von diesem]
gefolgt werden, können Sie das Leerzeichen entfernen.APL (Dyalog Classic) , 44 Byte
Probieren Sie es online!
quelle
\n
solche (dh⎕TC[2]
als Trennzeichen haben).J ,
6053 BytesProbieren Sie es online!
Erfordert, dass die erste Eingabe keine Zeilenumbrüche enthält.
Erläuterung:
Probieren Sie es online!
Haken sind nützlich.
quelle
Gelee , 16 Bytes
Eine verwandte (möglicherweise doppelte) Herausforderung gelöst mit 15 dieser 16 Bytes als Kern des Codes ...
Ein dyadischer Link, der eine Liste von Zeichen links und eine Liste von Zeichen rechts akzeptiert, die 1 zurückgibt, wenn sie gefunden werden, und 0, wenn sie nicht gefunden werden.
Probieren Sie es online!
Wie?
quelle