Hintergrund
Boggle ist ein Brettspiel, bei dem die Spieler auf einem 4-mal-4-Brett aus zufälligen Alphabeten nach englischen Wörtern suchen müssen. Wörter können konstruiert werden, indem nacheinander benachbarte Zellen auf der Tafel ausgewählt werden. ("benachbart" bedeutet horizontal, vertikal oder diagonal benachbart.) Dieselbe Zelle kann auch nur einmal in einem Wort verwendet werden.
Das Folgende ist eine Beispieltafel:
I L A W
B N G E
I U A O
A S R L
Auf diesem Board BINGO
, ORANGE
und WEARS
gelten Worte, aber SURGE
und RUSSIA
nicht sind:
SURGE
: Es gibt kein benachbartes Paar auf dem BrettRG
.RUSSIA
:S
kann nicht zweimal verwendet werden.
Modified Boggle ist eine modifizierte Version von Boggle mit den folgenden Regeln:
- Die
n
Boardgröße ist -by-n
, wobein
jede positive ganze Zahl sein kann. - Jede Zelle kann ein beliebiges Byte zwischen 0 und 255 enthalten.
- Eine Zelle kann mehrmals verwendet werden, jedoch nicht zweimal hintereinander .
Unter Verwendung des Beispiels Platine oben, zusätzlich zu BINGO
, ORANGE
und WEARS
, LANGUAGE
wird eine gültige Zeichenfolge (da G
zweimal verwendet wird, aber nicht zweimal hintereinander) , aber RUSSIA
ist immer noch nicht (durch SS
pair).
Hier ist ein weiteres Beispiel mit einem Codefragment. Die Zeichenfolge from itertools import*\n
befindet sich auf der folgenden Tafel, aber nicht from itertoosl import*
oder from itertools import *
:
f i ' ' s
r t m l
e o o p
\n * t r
Beachten Sie, dass Sie zwei benötigen o
, um der oo
Sequenz zu entsprechen.
Herausforderung
Schreiben Sie eine Funktion oder ein Programm, das anhand einer modifizierten Boggle-Platine B
(beliebiger Größe) und einer Zeichenfolge s
feststellt, ob s
es sich auf befindet B
.
Beschränkungen
Ihr Code selbst sollte auch auf eine modifizierte Boggle-Platine passen b
. Das heißt, Sie müssen das Board b
in Ihrem Beitrag zusammen mit Ihrem Code anzeigen, damit Ihre Funktion / Ihr Programm true ausgibt, wenn es angegeben ist, b
und Ihren Code als Eingabe.
Wertung
Das Ergebnis Ihrer Einreichung ist die Seitenlänge des kleinsten Brettes, auf b
das Sie Ihren Code einfügen können. Krawatten werden durch die üblichen Code-Golf- Regeln gebrochen , dh die Länge Ihres Codes in Bytes. Die Einsendung mit der niedrigsten Punktzahl (für beide Kriterien) gewinnt.
Hat zum Beispiel from itertools import*\n
die Punktzahl 4 (unter Verwendung der obigen Karte) und eine Codelänge von 23 Bytes.
Ein- und Ausgang
Für die Eingabe können Sie eine beliebige Methode für B
und verwenden s
. Dies beinhaltet eine Liste von Zeichen und eine Liste von Zeichencodes, 2D oder abgeflacht oder was auch immer sinnvoll ist. Optional können Sie die Kartengröße als Teil der Eingabe verwenden.
Für die Ausgabe können Sie eine der folgenden Optionen auswählen:
- Wahrheits - und Falschheitswerte gemäß der Konvention Ihrer Sprache oder
- Ein vordefinierter Wert für true bzw. false.
Bitte geben Sie Ihre Eingabe- / Ausgabemethode in Ihrem Beitrag an.
quelle
+=+=
etwas. Das Problem ist die==
Ausgabefunktion ...Antworten:
Python 2, Punktzahl 3, 20972 Bytes
Vollständiger Code ist die Ausgabe von: Online ausprobieren!
Passt auf das Boggle Board:
Dekodiert und führt dieses Programm aus:
Was Eingaben wie:
['ILAW','BNGE','IUAO','ASRL'], 'LANGUAGE'
quelle
CJam , Score 2, 9351 Bytes
Probieren Sie es online! Erwartet Eingaben wie:
und passt auf das Boggle Board:
Konstruiert den String
l~:Q,:K;{\:Y;\:X;:C,!_{;QY=X=C0==_{;[X(XX)]K,&[Y(YY)]K,&m*[XY]a-C1>:D;{~DF}%:|}&}|}:F;l:R;K,2m*{~RF}%:|~
und wertet ihn als CJam-Code aus.quelle
Sauber , 12 Punkte (175 Bytes)
(Dies wird mit ziemlicher Sicherheit von einem Esolang und wahrscheinlich auch von normalen Sprachen übertroffen.)
Dies definiert eine Funktion,
$ :: Int [Char] {#String} -> Bool
die prüft, ob das zweite Argument (das Wort) im dritten Argument (die Tafel) gefunden werden kann, wenn das erste Argument als width angegeben wird.Markiert in der Tafel, auf die dies passt (siehe unten),
*
unbenutzte Stellen. Es gibt 16 davon auf einer Tafel der Größe 12 × 12 = 144, was bedeutet, dass 128 effektiv genutzt werden (ein Wirkungsgrad von 175/128 ≈ 1,37 ). Es ist zwar möglich, dasselbe Programm auf 11 × 11 zu erhalten, dies geschieht jedoch alles von Hand und ist sehr mühsam. Mein Chef würde sich wahrscheinlich nicht freuen, wenn ich versuchen würde, es auf 11 × 11 zu bringen.Probieren Sie es online aus (mit dem Programm selbst als Eingabe)!
quelle
Java, 23 Punkte,
538507 BytesNSFW
Probieren Sie es online!
Kompiliert mit JDK 9, sollte aber mit 8 funktionieren.
Ich wusste nicht, was ich mit den Importen und dem statischen Feld anfangen sollte (was eigentlich notwendig ist), also entschied ich mich, nur die ganze Klasse zu nehmen und die Lambdas in einen Initialisierer zu stecken. Das Lambda
g
kann dann auf ein 2D-Array und eine Zeichenfolge angewendet werden und gibt zurück,1
ob sich die Zeichenfolge auf der Platine befindet und0
wenn nicht (alsByte
3 Zeichen kürzer alsInteger
).Kredit zu diesem Kerl für einen (in meinem Fall) kürzer als hartzucodieren Weg zu Adresse benachbarter Zellen.
Irgendwann im Laufe der Entwicklung dieser Monstrosität habe ich mich dafür eingesetzt, dass sie mit Lambdas funktioniert. Bis dies geschah, wurde sie immer schlimmer. Es kommt nicht einmal den anderen Antworten nahe und ist wahrscheinlich nicht einmal der optimalen Lösung in Java nahe, aber hey, es passt ziemlich gut auf ein 23x23-Board (was nicht optimal ist, aber vielleicht näher als das Programm selbst) :
Natürlich gab es zu diesem Zeitpunkt keinen Grund, dies von Hand zu versuchen. Als Bonus habe ich folgende (naive) Funktion verwendet, um den Code auf das Board zu komprimieren:
Es ordnet seine Eingabe einer Spirale zu, bei der die Snaking-Implementierung nicht funktioniert hat , und lässt nach Möglichkeit Zeichen weg. Es ist ziemlich einfach, könnte also wahrscheinlich verbessert werden, und ich habe vergessen, die Prüfung auf Zeichen in der Rückwärtsrichtung hinzuzufügen (Update: Ich habe es hinzugefügt und es hat zu falschen Ergebnissen geführt) , also könnte ich wahrscheinlich ein oder zwei Zeichen abschneiden, aber ich bezweifle, dass es funktioniert auf einem 22x22.
Bearbeiten: 6 Leerzeichen an Stellen entfernt, an denen sie nicht sein mussten. 13 Bytes wurden eingespart, indem eine Überprüfung der Array-Indizes durch einen Try-Catch ersetzt wurde. 12 Bytes durch Verschieben der Kartengröße in eine
int
.quelle
Jelly , 2316 Bytes, Punktzahl 3
Probieren Sie es online!
Tafel:
Hinweis: Dies ist eine (etwas) triviale Lösung. Wir danken Lynn für die Idee .
Gibt eine nicht-leere Liste , wenn
s
finden Sie inB
, und eine leere Liste , wenn nicht. Die hinzugefügte Fußzeile hilft dabei, dies zu verdeutlichen.quelle
s
es nicht gefunden werden konnte, oder eine positive Ganzzahl, wenn es gefunden werden konnte. Die Regeln geben jedoch "Einen vordefinierten Wert für true bzw. false" an. Oder sind leer / nicht leer für falsche / wahre Konventionen in Jelly?