Schreiben Sie ein Programm oder eine Funktion, die ein Wort aus einer Wortsuche anhand seiner Start- und Endkoordinaten extrahiert.
Die Eingabe
Ihr Programm oder Funktion sollte drei Parameter übernehmen: die Start - Koordinate , das Ende zu koordinieren , und ein Wortsuch , aus denen das Wort zu extrahieren.
Die Startkoordinate kann in einem beliebigen Format verwendet werden.
Es wird immer eine ganze Zahl sein
Unten links im Raster ist (0, 0)
Sie erhalten keine Koordinaten, die außerhalb der Grenzen des Gitters liegen
Sie erhalten keine Koordinaten, die nicht vertikal, horizontal oder perfekt diagonal zueinander sind, wie z. B. (7, 0) und (0, 6).
Die Endkoordinate wird im gleichen Format wie die Startkoordinate verwendet
Die Wortsuche ist eine Zeichenfolge oder das nächste Äquivalent Ihrer Sprache
Es handelt sich um ein Zeichenraster, das durch ein einzelnes Leerzeichen getrennt ist , wobei jede Zeile in einer neuen Zeile steht . Es kann jede Höhe oder Breite haben - was unterschiedlich sein kann - aber es wird immer ein Rechteck sein . Zum Beispiel:
A G O A T C A T E A T M E N O W W O R D S E A R A K L L K J H G N P L F G H F D A S P L K J H G O P I L F G H J T F A S E J K L
J H P B L D J L T F J L N F N P W H W P R D T F J R Q J L L L L J H H W N P L F H H F D S J T P L L J H H K P P J L F H H J N L F J T F J L L O
Die Ausgabe
Sie sollten eine Zeichenfolge oder das nächstgelegene Äquivalent Ihrer Sprache ausgeben . Da keine Wortsuche im wirklichen Leben jemals nach einem einzigen Buchstaben fragt, können Sie nichts ausgeben, wenn die Koordinaten gleich sind.
Beispiele und Testfälle
Erstes Gitter oben: (0, 4) und (4, 0) -> "APPLE" (4, 0) und (0, 4) -> "ELPPA" (1, 7) und (4, 7) -> "ZIEGE" (0, 5) und (7, 5) -> "WORDSEAR" (0, 6) und (5, 6) -> "EATMEN" (0, 6) und (0, 7) -> "EA" (7, 0) und (0, 7) -> "LHJGLRAA" ---------- Zweites Gitter oben: (1, 0) und (8, 7) -> "FJLHJJWT" (1, 4) und (4, 4) -> "LLLL" (1, 4) und (1, 4) -> "L" oder ""
quelle
(1,4),(4,4)
Teilen Sie sie einfach in zwei Gitter auf und gehen Sie mit so etwas wie -> "LLLL"Antworten:
JavaScript (ES6) 108
Weniger Golf gespielt
quelle
Python 3.5 mit Numpy, 251 Bytes:
Nimmt Eingaben im folgenden Format vor:
Ausgaben im Format einer Zeichenfolge (z. B.
APPLE
), solange die Funktion im obigen Format aufgerufen wird. Andernfalls wird eine Liste mit jedem Buchstaben (z['A','P','P','L','E']
. B. ) zurückgegeben.Wird im Laufe der Zeit mehr Golf spielen, wo und wann ich kann.
Probieren Sie es online aus! (Ideone) (Hier wird die Eingabe so vorgenommen, dass das Raster von doppelten Anführungszeichen (
""
) umgeben ist, und in einer Zeile mit\n
s zwischen jeder Zeile des Rasters eingegeben . Anschließend werden die Punkte in einer einfachen Tupelform mit dem Start bereitgestellt in der zweiten Zeile und das Ende in der dritten.)Ungolfed Code zusammen mit Erklärung
Für die Zwecke dieser Erklärung wird angenommen, dass dieses Programm mit den Eingaben
((0,4),(4,0))
und dem ersten Raster der Frage ausgeführt wurde. Hier werde ich die 2 Hauptteile des Codes durchgehen:l=numpy.array([[*i.split()]for i in z.split('\n')])
Hier
l
ist ein Numpy-Array, das jede Zeile der Eingabe in einer separaten "Liste" enthält. Zum Beispiel das erste Raster in der Frage:gibt dieses numpy-Array zurück:
w=[l[:,i][::-1][p]for i,p in zip([[A]*len(m),n][A!=B],[[C]*len(n),m][C!=D])]
Dies ist die Hauptliste der Funktion, in der alle Buchstaben gefunden werden, die jedem Punkt im Raster entsprechen. Entspricht hier
i
entweder jeder Ganzzahl inn
, bei der es sich um ein Bereichsobjekt handelt, das jede Zahl im Bereichstart1=>end1+1
in Schritten von+1
if enthältstart1<end1
oder-1
wenn das Gegenteil der Fall ist. Entsprichti
dies jedoch nur, solangestart1
es nicht gleich istend1
. Andernfallsstart1
wird so oft wie die Länge von zurückgegebenm
, wobeim
ein Bereichsobjekt jede Ganzzahl im Bereichstart2=>end2+1
mit den gleichen Bedingungen wie enthältn
undp
jeder Ganzzahl in entsprichtm
. Lassen Sie uns nun Schritt für Schritt durch diesen Schritt gehen:l[:,i]
Grundsätzlich wird für jede Spaltei
im Array ein Zeilenvektor zurückgegebenl
. würde zum Beispiell[:,0]
zurückkehren:l[:,1]
würde zurückkehren:und so weiter und so fort. Weitere Informationen zu verschiedenen Indizierungsmethoden in Numpy, einschließlich dieser Methode, finden Sie hier .
Danach kehrt die Funktion jedes zurückgegebene Array um, indem verwendet wird
l[:,i][::-1]
, da jedes Array von links nach rechts indiziert ist. Da jedoch der Punkt0,0
auf dem Gitter in der unteren linken Ecke des Gitters liegt, würde das Umkehren jedes Arrays die Indexwerte zurückgeben als würden sie von rechts nach links gesucht. Zum Beispiell[:,0][::-1]
würde zurückkehren:Danach indiziert die Funktion durch dieses umgekehrte Array nach dem Indexwert
p
, der Ihrem Buchstaben entspricht, und fügt diesen der zu erstellenden Liste hinzu. Zum Beispiel würde,l[:,0][::-1][4]
was Punkt entspricht(0,4)
, zurückkehrenA
.Dieser Vorgang wiederholt sich und fügt der Liste neue Werte hinzu, bis die Bereichsobjekte erschöpft sind.
Nach all dem wird die Ausgabe, die Liste
w
ist, schließlich zurückgegeben. In diesem Fall wäre das,APPLE
wenn mitprint(''.join(r((0,4),(4,0),'''The Grid''')))
oder['A','P','P','L','E']
ohne aufgerufen wird''.join()
. In jedem Fall wird die richtige Antwort zurückgegeben, und wir sind fertig!quelle