introduction
Dans ce défi, votre tâche consiste à répertorier correctement les cas de deux noms finlandais. La torsion est que vous pouvez utiliser l'une des listes comme guide pour produire l'autre.
Les noms
Nous utilisons les deux tableaux de déclinaison suivants comme données. Ils répertorient les cas de deux noms, un cas par ligne dans le même ordre que dans l'article Wikipedia lié ci-dessus, sous la forme singulière: pluriel le cas échéant.
Tableau 1: Cas d' ovi ("porte")
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
Tableau 2: Cas de jalka ("pied")
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
La tâche
Votre tâche consiste à écrire deux programmes f
et g
(éventuellement avec des noms différents) qui prennent une chaîne en entrée, donnent une chaîne en sortie et ont la propriété suivante. Si le tableau 1 est donné f
en entrée, il sort le tableau 2 et si le tableau 2 est donné g
, il sort le tableau 1. Toutes les autres entrées entraînent un comportement indéfini. Les tableaux doivent apparaître exactement comme ci-dessus en entrée et en sortie. Vous pouvez éventuellement supposer qu'il existe un retour à la ligne de fin, mais il doit ensuite être utilisé dans les deux tables, ainsi qu'en entrée et en sortie. Il n'y a pas de nouvelle ligne précédente.
Règles et bonus
Vous pouvez écrire f
et en g
tant que fonctions ou programmes complets, mais ils doivent être du même type et ils doivent être complètement séparés (si vous écrivez une fonction d'assistance pour f
, vous devez la réécrire g
si vous voulez l'utiliser là-bas) . Le nombre d'octets total le plus faible gagne et les failles standard sont interdites.
Il y a un bonus de -25% pour ne pas utiliser d'expressions régulières.
Quelques clarifications
Il est parfaitement correct d'écrire une fonction / un programme f
qui ignore son entrée et renvoie toujours le tableau 2, et une fonction / un programme g
qui renvoie toujours le tableau 1. Il suffit de cela et ; le comportement de et sur toutes les autres entrées n'est pas pertinent.f(Table 1) == Table 2
g(Table 2) == Table 1
f
g
La partie "complètement séparée" signifie ce qui suit. Votre réponse fournit deux morceaux de code, un pour f
et un pour g
, de préférence dans des zones de code différentes. Si je mets le code pour f
dans un fichier et l'exécute, cela fonctionne, et la même chose pour g
. Votre score est la somme du nombre d'octets des deux morceaux de code. Tout code dupliqué est compté deux fois.
if Table 1 is given `f` as input
Comment entre-t-on une fonction dans une table? Je ne comprends pas cette partief
en entrée »Réponses:
Perl, 105 + 54 = 159
Programme
f
(essayez- moi ):Programme
g
(essayez- moi ):Une version alternative de
f
, seulement 2 octets de plus (cette méthode peut également être appliquéeg
mais elle serait trop longue):Techniquement, cela utilise toujours une expression rationnelle (pour décoder la chaîne de substitution puis pour les appliquer), je ne peux donc pas réclamer le bonus ici.
la source
s/jalk?o?/ov/g
! Celui-là est puissant.Perl, 131 + 74 = 205
Tableau 1 à tableau 2
Étendu:
Tableau 2 à tableau 1
Étendu:
(Merci à @nutki pour quelques conseils Perl)
Malgré la pénalité sur les regex, j'ai quand même décidé de m'y attaquer et d'apprendre Perl pendant que j'y étais. Je suppose qu'il y a des astuces Perl qui pourraient me permettre de chaîner des remplacements, mais je n'en ai trouvé aucun dans ma recherche rapide en ligne.
Il est beaucoup plus difficile de passer de la table ovi à la table jalka , ce qui, je suppose, est parce que la table jalka a des nuances supplémentaires pour rendre les mots plus faciles à prononcer.
Voici la table de remplacement sur laquelle je travaillais:
la source
Python 2, 371 - 25% = 278
Lorsque le tableau 1 est l'entrée de la fonction f, il renvoie le tableau 2. Si l'entrée n'est pas le tableau 1, sa sortie n'est pas définie (mais probable mais non garantie de renvoyer le tableau 2). Par exemple, l'appel
f(9**9**9**9)
ne retournera probablement pas la table 2.La même logique est utilisée avec la fonction g:
Les fonctions sont indépendantes.
la source
Python - 462 - 25% = 346,5
Ce programme fait l'approche directe et évidente, sauf pour quelques trucs de golf de données. Pour le comportement non défini, il imprime le tableau exactement comme le comportement défini. Quelle étonnante "coïncidence"! :)
Maintenant, si l'on considère cette tricherie (ouais à droite), je peux suivre l'esprit des règles pour 20 caractères supplémentaires = 482 - 25% = 361,5 . Remplacez simplement les deux dernières lignes par:
Cela rendrait le comportement indéfini renvoyer non pas la table correcte mais la table d'entrée.
la source
x
ety
dans une expression, et utiliser l'une dansf
et l'autre dansy
.y
" -> "ing
"VBA
1204 (1605 - 25%)1191 (1587 - 25%)L'approche directe.
Edit: bug corrigé et astuce de remplacement utilisé de @Maltysen
Exécutez à partir de la fenêtre Exécution:
la source
JavaScript (ES6) 271 (165 + 196-25%)
Commencer simple. Les fonctions ignorent tout paramètre d'entrée.
Utiliser split / join au lieu de replace pour éviter les expressions régulières.
Test dans la console Firefox / FireBug
la source