Erstellen Sie eine Funktion, die eine Zeichenfolge aus einer Pinyin-Silbe als Argument verwendet und true für die vorhandene Kombination zurückgibt, andernfalls false.
Verwenden Sie "v" für "ü".
Hier ist eine vollständige Liste der Kombinationen. http://www.pinyin.info/rules/initials_finals.html
Beispiele
f("bu") == true
f("zheng") == true
f("nv") == true
f("ri") == true
f("cei") == false
f("ia") == false
f("kian") == false
f("qa") == false
Bitte tun Sie nichts wie das Scrappen von Webseiten oder das Lesen von Eingabemethodendateien, um die Anzahl der Zeichen zu verringern. (Wenn Sie dies tun, wird die Länge der Daten zur Anzahl der Zeichen hinzugerechnet.) In diesem Codegolf wird unter anderem untersucht, wie Regeln vereinfacht werden können. Kürzester Code gewinnt.
code-golf
kolmogorov-complexity
Ming-Tang
quelle
quelle
nar
? : Pnvi
es jemals eine gültige Kombination gibt.Antworten:
JavaScript 1.6,
503496477 ZeichenEtwas leserlicher formatiert (abgesehen von Fehlern beim Aufteilen des Codes in einige Zeilen):
Die Null-Anfangsfälle plus einige Einmalfälle werden mit einem regulären Ausdruck getestet. Danach wird die Tabelle als (verkettete) Reihe von 6-stelligen Basis-36-Zahlen codiert, eine pro Anfangston. Die Suche verwendet dann ein Paar von
indexOf
Aufrufen und eine Verschiebung, um das richtige Bit auszuwählen.Getestet gegen alle Zellen in der Kombinationstabelle (gefüllte Zellen auf wahr getestet, leere Zellen auf falsch getestet).
Bearbeiten: Ersetzt einige der 36 Zeichen der Base-36-Suche durch Vergleiche, da g–, k–, h–, j–, q– und z– dichte Blöcke von wahr / falsch haben.
Bearbeiten: Der Bittest wurde neu angeordnet, um unnötiges
!!
und mehr komprimiertes Regex zu vermeiden .quelle
!!
? Ich bin nicht sicher, ob ich verstehe, warum Sie jemals ein Doppel brauchen würden, nicht ...if (g(s) == (validList.indexOf(s) >= 0)
womit false on zurückgegeben wird16 == true
. Ich diskutierte es aus der Perspektive "Was bedeutet", "wirklich bedeutet" und beließ die Sache dabei. In beiden Fällen habe ich eine geplante Änderung für den späteren Tag vor, mit der das!!
Problem beseitigt wird, indem1<<r&*parseInt
(mehr oder weniger)(parseInt>>r)&1
durch das ersetzt wird return ist 1 und ich rasiere zwei Zeichen ab.PHP, 548 Zeichen
Zugegeben, es ist wahrscheinlich nicht optimal, aber ich habe einen regulären Ausdruck geschrieben, der mit gültigen Pinyin-Kombinationen übereinstimmt. Reduzierte Zeichen durch Ersetzen von sich wiederholenden Teilzeichenfolgen durch Variablen.
Code
Verwendung
quelle
F #, 681 Zeichen
Verstehen die Silben ohne Anfangskonsonanten nicht ganz richtig (Y, W usw.).
quelle
APL (Dyalog Extended) , 475 Bytes
Probieren Sie es online!
Golfen im Gange.
Ungolfed
Probieren Sie es online!
Die
s
Hilfsfunktion entpackt einen durch Leerzeichen getrennten String:Ich speichere zuerst die möglichen Anfangs- und Endzeichenfolgen in der Silbe und erstelle dann eine Tabelle,
tab
die die Verkettung jeder Zeichenfolge aus der ersten Liste mit jeder Zeichenfolge aus der zweiten Liste enthält.Als nächstes speichere ich Binärdaten als Liste von ganzen Zahlen. Einige der ganzen Zahlen wiederholen sich und können daher in Variablen gespeichert werden, was auch die Elution einiger Leerzeichen ermöglicht.
Jede Ganzzahl wird binär decodiert und repräsentiert eine Zeile der Tabelle. Jedes Bit in der Zahl gibt an, ob eine bestimmte Silbe in dieser Zeile eine gültige Silbe ist, wobei das MSB die erste Spalte darstellt. Alle ungültigen Silben werden aus der Tabelle entfernt.
Wir reduzieren die Tabelle zu einer Liste, fügen die Formulare ohne Anfangskonsonanten als Sonderfall hinzu und prüfen schließlich, ob unsere Eingabe in der Liste enthalten ist.
Mögliches weiteres Golfpotential:
Python-hilfreiches Skript und Testfallgenerator: Probieren Sie es online aus!
quelle