Quando eu era calouro no ensino médio cursando química, olhava para a tabela periódica de elementos e escrevia palavras sujas com o número de elementos (HeCK seria 2619, 2-6-19).
Eu estava pensando nisso outro dia, quando vi uma camisa incrível que soletrava BeEr (4-68)
Portanto, meu desafio do codegolf é o programa mais curto para gerar uma lista de palavras que você pode escrever com a tabela periódica de elementos E o código numérico que representaria essa palavra.
/ usr / share / dict / words ou qualquer outro dicionário que você deseja usar para a lista de palavras. Se você estiver usando uma lista de palavras "não padrão", informe-nos o que é!
Respostas:
GolfScript (
339 303 302 301294 caracteres)Com o crédito ao PhiNotPi, cuja observação sobre elementos desnecessários me permitiu economizar 33 caracteres.
Isso é muito mais idiomático do GolfScript do que a abordagem recursiva anterior.
Observe que eu permito que as palavras no dicionário sejam maiúsculas e minúsculas (
L
é uma função para o texto em minúsculas, supondo que não importa se caracteres não-alfa são quebrados), mas rejeito qualquer um com apóstrofos ou acentos.Como se trata de código de golfe, otimizei o tamanho do código, e não a velocidade. Isso é terrivelmente lento. Ele espera que a lista de palavras seja fornecida em stdin e produza stdout no formato:
(em maiúsculas e minúsculas quaisquer palavras de entrada em maiúsculas e minúsculas para as quais encontra uma correspondência).
Se você está mais interessado nos elementos do que nos números em si, pelo preço baixo e baixo de
261253 caracteres, você pode usaro que dá saída como
fonte
"
não me incomoda. E, é claro, Peter Taylor entra e impressiona a todos com o golfscript.Ruby -
547393Nova versão, obrigado pelas sugestões:
usa expressões regulares. lento e muito espaço para melhorias, mas devo ir agora :-)
fonte
e='HHeLiBe...LvUusUuo'.scan(/[A-Z][a-z]*/).map &:downcase
. 2) Regex variável nunca é usado. 3) Leia as palavras de entrada padrão:$<.each{|w|...
. Com essas modificações, o código foi reduzido para 410 caracteres.Python 710 (357 + 261 + 92)
Certamente haverá espaço para melhorias em algum lugar. Também é importante notar que o segundo nível de recuo usa o caractere de tabulação.
Leva apenas mais de 5 segundos (no meu computador) para percorrer todo o dicionário, produzindo resultados como este:
Ao adicionar outros 18 caracteres, você pode obter a saída com a capitalização correta:
Você também pode verificar palavras individuais:
fonte
Python - 1328 (975 + 285 caracteres de código + 68 código de dicionário)
Para a parte do dicionário:
fonte
C,
775771 caracteresEntrada : o Word por linha deve estar em minúsculas.
usr/share/dict/words
está bem.Saída : palavra e números, por exemplo:
acceptances,89,58,15,73,7,6,99
Lógica :
c(w,o,l)
verifica a palavraw
, começando com o elementol
.A recursão bidirecional é usada - se o primeiro elemento corresponder ao início da lista de elementos, verifique o restante da
w
lista de elementos completa. Se essa correspondência falhar, verifique a palavra no final da lista.O buffer
o
acumula os números dos elementos ao longo do caminho bem-sucedido. Após uma correspondência, ela conterá a lista de números e será impressa.Problemas :
a lista não é codificada com eficiência - muito
"
e,
". Mas dessa maneira é fácil de usar. Tenho certeza de que pode ser muito melhorada, sem muito custo no código.fonte