O básico:
Você precisará fornecer um jogo de adivinhação de palavras de nove níveis no menor número possível de caracteres (no seu idioma preferido).
As métricas:
- Forneça uma lista de palavras (uma palavra por linha, separada por uma nova linha) (por exemplo,
/usr/share/dict/words
ou similar poderia fazer). Não há problema em inserir um nome de arquivo ou a própria lista de palavras em sua solução. - Forneça 9 níveis com o aumento do tamanho das palavras (palavras com 4 caracteres e
->
12 caracteres):
Nível 1: uma palavra aleatória da lista de palavras que contém 4 caracteres Nível 2: uma palavra aleatória da lista de palavras que contém 5 caracteres ... ... Nível 8: uma palavra aleatória da lista de palavras que contém 11 caracteres Nível 9: uma palavra aleatória da lista de palavras que contém 12 caracteres
- Em todos os níveis, ofusque uma palavra escolhida aleatoriamente da lista (com um comprimento de palavra específico, é claro) e substitua um certo número de caracteres pelo asterisco (
*
). O número de caracteres a serem substituídos:current_word_length / 3
(arredondar para baixo). Escolha aleatoriamente quais caracteres substituir. - Deixe o jogador "adivinhar" a palavra (apenas uma
try
por nível), dê feedback (correct
ouwrong
) e dê pontos de acordo. Quando correto, o jogador ganhanumber_of_obfuscated_characters * 10 points
. - Imprima a pontuação atual no final de cada nível.
O formato (e amostra de E / S):
Certifique-se de seguir o seguinte esquema de formatação:
Cabeçalho de nível 1 # nível ======= # g * ek # palavra ofuscada nerd # entrada do usuário validação correta de palpite score: 10 # imprimir pontuação # Nível 2 ======= l * nux linux corrigir pontuação: 20 Nível 3 ======= correu ** m aleatória corrigir pontuação: 40 ... Nível 9 ======= sem *** ato * ve semiinativo errado pontuação: 90
Vencedora:
Solução mais curta (por contagem de caracteres de código). Divirta-se jogando golfe!
sem***act*ve
==>semelfactive
Respostas:
Perl, 180 caracteres
Ruby derrotando Perl? Isso não serve! :-)
Como a solução Ruby do jsvnm, mas diferente do código Perl de Joel Berger, esse script usa o nome do arquivo de uma lista de palavras como um parâmetro de linha de comando. Ou seja, você deve executá-lo assim:
Aqui está uma versão de-golfed:
A declaração
vec($_, rand $n, 8) = 42 while ($= = $n/3) > y/*//
contém alguns truques interessantes. Primeiro, 42 é o código ASCII de um asterisco; verifica-se que o usovec
para modificar caracteres únicos em uma string é mais curto do que com issosubstr
. Segundo, a variável$=
usa apenas valores inteiros; portanto, usá-la para armazenar o número de letras ocultas me salva umint
. Por fim,y/*//
é uma maneira curta de contar o número de asteriscos em uma string usando o operador de transliteração.Editar: salvou 7 caracteres usando
$@
para armazenar a pontuação dividida por 10 e acrescentando um zero a ela durante a saída (que, pensando bem, teria sido mais curta que a versão anterior, mesmo se eu tivesse usado uma variável normal) .Editar 2: Acontece que a incorporação de novas linhas literais nas seqüências de saída economiza um caractere em excesso
$,
.fonte
Rubi (188)
pega o nome do arquivo para ler as palavras como argumento.
fonte
Bash, 350 caracteres
fonte
Perl: 266
ou com um pouco mais de espaço em branco
e acho que com um pouco de trabalho poderia ficar ainda melhor!
fonte
R, 363 caracteres
fonte
Python 335
Eu sei que estou um pouco atrasado para a festa, mas o python não está representado, então imaginei o que diabos:
E semi-sem golfe:
fonte
K, 198
Assume um dicionário d no diretório de trabalho atual.
Ungolfed:
fonte