Ein Ziffernwort ist ein Wort, bei dem nach dem Entfernen einiger Buchstaben möglicherweise eine der einzelnen Ziffern übrig bleibt: EINE, ZWEI, DREI, VIER, FÜNF, SECHS, SIEBEN, ACHT oder NEUN (nicht NULL).
Zum Beispiel sind BOUNCE und ANNOUNCE Ziffernwörter, da sie die Ziffer Eins enthalten.
ENCODE ist kein Ziffernwort, obwohl es ein O, N und E enthält, da diese nicht in Ordnung sind.
Schreiben Sie ein Programm / eine Funktion, die ein einzelnes Wort (in Groß- oder Kleinbuchstaben) als Eingabe oder einen Parameter verwendet und festlegt, ob es sich um ein Ziffernwort handelt. Machen Sie den Code so kurz wie möglich.
Wenn es sich bei dem Wort nicht um ein Ziffernwort handelt, sollten Sie "NEIN", "0" oder einen beliebigen "Falsch" -Wert zurückgeben (dies kann je nach Sprache variieren). Wenn das Wort ein Ziffernwort ist, sollten Sie die darin enthaltene Ziffer als Zahl ausgeben.
Sie können davon ausgehen, dass kein Wort mehr als eine Ziffer enthält, sodass Sie nichts wie ONFIVE haben.
Testfälle
BOUNCE
1
ENCODE
NO
EIGHT
8
BLACKJACK
NO
FABULOUS
NO
EXERCISE
NO
DRIFTWOOD
2
SERVICEMAN
7
INSIGNIFICANCE
9
THROWDOWN
2
ZERO
NO
OZNERO
1
Diese Herausforderung stammt aus Frage 1 von BIO 2009 (und ist eine sehr geringfügige Änderung von Frage 1) . Die meisten Testfälle stammen aus dem Notenschema .
NOFELINEVET
enthält sowohl 5 als auch 9 ... was soll ich zurückgeben?0
in dem Fall ohne gefundene Ziffern zurückkehren, auch wenn es in der Sprache der Wahl nicht falsch ist?Antworten:
Javascript (ES6),
101 bis99 Bytequelle
PHP> = 7,0, 87 Bytes
Wenn nur Zeichen von einer Ziffer als Wort zur Eingabe eingegeben werden, wird das Programm mit der Ziffer beendet. Oder ändern Sie die Reihenfolge,
levenshtein("DIGIT $argn",IntlChar::charName("$i"),1,1,0)
um die Löschungen von Zeichen nicht zu zählenlevenshtein
IntlChar :: charName
PHP> = 7,0, 112 Bytes
IntlChar :: charName
PHP, 128 Bytes
Probieren Sie es online!
143 Bytes für mehr als 1 Ziffer
Probieren Sie es online!
quelle
foreach(...)$r+=++$k*preg_match(...);echo$r?:NO;
(-1 Byte).chunk_split($v,1,".*")
anstelle vonjoin(...)
(-2 Bytes).chunk_split
ich es noch nie gesehen habe. Sie sollten einen Eintrag in der Rubrik Tipps machenIntlChar::enumCharNames
... morgen an.levenshtein()
scheint zu funktionieren:<?for(;$i++<9;)levenshtein(IntlChar::charName("$i"),"DIGIT $argn",0,1,1)?:die("$i")?>NO
.Python 3, 150 Bytes
combinations
Gibt alle Kombinationen der Dinge in der richtigen Reihenfolge zurück. Es wäre einfacher, eine festgelegte Zahl für den zweiten Parameter von zu habencombinations
, daher werden Leerzeichen an das Ende der ursprünglichen Zeichenfolge angehängt, die ein Parameter meines Lambdas ist. Das ist eine einfache Beschreibung, wie mein Eintrag funktioniert. Fragen Sie, ob Sie weitere Erläuterungen wünschen.quelle
Mathematica, 83 Byte (WindowsANSI-Codierung)
Definiert eine unäre Funktion
±
, die eine Liste von Kleinbuchstaben als Eingabe verwendet und entweder eine Ziffer in einer Form wie{{7}}
oder eine leere Liste zurückgibt{}
. Ich habe nicht das Gefühl, dass ich hier eine Menge Golf-Dinge gemacht habe, außer dassCharacters@*IntegerName~Array~9
die Nummernnamen -Übereinstimmungen generiert werden, nach denen gesucht werden muss, ohne sie hart zu codieren.Anwendungsbeispiel:
Ausbeuten
{{9}}
.quelle
Jelly ,
3128 Bytes-2 Bytes jetzt, da die Eingabe in Kleinbuchstaben akzeptabel ist
Ein vollständiges Programm, das die Eingabe von Kleinbuchstaben erwartet und das Ergebnis
0
für die Groß- und Kleinschreibung ausgibt.Als monadischer Link, der eine Liste von Zeichen
0
aufnimmt, gibt er tatsächlich eine Liste von Ganzzahlen zurück, die eine einzelne Zahl im Falsey-Fall, eine einzelne Ganzzahl zwischen1
und9
einschließlich in den erwarteten Anwendungsfällen und mehrere solche Einträge in Fällen enthält, in denen mehr als eine Zahl in der existiert Wort.Probieren Sie es online!
Wie?
quelle
Ruby + to_words :
4948 + 12 =6160 BytesVerwendet die Fahnen
-rto_words -n
. Nimmt Kleinbuchstaben. Gibt zurück,nil
wenn keine "Ziffer" gefunden wurde.-1 Byte jetzt, da die Eingabe in Kleinbuchstaben zulässig ist, wodurch das
i
Flag auf der Regex entfernt werden kann.Für eine reinere Ruby-Antwort ohne externe Edelsteine sind 91 + 1 = 92 Bytes:
quelle
05AB1E , 26 Bytes
Der falsche Wert ist hier 0 .
Erläuterung:
Verwendet die 05AB1E- Codierung. Probieren Sie es online! oder Überprüfen Sie alle Testfälle!
quelle
Haskell,
113111BytesProbieren Sie es online!
Gibt zurück,
0
wenn keine Ziffer gefunden wurde.Suchen Sie alle Teilfolgen des eingegebenen Wortes in der Ziffernliste. Stellen Sie
[]
am Index 0 eine leere Zeichenfolge voran, die Teil jeder Untersequenz ist.elemIndices
Gibt eine Liste von Indizes zurück und=<<
fasst sie zu einer einzigen Liste zusammen. Wählen Sie den letzten Index.quelle
JavaScript (ES6), 121 Byte
Gibt die niedrigste erkannte Ziffer zurück oder
0
wenn keine Ziffer erkannt wurde (+6, fallsNO
erforderlich).quelle
Japt , 52 Bytes
Probieren Sie es online!
quelle
Retina ,
160126120 BytesProbieren Sie es online!
Gibt eine leere Zeichenfolge zurück, wenn die Eingabe keine Ziffer enthält.
-6 Bytes dank @CalculatorFeline .
quelle
0
stattNO
.PHP,
134 132128 BytesLaufen Sie als Pipe mit
-nF
oder versuchen Sie es online .Erstellt einen regulären Ausdruck mit den Wörtern in Klammern. dh jedes Wort
N
ist imN
th-Unterausdruck.Wenn ein Wort gefunden wird, befindet sich die übereinstimmende Zeichenfolge im
$m[0]
und imN
th-Element, wobei die Elemente dazwischen leer und keine leere Zeichenfolge dahinter sind. dh$m
hatN+1
Elemente.quelle
<?=preg_match("#(".strtr(chunk_split(ONE0TWO0THREE0FOUR0FIVE0SIX0SEVEN0EIGHT0NINE,1,".*"),[")|("]).")#",$argn,$m)?count($m)-1:NO;
Versuchen Sie es online!Python , 148 Bytes
Eine unbenannte Funktion, die nur ein Wort in Großbuchstaben und die Ganzzahl (
1
bis9
) oder0
für zurückgibtNO
.Probieren Sie es online!
Wie?
Für eine Eingangskette
s
durchläuft die Funktion durch eine Liste der Saiten:"x"
,"ONE"
,"TWO"
,"THREE"
,"FOUR"
,"FIVE"
,"SIX"
,"SEVEN"
,"EIGHT"
,"NINE"
, unds
. Sich der Suche nach irgendwelchen Streichhölzer *Der verwendete Vergleich ist, ob diese Zeichenfolge
w
eine ist, die aus einer Kombination von Buchstaben in der Reihenfolge der Eingabe gebildet werden kann. Die Funktioncombinations
erhält diese für uns (und nur diejenigen, die die erforderliche Länge verwendenlen(w)
), aber sie liegen in Form von Tupeln vor, sodass die Zeichenfolgen für den Vergleich in Tupel umgewandelt werden.Von den elf Ergebnissen wird das für
"x"
immer seinFalse
, während das fürs
sich immer sein wirdTrue
. Das"x"
ist da, um sicherzustellen, dass der Index einer Übereinstimmung mitONE
throughNINE
den erforderlichen Werten entspricht (da Python-Listen 0-indiziert sind), dass
ist da, um sicherzustellen, dass der Aufruf vonindex(1)
(synonym mitindex(True)
) nicht fehlschlägt, wenn kein Ziffernwort gefunden wurde, woraufhin das resultierende10
wird0
mit einem Modulo von zehn in ein umgewandelt%10
.* Wenn
s
aus irgendeinem Grund Leerzeichen enthalten sind, ist die Liste derw
s länger, der Vorgang funktioniert jedoch weiterhin, da die Ziffernwortübereinstimmungen auf die gleiche Weise funktionieren. Wenn keine übereinstimmen, wird die erste Teilzeichenfolge mit Leerzeichens
übereinstimmen und erneut angegeben10
und zurückkehren0
.Wenn mehrstellige Wörter vorhanden sind, gibt die Funktion das minimale zurück.
quelle
Java,
167153 BytesEine eher naive Implementierung, passend zu Regex.
Test und ungolfed
Speichert
quelle
"ONE TWO THREE FOUR FIVE SIX SEVEN EIGHT NINE".split(" ")[i].split("")
direkt in der for-Schleife, und loszuwerdenString[]N=
und;
. Und Sie können weitere 2 Bytes sparen, indem Sie die Reihenfolge der for-Schleife ändern:for(int i=0;i<9;)
Verwenden Sie[i++]
anstelle[i]
der if-Prüfung, und entfernen Sie die+1
in der Rückgabe."".join
zus.join
.Bash , 163 Bytes
Probieren Sie es online!
Ich kenne RETINA nicht, aber es scheint ein klarer Beweis für diese Antwort zu sein.
quelle
*
mit ‚sj=0;for i in ONE TWO .. ; do ((j++)); printf "%s)a=%s;;" $(sed 's/./\*&\*/g' <<<$i) $j ; done
war aber längerJavascript, 121 Bytes
oder 116
Aber an dieser Stelle nur Material recyceln.
quelle
Pyth,
-44-41 BytesNimmt einen String in Anführungszeichen und gibt 0 für NO aus.
Versuch es!
Erläuterung
quelle
Java, 254 Bytes
Versuchen Sie es online
quelle
C 198 Bytes
Versuchen Sie es online
quelle
Python 2, 155 Bytes
Eine anonyme Funktion, die nach einer regulären Gruppe sucht. Nicht die beste Lösung hier in Python, sondern eine Alternative.
quelle