Задний план
Итальянская артикль (соответствующая английский в ) имеет семь различных форм: L» , иль , ли , GLI , я , ли , ль . Какой из них использовать, зависит от трех переменных:
- Пол: мужской / женский.
- Номер: единственное / множественное число.
- Начальная буква последующего слова: гласный / согласный тип A / согласный тип B.
- Гласный это любой из них: aeiou .
- Согласный тип B - любой из этих случаев: s-, сопровождаемый другим согласным, z- , gn- , pn- , ps- , x- , i-, сопровождаемый гласным (это i действует как полувывушный).
- Согласный тип А является согласным, который не тип B.
Таблица показывает форму статьи, которая будет использоваться в каждой из двенадцати комбинаций трех вышеупомянутых переменных. Обратите внимание, что форма l ' присоединяется к следующему слову с одинарной кавычкой и без пробела.
Соревнование
Введите слово и одну или две строки, числа или логические значения, указывающие пол и число . (Начальные буквы должны быть получены из входного слова).
Входное слово будет представлять собой последовательность строчных букв ASCII. Акцентированные гласные будут заменены их неакцентированными версиями (например, realtà будет вводиться как realta ).
Пол и числовые входные данные могут быть отдельными числами, логическими значениями или строками или комбинированным числом строк (например, 1 для мужского единственного числа, 2 для женского единственного числа и т. Д.).
Можно использовать любой разумный формат и разделитель, если это указано в ответе.
Выведите слово, которому предшествует соответствующая форма статьи , с пробелом или одинарной кавычкой, если необходимо. Вывод также должен быть в нижнем регистре. Трейлинг или пробел допускается.
Код гольф, самые короткие выигрыши.
Контрольные примеры
В дальнейшем я использую входные буквы m
, f
указать пол, и s
, p
для числа (это только один возможный формат ввода).
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
источник
ieri
контрольный пример, потому что это наречие, а не существительное! (Кстати, это было формально правильно) Пожалуйста!Ответы:
Сетчатка,
138133129113 байтовТестирование. (готов
%(G`\n
к запуску сразу всех тестов)Формат ввода:
macchina f s
становится2macchina
вместо.Таблица преобразования благодаря Кевину Лау .
источник
Python 3,5
238235192181178 байт:( -13 байт благодаря советам от Лаки Монахини! )
Анонимная лямбда-функция, которая принимает аргументы в форме
(<String>, <Integer Gender-Plurality mapping>)
, где отображение выглядит следующим образом:Чтобы вызвать его, просто дайте функции любое допустимое имя, а затем вызовите ее как обычную функцию, заключенную в оператор print. Поэтому, если вопрос должен быть назван
U
, просто назовите его какprint(U(<String>, <Integer Gender-Plurality mapping>))
.Попробуйте онлайн! (Ideone)
источник
zzz and yyy or xxx
на два байта короче[xxx,yyy][bool(zzz)]
yyy
это правда.["l'",'gli '][b%2]
на 3 байта короче["l'",'gli ',"l'"][b]
Ява,
227208195 байт-13 байт благодаря Лаки Нун
Принимает вашу строку и int на основе следующего сопоставления:
Возвращает строку с результатом.
Развернутый с тестовыми примерами и без троичных операторов (по-настоящему сейчас):
Использует немного магии регулярных выражений и действует в зависимости от двух указанных логических значений. К моему удивлению, импорт не требуется, что помогает с размером кода!
источник
0/1
вместо того,false/true
чтобы сэкономить несколько байтов.String e = "[^aeiou]).*";
фактически экономит 5 байтов.Рубин,
147146 байтПопробуйте онлайн?
Может быть возможно использовать лучший метод, чтобы определить, какую статью использовать, но я не знаю ни одной.
Согласно спецификации, идентификатор является числом, следующим образом:
источник
Пакет,
446390385380 байтНовая версия использует ту же
0-3
кодировку для пола и числа, что и несколько других ответов. Работает, создавая одномерный массив%2
...%13
форм, затем смещая первые1+%1
элементы так, чтобы формы представляли интерес%1
,%5
и%9
(что повезло, так как Пакет не пойдет выше%9
без смещения). Затем он тщательно проверяет списки префиксов, чтобы выяснить, какую форму нужно использовать._
используется в качестве заполнителя для представления пробела, пока слово не будет выведено.источник
Python 3, 235 байт
Мне было интересно посмотреть, как быстро я смогу получить это в Python без регулярных выражений. Оказывается, это не лучший вариант ...
Анонимная функция, которая принимает входные данные через аргумент слова
s
и кода полаc
в качестве целого числа, используя следующее отображение:и возвращает слово с правильной статьей.
Как это устроено
Создается список, содержащий возможности для каждого в
c
виде отдельных списков. Список затем индексируется с использованием значенияc
, получая трехэлементный список с соответствующими параметрами. Индекс списка теперь выбирается путем индексации в другой вложенный список с результатами булевых выражений. Если первый символs
является гласным и неi
сопровождается гласным, опция дляvowel
возвращается через возвращение индекса0
. Иначе, булево выражение, возвращаемоеTrue
дляcons. B
иFalse
дляcons. A
вычисляется, получая индексы2
и1
соответственно. Наконец, индекс используется для получения статьи, которая объединяется с пробелом и исходной строкой перед возвращением.Попробуйте это на Ideone
источник
JavaScript 210 байт
Анонимная функция, принимающая два параметра s и p, где
После присвоения функции переменной и некоторой распаковки) ее можно проверить как
где
c
это функция для проверкиs
согласного в положенииi
.r
оценивается как 0 для начала с гласного, 1 для начала с согласного типа A и 2 для начала с согласного типа B (проверено в обратном порядке).источник