Hintergrund
Die italienischen bestimmten Artikel (entsprechend Englisch der ) haben sieben verschiedene Formen: l‘ , il , lo , gli , i , la , le . Welche zu verwenden ist, hängt von drei Variablen ab:
- Geschlecht: männlich / weiblich.
- Anzahl: Singular / Plural.
- Anfangsbuchstabe des folgenden Wortes: Vokal / Konsonant Typ A / Konsonant Typ B.
- Vokal ist einer von diesen: aeiou .
- Konsonant - Typ B ist jeder dieser Fälle: s- von einem anderen Konsonanten gefolgt, z- , GN- , PN- , PS- , x- , i- durch Vokal folgt (dies i wirkt als semivowel).
- Konsonant Typ A ist ein Konsonant, der nicht Typ B ist.
Die Tabelle zeigt das Artikelformular, das in jeder der zwölf Kombinationen der drei obigen Variablen verwendet werden soll. Beachten Sie, dass das l'- Formular mit einem einfachen Anführungszeichen und ohne Leerzeichen an das folgende Wort angehängt ist.
Die Herausforderung
Geben Sie ein Wort und ein oder zwei Zeichenfolgen, Zahlen oder Boolesche Werte ein, die Geschlecht und Zahl angeben . (Die Anfangsbuchstaben müssen aus dem eingegebenen Wort stammen).
Das Eingabewort ist eine Folge von ASCII-Kleinbuchstaben. Akzentuierte Vokale werden durch ihre nicht-akzentuierten Versionen ersetzt (z. B. wird " realtà" als " realta" eingegeben ).
Bei den Eingaben für Geschlecht und Anzahl kann es sich um separate Zahlen, Boolesche Werte oder Zeichenfolgen oder um eine kombinierte Anzahl von Zeichenfolgen handeln (z. B. 1 für männliche Singularzeichen, 2 für weibliche Singularzeichen usw.).
Jedes vernünftige Format und Trennzeichen kann verwendet werden, solange es in der Antwort angegeben ist.
Geben Sie das Wort aus, dem die entsprechende Form des Artikels vorangestellt ist, und geben Sie bei Bedarf ein Leerzeichen oder ein einfaches Anführungszeichen ein. Die Ausgabe sollte auch in Kleinbuchstaben erfolgen. Nachgestellte oder führende Leerzeichen sind zulässig.
Codegolf, kürzeste Gewinne.
Testfälle
Im Folgenden habe ich die eingegebenen Buchstaben verwenden m
, f
um anzugeben , Geschlecht und s
, p
für Nummer (dies ist nur ein mögliches Eingabeformat).
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
quelle
ieri
Testfall abzunehmen, da es sich um ein Adverb und nicht um ein Substantiv handelt! (Übrigens war es formal korrekt) Bitte!Antworten:
Retina,
138133129113 BytesTestsuite. (Davor
%(G`\n
alle Testfälle gleichzeitig laufen zu lassen)Eingabeformat:
macchina f s
wird2macchina
stattdessen.Umrechnungstabelle dank Kevin Lau .
quelle
Python 3.5,
238235192181178 Bytes:( -13 Bytes dank Tipps von Leaky Nun! )
Eine anonyme Lambda-Funktion, die Argumente in der folgenden Form annimmt
(<String>, <Integer Gender-Plurality mapping>)
:Um es aufzurufen, geben Sie der Funktion einfach einen gültigen Namen und rufen Sie sie dann wie eine normale Funktion auf, die in eine print-Anweisung eingeschlossen ist. Wenn also die Frage benannt werden soll
U
, nennen Sie sie einfach soprint(U(<String>, <Integer Gender-Plurality mapping>))
.Probieren Sie es online! (Ideone)
quelle
zzz and yyy or xxx
ist zwei Bytes kürzer als[xxx,yyy][bool(zzz)]
yyy
es wahr ist.["l'",'gli '][b%2]
ist 3 Bytes kürzer als["l'",'gli ',"l'"][b]
Java,
227208195 Bytes-13 Bytes dank Leaky Nun
Nimmt Ihre Zeichenfolge und ein Int auf der Grundlage der folgenden Zuordnung:
Gibt einen String mit dem Ergebnis zurück.
Ungolfed mit Testfällen und ohne ternäre Operatoren (fürs Erste):
Verwendet ein bisschen Regex-Magie und handelt in Abhängigkeit von den beiden angegebenen Booleschen Werten. Zu meiner Überraschung sind keine Importe erforderlich, was bei der Codegröße hilft!
quelle
0/1
stattdessenfalse/true
solltest du einige Bytes sparen.String e = "[^aeiou]).*";
Wenn Sie nicht verwenden, sparen Sie tatsächlich 5 Bytes.Ruby,
147146 BytesOnline ausprobieren?
Es könnte möglich sein, eine bessere Methode zu verwenden, um festzustellen, welcher Artikel verwendet werden soll, aber mir sind keine bekannt.
Gemäß der Spezifikation ist die Kennung eine Zahl wie folgt:
quelle
Batch,
446390385380 BytesDie neue Version verwendet dieselbe
0-3
Kodierung für Geschlecht und Nummer wie mehrere andere Antworten. Werke eine 1-dimensionalen Array erstellen%2
..%13
von Formen, dann die erste Verschiebung aus1+%1
Elementen , so dass die Formen des Interesses%1
,%5
und%9
(das ist das Glück als Batch nicht oben gehen%9
ohne Verschiebung). Anschließend werden die Präfixlisten mühsam überprüft, um herauszufinden, welches Formular verwendet werden muss._
wird als Platzhalter verwendet, um ein Leerzeichen darzustellen, bis das Wort ausgegeben wird.quelle
Python 3, 235 Bytes
Ich war gespannt, wie kurz ich das in Python ohne Regex bekommen könnte. Es stellt sich heraus, dass dies nicht die beste Option ist ...
Eine anonyme Funktion, die die Eingabe über das Argument des Wortes
s
und den Code der Geschlechtsnummerc
als Ganzzahl unter Verwendung der folgenden Zuordnung akzeptiert:und gibt das Wort mit dem richtigen Artikel zurück.
Wie es funktioniert
Es wird eine Liste erstellt, die die Möglichkeiten für jede
c
einzelne Liste enthält . Die Liste wird dann unter Verwendung des Werts von indiziertc
, wodurch eine Liste mit 3 Elementen mit den relevanten Optionen erhalten wird. Ein Listenindex wird jetzt durch Indizieren in eine andere verschachtelte Liste mit den Ergebnissen von Booleschen Ausdrücken ausgewählt. Wenn das erste Zeichen vons
ein Vokal ist und nichti
von einem Vokal gefolgt wird,vowel
ergibt sich die Option für durch die Rückgabe des Index0
. Andernfalls wird ein Boolescher Ausdruck ausgewertet, derTrue
fürcons. B
undFalse
fürcons. A
zurückgibt2
und die Indizes bzw.1
ergibt. Schließlich wird der Index verwendet, um den Artikel zu erhalten, der mit einem Leerzeichen und der ursprünglichen Zeichenfolge verknüpft ist, bevor er zurückgegeben wird.Probieren Sie es auf Ideone
quelle
JavaScript 210 Bytes
Eine anonyme Funktion mit zwei Parametern s und p wo
Nachdem die Funktion einer Variablen zugewiesen und etwas entpackt wurde, kann sie als getestet werden
woher
c
ist eine Funktion zum Testens
eines Konsonanten an einer Positioni
.r
ergibt 0 für den Beginn mit einem Vokal, 1 für den Beginn mit einem Konsonanten vom Typ A und 2 für den Beginn mit einem Konsonanten vom Typ B (in umgekehrter Reihenfolge getestet).quelle