Tarefa
Dada uma sequência de nomes em inglês de dígitos "recolhidos" juntos, assim:
zeronineoneoneeighttwoseventhreesixfourtwofive
Divida a sequência novamente em dígitos:
zero nine one one eight two seven three six four two five
Regras
A entrada é sempre uma string. Ele sempre consiste em um ou mais nomes de dígitos em inglês em minúsculas, recolhidos juntos e nada mais.
- Os nomes dos dígitos em inglês são
zero one two three four five six seven eight nine
.
- Os nomes dos dígitos em inglês são
A saída pode ser uma lista de cadeias ou uma nova cadeia na qual os dígitos são delimitados por cadeias não alfabéticas e não vazias. (Sua saída também pode, opcionalmente, ter essas seqüências no início ou no final, e os delimitadores não precisam ser consistentes. Portanto, mesmo algo como
{{ zero0one$$two );
é uma resposta válida (se absurda)zeroonetwo
.)A resposta mais curta em bytes vence.
Casos de teste
three -> three
eightsix -> eight six
fivefourseven -> five four seven
ninethreesixthree -> nine three six three
foursixeighttwofive -> four six eight two five
fivethreefivesixthreenineonesevenoneeight -> five three five six three nine one seven one eight
threesevensevensixninenineninefiveeighttwofiveeightsixthreeeight -> three seven seven six nine nine nine five eight two five eight six three eight
zeroonetwothreefourfivesixseveneightnine -> zero one two three four five six seven eight nine
Respostas:
Retina , 20 bytes
Experimente online!
fonte
C (gcc) ,
89 80 76 75 72 71 7069 bytesExperimente online!
(89) Crédito ao gastropner pelo hash XOR.
(76) Agradecemos a Toby Speight pela idéia de usar o 1º e o 3º.
(75) Crédito para Michael Dorgan por
'0'
→48
.(72) Agradecemos a Michael Dorgan e Lynn por literais com caracteres de controle.
(69) Crédito para Lynn por
x?y:0
→x&&y
fonte
Python 2 , 50 bytes
Experimente online!
-3 graças a Lynn .
-4 graças a Uriel 's resposta regex' s.
fonte
import re;re.compile('…').findall
deve salvar alguns bytes. Eu não esperava isso para se transformar em golfe regex :)Befunge,
87858176 bytesExperimente online!
O Befunge não possui instruções de manipulação de strings; portanto, o que fazemos é criar um tipo de hash dos três últimos caracteres encontrados, enquanto os estamos processando.
Esse hash é essencialmente um número base 104 de três dígitos. Toda vez que um novo caractere é lido, modificamos o hash com 104 2 para se livrar do caractere mais antigo, multiplicamos por 104 para criar espaço para o novo caractere e adicionamos o valor ASCII do novo mod 27 (para garantir não transborda).
Para fins de comparação, pegamos esse valor mod 3817, escrevemos na memória (truncando-o para 8 bits), o que resulta em números menores que são mais fáceis de manusear pelo Befunge. Os hashes com os quais devemos comparar são 0, 38, 59, 64, 88, 92, 114, 117 e 123. Se corresponder a algum desses, sabemos que encontramos uma sequência de caracteres que marca o final de um número, então produzimos um espaço adicional e redefinimos o hash para zero.
Se você está se perguntando por que a base 104 ou o mod 3817, esses valores foram cuidadosamente escolhidos para que a lista de hash com a qual precisávamos comparar pudesse ser representada no menor número possível de bytes.
fonte
Java (OpenJDK 8) ,
554643 bytesSalvando 9 bytes graças ao Forty3 / FrownyFrog
Economizando 3 bytes graças ao Titus
Experimente online!
editar: Obrigado pela recepção e explicação das lambdas!
fonte
g
sufixo regex em vez deAll
).f=(s)=>
vez des->
, que é 4 bytes mais curto.C (gcc) ,
179159146139137116107103102 bytesEdit 1: (Adicionado sugestões do Sr. Xcoder - obrigado! - Minha versão macro era do mesmo tamanho que a sua, mas eu gosto mais da sua.)
Edição 2: o indivíduo de caracteres alterado é comparado às chamadas para
strchr()
Edit 3: K & R's as declarações var (Eww!)
Edit 4: Quando uma macro não é suficiente ...
Edit 5: Refeito com o novo algoritmo sugerido acima. Agradecemos a James Holderness por essa ótima idéia!
Edit 6: Removido o set 0, pois parece ir para lá automaticamente - Técnicas de golfe com código de nível mestre usadas (vírgulas, truque printf, etc.) - obrigado gastropner !
Edit 7: Use memchr e corrigiu um bug apontado por James Holderness .
Edit 7: Use
&&
na verificação final para substituir?
- obrigado jxh .Experimente online!
Não-golfista (que ainda é muito golfista honestamente ...)
Solução grep-esqe antiga e direta:
Versão antiga e limpa.
Experimente online!
fonte
#define
çãoputchar
e remoção de um par de suportes desnecessários.#define p putchar(
(observe o parêntese aberto).c,h=0;f(char*s){while(c=*s++)putchar(c),h=h%10816*104+c%27,c=h%3817,printf(" "+!(c&&strchr("&;@X\\ru{",c)));}
JavaScript,
6657524441 bytess=>s.replace(/one|t[wh]|.i|[fsz]/g," $&")
Muito ingênuo, mas funciona.
Boa captura pelo FrownyFrog para usar 2 caracteres .. exceto "one", em que uma verificação pura de 2 caracteres pode atrapalhar a zeronina. Edit: o single
f
es
foram boas capturas por FrownyFrog que eu negligenciei meus dois primeiros golfe.Obrigado, Neil, pela sugestão de uma lambda sem nome e por poder usar um único caractere para
z
descer para 52.Titus vem com um RegEx menor. Sinto que estamos indo em direção à regex de Uriel eventualmente.
fonte
z|tw|th|f|s|ei|ni|on
on|t[wh]|.i|[fsz]
(-4 bytes)on|
jogo vaizeronine
renderzer onine
Retina ,
2423 bytesExperimente online! Editar: salvou 1 byte graças a @FrownyFrog.
fonte
.....
->.{5}
trabalhar?C,
10399 bytesIsso funciona para qualquer codificação de caracteres (incluindo caracteres estranhos como EBCDIC), porque não usa o valor numérico dos caracteres de entrada. Em vez disso, localiza a primeira e a terceira letras em uma sequência mágica. A distância entre eles indica quantas letras devem avançar com cada impressão.
Programa de teste
fonte
J ,
3735 bytesExperimente online!
fonte
f=:[:>'..[eox]|[tse]?....'&rxall
e funcionou no intérprete, mas não funciona no TIO.C (gcc) ,
106 bytes104 bytes-2 bytes graças a @jxh
Experimente online!
XOR é verdadeiramente nosso maior aliado.
fonte
s[1]
será mais curto.Retina , 28 bytes
Experimente online!
fonte
Pitão ,
35 2723 bytesEconomizou muitos bytes portando a abordagem de Uriel .
Experimente aqui! Abordagem inicial.
fonte
Pip , 27 bytes
Recebe entrada como um argumento de linha de comando. Experimente online!
Substituição simples de regex, insere um espaço antes de cada correspondência de
[zfs]|one|[ent][iwh]
.Pulando na onda de
roubarempréstimos, a expressão regular de Uriel fornece 23 bytes (com-s
sinalizador):fonte
Geléia ,
2321 bytesUm programa completo imprimindo saída separada por alimentação de linha. Nota: uma vez feito, ele imprime repetidamente linhas vazias "para sempre" (até um enorme limite de recursão ou uma falha seg)
Experimente online! (A saída TIO é acumulada, uma implementação local imprimirá linha por linha)
Quão?
Começando com uma lista de caracteres, o programa repetidamente:
O comprimento da primeira palavra é decidido pela inspeção dos três primeiros caracteres da lista atual de caracteres (necessariamente parte da primeira palavra). O programa os converte em ordinais, multiplica-os, modula o resultado em 953, modula em sete, modula em três e adiciona três:
fonte
C
168,145,144, 141 bytesEDIT: Tentei init 'i' para 1 como assim
Para se livrar do espaço em branco à esquerda,
mas ele interrompe a entrada começando com três, sete ou oito
141
Experimente online
144
Experimente online
168
Experimente online!
Ungolfed
As constantes int tornam-se desnecessárias em grandes deslocando um << 8,
mas no caso de você poder comparar com as strings de alguma forma, deve ser a mais natural
146 Usando comparação de strings
Usando comparação de String
Ofuscado
fonte
Geléia , 44 bytes
Experimente online!
fonte
Bastante longo. Você é bem-vindo a jogar golfe.
R , 109 bytes
Experimente online!
fonte
intToUtf8
! 90 bytes seria possível utilizando uma abordagem diferente usando expreg:function(x,p=paste,z=p("(",p(c("zero",broman::numbers),collapse="|"),")"))gsub(z,"\\1 ",x)
Haskell , 81 bytes
Experimente online!
Explicação:
fonte
Python 3 (sem regex) , 85 bytes
Experimente online!
fonte
while s[i:]
e, em seguida, pode reduzi-lo a 93 bytes enviando um recursivolambda
(as funções precisam apenas retornar a saída em vez de imprimi-las).Excel, 181 bytes
Coloca um espaço em frente:
z
,on
,tw
,th
,f
,s
,ei
,ni
fonte
Montagem Z80,
4645 bytes(Foi divertido adaptar o regex legal do Uriel a um ambiente hostil ao regex).
fonte
Geléia ,
4039 bytesExperimente online!
Como funciona
fonte
QuadS ,
2120 bytesExperimente online!
Esta é uma porta da minha resposta da retina .
fonte
APL (Dyalog Unicode) , 25 bytes
Experimente online!
fonte
Python 3 , sem regex,
83 68 6563 bytes-15 graças a Lynn (refatorar em uma única função)
-3 mais graças a Lynn (evite indexar em uma lista com mais aritmética)
... levando a outro salvamento de 2 bytes (evitando parênteses com módulos negativos) :)
Uma função que imprime as palavras separadas por novas linhas e depois gera um
IndexError
.Experimente online! (suprime as exceções para permitir várias execuções no conjunto de testes)
fonte
def f(s):h=[4,5,3][ord(s[0])*ord(s[1])%83%7%3];print(s[:h]);f(s[h:])
h(s)
eh(s)
como eu não percebi ?! Obrigado Lynn!h=(ord(s[0])*ord(s[1])%83%7+1)%3+3
65 bytes! :)Gelatina , 36 bytes
Experimente online!
Algoritmo:
Aposto que podemos fazer ainda melhor.
fonte
Mathematica, 125 bytes
Experimente online!
O TIO envia uma mensagem de erro sobre "CountryData" (???)
Não sei por que isso acontece, mas tudo funciona bem no Mathematica
fonte
Perl 6 ,
4230 bytesTeste-o
Teste
(Traduzido de outras respostas)
fonte
q / kdb +,
5951 bytesSolução:
Exemplo:
Explicação:
Solução rápida, provavelmente melhores e mais abordagens de golfe.
Notas:
46 bytes com alguns jogos simples, substituindo q chamadas por k ones, mas ainda assim uma solução robusta.
asc[(,/)x ss/:($)`z`one`tw`th`f`s`ei`ni]cut x:
fonte