Contexte
L'article défini italien (correspondant à l'anglais le ) a sept formes différentes: l ' , il , lo , gli , i , la , le . Laquelle utiliser dépend de trois variables:
- Sexe: masculin / féminin.
- Nombre: singulier / pluriel.
- Lettre initiale du mot suivant: voyelle / type consonne A / type consonne B.
- La voyelle est l'une de celles-ci: aeiou .
- La consonne de type B est l'un de ces cas: s- suivi d'une autre consonne, z- , gn- , pn- , ps- , x- , i- suivie d'une voyelle (cette i agit comme une demi-voyelle).
- La consonne de type A est une consonne qui n'est pas de type B.
Le tableau montre le formulaire d'article à utiliser dans chacune des douze combinaisons des trois variables ci-dessus. Notez que le l » formulaire est joint au mot suivant avec une citation simple et sans espace.
Le défi
Saisissez un mot et une ou deux chaînes, des nombres ou des booléens indiquant le sexe et le nombre . (Les premières lettres devront être obtenues à partir du mot saisi).
Le mot d'entrée sera une séquence de lettres ASCII minuscules. Les voyelles accentuées seront remplacées par leurs versions non accentuées (par exemple, realtà sera entré comme realta ).
Les entrées de genre et de nombre peuvent être des nombres séparés, des booléens ou des chaînes, ou un nombre combiné de chaînes (par exemple, 1 pour le singulier masculin, 2 pour le singulier féminin, etc.).
Tout format et séparateur raisonnable peuvent être utilisés, pour autant qu'ils soient spécifiés dans la réponse.
Sortez le mot précédé de la forme appropriée de l'article , avec un espace ou une citation unique au besoin. La sortie doit également être en minuscules. Les espaces vides de fin ou de début sont autorisés.
Golf de code, victoires les plus courtes.
Cas de test
Dans ce qui suit, j'utilise les lettres d'entrée m
, f
pour spécifier le sexe et s
, p
pour le nombre (ce n'est qu'un format d'entrée possible).
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
la source
ieri
cas de test car c'est un adverbe et non un substantif! (BTW c'était formellement correct) S'il vous plaît!Réponses:
Rétine,
138133129113 octetsSuite de tests. (ajouté
%(G`\n
pour exécuter tous les cas de test en même temps)Format d'entrée:
macchina f s
devient à la2macchina
place.Table de conversion grâce à Kevin Lau .
la source
Python 3.5,
238235192181178 octets:( -13 octets grâce aux conseils de Leaky Nun! )
Une fonction lambda anonyme qui prend des arguments sous la forme de
(<String>, <Integer Gender-Plurality mapping>)
, où le mappage est le suivant:Pour l'appeler, donnez simplement à la fonction un nom valide, puis appelez-la comme une fonction normale enveloppée dans une instruction print. Par conséquent, si la question devait être nommée
U
, appelez-la simplement commeprint(U(<String>, <Integer Gender-Plurality mapping>))
.Essayez-le en ligne! (Ideone)
la source
zzz and yyy or xxx
est deux octets plus court que[xxx,yyy][bool(zzz)]
yyy
c'est vrai.["l'",'gli '][b%2]
est 3 octets plus court que["l'",'gli ',"l'"][b]
Java,
227208195 octets-13 octets grâce à Leaky Nun
Prend votre chaîne et un int basé sur le mappage suivant:
Renvoie une chaîne avec le résultat.
Non golfé avec des cas de test et sans opérateurs ternaires (pour de vrai maintenant):
Utilise un peu de magie regex et agit en fonction des deux booléens spécifiés. À ma grande surprise, aucune importation n'est nécessaire, ce qui aide avec la taille du code!
la source
0/1
au lieu defalse/true
cela devrait vous faire économiser quelques octets.String e = "[^aeiou]).*";
fait économiser 5 octets.Rubis,
147146 octetsL'essayer en ligne?
Il pourrait être possible d'utiliser une meilleure méthode pour déterminer quel article utiliser, mais je n'en connais aucun.
Selon la spécification, l'identifiant est un nombre, comme suit:
la source
Lot,
446390385380 octetsLa nouvelle version utilise le même
0-3
encodage pour le sexe et le nombre que plusieurs autres réponses. Fonctionne en créant un tableau unidimensionnel%2
..%13
de formes, puis en déplaçant les premiers1+%1
éléments pour que les formes d'intérêt deviennent%1
,%5
et%9
(ce qui est heureux car Batch ne va pas au-dessus%9
sans se déplacer). Il vérifie ensuite laborieusement les listes de préfixes pour savoir quel formulaire doit être utilisé._
est utilisé comme espace réservé pour représenter un espace jusqu'à la sortie du mot.la source
Python 3, 235 octets
J'étais intéressé de voir combien de temps je pouvais obtenir cela en Python sans regex. Il s'avère que ce n'est pas la meilleure option ...
Une fonction anonyme qui prend l'entrée via l'argument du mot
s
et le code de genrec
comme un entier, en utilisant le mappage suivant:et renvoie le mot avec l'article correct.
Comment ça marche
Une liste contenant les possibilités pour chacun en
c
tant que listes distinctes est créée. La liste est ensuite indexée en utilisant la valeur dec
, ce qui donne une liste à 3 éléments avec les options pertinentes. Un index de liste est maintenant choisi en indexant dans une autre liste imbriquée avec les résultats des expressions booléennes. Si le premier caractère des
est une voyelle et n'est pasi
suivi d'une voyelle, l'option pourvowel
est fournie via le retour de l'index0
. Sinon, une expression booléenne renvoyantTrue
pourcons. B
etFalse
pourcons. A
est évaluée, donnant les indices2
et1
respectivement. Enfin, l'index est utilisé pour générer l'article, qui est concaténé avec un espace et la chaîne d'origine avant d'être renvoyé.Essayez-le sur Ideone
la source
JavaScript 210 octets
Une fonction anonyme prenant deux paramètres s et p où
Après avoir assigné la fonction à une variable et un déballage), elle peut être testée comme
où
c
est une fonction pour testers
une consonne à la positioni
.r
est évalué à 0 pour commencer avec une voyelle, 1 pour commencer avec une consonne de type A et 2 pour commencer avec une consonne de type B (testé dans l'ordre inverse).la source