Wprowadzenie
W tym wyzwaniu Twoim zadaniem jest prawidłowe wylistowanie przypadków dwóch rzeczowników fińskich. Rzecz w tym, że możesz użyć jednej z list jako przewodnika przy tworzeniu drugiej.
Rzeczowniki
Jako naszych danych używamy następujących dwóch tabel deklinacji. Wymieniają przypadki dwóch rzeczowników, po jednym przypadku w wierszu, w takiej samej kolejności, jak w powyższym artykule w Wikipedii, w formie liczby pojedynczej: w stosownych przypadkach liczba mnoga .
Tabela 1: Przypadki jaj („drzwi”)
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
Tabela 2: Przypadki jalki („stopy”)
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
Zadanie
Twoim zadaniem jest napisanie dwóch programów f
i g
(prawdopodobnie o różnych nazwach), które pobierają jeden ciąg jako dane wejściowe, dają jeden ciąg jako dane wyjściowe i mają następującą właściwość. Jeśli f
jako dane wejściowe podano tabelę 1, dane wyjściowe są podane w tabeli 2, a jeśli podano tabelę 2, dane g
wyjściowe są przedstawione w tabeli 1. Wszystkie pozostałe dane wejściowe powodują niezdefiniowane zachowanie. Tabele muszą pojawiać się dokładnie tak jak powyżej, zarówno na wejściu, jak i wyjściu. Opcjonalnie możesz założyć, że istnieje końcowy znak nowej linii, ale wtedy należy go użyć w obu tabelach, zarówno na wejściu, jak i na wyjściu. Nie ma poprzedniej nowej linii.
Zasady i bonusy
Można pisać f
i g
albo jako funkcji lub pełnych programów, ale muszą być tego samego typu, a ponadto muszą być całkowicie oddzielne (jeśli napisać funkcję pomocniczą dla f
, należy ponownie zapisać go w g
jeśli chcesz go używać tam) . Wygrywa najmniejsza łączna liczba bajtów, a standardowe luki są niedozwolone.
Istnieje premia w wysokości -25% za nieużywanie wyrażeń regularnych.
Kilka wyjaśnień
Jest perfekcyjnie napisać funkcję / program f
, który ignoruje swoje wejście i zawsze zwraca Tabela 2, a funkcja / Program g
, który zawsze powraca Tabela 1. Wymagane jest tylko, że i ; zachowanie i na wszystkich innych danych wejściowych jest nieistotne.f(Table 1) == Table 2
g(Table 2) == Table 1
f
g
„Całkowicie oddzielna” część oznacza, co następuje. Twoja odpowiedź zawiera dwa fragmenty kodu, jeden dla f
i jeden dla g
, najlepiej w różnych polach kodu. Jeśli wstawię kod do f
pliku i uruchomię go, zadziała i tak samo g
. Twój wynik jest sumą liczby bajtów dwóch fragmentów kodu. Każdy zduplikowany kod jest liczony dwukrotnie.
if Table 1 is given `f` as input
Jak wprowadzić funkcję do tabeli? Nie rozumiem tej częścif
jako dane wejściowe”Odpowiedzi:
Perl, 105 + 54 = 159
Program
f
(wypróbuj mnie ):Program
g
(wypróbuj mnie ):Alternatywna wersja
f
, tylko 2 bajty dłuższa (ta metoda może być również zastosowana,g
ale byłaby za długa):Technicznie nadal używa to wyrażenia regularnego (do odkodowania ciągu podstawiania, a następnie zastosowania go), więc nie mogę ubiegać się o bonus tutaj.
źródło
s/jalk?o?/ov/g
! Ten jest potężny.Perl, 131 + 74 = 205
Tabela 1 do tabeli 2
Rozszerzony:
Tabela 2 do tabeli 1
Rozszerzony:
(Dzięki @nutki za kilka wskazówek Perla)
Pomimo kary za wyrażenia regularne, i tak postanowiłem sobie z tym poradzić i nauczyć się Perla. Zakładam, że istnieją pewne sztuczki Perla, które mogą pozwolić mi na wymianę łańcuchów, ale nie mogłem znaleźć żadnej w moim szybkim wyszukiwaniu online.
Jest o wiele trudniej jechać z Ovi tabeli Jalka stole, który zgaduję dlatego, że Jalka tabela zawiera dodatkowe niuanse, aby słowa łatwiejsze do wymówienia.
Oto tabela zastępcza, nad którą pracowałem:
źródło
Python 2, 371 - 25% = 278
Gdy tabela 1 jest wejściem do funkcji f, zwraca tabelę 2. Jeśli dane wejściowe nie są tabelą 1, dane wyjściowe są niezdefiniowane (jakkolwiek prawdopodobne, ale nie jest gwarantowane, że zwróci tabelę 2). Na przykład wywołanie
f(9**9**9**9)
prawdopodobnie nie zwróci tabeli 2.Ta sama logika jest używana z funkcją g:
Funkcje są niezależne.
źródło
Python - 462 - 25% = 346,5
Ten program wykonuje oczywiste, bezpośrednie podejście, z wyjątkiem kilku sztuczek golfowych. W przypadku niezdefiniowanego zachowania drukuje tabelę tak jak zdefiniowane zachowanie. Cóż za niesamowity „zbieg okoliczności”! :)
Teraz, jeśli weźmie się pod uwagę to oszustwo (tak, słusznie), mogę postępować zgodnie z duchem zasad dla kolejnych 20 znaków = 482 - 25% = 361,5 . Po prostu zamień dwa ostatnie wiersze na:
Spowodowałoby to, że niezdefiniowane zachowanie nie zwróciłoby właściwej tabeli, ale tabeli wejściowej.
źródło
x
aniy
w jednym wyrażeniu, ani używać jednego w,f
a drugiego wy
.y
” -> „wg
”VBA
1204 (1605–25%)1191 (1587–25%)Bezpośrednie podejście.
Edycja: poprawiony błąd i używana sztuczka zastępująca z @Maltysen
Uruchom z okna Natychmiastowe:
źródło
JavaScript (ES6) 271 (165 + 196–25%)
Zaczynam prosto. Funkcje w ogóle ignorują parametr wejściowy.
Używanie podziału / łączenia zamiast zamiany, aby uniknąć wyrażeń regularnych.
Test w konsoli Firefox / FireBug
źródło