Pangrams
A ligeira raposa marrom saltou sobre o cão preguiçoso.
Este é um exemplo de um pangram - uma frase que contém todas as letras do alfabeto pelo menos uma vez.
Um pangram auto-enumerado é uma frase que preenche os critérios para ser um pangram produzindo uma análise de sua própria contagem de letras.
Um exemplo de conseguir isso é a frase
Este pangram contém quatro As, um B, dois Cs, um D, trinta Es, seis Fs, cinco Gs, sete Hs, onze Is, um J, um K, dois Ls, duas Ms, dezoito Ns, quinze Os, dois Ps , um Q, cinco Rs, vinte e sete Ss, dezoito Ts, dois Us, sete Vs, oito Ws, dois Xs, três Ys e um Z.
O desafio
Produza uma função com a entrada sendo a sequência que leva ao inventário de letras. No exemplo, a entrada seria "Este pangram contém". A quantidade de cada letra deve estar na forma escrita e contribuir para a contagem de letras exibida.
Regras
- A vírgula de Oxford é opcional
- Use um e comercial antes de Z (ou, no modo difícil, inclua a capacidade de alternar entre "&" e "e" na função)
- Cada letra conta para a contagem total de letras
- Não há números não escritos
- Isso é código-golfe, então o código mais curto em bytes vence
- Em Hono u r do casal neste fim de semana, os números devem ser escritos em Inglês da Rainha. por exemplo,
nine hundred and ninety-nine Gs
para 999 ocorrências da letra G enine hundred and nine Gs
para 909. - Ordens de magnitude devem ser escritas na convenção padrão de nomes em pequena escala
Casos de borda
- Existem alguns casos em que o código fica preso em um loop - por exemplo, se houver dois sistemas operacionais, o código aumentará a contagem para três sistemas operacionais, o que faz com que o código conte dois sistemas operacionais novamente. Se calcular todas as outras letras antes de voltar para isso não pode resolver o problema, considerar a entrada de ser um falso arranque e saída
false
,null
ou uma string vazia. - Se uma letra tiver mais de 999 ocorrências, a entrada deve ser considerada um acionador de partida falso.
Casos de teste
- "Este pangram contém" deve exibir a frase de exemplo
fonte
o
-s sem a palavra para a contagem, quando você a soletrartwo
, toda a sequência terá trêso
-s, o que significa que a palavra está incorreta, alternando-a novamente , etc.Rob enjoys any sentence with two As, two Bs, two Cs, one D, thirty five Es, four Fs, three Gs, nine Hs, eight Is, two Js, one K, two Ls, one M, twenty two Ns, eighteen Os, one P, one Q, nine Rs, twenty three Ss, twenty three Ts, three Us, four Vs, eleven Ws, one X, seven Ys, & one Z.
Respostas:
Python 2 , 615 bytes
Experimente online!
A função
f
assumep
como prefixo da string; e retorna uma tupla de um número inteiro representando o número de etapas executadas e o autograma.A função
g
codifica um número1<=n<=999
para sua string em inglês; ocupa 291 bytes, aproximadamente metade da contagem total de bytes. O códigocodifica a string
s
em um pangram (potencialmente autograma)t
.Nós loop sobre o processo, esperando a situação em que encontramos uma
t
forma quet
é um autogram (isto é, ondet==s
).SeQuando entramos em um loop, aleatoriamente cutucamos as contagens de letras de maneira completamente ad hoc.Para a maioria dos valores de
p
, esse processo expirará no TIO. Normalmente, milhões de possibilidades são examinadas antes de encontrar uma combinação 'vencedora'.Não tenho nenhuma prova, mas meu palpite é: (a) além de uma exaustiva pesquisa de força bruta semelhante à que o criador Lee Sallows descreve aqui e implementa em hardware (!), Esse tipo de heurística aleatória é tão bom como você pode obter; e (b) não haverá soluções para muitas frases iniciais (a maioria?)
p
.fonte
map(chr,range(65,91))
salva alguns bytes.