Buchstabenwürfel sind in Wortspielen weit verbreitet. Es kann zum Beispiel Spaß machen, lustige Wörter mit Würfeln zu buchstabieren. Wenn Sie eine Handvoll Würfel nehmen, können Sie möglicherweise bestimmte Wörter nicht buchstabieren. Diese Herausforderung ist eine Verallgemeinerung dieser Idee.
Herausforderung
Wenn Sie eine Liste von Würfeln mit mindestens einem Gesicht und einem Wort haben, müssen Sie feststellen, ob es möglich ist, dieses Wort mit den angegebenen Würfeln zu buchstabieren (in diesem Fall sollte es ein wahres Ergebnis liefern). Von jedem Würfel kann nur ein Buchstabe und ein Würfel nur einmal verwendet werden. Sie müssen nicht alle angegebenen Würfel verwenden.
Beispiele
In einem einfachen Beispiel mit den Würfeln [[A], [C], [T]] und der Zeichenfolge CAT ist das Ergebnis wahr. BAT würde natürlich false zurückgeben, da kein Würfel mit B darauf liegt
Wenn Sie als Würfelsatz [[A, E, I, O, U], [A, B, C, T], [N, P, R]] angeben, erhalten Sie für ART, TON und CUR den Wert true , aber false für CAT, EAT und PAN, da diese Zeichenfolgen die Wiederverwendung von Würfeln erfordern. Es sollte auch ziemlich offensichtlich sein, dass CRAB mit diesen Würfeln nicht buchstabiert werden kann, da nicht genügend Würfel vorhanden sind.
Wenn Sie [[A, B, C], [A, E, I], [E, O, U], [L, N, R, S, T]] als Würfelsatz angeben, könnten Sie Schreibe CAT, BEE, BEAN, TEA, BEET und BAN, aber du könntest nicht LONE, CAB, BAIL, TAIL, BAA oder TON buchstabieren
Es kann ein Vielfaches desselben Würfels geben. Wenn Sie [[A, B, C], [A, B, C], [A, B, C]] eingeben, können Sie CAB, BAA, AAA usw. buchstabieren, aber natürlich nichts ohne A, B oder C drin.
Regeln
- Keine Ausnutzung von Standardlücken
- Das ist Code-Golf , also gewinnt der kürzeste Code.
- Sie können davon ausgehen, dass sowohl Wörter als auch Würfel nur aus Großbuchstaben bestehen.
- Sie können davon ausgehen, dass das Wort immer mindestens einen Buchstaben lang ist und dass es immer mindestens einen Würfel gibt.
- Sie können davon ausgehen, dass ein Würfel niemals mehr als einen Buchstaben enthält.
- Die Ein- und Ausgabe kann in jedem beliebigen Format erfolgen.
quelle
Antworten:
Brachylog , 5 Bytes
Probieren Sie es online!
Wir verwenden die Eingabevariable für die Würfel und die Ausgabevariable für das Wort. Es gibt aus,
true.
wann es möglich ist, das Wort und zu buchstabierenfalse.
ansonsten.Erläuterung
quelle
Haskell ,
4844 BytesDies ist eine anonyme Funktion. Gebunden an einen Bezeichner
f
kann er alsf "ART" ["AEIOU", "ABCT", "NPR"]
, was ergibt, verwendet werdenTrue
. Probieren Sie es online!Das nicht-punktfreie Äquivalent ist
mapM id
über eine Liste von Listen wird dieMonad
Instanz von list verwendet und kann als nicht deterministische Auswahl angesehen werden . Also zBmapM id ["AB","123"]
Erträge["A1","A2","A3","B1","B2","B3"]
.Für jede dieser Würfelkombinationen prüfen wir, ob der Listenunterschied zwischen
(\\)
dem angegebenen Wort und der Kombination eine leere Liste ergibt.quelle
JavaScript (ES6), 68 Byte
quelle
EEE
.Python 2 , 82 Bytes
Probieren Sie es online!
Die Vergleichskette
w[0]in x>0<f(...)
ist äquivalent zu:w[0]in x
undx>0
und0<f(...)
.Die zweite davon ist immer wahr (
str
>int
) und die dritte ist gleichbedeutend mitf(...)
, so dass das Ganze eine kürzere Schreibweise istw[0]in x and f(...)
quelle
JavaScript (ES6), 74 Byte
Nimmt Eingaben in der Currysyntax vor
(w)(a)
, wobei w das gesuchte Wort und a eine Liste von Zeichenfolgen ist, die die Würfel beschreiben. Gibt 0 oder 1 zurück .Probieren Sie es online!
Kommentiert
Wir wandeln jede Teilmengenpermutation der Würfel in ein reguläres Ausdrucksmuster um und testen sie gegen das Zielwort.
quelle
Schale , 5 Bytes
Probieren Sie es online!
Gibt einen Wert ungleich Null zurück, wenn das Wort buchstabiert werden kann, andernfalls Null.
Erläuterung
quelle
Perl 5
-plF
,4846 Bytes@DomHastings sparte 2 Bytes
Probieren Sie es online!
Eingang:
Ausgabe:
0
für ein Wort, das nicht validiert ist. Beliebige positive Ganzzahl für ein Wort, das überprüft wirdWie?
In dieser Erklärung wird der Code in der Ausführungsreihenfolge betrachtet, und zwar von rechts nach links für diesen Einzeiler.
quelle
JavaScript (Node.js) , 98 Byte
Probieren Sie es online!
Vorausgesetzt, es gibt genug Würfel
JavaScript (Node.js) , 100 Byte
Probieren Sie es online!
JavaScript (Node.js) , 99 Byte
Probieren Sie es online!
quelle
Gelee ,
109 Bytes-1 danke an Erik den Outgolfer (benutze
w
stattẇ@
>. <)Ein dyadischer Link, der eine Liste von Zeichen auf der linken Seite (die Würfel) und eine Liste von Zeichen auf der rechten Seite (das Wort) akzeptiert und wenn möglich 1 und wenn nicht, 0 zurückgibt.
Probieren Sie es online! Oder sehen Sie sich die Testsuite an .
Wie?
Schnellerer Algorithmus (auch 9 Bytes):
Eine dyadische Verknüpfung mit demselben Eingabeformat, die, wenn möglich, eine positive Ganzzahl (truey) und ansonsten eine 0 (falsey) zurückgibt.
quelle
R ,
192 185 135 117 111109 BytesProbieren Sie es online!
-2 Zeichen dank Giuseppe.
quelle
F=
Pyth , 21 Bytes
Testsuite
Erläuterung:quelle