Einführung
Bei dieser Herausforderung besteht Ihre Aufgabe darin, die Fälle von zwei finnischen Substantiven korrekt aufzulisten. Der Clou ist, dass Sie eine der Auflistungen als Leitfaden verwenden können, um die andere zu erstellen.
Die Nomen
Wir verwenden die folgenden zwei Deklinationstabellen als unsere Daten. Sie listen die Fälle von zwei Substantiven, einen Fall pro Zeile, in derselben Reihenfolge wie im oben verlinkten Wikipedia-Artikel in der Form Singular: Plural auf , sofern zutreffend.
Tabelle 1: Fälle von Ovi ("Tür")
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
Tabelle 2: Fälle von Jalka ("Fuß")
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
Die Aufgabe
Ihre Aufgabe ist es, zwei Programme zu schreiben f
und g
(möglicherweise mit unterschiedlichen Namen) eine Zeichenfolge als Eingabe zu verwenden, eine Zeichenfolge als Ausgabe anzugeben und die folgende Eigenschaft zu haben. Wenn Tabelle 1 f
als Eingabe angegeben wird, wird Tabelle 2 ausgegeben, und wenn Tabelle 2 angegeben wird g
, wird Tabelle 1 ausgegeben . Alle anderen Eingaben führen zu undefiniertem Verhalten. Die Tabellen müssen sowohl in der Eingabe als auch in der Ausgabe genau wie oben angezeigt werden. Sie können optional davon ausgehen, dass es einen nachgestellten Zeilenumbruch gibt, der dann jedoch in beiden Tabellen sowie in der Eingabe und Ausgabe verwendet werden muss. Es gibt keinen vorhergehenden Zeilenumbruch.
Regeln und Boni
Sie können schreiben , f
und g
entweder als Funktionen oder vollständige Programme, aber sie müssen vom gleichen Typ sein, und sie müssen vollständig getrennt sein (wenn Sie eine Hilfsfunktion für schreiben f
, müssen Sie neu zu schreiben es in , g
wenn Sie wollen , dass es dort verwenden) . Die niedrigste Gesamtbytezahl gewinnt und Standardschlupflöcher sind nicht zulässig.
Es gibt einen Bonus von -25%, wenn keine regulären Ausdrücke verwendet werden.
Einige Erläuterungen
Es ist vollkommen in Ordnung, eine Funktion / ein Programm zu schreiben, das / f
das seine Eingabe ignoriert und immer Tabelle 2 zurückgibt, und eine Funktion / ein Programm g
, die / das immer Tabelle 1 zurückgibt. Es ist nur erforderlich, dass und ; Das Verhalten von und bei allen anderen Eingaben ist irrelevant.f(Table 1) == Table 2
g(Table 2) == Table 1
f
g
Der "vollständig getrennte" Teil bedeutet Folgendes. Ihre Antwort enthält zwei Codeteile, einen für f
und einen für g
, vorzugsweise in verschiedenen Codefeldern. Wenn ich den Code für f
in eine Datei lege und ihn ausführe, funktioniert er und das Gleiche für g
. Ihre Punktzahl ist die Summe der Byteanzahlen der beiden Codeteile. Jeder duplizierte Code wird zweimal gezählt.
if Table 1 is given `f` as input
Wie gibt man eine Funktion in eine Tabelle ein? Ich verstehe diesen Teil nichtf
als Eingang“Antworten:
Perl, 105 + 54 = 159
Programm
f
(probier mich aus ):Programm
g
(probier mich aus ):Eine alternative Version von
f
, nur 2 Bytes länger (diese Methode kann auch angewendet werden,g
wäre aber zu lang):Technisch gesehen wird hierfür immer noch ein regulärer Ausdruck verwendet (um die Ersetzungszeichenfolge zu dekodieren und dann anzuwenden), sodass ich den Bonus hier nicht beanspruchen kann.
quelle
s/jalk?o?/ov/g
! Das ist mächtig.Perl, 131 + 74 = 205
Tabelle 1 bis Tabelle 2
Erweitert:
Tabelle 2 bis Tabelle 1
Erweitert:
(Danke an @nutki für einige Perl-Tipps)
Trotz der Strafe für Regexes habe ich mich entschlossen, es trotzdem anzugehen und Perl zu lernen, während ich dabei war. Ich gehe davon aus, dass es einige Perl-Tricks gibt, mit denen ich Ketten ersetzen kann, aber ich konnte bei meiner Online-Schnellsuche keine finden.
Es ist viel schwieriger, vom Ovi- Tisch zum Jalka- Tisch zu wechseln , was meiner Meinung nach daran liegt, dass der Jalka- Tisch zusätzliche Nuancen aufweist, um die Aussprache von Wörtern zu erleichtern.
Hier ist der Ersatztisch, an dem ich gearbeitet habe:
quelle
Python 2, 371 - 25% = 278
Wenn Tabelle 1 die Eingabe für die Funktion f ist, gibt sie Tabelle 2 zurück. Wenn die Eingabe nicht Tabelle 1 ist, ist ihre Ausgabe undefiniert (jedoch wahrscheinlich, aber nicht garantiert, dass sie Tabelle 2 zurückgibt). Zum Beispiel wird ein Aufruf
f(9**9**9**9)
wahrscheinlich nicht Tabelle 2 zurückgeben.Die gleiche Logik wird mit der Funktion g verwendet:
Die Funktionen sind unabhängig.
quelle
Python - 462 - 25% = 346,5
Dieses Programm macht den offensichtlichen, direkten Ansatz mit Ausnahme einiger Datengolf-Tricks. Für das undefinierte Verhalten wird die Tabelle genauso gedruckt wie das definierte Verhalten. Was für ein erstaunlicher "Zufall"! :) :)
Wenn man dieses Betrügen in Betracht ziehen würde (ja, richtig), kann ich dem Geist der Regeln für 20 weitere Zeichen folgen = 482 - 25% = 361,5 . Ersetzen Sie einfach die letzten beiden Zeilen durch:
Dies würde dazu führen, dass das undefinierte Verhalten nicht die richtige Tabelle, sondern die Eingabetabelle zurückgibt.
quelle
x
undy
in einem Ausdruck definieren und einen inf
und den anderen in verwendeny
.y
" -> "ing
"VBA
1204 (1605 - 25%)1191 (1587 - 25%)Der direkte Ansatz.
Bearbeiten: Fehler behoben und Trick zum Ersetzen von @Maltysen verwendet
Aus dem Sofortfenster ausführen:
quelle
JavaScript (ES6) 271 (165 + 196 - 25%)
Einfach anfangen. Die Funktionen ignorieren Eingabeparameter überhaupt.
Verwenden von split / join anstelle von replace, um reguläre Ausdrücke zu vermeiden.
Test in der Firefox / FireBug-Konsole
quelle