tło
Włoski określony artykuł (odpowiadające angielskim z ) ma siedem różnych formach: l” , IL , lo , GLI , I , la , le . Wybór jednego zależy od trzech zmiennych:
- Płeć: męska / żeńska.
- Liczba: liczba pojedyncza / mnoga.
- Pierwsza litera następnego słowa: samogłoska / spółgłoska typu A / spółgłoska typu B.
- Vowel jest jednym z tych: aeiou .
- Konsonant typu B to dowolny z tych przypadków: s- po nim następna spółgłoska, z- , gn- , pn- , ps- , x- , i- po nim samogłoska (to i działa jak półpółka).
- Spółgłoska typu A jest spółgłoską, która nie jest typem B.
Tabela pokazuje formularz artykułu do zastosowania w każdej z dwunastu kombinacji trzech powyższych zmiennych. Zauważ, że formularz l ' jest dołączony do następującego słowa z pojedynczym cudzysłowiem i bez spacji.
Wyzwanie
Wpisz słowo i jeden lub dwa ciągi, cyfry lub booleany wskazujące płeć i liczbę . (Pierwsze litery będą musiały zostać uzyskane ze słowa wejściowego).
Słowo wejściowe będzie ciągiem małych liter ASCII. Akcentowane samogłoski zostaną zastąpione ich nieakcentowanymi wersjami (na przykład realtà zostanie wprowadzone jako realta ).
Dane dotyczące płci i liczby mogą być osobnymi liczbami, logarytmami lub ciągami znaków lub połączoną liczbą ciągów znaków (na przykład 1 dla liczby pojedynczej rodzaju męskiego, 2 dla liczby pojedynczej rodzaju żeńskiego itp.).
Można użyć dowolnego rozsądnego formatu i separatora, o ile jest on określony w odpowiedzi.
Wpisz słowo poprzedzone odpowiednią formą artykułu , w razie potrzeby ze spacją lub pojedynczym cytatem. Dane wyjściowe powinny być również pisane małymi literami. Dozwolone jest końcowe lub wiodące puste miejsce.
Code golf, najkrótsze wygrane.
Przypadki testowe
W dalszej części używać liter wejściowych m
, f
aby określić płeć, i s
, p
dla numeru (jest tylko jeden możliwy format wejściowy).
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
źródło
ieri
skrzynki testowej, ponieważ jest przysłówkiem, a nie rzeczownikiem! (BTW to było formalnie poprawne) Proszę!Odpowiedzi:
Retina,
138133129113 bajtówZestaw testowy. (przygotowane
%(G`\n
do uruchomienia wszystkich przypadków testowych jednocześnie)Format wejściowy: zamiast tego
macchina f s
staje się2macchina
.Tabela konwersji dzięki Kevinowi Lau .
źródło
Python 3.5,
238235192181178 bajtów:( -13 bajtów dzięki poradom Leaky Nun! )
Anonimowa funkcja lambda, która przyjmuje argumenty w postaci
(<String>, <Integer Gender-Plurality mapping>)
, gdzie mapowanie jest następujące:Aby go wywołać, wystarczy nadać tej funkcji dowolną prawidłową nazwę, a następnie wywołać ją jak normalną funkcję zawartą w instrukcji print. Dlatego, jeśli pytanie ma zostać nazwane
U
, po prostu nazwij to takprint(U(<String>, <Integer Gender-Plurality mapping>))
.Wypróbuj online! (Ideone)
źródło
zzz and yyy or xxx
jest dwa bajty krótszy niż[xxx,yyy][bool(zzz)]
yyy
to jest prawdą.["l'",'gli '][b%2]
jest o 3 bajty krótszy niż["l'",'gli ',"l'"][b]
Java,
227208195 bajtów-13 bajtów dzięki Leaky Nun
Pobiera ciąg i int na podstawie następującego mapowania:
Zwraca ciąg z wynikiem.
Niegolfowany z przypadkami testowymi i bez operatorów trójskładnikowych (na razie):
Wykorzystuje odrobinę magii wyrażeń regularnych i działa w zależności od dwóch określonych booleanów. Ku mojemu zdziwieniu, import nie jest potrzebny, co pomaga w rozmiarze kodu!
źródło
0/1
zamiast tego,false/true
aby zaoszczędzić trochę bajtów.String e = "[^aeiou]).*";
faktycznie oszczędza 5 bajtów.Ruby,
147146 bajtówWypróbuj online?
Może być możliwe użycie lepszej metody w celu ustalenia, którego artykułu użyć, ale nie znam żadnego.
Zgodnie ze specyfikacją identyfikator jest liczbą, jak następuje:
źródło
Partia,
446390385380 bajtówNowa wersja używa tego samego
0-3
kodowania dla płci i liczby, co kilka innych odpowiedzi. Dzieła stworzenia 1-wymiarową tablicę%2
..%13
form, a następnie przesuwa się pierwsze1+%1
elementy tak, że tworzy to stać%1
,%5
i%9
(co jest szczęście jako partia nie pójdzie powyżej%9
bez przesunięcia). Następnie mozolnie sprawdza listy prefiksów, aby dowiedzieć się, który formularz należy użyć._
jest używany jako symbol zastępczy do reprezentowania spacji, dopóki słowo nie zostanie wypisane.źródło
Python 3, 235 bajtów
Byłem zainteresowany, aby zobaczyć, jak krótko mogę uzyskać to w Pythonie bez wyrażeń regularnych. Okazuje się, że nie jest to najlepsza opcja ...
Anonimowa funkcja, która pobiera dane wejściowe za pomocą argumentu słowa
s
i kodu liczby płcic
jako liczby całkowitej, przy użyciu następującego odwzorowania:i zwraca słowo z poprawnym artykułem.
Jak to działa
Tworzona jest lista zawierająca możliwości dla każdej z nich
c
jako osobne listy. Lista jest następnie indeksowana przy użyciu wartościc
, co daje 3-elementową listę z odpowiednimi opcjami. Indeks listy jest teraz wybierany poprzez indeksowanie do innej listy zagnieżdżonej z wynikami wyrażeń boolowskich. Jeśli pierwszym znakiems
jest samogłoska,i
po której nie następuje samogłoska, opcja dlavowel
jest uzyskiwana poprzez zwracanie indeksu0
. W przeciwnym razie obliczane jest wyrażenie logiczne zwracające sięTrue
zacons. B
iFalse
dlacons. A
, uzyskując odpowiednio wskaźniki2
i1
. Wreszcie indeks służy do otrzymania artykułu, który przed zwróceniem jest łączony spacją i ciągiem znaków.Wypróbuj na Ideone
źródło
JavaScript 210 bajtów
Anonimowa funkcja przyjmująca dwa parametry si p gdzie
Po przypisaniu funkcji do zmiennej i pewnym rozpakowaniu) można ją przetestować jako
gdzie
c
jest funkcją sprawdzanias
spółgłoski w pozycjii
.r
ocenia się na 0 dla rozpoczynania od samogłoski, 1 dla rozpoczynania od spółgłoski typu A i 2 dla rozpoczynania od spółgłoski typu B (testowane w odwrotnej kolejności).źródło