Como todos sabemos, os limericks são poemas curtos, de cinco linhas e ocasionalmente lascivos, com um esquema de rima AABBA e um medidor anapésico (o que quer que seja):
Escrevendo a absurda
linha de Limerick, linha um e linha cinco, rima em palavras
E assim como você calculou
Eles rimam com o segundo
A quarta linha deve rimar com o terceiro
Você tem a tarefa de escrever o programa mais curto que, quando alimentado um texto de entrada, imprime se considera que a entrada é uma limerick válida. A entrada pode estar na linha de comando ou através da entrada padrão, a seu critério, e a saída pode ser um simples "Y" / "N" ou uma pontuação de confiança, novamente à sua opção.
Aqui está outro exemplo de uma limerick correta:
Havia uma jovem cujos olhos
eram únicos quanto à cor e tamanho
Quando os abriu largamente
As pessoas se viraram
e começaram a se surpreender
Mas o poema abaixo claramente não é uma limerick, pois não rima:
Havia um homem velho de abelhas
que foi picado no braço por uma vespa.
Quando perguntado: "Dói?"
Ele respondeu: "Não, não,
estou tão feliz que não tenha sido uma vespa".
Nem é este, pois o medidor está errado:
Ouvi falar de um homem de Berlim
que odiava o quarto em que estava.
Quando perguntei por que
ele diria com um suspiro:
"Bem, veja bem, ontem à noite havia alguns bandidos que estavam comemorando os ursos vencendo os condenados. Copa do Mundo, e eles estavam muito barulhentos, então eu não consegui dormir por causa do barulho ".
Pistas
Aqui estão algumas das dicas que você pode usar para decidir se sua entrada é ou não uma limerick:
- Limericks sempre têm cinco linhas.
- As linhas 1, 2 e 5 devem rimar.
- As linhas 3 e 4 devem rimar.
- As linhas 1, 2 e 5 têm cerca de 3x3 = 9 sílabas, enquanto a terceira e quarta têm 2x3 = 6 sílabas
Observe que nenhum desses, exceto o primeiro, é fácil e rápido: uma taxa de correção de 100% é impossível.
Regras
Sua entrada deve, no mínimo, categorizar corretamente os exemplos 1 a 3 de maneira determinística.
Você tem permissão para usar qualquer linguagem de programação que desejar, exceto, é claro, as linguagens de programação projetadas especificamente para este concurso (veja aqui ).
Você não tem permissão para usar nenhuma biblioteca, exceto as ofertas padrão da sua linguagem de programação.
Você está autorizado a supor que esse arquivo , o dicionário pronounciation CMU Sphinx, está em um arquivo chamado 'c' no diretório atual.
Você não tem permissão para codificar para as entradas de teste: seu programa deve ser um categorizador geral de limerick.
Você tem permissão para assumir que a entrada é ASCII, sem nenhuma formatação especial (como nos exemplos), mas seu programa não deve ser confundido pela interpunção.
Bónus
Os seguintes bônus estão disponíveis:
- Seu programa gera seu resultado como uma limerick? Subtrair bônus de comprimento de 150 caracteres !
- Seu programa também identifica corretamente sonetos? Subtrair bônus de comprimento extra de 150 caracteres !
- Seu programa gera seu resultado como um soneto quando usado em um soneto? Subtraia 100 caracteres de bônus de comprimento extra adicional!
Finalmente...
Lembre-se de mencionar quais bônus você acha que merece, se houver, e subtrair o bônus do seu número de caracteres para chegar à sua pontuação. Este é um concurso de código de golfe : a entrada mais curta (ou seja, a entrada com a menor pontuação) vence.
Se você precisar de mais dados de teste (positivos), consulte o OEDILF ou o Book of Nonsense . Dados de teste negativos devem ser fáceis de construir.
Boa sorte!
fonte
code-challenge
devido aos bônus. Por favor, leia as descrições das tagsRespostas:
Python: 400-150-150 = 100
O script mais curto que eu poderia inventar é aquele ...
... mas nem tente. Ele analisa o dicionário fornecido para cada palavra que encontra, sendo muito lento. Além disso, um erro é gerado sempre que uma palavra não está no dicionário.
O código ainda atende aos requisitos: reconhecer se o texto passado via stdin é uma limerick, um soneto ou nenhum deles.
Com apenas mais 20 caracteres, aqui está a versão otimizada:
Recursos
Uso
São possíveis 3 saídas diferentes:
Código expandido com explicações
fonte
sys.stdin.read()
ou umopen(sys.argv[1]).read()
lugar) e recontar.ECMAScript 6 (138 pontos; tente no Firefox):
288
-150
bônus de pontos por incluir limerick (extraído de @MathieuRodic).Notas:
Espera que a variável
c
contenha o conteúdo do arquivo de dicionário, pois você não pode ler arquivos no ECMAScript simples.O ECMAScript não possui entrada padrão, mas
prompt
geralmente é considerado "entrada padrão"; no entanto, comoprompt
converte quebras de linha em espaços na maioria dos navegadores (se não todos), estou aceitando a entrada da variáveli
.Código não destruído:
fonte