Uma palavra de dígito é uma palavra em que, após a remoção de algumas letras, você fica com um dos dígitos: UM, DOIS, TRÊS, QUATRO, CINCO, SEIS, SETE, OITO ou NOVE (não ZERO).
Por exemplo, BOUNCE e ANUNUNCE são palavras de dígito, pois contêm o dígito um.
ENCODE não é uma palavra de dígito, mesmo que contenha O, N e E, pois não estão em ordem.
Escreva um programa / função que use uma única palavra (maiúscula ou minúscula - você escolhe) como entrada ou parâmetro e determine se é uma palavra de dígito. Torne o código o mais curto possível.
Se a palavra não for um dígito, você deve retornar 'NÃO', 0 ou qualquer valor 'falsey' (isso pode variar de acordo com o seu idioma). Se a palavra é um dígito, você deve fornecer o dígito que ele contém, como um número.
Você pode assumir que nenhuma palavra contém mais de um dígito; portanto, você não terá nada como ONFIVE.
Casos de teste
BOUNCE
1
ENCODE
NO
EIGHT
8
BLACKJACK
NO
FABULOUS
NO
EXERCISE
NO
DRIFTWOOD
2
SERVICEMAN
7
INSIGNIFICANCE
9
THROWDOWN
2
ZERO
NO
OZNERO
1
Esse desafio foi retirado (e é uma modificação muito leve da) Questão 1 da BIO 2009 . A maioria dos casos de teste é retirada do esquema de marcas .
NOFELINEVET
contém 5 e 9 ... o que devo retornar?0
no caso sem dígito, mesmo que não seja falsa no idioma de sua escolha?Respostas:
Javascript (ES6),
10199 bytesfonte
PHP> = 7.0, 87 bytes
Se apenas inserções de caracteres de um dígito como palavra na entrada forem feitas, saia do programa com o dígito. Ou altere a ordem para
levenshtein("DIGIT $argn",IntlChar::charName("$i"),1,1,0)
não contar as exclusões de caractereslevenshtein
IntlChar :: charName
PHP> = 7.0, 112 bytes
IntlChar :: charName
PHP, 128 bytes
Experimente online!
143 bytes por mais de um dígito
Experimente online!
fonte
foreach(...)$r+=++$k*preg_match(...);echo$r?:NO;
(-1 byte).chunk_split($v,1,".*")
em vez dejoin(...)
(-2 bytes).chunk_split
eu nunca vi isso antes. Você deve fazer uma entrada na seção de dicasIntlChar::enumCharNames
... amanhã.levenshtein()
parece funcionar:<?for(;$i++<9;)levenshtein(IntlChar::charName("$i"),"DIGIT $argn",0,1,1)?:die("$i")?>NO
.Python 3, 150 bytes
combinations
retorna todas as combinações de coisas em ordem. Seria mais simples ter um número definido para o segundo parâmetro decombinations
, para que espaços sejam adicionados ao final da string original que é um parâmetro da minha lambda. Essa é uma descrição simples de como minha entrada funciona. Pergunte se você deseja mais esclarecimentos.fonte
Mathematica, 83 bytes (codificação WindowsANSI)
Define uma função unária
±
que recebe uma lista de caracteres em minúsculas como entrada e retorna um dígito, em um formato semelhante{{7}}
ou uma lista vazia{}
. Eu não acho que fiz muitas coisas de golfe aqui, exceto queCharacters@*IntegerName~Array~9
gera as correspondências nome-número a serem procuradas sem codificá-las.Exemplo de uso:
rendimentos
{{9}}
.fonte
Jelly ,
3128 bytes-2 bytes agora que a entrada em minúscula é aceitável
Um programa completo que espera entrada em minúscula e imprime o resultado, usando
0
o caso falsey.Como um link monádico que obtém uma lista de caracteres, ele realmente retorna uma lista de números inteiros que contém um único
0
no caso falsey, um único inteiro entre1
e9
inclusive nos casos de uso esperados e várias entradas desse tipo nos casos em que mais de um número existe no palavra.Experimente online!
Quão?
fonte
Ruby + to_words :
4948 + 12 =6160 bytesUsa as bandeiras
-rto_words -n
. Leva minúsculas. Retornanil
se nenhum "dígito" for encontrado.-1 byte agora que a entrada em minúsculas é permitida, permitindo a remoção do
i
sinalizador no regex.Para uma resposta Ruby mais pura, sem gemas externas, 91 + 1 = 92 bytes:
fonte
05AB1E , 26 bytes
O valor falso aqui é 0 .
Explicação:
Usa a codificação 05AB1E . Experimente online! ou Verifique todos os casos de teste!
fonte
Haskell,
113111 bytesExperimente online!
Devoluções
0
se nenhum dígito for encontrado.Encontre todas as subsequências da palavra de entrada na lista de dígitos. Anexe uma sequência vazia
[]
no índice 0, que faz parte de cada subsequência.elemIndices
retorna uma lista de índices e os=<<
nivela em uma única lista. Escolha o último índice.fonte
JavaScript (ES6), 121 bytes
Retorna o dígito detectado mais baixo ou
0
se nenhum dígito foi detectado (+6 seNO
necessário).fonte
Japonês , 52 bytes
Experimente online!
fonte
Retina ,
160126120 bytesExperimente online!
Retorna uma string vazia se a entrada não contiver um dígito.
-6 bytes graças a @CalculatorFeline .
fonte
0
vez deNO
.PHP,
134 132128 bytesexecutar como tubo
-nF
ou experimentá-lo online .Cria uma regex com as palavras entre parênteses; ou seja, cada palavra
N
está naN
sub-expressão.Se uma palavra for encontrada, a string correspondente estará dentro
$m[0]
e noN
quinto elemento, com os elementos entre eles vazios e nenhuma string vazia atrás; ou seja,$m
temN+1
elementos.fonte
<?=preg_match("#(".strtr(chunk_split(ONE0TWO0THREE0FOUR0FIVE0SIX0SEVEN0EIGHT0NINE,1,".*"),[")|("]).")#",$argn,$m)?count($m)-1:NO;
Experimente o online!Python , 148 bytes
Uma função sem nome, que pega apenas uma palavra em maiúscula e retorna o número inteiro (
1
para9
) ou0
paraNO
.Experimente online!
Quão?
Para uma cadeia de entrada
s
a função atravessa uma lista de strings:"x"
,"ONE"
,"TWO"
,"THREE"
,"FOUR"
,"FIVE"
,"SIX"
,"SEVEN"
,"EIGHT"
,"NINE"
, es
. Em si à procura de quaisquer jogos *A comparação usada é se essa sequência,,
w
é aquela que pode ser formada a partir de uma combinação de letras em ordem a partir da entrada. A funçãocombinations
obtém essas informações para nós (e somente as que usam o comprimento necessáriolen(w)
), mas elas estão na forma de tuplas, portanto, as cadeias são convertidas em tuplas para comparação.Dos onze resultados, aquele para
"x"
sempre seráFalse
, enquanto o paras
si sempre seráTrue
. O"x"
que há para garantir o índice de um jogo com oONE
meioNINE
são os valores necessários (uma vez que as listas Python são 0-indexada), os
que há para garantir a chamada paraindex(1)
(sinônimoindex(True)
) costuma falhar quando nenhuma palavra dígito foi encontrado, após o que o resultante10
é convertido para a0
com um módulo de dez usando%10
.* E se
s
contiver espaços por algum motivo, a lista dew
s será mais longa, mas o processo ainda funcionará, pois a correspondência de palavras com dígitos funcionará da mesma maneira e, se nenhuma corresponder à primeira substring de divisão de espaços
, corresponderá, fornecendo novamente10
e voltando0
.Se existirem palavras com vários dígitos, a função retornará a mínima.
fonte
Java,
167153 bytesUma implementação bastante ingênua, correspondente ao regex.
Teste e ungolfed
Salva
fonte
"ONE TWO THREE FOUR FIVE SIX SEVEN EIGHT NINE".split(" ")[i].split("")
diretamente no loop for e se livrar deString[]N=
e;
. E você pode salvar mais 2 bytes alterando a ordem do loop for:,for(int i=0;i<9;)
use em[i++]
vez de[i]
na verificação se e se livre da+1
devolução."".join
paras.join
.Bash , 163 bytes
Experimente online!
Não conheço RETINA, mas parece uma porta direta dessa resposta.
fonte
*
com,j=0;for i in ONE TWO .. ; do ((j++)); printf "%s)a=%s;;" $(sed 's/./\*&\*/g' <<<$i) $j ; done
mas era mais longoJavascript, 121 bytes
ou 116
Mas apenas reciclando material neste momento.
fonte
Pyth,
-44-41 bytesPega uma string entre aspas e gera 0 para NO.
Tente!
explicação
fonte
Java, 254 bytes
Experimente on-line
fonte
C, 198 bytes
Experimente on-line
fonte
Python 2, 155 bytes
Uma função anônima que procura pelo grupo regex. Não é a melhor solução aqui em Python, mas uma maneira alternativa.
fonte