Una palabra de dígito es una palabra en la que, después de eliminar algunas letras, queda uno de los dígitos individuales: UNO, DOS, TRES, CUATRO, CINCO, SEIS, SIETE, OCHO o NUEVE (no CERO).
Por ejemplo, BOUNCE y ANNOUNCE son palabras de dígitos, ya que contienen el dígito uno.
ENCODE no es una palabra de dígitos, aunque contiene una O, N y E, ya que no están en orden.
Escriba un programa / función que tome una sola palabra (mayúscula o minúscula - usted elija) como entrada o parámetro y determine si es una palabra de dígitos. Haz el código lo más corto posible.
Si la palabra no es una palabra de dígitos, debe devolver 'NO', 0 o cualquier valor 'falsey' (esto puede variar según su idioma). Si la palabra es una palabra de dígitos, debe generar el dígito que contiene, como un número.
Puede suponer que ninguna palabra contiene más de un dígito, por lo que no tendrá nada como ONFIVE.
Casos de prueba
BOUNCE
1
ENCODE
NO
EIGHT
8
BLACKJACK
NO
FABULOUS
NO
EXERCISE
NO
DRIFTWOOD
2
SERVICEMAN
7
INSIGNIFICANCE
9
THROWDOWN
2
ZERO
NO
OZNERO
1
Este desafío se toma (y es una modificación muy leve de) la Pregunta 1 de BIO 2009 . La mayoría de los casos de prueba se toman del esquema de marcas .

