Nota: Existem algumas palavras rudes nesta pergunta.
Há um quebra-cabeça implícito nesse esboço clássico do Monty Python (você também pode preparar o script online).
Várias frases são descritas como 'woody' ou 'tinny', e uma é descrita como sendo 'PVC'.
Dada uma frase, responda com seu tipo de acordo com as seguintes listas:
woody
:
gone
sausage
seemly
prodding
vacuum
bound
vole
caribou
intercourse
pert
thighs
botty
erogenous zone
ocelot
wasp
yowling
tinny
:
litter bin
newspaper
antelope
recidivist
tit
simpkins
PVC
:
leap
Regras
- Se a entrada pertencente a uma das listas acima, a saída deve ser
woody
,tinny
ouPVC
, em conformidade. - Toda entrada é minúscula.
- Qualquer comportamento é aceitável para frases que não estão listadas acima.
- O menor número de bytes na resposta vence.
code-golf
string
classification
AJFaraday
fonte
fonte
You may choose how to deal (or ignore) with casing in input and output.
Para esclarecer, isso significa que podemos esperar que a entrada esteja em maiúsculas?Respostas:
Stax ,
3025 bytesExecute e depure
A representação ascii comentada é essa. Eu não inventei esse algoritmo. É descaradamente arrancado da solução python de Jonathan Allen .
Execute este
fonte
can help you
é um pouco confuso, mas tudo bem logicamente.Python 2 ,
9973656463 bytesExperimente online!
Alternativas também com 63 bytes:
fonte
Python 2 , 62 bytes
Experimente online!
Quão?
Esse envio usa o fato de que a
hash
função é estável para seqüências de caracteres no Python 2. Cada entrada válida possui uma saída válida. O módulo repetido de força bruta%97%78%28%15%2
retorna1
para todas as palavras minúsculas e PVC e0
para palavras amadeiradas . Ao adicionar o valor('ea' in n)
a ele, temos2
em vez de1
para a entrada de 'salto'. Aqui está uma tabela de todos os valores:O tipo a ser retornado agora é extraído da sequência
'wtPoiVonCdn yy'
, pegando cada terceiro caractere, começando no índice calculado.fonte
JavaScript (ES6), Chrome / Edge, 54 bytes
Como o comportamento de
parseInt()
entradas grandes com um raio de 36 é dependente da implementação , este não funciona com o SpiderMonkey (Firefox).Experimente online!
Quão?
A função hash retorna 3 para palavras Tinny, 1 para PVC e 0 , 4 , 5 ou 6 para palavras Woody. As palavras marcadas com um asterisco são implicitamente truncadas porque o espaço é considerado como um caractere inválido por parseInt () .
Versão anterior,
5957 bytesExperimente online!
Quão?
Abaixo estão as diferentes etapas da função para cada entrada. O resultado do primeiro módulo é uma aproximação dentro da precisão dos números JS e é matematicamente inválido para a relação sexual .
fonte
Retina ,
393836 bytesEconomizou 1 byte usando três pares de substituição, como na resposta de Adám.
Experimente online!
Peguei a
.p.|is*t
regex do jogador de regex de Peter Norvig .fonte
Java 8,
818067 bytesRegex da resposta Retina de @MatrinEnder .
Experimente online.
Resposta original:
8180 bytesExperimente online.
Explicação:
Explicação adicional:
woody
palavras está presente nesta String acima, nem éle
deleap
.woody
palavras tem uma
como terceira letra, de modo que é usado para obterleap
aPVC
se não é umatinny
palavra.woody
lista.fonte
Haskell , 61 bytes
Experimente online!
Usa essa lógica encontrada à mão:
i
ou primeira letrar
,a
oun
sãotinny
l
(leap
) éPVC
woody
Lynn salvou um byte verificando
leap
sua primeira letra.fonte
"leap"
com|a=='l'="PVC"
.QuadS ,
3432 bytesDesavergonhadamente usa o sistema de Martin Ender , incluindo o regex do regex golfista de Peter Norvig .
Experimente online!
⊃⍵
escolha a primeira ocorrência deea
"ea".p.|is?t
"p" cercado por letras OR "i" e "t" com um "s" opcional entre elas$
final da entrada… Mas substituindo as correspondências pela seguinte:
PVC
tinny
woody
O equivalente a 43 bytes função Dyalog APL de equivalente é:
Experimente todos os casos online!
fonte
C (gcc) , 81 bytes
Experimente online!
A primeira ordem do dia era encontrar alguma função de hash que separasse as palavras em suas categorias. Depois de algumas discussões, eu tropecei
(s[0] ^ (s[1] << 2)) & 0x7f
, onde o 0x7f está lá para reduzi-lo aos níveis ASCII imprimíveis. Isso produziu as seguintes informações (as tabelas são classificadas, mas não as seqüências resultantes):As colisões de hash não importam, pois são confiadas à mesma categoria. Só precisamos verificar se o hash resultante está na cadeia de hashes Tinny ("HzYfPW"), pois os hashes Woody estão todos abaixo do hash PVC (120). Se 120 ou superior, e não uma palavra Tinny, deve ser PVC. Se não for uma palavra Tinny, e o hash estiver abaixo de 120, deve ser uma palavra boa e amadeirada.
fonte
código de máquina x86 de 32 bits, 39 bytes
Hexdump:
A função hash é multiplicação por um número "mágico"
0x2c616f47
. Existem apenas 6 números que podem ser usados com este código.Primeiro de tudo, ele grava
PVC
na saída. Isso será substituído, se necessário.Após o hash, ele verifica a palavra PVC; a verificação é
al = ah
- eu a escolhi porque é uma pequena instrução de 2 bytes. Em seguida, ele grava umwood
outinn
, dependendo do sinal do resultado do hash. Então, ele escrevey
.Código de montagem:
fonte
Geléia ,
2726 bytesUm link monádico que aceita e retorna listas de caracteres.
Experimente online!
Quão?
fonte
Haskell , 75 bytes
-2 bytes graças a Laikoni.
Experimente online!
RIP
enklact
.fonte
f"leap"="PVC";f s|
é mais curto quef s|s=="leap"="PVC"|
.Sujo ,
735754 bytesExperimente online!
Explicado:
Para uma versão mais antiga semelhante (atualizo-a quando parar de jogar)
O corpo disso é composto de:
Se acabarmos indo para a esquerda, temos:
Caso contrário, isso verifica se a sequência começa com qualquer um dos "nar":
Em seguida, verificamos se a segunda letra é "i":
Se todos eles caírem, encontramos
Se acabarmos pulando, enrolamos para
fonte
C # 97 bytes
Eu procurei um padrão no comprimento das strings e descobri que elas são únicas, exceto nos comprimentos 4 e 8. Portanto, eu caso especialmente as que estão observando os primeiros caracteres. Bem, ainda é mais curto que algumas respostas. :)
fonte
string t(string w)=>
pode ser justow=>
. Você pode converter'p'
e outros caracteres em suas representações int, eu acho. É possível remover o cólon semi fugaPython , 59 bytes
Experimente online!
Usa a indexação da resposta Python do ovs mas uma função de escolha mais simples e mais curta:
Se a décima letra da palavra,
w
com quebra automática ((w*4)[9]
- onde sew*4
repetew
quatro vezes) for uma letra na palavra tin (in"tin"
), a palavra será tinny ; caso contrário, se a terceira letra (w[2]
) for a (<'b'
), a palavra será PVC. caso contrário, a palavra é amadeirada .... este 59 faz o mesmo trabalho:
fonte
C, 107 bytes
Experimente online!
fonte
Lote, 145 bytes
Recebe entrada em STDIN. Explicação: Depois de verificar para
leap
, palavras tinny quer começar com uma das cartasa
,n
our
ou a sua segunda carta éi
.fonte
CJam , 35 bytes
Experimente online!
Esqueci completamente que havia iniciado uma busca de força bruta por expressões curtas para misturar as cordas amadeirada e fina em duas classes. Acabei de encontrar a janela do console onde a pesquisa foi executada e, na verdade, ele encontrou algo ...
Explicação
fonte
Excel, 81 bytes
Usando o método 'anetisilire'.
fonte
Japonês ,
3634 bytesUsa um RegEx da solução Retina da Martin.
Experimente | Verifique todos os casos de teste
fonte
JavaScript,
60, 50EDIT Vi todas as outras respostas regex. Acho que sou apenas cego. Enfim, aqui está um usando o mesmo regex
Além disso, agora, supera a outra resposta JS
Snippet:
Resposta antiga
Ainda não vi nenhum com regex, então pensei em tentar
Não tenho certeza se isso conta como 60 ou mais porque eu não incluí uma declaração de retorno. Adicionarei um trecho quando eu chegar no meu computador
Editar: Snippet
fonte