Fondo
El artículo definido italiano (correspondiente al inglés the ) tiene siete formas diferentes: l ' , il , lo , gli , i , la , le . Cuál usar depende de tres variables:
- Género: masculino / femenino.
- Número: singular / plural.
- Letra inicial de la palabra siguiente: vocal / consonante tipo A / consonante tipo B.
- Vowel es cualquiera de estos: aeiou .
- El tipo de consonante B es cualquiera de estos casos: s- seguido de otra consonante, z- , gn- , pn- , ps- , x- , i- seguido de vocal (esto i actúa como una semivowel).
- La consonante de tipo A es una consonante que no es de tipo B.
La tabla muestra el formulario del artículo que se utilizará en cada una de las doce combinaciones de las tres variables anteriores. Tenga en cuenta que la forma l ' se adjunta a la siguiente palabra con una comilla simple y sin un espacio.
El reto
Ingrese una palabra y una o dos cadenas, números o booleanos que indiquen género y número . (Las letras iniciales deberán obtenerse de la palabra de entrada).
La palabra de entrada será una secuencia de letras minúsculas ASCII. Las vocales acentuadas serán reemplazadas por sus versiones no acentuadas (por ejemplo, realtà se ingresará como realta ).
Las entradas de género y número pueden ser números separados, booleanos o cadenas, o un número combinado de cadena (por ejemplo, 1 para singular masculino, 2 para singular femenino, etc.).
Se puede utilizar cualquier formato y separador razonable, siempre que se especifique en la respuesta.
Escriba la palabra precedida por la forma apropiada del artículo , con espacio o comillas simples según sea necesario. La salida también debe estar en minúsculas. Se permite el espacio en blanco final o inicial.
Código de golf, victorias más cortas.
Casos de prueba
A continuación, uso las letras de entrada m
, f
para especificar el género y s
, p
para el número (este es solo un formato de entrada posible).
Input Output Comment
macchina f s la macchina Initial letter is cons. A
zio m s lo zio Initial letter is cons. B
libri m p i libri Initial letter is cons. A
ieri m s lo ieri Initial letter is cons. B
aquile f p le aquile Initial letter is vowel
spagnoli m p gli spagnoli Initial letter is cons. B
golf m s il golf Initial letter is cons. A
ombra f s l'ombra Initial letter is vowel
impossibili m p gli impossibili Initial letter is vowel
fuente
ieri
retire el caso de prueba porque es un adverbio y no un sustantivo. (Por cierto, era formalmente correcto) ¡Por favor!Respuestas:
Retina,
138133129113 bytesBanco de pruebas. (antes
%(G`\n
de ejecutar todos los casos de prueba a la vez)Formato de entrada: se
macchina f s
convierte en su2macchina
lugar.Tabla de conversión gracias a Kevin Lau .
fuente
Python 3.5,
238235192181178 bytes:( -13 bytes gracias a los consejos de Leaky Nun! )
Una función lambda anónima que toma argumentos en forma de
(<String>, <Integer Gender-Plurality mapping>)
, donde la asignación es la siguiente:Para llamarlo, simplemente asigne a la función un nombre válido y luego llámelo como una función normal dentro de una declaración de impresión. Por lo tanto, si la pregunta fuera nombrada
U
, simplemente llámela comoprint(U(<String>, <Integer Gender-Plurality mapping>))
.¡Pruébelo en línea! (Ideona)
fuente
zzz and yyy or xxx
es dos bytes más corto que[xxx,yyy][bool(zzz)]
yyy
sea verdad.["l'",'gli '][b%2]
es 3 bytes más corto que["l'",'gli ',"l'"][b]
Java,
227208195 bytes-13 bytes gracias a Leaky Nun
Toma su cadena y un int basado en la siguiente asignación:
Devuelve una cadena con el resultado.
Sin golfista con casos de prueba y sin operadores ternarios (de verdad ahora):
Utiliza un poco de magia regex y actúa dependiendo de los dos booleanos especificados. Para mi sorpresa, no se necesitan importaciones, lo que ayuda con el tamaño del código.
fuente
0/1
lugar de lofalse/true
que debería ahorrarle algunos bytes.String e = "[^aeiou]).*";
realmente te ahorra 5 bytes.Rubí,
147146bytesPruébalo en línea?
Puede ser posible utilizar un método mejor para determinar qué artículo usar, pero no conozco ninguno.
Según la especificación, el identificador es un número, como sigue:
fuente
Lote,
446390385380 bytesLa nueva versión usa la misma
0-3
codificación para el género y el número que varias otras respuestas. Funciona creando una matriz unidimensional%2
...%13
de formas, luego desplazando los primeros1+%1
elementos para que las formas de interés se conviertan%1
,%5
y%9
(lo cual es afortunado ya que Batch no irá arriba%9
sin cambiar). Luego verifica laboriosamente las listas de prefijos para averiguar qué formulario debe usarse._
se usa como marcador de posición para representar un espacio hasta que se emite la palabra.fuente
Python 3, 235 bytes
Estaba interesado en ver qué tan corto podría obtener esto en Python sin expresiones regulares. Resulta que esta no es la mejor opción ...
Una función anónima que toma la entrada a través del argumento de la palabra
s
y el código de número de géneroc
como un entero, utilizando la siguiente asignación:y devuelve la palabra con el artículo correcto.
Cómo funciona
Se
c
crea una lista que contiene las posibilidades para cada uno como listas separadas. Luego, la lista se indexa utilizando el valor dec
, produciendo una lista de 3 elementos con las opciones relevantes. Ahora se elige un índice de lista indexando en otra lista anidada con los resultados de expresiones booleanas. Si el primer carácter des
es una vocal y no esi
seguido por una vocal, la opción para sevowel
produce mediante la devolución del índice0
. De lo contrario, se evalúa una expresión booleana que devuelveTrue
paracons. B
yFalse
paracons. A
, produciendo los índices2
y1
respectivamente. Finalmente, el índice se usa para producir el artículo, que se concatena con un espacio y la cadena original antes de ser devuelto.Pruébalo en Ideone
fuente
JavaScript 210 bytes
Una función anónima que toma dos parámetros s y p donde
Después de asignar la función a una variable y un poco de desempaquetado), se puede probar como
dónde
c
es una función para probars
una consonante en la posicióni
.r
evalúa a 0 para comenzar con una vocal, 1 para comenzar con una consonante de tipo A y 2 para comenzar con una consonante de tipo B (probado en orden inverso).fuente