NOFELINEVETcontiene 5 y 9 ... ¿qué debo devolver?0en el caso de no encontrar dígitos, incluso si no es falsey en el idioma de elección?Respuestas:
Javascript (ES6),
10199 bytesfuente
PHP> = 7.0, 87 bytes
Si solo se realizan inserciones de caracteres de un dígito como palabra en la entrada, salga del programa con el dígito. O cambie el orden para
levenshtein("DIGIT $argn",IntlChar::charName("$i"),1,1,0)no contar las eliminaciones de caractereslevenshtein
IntlChar :: charName
PHP> = 7.0, 112 bytes
IntlChar :: charName
PHP, 128 bytes
Pruébalo en línea!
143 bytes para más de 1 dígito
Pruébalo en línea!
fuente
foreach(...)$r+=++$k*preg_match(...);echo$r?:NO;(-1 byte).chunk_split($v,1,".*")en lugar dejoin(...)(-2 bytes).chunk_splitque nunca antes había visto. Debe hacer una entrada en la sección de consejosIntlChar::enumCharNames... mañana.levenshtein()Parece que funciona:<?for(;$i++<9;)levenshtein(IntlChar::charName("$i"),"DIGIT $argn",0,1,1)?:die("$i")?>NO.Python 3, 150 bytes
combinationsdevuelve todas las combinaciones de cosas en orden. Sería más simple tener un número establecido para el segundo parámetro decombinations, por lo que se agregan espacios al final de la cadena original que es un parámetro de mi lambda. Esa es una descripción simple de cómo funciona mi entrada. Pregunte si desea más aclaraciones.fuente
Mathematica, 83 bytes (codificación WindowsANSI)
Define una función unaria
±que toma una lista de caracteres en minúscula como entrada y devuelve un dígito, en forma de{{7}}, o una lista vacía{}. No siento que hice un montón de cosas de golf aquí, excepto queCharacters@*IntegerName~Array~9genera las coincidencias de nombre-número para buscar sin codificarlas.Ejemplo de uso:
rendimientos
{{9}}.fuente
Jalea ,
3128 bytes-2 bytes ahora que la entrada en minúscula es aceptable
Un programa completo que espera una entrada en minúscula e imprime el resultado,
0para el caso falsey.Como un enlace monádico que toma una lista de caracteres, en realidad devuelve una lista de enteros que contiene un solo
0en el caso de falsey, un solo entero entre1e9incluido en los casos de uso esperados y múltiples entradas de este tipo en los casos en que existe más de un número en el palabra.Pruébalo en línea!
¿Cómo?
fuente
Ruby + to_words :
4948 + 12 =6160 bytesUtiliza las banderas
-rto_words -n. Toma palabras en minúscula. Devuelvenilsi no se encuentra "dígito".-1 byte ahora que se permite la entrada en minúsculas, lo que permite la eliminación de la
ibandera en la expresión regular.Para una respuesta Ruby más pura sin gemas externas, 91 + 1 = 92 bytes:
fuente
05AB1E , 26 bytes
El valor falso aquí es 0 .
Explicación:
Utiliza la codificación 05AB1E . Pruébalo en línea! o Verifique todos los casos de prueba!
fuente
Haskell,
113111 bytesPruébalo en línea!
Devuelve
0si no se encuentra ningún dígito.Encuentre todas las subsecuencias de la palabra de entrada en la lista de dígitos. Anteponga una cadena vacía
[]en el índice 0 que es parte de cada subsecuencia.elemIndicesdevuelve una lista de índices y los=<<aplana en una sola lista. Elige el último índice.fuente
JavaScript (ES6), 121 bytes
Devuelve el dígito más bajo detectado o
0si no se detectó ningún dígito (+6 siNOes necesario).fuente
Japt , 52 bytes
Pruébalo en línea!
fuente
Retina ,
160126120 bytesPruébalo en línea!
Devuelve una cadena vacía si la entrada no contiene un dígito.
-6 bytes gracias a @CalculatorFeline .
fuente
0lugar deNO.PHP,
134 132128 bytesejecutar como tubería
-nFo probarlo en línea .Crea una expresión regular con las palabras entre paréntesis; es decir, cada palabra
Nestá en laNsubexpresión th.Si se encuentra una palabra, la cadena coincidente estará dentro
$m[0]y en elNelemento th, con los elementos entre ellos vacíos y sin cadena vacía detrás; es decir,$mtieneN+1elementos.fuente
<?=preg_match("#(".strtr(chunk_split(ONE0TWO0THREE0FOUR0FIVE0SIX0SEVEN0EIGHT0NINE,1,".*"),[")|("]).")#",$argn,$m)?count($m)-1:NO;Pruébelo en línea!Python , 148 bytes
Una función sin nombre que toma una sola palabra en mayúscula y devuelve el entero (
1to9) o0forNO.Pruébalo en línea!
¿Cómo?
Para una cadena de entrada
sa la función atraviesa a través de una lista de las cuerdas:"x","ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE", ys. Sí en busca de cerillas *La comparación utilizada es si esta cadena,
wes una que se puede formar a partir de una combinación de letras en orden desde la entrada. La función loscombinationsobtiene para nosotros (y solo los que tienen la longitud requeridalen(w)), pero están en forma de tuplas, por lo que las cadenas se convierten en tuplas para la comparación.De los once resultados, el de
"x"siempre seráFalse, mientras que el dessiempre lo seráTrue. El"x"está allí para asegurar el índice de un partido conONEa travésNINEson los valores requeridos (ya que las listas de Python son 0-indexada), elses allí para asegurar la llamada aindex(1)(sinónimoindex(True)) suele fallar cuando se encontró ninguna palabra dígitos, tras lo cual el resultante10se convierte en a0con un módulo de diez usando%10.* Si
scontiene espacios por algún motivo, la lista dews será más larga, pero el proceso seguirá funcionando ya que las coincidencias de palabras de dígitos funcionarán de la misma manera, y si ninguna coincide con la primera subcadena dividida en espacioss, coincidirá, dando una vez más10y volviendo0.Si existen palabras de varios dígitos, la función devolverá la mínima.
fuente
Java,
167153bytesUna implementación bastante ingenua, que coincide en regex.
Prueba y sin golf
Ahorra
fuente
"ONE TWO THREE FOUR FIVE SIX SEVEN EIGHT NINE".split(" ")[i].split("")directamente en el bucle for y deshacerse deString[]N=y;. Y puede guardar 2 bytes adicionales cambiando el orden del bucle for:for(int i=0;i<9;)use, en[i++]lugar de[i]en el if-check, y elimine el+1en la devolución."".joinas.join.Bash , 163 bytes
Pruébalo en línea!
No sé RETINA, pero parece un puerto directo de esa respuesta.
fuente
*'s conj=0;for i in ONE TWO .. ; do ((j++)); printf "%s)a=%s;;" $(sed 's/./\*&\*/g' <<<$i) $j ; done, pero era más largoJavascript, 121 bytes
o 116
Pero solo reciclando material en este punto.
fuente
Pyth,
-44-41 bytesToma una cadena entre comillas, emite 0 para NO.
¡Intentalo!
explicación
fuente
Java, 254 bytes
Probar en línea
fuente
C, 198 bytes
Probar en línea
fuente
Python 2, 155 bytes
Una función anónima que busca el grupo regex. No es la mejor solución aquí en Python, sino una forma alternativa.
fuente