Converta uma sequência contendo dígitos como palavras em um número inteiro, ignorando os zeros à esquerda.
Exemplos
"four two"
->42
."zero zero zero one"
->1
.
Premissas
As submissões podem assumir que:
- A sequência de entrada é composta por palavras com dígitos separados por espaço.
- Todas as palavras são válidas (no intervalo "zero" .. "nove") e minúsculas. O comportamento para entrada vazia é indefinido.
- A sequência de entrada sempre representa um número não assinado dentro do intervalo
int
e nunca é uma sequência vazia.
Pontuação
As respostas serão pontuadas em bytes, com menos bytes sendo melhores.
code-golf
string
number
conversion
Sparkler
fonte
fonte
range "zero".."nine"
não está totalmente especificado.Interpreter@"SemanticNumber"
faz exatamente isso no Mathematica - exceto que falha nas strings começando comzero zero
.Respostas:
PHP , 74 bytes
Experimente online!
Tentou obter uma solução que não copia respostas existentes. Eu recebo o polinômio da soma de verificação de redundância cíclica de 32 bits ( crc32 ) para cada palavra e, em seguida, faço um mod 20 e um mod 11 para obter valores exclusivos de 0 a 10 (faltando 6) para cada dígito. Então, usando esse valor único, encontro o dígito real.
Outra alternativa CRC32 de 74 bytes usando
%493%10
:Experimente online!Outra alternativa CRC32 de 74 bytes usando
%2326%11
: Experimente online!PHP , 74 bytes
Experimente online!
Outra alternativa com o mesmo comprimento, pega o 22º caractere
md5
da palavra (único caractere que fornece um valor único para cada palavra) e depois usa esse caractere para mapear para um dígito.fonte
Python 2 ,
7170 bytes-1 graças a ovs (use
find
no lugar deindex
)Experimente online!
fonte
JavaScript (ES6),
70 67 6662 bytesGuardado 3 bytes graças a @ovs
Experimente online!
fonte
'2839016547'[parseInt(s,36)%204%13]
é 3 bytes mais curto.Geléia ,
1917 bytesUm link monádico que aceita uma lista de caracteres que gera um número inteiro.
Experimente online!
Praticamente uma porta da minha resposta Python 2.
Anterior
Experimente online!
Há
muito possivelmenteum caminho mais curto, mas esta é uma maneira que primeiro me veio à mente.fonte
Python 3 ,
107,91,77, 90 bytes-16 bytes por Sriotchilism O'Zaic
+13 bytes para remover os zeros iniciais
Experimente online!
fonte
lstrip
método retira todos os caracteres da string que são dados como argumento, portanto, "oito dois" se torna "dois dois", à medida que "e" é retirado. Além disso, "zero zero zero" deve imprimir "0", não cometer um erro.Perl 6 ,
3532 bytesExperimente online!
Explicação
fonte
C (gcc) , 89 bytes
Experimente online!
Graças aos truques mais inteligentes do @Ceilingcat:
fonte
05AB1E ,
1816 bytesExperimente online.
Explicação:
Veja este 05AB1E ponta do meu (seção Como cordas compressa não fazem parte do dicionário? ) Para entender por que
.•ƒ/ÿßÇf•
é"rothuvsein"
.fonte
05AB1E ,
1716 bytesExperimente online!
Laço perfeito com a outra resposta 05AB1E , mas usando uma abordagem completamente diferente.
fonte
Retina 0.8.2 ,
4645 bytesExperimente online! O link inclui casos de teste. Explicação:
Coloque cada palavra em sua própria linha e triplique-a.
Transliterar o sétimo caractere de cada linha usando a string de @ UnrelatedString.
Exclua todos os caracteres restantes que não são dígitos.
Exclua zeros à esquerda (mas deixe pelo menos um dígito).
Solução tradicional de 46 bytes anterior:
Experimente online! O link inclui casos de teste. Explicação:
As palavras
zero
,two
,four
,six
eeight
conter unicamente as letraszwuxg
. Transliterar para os dígitos pares.Para os dígitos ímpares, basta combinar as duas primeiras letras de cada palavra individualmente.
Exclua todos os caracteres restantes que não são dígitos.
Exclua zeros à esquerda (mas deixe pelo menos um dígito).
fonte
Geléia ,
201817 bytesExperimente online!
-2 bytes da execução de "rothuvsein" através do compressor de string do user202729 .
-1 byte de roubar a sequência de enklact livre de zero de Jonathan Allan e colocá-la em um programa de estrutura marginalmente diferente.
fonte
C ++ (gcc) ,
478218142 bytes- (muito) graças a Jo King
Experimente online!
fonte
Japonês , 13 bytes
Tente
Parece que todo mundo me seguiu com a mesma idéia - poderia ter me poupado do trabalho de escrever um script para forçar a corda ideal para a compressão, apenas para descobrir que, até o índice
1,000,000
(era cedo, eu não tinha o meu cafeína ainda!), "rothuvsein" é a única sequência possível!A seqüência de comprimido contém os caracteres de codepoints
206
,168
,117
,118
,160
e136
.fonte
Ruby ,
63 bytes,52 bytes, 50 bytes-2 graças ao valor da ponta da tinta
fonte
$*
é um apelido paraARGV
, então fique à vontade para usá-lo para salvar bytes extras.T-SQL, 110 bytes
A quebra de linha é apenas para legibilidade.
A entrada é obtida via tabelaEu , de acordo com nossas regras de IO . Eu poderia ter economizado 14 bytes preenchendo previamente uma variável de string, mas isso só é permitido se o idioma não tiver outros métodos de entrada.
Explicação:
STRING_SPLIT
pega a string de entrada e a separa nos espaçosCHARINDEX
pega os 2 primeiros caracteres e retorna a posição (com base em 1) na string'_ontwthfofisiseeini'
.'ze'
para zero não está na cadeia e retorna 0 para "não encontrado". O sublinhado garante que obtemos apenas múltiplos de dois.STRING_AGG
esmaga os dígitos novamente sem separador0+
força uma conversão implícita em INT e elimina quaisquer zeros à esquerda.1*
também funcionaria.fonte
código de máquina x86, 46 bytes
Hexdump:
É uma
fastcall
função - recebe um ponteiro para a stringecx
e retorna o resultadoeax
.A função hash se multiplica por um número mágico
1856645926
, faz umXOR
com byte de entrada e muda para a direita em 2 bits.Salvar e restaurar registros noclobber (
edi
eebx
) levou 4 bytes, mas não encontrei uma maneira mais eficiente de implementar isso. Armazenando a constante 10 emebx
foi particularmente irritante!Desmontagem com os bytes de código correspondentes:
Código C equivalente:
fonte
Limpo , 88 bytes
Experimente online!
Fortemente baseado na resposta de Jonathan Allan .
Usa uma compreensão para indexação em vez de
indexOf
/elemIndex
.fonte
J , 38 bytes
Experimente online!
fonte
Carvão , 19 bytes
Experimente online! Link é a versão detalhada do código. Porto da resposta 05AB1E de @ KevinCruijssen. Explicação:
fonte
PowerShell , 48 bytes
Experimente online!
Usa o mesmo
rothuvsein
truque que outros, graças a Jonathan Allan. Espera argumentos de entrada via splatting, que no TIO se manifesta como argumentos separados da linha de comandos.fonte
Kotlin, 83 bytes
+1 byte, se você deseja oferecer suporte a longos
toLong()
O mesmo truque rothuvsein que os outros, economizando alguns bytes preciosos graças ao agradável
toInt()
e kotlinfold()
. Eu simplesmente não consigo abalar a sensação de que mais alguns bytes podem ser removidos ...fonte
sed -re , 78 bytes
fonte
Lote do Windows, 169 bytes
fonte
Perl 6 , 45 bytes
Experimente online!
fonte
VBA, 160 bytes
Corresponde aos dois primeiros caracteres de uma sequência, zero excluído.
fonte
BaCon ,
8372 bytesSupondo que a string seja fornecida em w $, esse código consulta o índice em "zeontwthfisiseeini" usando uma expressão regular com base nos 2 primeiros caracteres exclusivos de cada palavra. O índice é então dividido por 2, fornecendo o resultado correto.
fonte