Nota: Hay algunas palabras groseras en esta pregunta.
Hay un rompecabezas implícito planteado en este clásico boceto de Monty Python (también puede preparar el guión en línea).
Varias frases se describen como 'leñosas' o 'metálicas', y una se describe como 'PVC'.
Dada una frase, responda con su tipo de acuerdo con las siguientes 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
Reglas
- Si la entrada pertenece a una de las listas anteriores, la salida debería ser
woody
,tinny
oPVC
, en consecuencia. - Toda la entrada es minúscula.
- Cualquier comportamiento es aceptable para frases que no se enumeran arriba.
- La menor cantidad de bytes en la respuesta gana.
code-golf
string
classification
AJFaraday
fuente
fuente
You may choose how to deal (or ignore) with casing in input and output.
Para aclarar, ¿significa esto que podemos esperar que las entradas estén en mayúsculas?Respuestas:
Stax ,
3025 bytesEjecutar y depurarlo
La representación ascii comentada es esta. No inventé este algoritmo. Está descaradamente arrancado de la solución de pitón de Jonathan Allen .
Ejecute este
fuente
can help you
es un poco confuso, pero lógicamente está bien.Python 2 ,
9973656463 bytesPruébalo en línea!
Alternativas también con 63 bytes:
fuente
Python 2 , 62 bytes
Pruébalo en línea!
¿Cómo?
Este envío utiliza el hecho de que la
hash
función es estable para cadenas en Python 2. Cada entrada válida tiene una salida válida. El módulo repetido con fuerza bruta%97%78%28%15%2
regresa1
para todas las palabras metálicas y de PVC y0
para las palabras amaderadas . Al agregarle el valor('ea' in n)
, obtenemos en2
lugar de1
la entrada 'salto'. Aquí hay una tabla de todos los valores:El tipo a devolver ahora se extrae de la cadena
'wtPoiVonCdn yy'
tomando cada tercer carácter, comenzando en el índice calculado.fuente
JavaScript (ES6), Chrome / Edge, 54 bytes
Debido a que el comportamiento de
parseInt()
las entradas grandes con una raíz de 36 depende de la implementación , este no funciona con SpiderMonkey (Firefox).Pruébalo en línea!
¿Cómo?
La función hash devuelve 3 para palabras Tinny, 1 para PVC y 0 , 4 , 5 o 6 para palabras Woody. Las palabras marcadas con un asterisco se truncan implícitamente porque parseInt () considera el espacio como un carácter no válido .
Versión anterior,
5957 bytesPruébalo en línea!
¿Cómo?
A continuación se muestran los diferentes pasos de la función para cada entrada. El resultado del primer módulo es una aproximación dentro de la precisión de los números JS y es matemáticamente inválido para el coito .
fuente
Retina ,
393836 bytesSe guardó 1 byte usando tres pares de sustitución como en la respuesta de Adám.
Pruébalo en línea!
Tengo la
.p.|is*t
expresión regular del golfista de expresiones regulares de Peter Norvig .fuente
Java 8,
818067 bytesRegex de la respuesta de Retina de @MatrinEnder .
Pruébalo en línea.
Respuesta original:
8180 bytesPruébalo en línea.
Explicación:
Explicación adicional:
woody
palabras están presentes en esta Cadena anterior, ni esle
deleap
.woody
palabras tiene unaa
como tercera letra, por lo que se utiliza para llegarleap
aPVC
si no es unatinny
palabra.woody
lista.fuente
Haskell , 61 bytes
Pruébalo en línea!
Utiliza esta lógica encontrada a mano:
i
o primera letrar
,a
on
sontinny
l
(leap
) esPVC
woody
Lynn guardó un byte revisando
leap
su primera letra.fuente
"leap"
con|a=='l'="PVC"
.QuadS ,
3432 bytesUtiliza descaradamente el sistema de Martin Ender , incluida la expresión regular del golfista de expresiones regulares de Peter Norvig .
Pruébalo en línea!
⊃⍵
elegir la primera aparición deea
"ea".p.|is?t
"p" rodeado de letras O "i" y "t" con una "s" opcional entre ellos al$
final de la entrada... pero sustituyendo los partidos con el correspondiente de los siguientes:
PVC
tinny
woody
La función APL Dyalog de 43 bytes equivalente es:
¡Pruebe todos los casos en línea!
fuente
C (gcc) , 81 bytes
Pruébalo en línea!
El primer orden del día fue encontrar alguna función hash que separara las palabras en sus categorías. Después de jugar un poco, tropecé
(s[0] ^ (s[1] << 2)) & 0x7f
, donde el 0x7f está allí para reducirlo a niveles ASCII imprimibles. Esto produjo la siguiente información (las tablas están ordenadas, pero no las cadenas resultantes):Las colisiones hash no importan, ya que se confían a la misma categoría. Solo tenemos que verificar si el hash resultante está en la cadena de hashes Tinny ("HzYfPW"), ya que los hash de Woody están por debajo del hash de PVC (120). Si tiene 120 o más, y no es una palabra metálica, debe ser de PVC. Si no es una palabra Tinny, y el hash está por debajo de 120, entonces debe ser una palabra buena y amaderada.
fuente
Código de máquina x86 de 32 bits, 39 bytes
Hexdump:
La función hash es la multiplicación por un número "mágico"
0x2c616f47
. Solo hay 6 números que se pueden usar con este código.En primer lugar, escribe
PVC
en la salida. Esto se sobrescribirá, si es necesario.Después del hashing, verifica la palabra PVC; la verificación es
al = ah
: lo elegí porque es una pequeña instrucción de 2 bytes. Luego, escribe cualquierawood
otinn
, dependiendo del signo del resultado hash. Entonces, escribey
.Código de montaje:
fuente
Jalea ,
2726 bytesUn enlace monádico que acepta y devuelve listas de caracteres.
Pruébalo en línea!
¿Cómo?
fuente
Haskell , 75 bytes
-2 bytes gracias a Laikoni.
Pruébalo en línea!
RIP
enklact
.fuente
f"leap"="PVC";f s|
es más corto quef s|s=="leap"="PVC"|
.Sucio ,
735754 bytesPruébalo en línea!
Explicado:
Para una versión anterior similar (la actualizaré cuando deje de jugar golf)
El cuerpo de esto se compone de:
Si terminamos yendo a la izquierda, entonces tenemos:
De lo contrario, esto verifica si la cadena comienza con cualquiera de "nar":
Luego verificamos si la segunda letra es "i":
Si todos fracasan, nos topamos con
Si terminamos saltando, nos envolvemos para
fuente
C # 97 bytes
Fui a buscar un patrón en la longitud de las cadenas y descubrí que son únicas, excepto las longitudes 4 y 8. Así que hago un caso especial al observar los primeros caracteres. Oh, bueno, todavía es más corto que algunas respuestas. :)
fuente
string t(string w)=>
puede ser justow=>
. Puede convertir'p'
y otros personajes a sus representaciones int creo. Puede eliminar el punto y coma finalPython , 59 bytes
Pruébalo en línea!
Utiliza la indexación de la respuesta Python de ovs pero una función de elección más simple y más corta:
Si la décima letra de la palabra,
w
con envoltura ((w*4)[9]
- donde sew*4
repitew
cuatro veces) es una letra en la palabra tin (in"tin"
), entonces la palabra es metálica , de lo contrario, si la tercera letra (w[2]
) es un a (<'b'
), entonces la palabra es PVC de lo contrario la palabra es leñosa .... este 59 hace el mismo trabajo:
fuente
C, 107 bytes
Pruébalo en línea!
fuente
Lote, 145 bytes
Toma entrada en STDIN. Explicación: Después de comprobar
leap
, las palabras de hojalata o bien comenzar con una de las cartasa
,n
or
o su segunda carta esi
.fuente
CJam , 35 bytes
Pruébalo en línea!
Olvidé por completo que había comenzado una búsqueda de la fuerza bruta en busca de expresiones cortas para dividir las cadenas leñosas y metálicas en dos clases. Acabo de encontrar la ventana de la consola donde se ejecutó la búsqueda y resulta que en realidad encontró algo ...
Explicación
fuente
Excel, 81 bytes
Usando el método 'anetisilire'.
fuente
Japt ,
3634 bytesUtiliza un RegEx de la solución Retina de Martin.
Pruébalo | Verifique todos los casos de prueba
fuente
JavaScript,
60, 50EDITAR Vi todas las otras respuestas de expresiones regulares. Supongo que solo estoy ciego. De todos modos, aquí hay uno que usa la misma expresión regular
Además, ahora, supera a la otra respuesta JS
Retazo:
Vieja respuesta
Todavía no vi ninguno con expresiones regulares, así que pensé en probarlo.
No estoy seguro si esto cuenta como 60 o más porque no incluí una declaración de devolución. Agregaré un fragmento cuando me conecte a mi computadora
Editar: Fragmento
fuente