Reto
Dada una sola palabra como entrada, determine si la palabra es impar o par.
Palabras impares y pares
Asuma las reglas generales:
odd + odd = even
even + odd = odd
odd + even = odd
even + even = even
En el alfabeto, las letras impares son:
aeiou
Y las letras pares son:
bcdfghjklmnpqrstvwxyz
Lo mismo se aplica a las letras mayúsculas ( AEIOU
son impares y BCDFGHJKLMNPQRSTVWXYZ
pares).
Luego 'agrega' cada una de las letras de la palabra juntas. Por ejemplo, la palabra cats
es equivalente a:
even + odd + even + even
Lo que se simplifica a:
odd + even
Lo cual se simplifica aún más para:
odd
Entonces la palabra cats
es extraña.
Ejemplos
Input: trees
Output: even
Input: brush
Output: odd
Input: CAts
Output: odd
Input: Savoie
Output: even
Input: rhythm
Output: even
Reglas
Toda entrada será una sola palabra que solo contendrá caracteres alfabéticos.
Si la palabra es impar, genera un valor verdadero. Si la palabra es par, genera un valor falsey.
Victorioso
El código más corto en bytes gana.
code-golf
string
decision-problem
Decaimiento Beta
fuente
fuente
Respuestas:
05AB1E , 6 bytes
Explicación
Pruébalo en línea!
fuente
EXCEL, 79 bytes:
entrada:
esta función se puede colocar en cualquier lugar EXCEPTO A1
Ponga su palabra en cuestión en A1.
Salida: 0 si es par, 1 si es impar.
fuente
JavaScript (ES6),
34413332 bytesGuardado 1 bytes gracias a Arnauld:
1
0
Soluciones anteriores:
33 bytes gracias a Arnauld:
1
0
Otra forma sin operadores bit a bit:
41 bytes:
1
0
null
42 bytes para devolver en
0
lugar denull
:34 bytes, saltos en palabras sin letras impares:
Guardado 2 bytes gracias a Shaun H
fuente
f=
no es necesario, y llamar a exec en el objeto regex es más corto.s=>/[aeiou]/ig.exec(s).length%2
exec
con lag
bandera.s=>s.split(/[aeiou]/i).length&1^1
?s=>~s.split(/[aeiou]/i).length&1
en realidad es un byte más corto.Cerebro-Flak
206196192178 + 3 = 181 bytesPruébalo en línea!
Esto requiere que la
-c
bandera se ejecute en modo ASCII agregando 3 bytes adicionales a la longitud del programa.Sin golf
Explicación
Primero almacene la altura de la pila para propósitos futuros
Luego, mientras la pila no está vacía (se supone que ninguno de los caracteres es cero)
Reste noventa y siete (y almacene 3 para optimizaciones posteriores)
Si no es cero (es decir, no es a)
Resta 4 (y almacena 4 para optimizaciones posteriores)
Si no es cero (es decir, no e)
Resta 4 (y almacena 4 para optimizaciones posteriores)
Si no es cero (es decir, no i)
Resta 6 (y almacena 6 para optimizaciones posteriores)
Si no es cero (es decir, no o)
Resta 6 (almacena 6 porque el programa espera uno más tarde)
Si no es cero (es decir, no u)
Mueve el resto a la otra pila y pon un cero en la pila activa para escapar de todos los ifs
Una vez que se hayan escapado todos los if, elimine el cero y el seis
Una vez que se hayan procesado todos los caracteres, reste la altura del desplazamiento de la altura almacenada originalmente.
Mod por dos
fuente
-c
solo es +1 byte ya que la respuesta de Perl también solo agrega 1 byte / flag.perl -pe'code'
es solo un byte más largo queperl -e'code'
.C, 42 bytes
Esto funciona con GCC 4.x en una CPU x86-64. Los resultados pueden variar con diferentes configuraciones.
Probarlo en repl.it .
Con el costo de 5 bytes más, se puede evitar un comportamiento indefinido, por lo que el código debería funcionar siempre que los int s tengan al menos 32 bits de ancho.
Cómo funciona
Módulo 32 , los códigos de caracteres de todas las letras impares son 1 , 5 , 9 , 15 y 21 . 2130466 es el entero de 32 bits que ha establecido bits en estas posiciones y bits no establecidos en todos los demás.
Cuando se llama a f en una cadena, primero verifica si el primer carácter de la cadena es un byte nulo (terminador de cadena). Si lo es,
*s
produce 0 y f vuelve 0 . De lo contrario,*s
arroje el código de caracteres de una letra y&&
se ejecutará el argumento correcto de la lógica AND ( ).Para
>>
, GCC genera una instrucción de turno. En una CPU x86-64, la instrucción correspondiente para un entero de 32 bits ignora todos menos los 5 bits inferiores del argumento correcto, lo que evita reducir el*s
módulo 32 . El desplazamiento a la derecha y el siguiente bit a bit Y con 1 extrae el bit de 2130466 que corresponde a la letra, que será 1 si y solo si la letra es impar.Luego, incrementamos el puntero s (descartando efectivamente la primera letra), llamamos a f recursivamente en la cadena decapitada y tomamos el XOR bit a bit del resultado anterior y el resultado de la llamada recursiva.
fuente
sed
44(42 + 1 para -n) 43-1 gracias a Neil
Imprime
o
para impar y nada para inclusofuente
s/[aeiou][^aeiou]*[aeiou]//gi
podría ahorrarte un byte, si he contado correctamente.Python, 41 bytes
fuente
Python, 42 bytes
No hay mucho que explicar aquí. Una función sin nombre que devuelve 0 o 1.
fuente
Brain-Flak ,
524, 446, 422 bytesPruébalo en línea!
Versión no legible y más legible:
fuente
Jalea ,
13 1211 bytes-1 byte gracias a @Luis Mendo (usar
Ḃ
para reemplazar%2
)-1 byte gracias a @Dennis (usar una compresión de cadena)
Todos los casos de prueba están en TryItOnline
¿Cómo?
No competidores, 5 bytes (ya que acabo de agregar la función
Øc
)Casos de prueba también en TryItOnline
Igual que el anterior, pero
Øc
produce las vocales del alfabeto latino,'AEIOUaeiou'
fuente
%2
porḂ
“¡ẎṢɱ»
.“”«»‘’
(también⁾
hay uno para una cadena de dos caracteres, pero que se usa dentro de cadenas comprimidas).Haskell,
3837 bytes¡Gracias a Angs por un byte!
fuente
odd
lugar deeven
. ¡Guarda un byte!Python 3, 53 bytes
Esto probablemente se pueda jugar más:
fuente
in
y'aeiou'
yfor
, y el usosum
de ahorrar 8 bytes:lambda n:sum(x in'aeiou'for x in n.lower())&1
(aunque, como se puede ver en el post de DJMcMayhem utilizando todas las vocales diez es también más corta)sum()
comando antes de este golf, ¡así que una vez más aprendí algo! Que tengas un buen día :)Java, 73
vi un par de otras respuestas de Java, de lo contrario no habría compartido. Gracias a Phaeze por guardar un byte.
fuente
%2>0
C 52 bytes
El principal y el resultado:
fuente
h(o){return~-o?1^h(1+strpbrk(o,"aeiouAEIOU")):1;}
ahorra 3 bytes.Pyth, 14 bytes
Pruébalo en línea!
Explicación:
fuente
Rubí, 30 bytes.
fuente
Vim,
32, 31, 29 pulsaciones de teclasComo el intérprete de V es compatible con versiones anteriores, ¡puede probarlo en línea! aquí.
UnoThree bytes guardados gracias a m-chrzan!fuente
s/.../gi
lugar des/\c.../g
?'<C-r>"'
->@"
.@"
15 minutos. El mejor consejo de vim que tengo es usar:help foo
y/
la documentación: P.:h foo
es más corto. : PJava 7, 88
Sin golf:
fuente
dimwit , 14 bytes (no competidor)
Pensé que este sería un desafío divertido y simple para comenzar con un nuevo idioma.
Explicación
a
- empujar una nueva matriz a la matrizr[aeiou]}
- contar las ocurrencias de todos los valores que coinciden con la expresión regular "[aeiou]" en la primera matriz (ya que la primera matriz contiene la entrada), ignorando mayúsculas y minúsculas, y empujar ese valor al final de la última matriz.e
- si el último número en la última matriz es par (que establecemos en el número de ocurrencias), realice las siguientes operaciones hasta un paréntesis de cierre ("}")t
- detener la ejecución, borrar la matriz y establecer el primer valor como falso}
- fin dele
bloque de códigoT
- detiene la ejecución, borra la matriz y establece el primer valor como verdaderoPruébalo en línea!
Use el campo Entrada para ingresar la palabra.
Pronto agregaré documentación ...
fuente
PowerShell v2 +,
4542 bytesToma entrada
$args[0]
, la envía-replace
para eliminar todos los caracteres que no son vocales, toma la resultante.length
y%2
comprueba si es impar / par.Ejemplos
fuente
J, 20 bytes
Enfoque directo
Explicación
fuente
Japt, 7 bytes
¡Pruébelo en línea! Salidas 1 para impar, 0 para par.
Cómo funciona
fuente
Octava, 34 bytes
Esto es 6 bytes más corto que el enfoque tradicional usando
ismember
,@(s)mod(sum(ismember(s,'aeiouAEIOU')),2)
y dos bytes más corto que el enfoque de expresiones regulares:@(s)mod(nnz(regexpi(s,'[aeiou]')),2)
.Pruébalo aquí .
fuente
PHP, 41 bytes
Esto genera -1 para la verdad y 0 para falsey.
fuente
Mathematica, 44 bytes
Da True para una cadena impar y False para una pareja.
fuente
q, 29 bytes
fuente
C #
64625650 bytesYa estamos usando linq, por lo que Contains guarda 2 bytes sobre IndexOfUsar el método de sobrecarga de Count ahorra 6 bytesUna función anónima que toma una cadena y cuenta las letras impares y luego devuelve verdadero si hay un número impar de ellas o falso si no lo hay.
Esta nueva solución divide la cadena en cualquiera de los caracteres en la matriz de caracteres dada. La mecánica de esto cambia el significado del
%2
resultado; 0 ahora es impar y 1 par, por lo tanto, el1>
.Pruébelo en línea aquí!
fuente
string.Split()
contar las vocales y no necesita LINQ.s=>1>s.Split("aeiouAEIOU".ToCharArray()).Length%2;
Retina , 19 bytes
Pruébalo en línea! (La primera línea habilita un conjunto de pruebas separado por salto de línea).
La primera línea cuenta las vocales en la entrada. La segunda línea verifica que el resultado sea impar.
fuente
MATL ,
8, 7 bytesPruébalo en línea!
Explicación:
fuente
Pyke, 10 bytes
Pruébalo aquí!
fuente