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 .
NOFELINEVET
contiene 5 y 9 ... ¿qué debo devolver?0
en 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_split
que 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
combinations
devuelve 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~9
genera 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,
0
para 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
0
en el caso de falsey, un solo entero entre1
e9
incluido 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. Devuelvenil
si no se encuentra "dígito".-1 byte ahora que se permite la entrada en minúsculas, lo que permite la eliminación de la
i
bandera 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
0
si 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.elemIndices
devuelve 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
0
si no se detectó ningún dígito (+6 siNO
es 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
0
lugar deNO
.PHP,
134 132128 bytesejecutar como tubería
-nF
o probarlo en línea .Crea una expresión regular con las palabras entre paréntesis; es decir, cada palabra
N
está en laN
subexpresión th.Si se encuentra una palabra, la cadena coincidente estará dentro
$m[0]
y en elN
elemento th, con los elementos entre ellos vacíos y sin cadena vacía detrás; es decir,$m
tieneN+1
elementos.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 (
1
to9
) o0
forNO
.Pruébalo en línea!
¿Cómo?
Para una cadena de entrada
s
a 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,
w
es una que se puede formar a partir de una combinación de letras en orden desde la entrada. La función loscombinations
obtiene 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 des
siempre lo seráTrue
. El"x"
está allí para asegurar el índice de un partido conONE
a travésNINE
son los valores requeridos (ya que las listas de Python son 0-indexada), els
es allí para asegurar la llamada aindex(1)
(sinónimoindex(True)
) suele fallar cuando se encontró ninguna palabra dígitos, tras lo cual el resultante10
se convierte en a0
con un módulo de diez usando%10
.* Si
s
contiene espacios por algún motivo, la lista dew
s 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ás10
y 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+1
en la devolución."".join
as.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