Algumas versões do aplicativo de calculadora Android padrão permitem que você pressione uma tecla, como 'sin' e, em seguida, a tecla 'del' para torná-lo 'si'. Provavelmente apenas um bug que eles não podem se incomodar em remover.
As seguintes letras / agrupamentos de letras são digitáveis:
pecado si s porque co c bronzeado ta t em eu registro eis e
Portanto, 'insípido' é tipificável, porque é sem tamanha e 'tamancos' porque 'c-log-s'. No entanto, 'got' não pode ser digitado, nem 'an' ou 'xyz'.
Escreva um programa que use uma única palavra (ou sequência de letras, apenas az na entrada) como entrada e produza saída para indicar se uma palavra é digitável ou não.
A saída pode ser um único caractere / letra / dígito / etc. ou pode ser maior. Todas as palavras digitáveis devem produzir a mesma saída. Todas as palavras não tipáveis também devem produzir a mesma saída.
PS Por curiosidade, 'insípido' é a palavra mais longa do dicionário que pode ser digitada?
fonte
Respostas:
Perl,
474341 + 1 = 42 bytes-4 bytes graças a @Sunny Pun. -2 bytes graças a @Brad Gilbert b2gills e @Downgoat
Corra com a
-n
bandeira.Definitivamente, ele pode ser jogado mais longe, mas, no espírito da competição, estou deixando o regex principalmente original que criei no início. Retorna nada se verdadeiro,
1
se falso.Experimente online!
Baixei um arquivo de dicionário e a palavra mais longa que encontrei foram 11 letras -
tattletales
fonte
co?
deve ser suficiente, poissin
vai cuidar dos
:) Bom brincar com/log?/
!i
), ou que o único resultado tem de fazer sentido (um remove!
)/^(s|sin?|co?|t|tan?|ln?|log?|e)+$/
ou se preferir:/^([celst]|sin?|co|tan?|ln|log?)+$/
JavaScript (ES6), 44 bytes
Eu acho que esse é o menor regex possível, mas é claro que posso estar errado.
Explicação
Um primeiro lugar óbvio para começar seria uma regex que simplesmente inclui todas as opções separadamente:
Primeiro, podemos observar que
cos
pode ser formado a partir deco
es
, tornando-o desnecessário:Alguns deles, como
sin
esi
, podem ser combinados, tornando a última letra opcional:Isso funciona porque
sin?
combinasi
com ou sem umn
no final, cobrindo ambossin
esi
.Parece haver muitos
n?
também. E se juntarmos todos eles?Mais uma maneira de jogar golfe seria combinar as opções restantes de caractere único em um intervalo de caracteres, mas isso ocorrerá no mesmo comprimento:
E é assim que você joga um regex simples. Acredito que este seja o menor regex possível que corresponda a cada string corretamente, mas talvez não. Atribuirei uma recompensa de +100 a quem conseguir melhorar esse regex.
fonte
^(s|t|co?|(l|ta|si)n?|log?|e)+$
/ /.test.bind(/^((si|ta|l)n?|co?|log?|[ste])+$/)
.a=/^((si|ta|l)n?|co?|log?|[ste])+$/;a.test
por 42 bytes. Eu acredito que isso é permitido, porquea.test
é uma função anônima.f=a.test
não funciona. Gostaria de saber se é aceitável para chamar com o nome alternativoa.test
embora ...Pitão,
37332928 bytesO código contém um caractere não imprimível, então aqui está um
xxd
hexdump.Experimente online.
Extremamenteastronomicamente ineficiente. A complexidade do tempo e do espaço éO (16 n )O (24 n ).Explicação
Primeiro, a
Q
é implicitamente anexado.fonte
s
.Geléia ,
3231302826 bytesEmite 0 se a palavra for digitável, 1 se não for. Graças a @ JonathanAllan por jogar fora um byte!
Experimente online!
Como funciona
fonte
Braquilog , 33 bytes
Corrigido um erro graças a @Synoli.
Experimente online!
Saídas
true.
se tipificáveis oufalse.
não.Explicação
Tentamos deconcatenar a entrada até encontrarmos uma para a qual todas as strings que concatenamos sejam o prefixo de uma das
["sin", "cos", "tan", "log", "lne", "eee]
.fonte
.
depoistrue
?true.
efalse.
de outra forma. Acabei de reimplementar isto: se a saída for ignorada (como está aqui) e não houver gravaçãoSTDOUT
, será impressatrue.
oufalse.
dependendo de o predicado principal ter êxito ou falhar. Ele tem um ponto no SWI-Prolog porquetrue.
efalse.
são realmente programas válidos que sempre tem sucesso / sempre falha.tan
aparecer explicitamente na lista?Perl 6 ,
60 5044 bytesprimeira tentativa ( 60 )
tradução da resposta Perl 5 ( 50 )
usando o
-n
interruptor ( 43 + 1 )O primeiro
?
converte o resultado em booleano e o primeiro+
converte isso em um número (1
paraTrue
,0
paraFalse
)fonte
Mathematica, 101 bytes
Parece que as partes mais difíceis desse desafio estão surgindo com o menor regex e escolhendo o idioma mais conciso para corresponder ao regex. Não tenho nada para contribuir com o primeiro, e o Mathematica não é um bom candidato para o segundo, uma vez que você precisa usá-lo
StringMatchQ
eRegularExpression
. O que posso fazer é responder ao seu PS: "insípido" é a palavra mais longa que você pode digitar?Portanto, "tattletale" parece ser o mais longo de um personagem.
fonte
True
ouFalse
melhor que um único caractere.Maravilha , 41 bytes
Uso:
Totalmente entendeu mal a questão antes, mas agora está tudo resolvido. Saídas
F
para correspondência eT
para não correspondência.Não-competidor, 35 bytes
Uso:
Isso faz uso das expressões regulares aplicáveis, que foram implementadas após esse desafio.
fonte
n
não pode ser digitado, massin
eln
é.sa
como verdadeiro #got
.?
fazer a dócil sub expressão; consulte rexegg.com/regex-quantifiers.html#cheat_sheet . Mas mesmo torná-lo ganancioso??
ou possessivo com ele?+
não funciona por algum motivo (pelo menos em PHP).coelostats
aciona a armadilha (atlo
eta
).Processando, 223 bytes
Finalmente decidiu fazer uma resposta sem regex. Para chamar a função, use
l("tasteless");
. Retorna0
para false e1
true.Código expandido com explicação
Basicamente, iteramos sobre a sequência especificada, construindo
b
char por char. Verificamos utilizandod()
, se qualquer um dostan
,log
... começar comb
. Se isso acontecer, é válido. Senão, verificamos se o caractere nessa posição é válido e redefinimosb
. Agora, se for inválido,0
será retornado, ou ainda será válido. No final, se o programa ainda não tiver retornado algo, retorne1
.fonte
d
função não pode retornar abool
?boolean
do queint
. Tambémtrue
efalse
requer mais bytes que1
e0
Scala, 49 bytes
Retorna true se a string especificada corresponder ao regex, false caso contrário.
fonte
Python 3 , 154 bytes
Experimente online!
fonte
Python 3 ,
149130 bytesedit # 1: raspou 19 bytes usando a solução @Henke
fonte
Python 2, 124 bytes
fonte
PHP, 60 bytes
regex roubado de ETHproductions :
recebe entrada do argumento da linha de comando; imprime
1
para tipável,0
para não tipável.versões anteriores,
757369 bytessubstitui todas as palavras possíveis por uma sequência vazia, retorna o resultado, nega.
divide a entrada por correspondências regex. O sinalizador
1
representaPREG_SPLIT_NO_EMPTY
e informapreg_split
apenas para retornar resultados não vazios. Se a entrada for tipável,preg_split
terá apenas resultados vazios; portanto, retornará uma matriz vazia, o que é falso.!
nega o resultado.Ambas as versões recebem a entrada do argumento da linha de comando
e são impressas
1
se o resultado estiver vazio (a entrada pode ser digitada), senão nada.Notas:
Empacotar o regex usando
?
não funciona aqui; torna as expressões ingratas; provavelmente devido ao retrocesso. E a ordem das alternativas é importante:ta
tem que estar diante de sit
ou o motor deixará de corresponder quando encontrart
.Encontrei uma planilha de quantificação , pensei
??
ou?+
poderia ajudar; mas eles não funcionaram para mim.fonte
Java 8, 55 bytes
Disclamer: eu usei ETHproductions regex porque era muitos bytes menor do que o meu. Crédito total no Regex para ele. O que fiz foi adicionar 24 bytes para torná-lo uma função Java.
Retorna
false
se a palavra não couber no Regex, caso contráriotrue
.fonte