Введение
В этом задании ваша задача - правильно составить список падежей двух финских существительных. Суть в том, что вы можете использовать один из списков в качестве руководства для создания другого.
Существительные
Мы используем следующие две таблицы склонений в качестве наших данных. Они перечисляют падежи двух существительных, по одному падежу на строку в том же порядке, что и в статье Википедии, связанной выше, в форме единственного числа: множественное число, где это применимо.
Таблица 1: Случаи яйцеклетки («дверь»)
ovi : ovet
oven : ovien
oven : ovet
ovea : ovia
ovessa : ovissa
ovesta : ovista
oveen : oviin
ovella : ovilla
ovelta : ovilta
ovelle : oville
ovena : ovina
oveksi : oviksi
ovin
ovetta : ovitta
ovine
Таблица 2: Случаи jalka ("ноги")
jalka : jalat
jalan : jalkojen
jalan : jalat
jalkaa : jalkoja
jalassa : jaloissa
jalasta : jaloista
jalkaan : jalkoihin
jalalla : jaloilla
jalalta : jaloilta
jalalle : jaloille
jalkana : jalkoina
jalaksi : jaloiksi
jaloin
jalatta : jaloitta
jalkoine
Задание
Ваша задача - написать две программы f
и g
(возможно, с разными именами), которые принимают одну строку в качестве входных данных, дают одну строку в качестве выходных данных и имеют следующее свойство. Если в f
качестве входных данных приведена таблица 1 , она выводит таблицу 2, а если в качестве таблицы 2 указывается g
таблица 1. Все остальные входные данные приводят к неопределенному поведению. Таблицы должны отображаться точно так же, как указано выше, как на входе, так и на выходе. При желании вы можете предположить, что есть завершающий символ новой строки, но тогда он должен использоваться в обеих таблицах, а также во входных и выходных данных. Там нет предыдущего перевода строки.
Правила и бонусы
Вы можете писать f
и g
как функции, или как полные программы, но они должны быть одного типа, и они должны быть полностью разделены (если вы пишете вспомогательную функцию f
, вы должны переписать ее, g
если хотите использовать ее там) , Наименьшее общее количество байтов выигрывает, и стандартные лазейки запрещены.
Существует бонус -25% за неиспользование регулярных выражений.
Некоторые разъяснения
Прекрасно написать функцию / программу, f
которая игнорирует свой ввод и всегда возвращает Таблицу 2, и функцию / программу, g
которая всегда возвращает Таблицу 1. Требуется только, чтобы и ; поведение и на всех остальных входов не имеет значения.f(Table 1) == Table 2
g(Table 2) == Table 1
f
g
«Совершенно отдельная» часть означает следующее. Ваш ответ содержит два фрагмента кода, один для f
и один для g
, предпочтительно в разных полях кода. Если я помещаю код для f
в файл и запускаю его, он работает, и то же самое для g
. Ваша оценка - это сумма байтов двух частей кода. Любой дублированный код учитывается дважды.
if Table 1 is given `f` as input
Как ввести функцию в таблицу? Я не понимаю эту частьf
качестве входных данных дана таблица 1 »Ответы:
Perl 105 + 54 = 159
Программа
f
(попробуй меня ):Программа
g
(попробуй меня ):Альтернативная версия
f
, всего на 2 байта длиннее (этот метод также может быть применен,g
но он будет слишком длинным):Технически это все еще использует регулярное выражение (для декодирования строки подстановки, а затем для их применения), поэтому я не могу претендовать на бонус здесь.
источник
s/jalk?o?/ov/g
! Это мощно.Perl, 131 + 74 = 205
Таблица 1 - Таблица 2
Expanded:
Таблица 2 в таблицу 1
Expanded:
(Спасибо @nutki за некоторые советы по Perl)
Несмотря на наказание за регулярные выражения, я все равно решил заняться им и изучать Perl, пока был в нем. Я предполагаю, что есть некоторые трюки Perl, которые могут позволить мне заменить цепи, но я не смог найти ни одного в своем быстром поиске в Интернете.
Гораздо сложнее перейти от таблицы ovi к таблице jalka , что, я полагаю, связано с тем, что в таблице jalka есть дополнительные нюансы, облегчающие произнесение слов.
Вот таблица замены, над которой я работал:
источник
Python 2, 371 - 25% = 278
Когда таблица 1 является входом для функции f, она возвращает таблицу 2. Если входная информация не является таблицей 1, ее вывод не определен (однако, вероятно, но не гарантируется, что будет возвращена таблица 2). Например, вызов
f(9**9**9**9)
, вероятно, не вернет таблицу 2.Та же логика используется с функцией g:
Функции независимы.
источник
Питон - 462 - 25% = 346,5
Эта программа делает очевидный, прямой подход, за исключением нескольких хитростей данных игры в гольф. Для неопределенного поведения он печатает таблицу так же, как определенное поведение. Какое удивительное «совпадение»! :)
Теперь, если кто-то подумает об этом обмане (да, верно), я могу следовать духу правил еще для 20 символов = 482 - 25% = 361,5 . Просто замените две последние строки на:
Это приведет к тому, что неопределенное поведение вернет не правильную таблицу, а входную таблицу.
источник
x
иy
в одном выражении, и использовать одно в,f
а другое вy
.y
" -> "вg
"VBA
1204 (1605 - 25%)1191 (1587 - 25%)Прямой подход.
Изменить: Исправлена ошибка и используется трюк замены из @Maltysen
Запустите из непосредственного окна:
источник
JavaScript (ES6) 271 (165 + 196 -25%)
Начинается просто. Функции игнорируют входной параметр вообще.
Использование split / join вместо замены, чтобы избежать регулярных выражений.
Тест в консоли Firefox / FireBug
источник