フィンランド語の2つの名詞の格のリスト


10

前書き

この課題では、フィンランド語の2つの名詞の格を正しくリストすることがあなたの仕事です。ツイストは、リストの1つをガイドとして使用して、もう1つを作成できることです。

名詞

データとして、次の2つの偏角テーブルを使用します。彼らは、2つの名詞の格を、上記のWikipediaの記事と同じ順序で、1行に1つの格を、該当する場合は単数形:複数の形式でリストします。

表1:ovi(「ドア」)のケース

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 : 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

タスク

あなたの仕事は、1つの文字列を入力として受け取り、1つの文字列を出力として与え、次のプロパティを持つ2つのプログラムfg(おそらく名前が異なる)を書くことです。Table 1がf入力として指定されている場合はTable 2をg出力し、Table 2がに指定されている場合はTable 1を出力します。他のすべての入力は未定義の動作になります。テーブルは、入力と出力の両方で上記とまったく同じように表示される必要があります。オプションで、後続の改行があると想定することもできますが、その場合は両方のテーブル、および入力と出力の両方で使用する必要があります。先行する改行はありません。

ルールとボーナス

あなたが書くことができますfし、gどちらかの機能または完全なプログラムとして、彼らは同じ型でなければなりません、そして、彼らは完全に分離する必要があります(あなたがのためのヘルパー関数を書く場合はfあなたが再書き込み、それをしなければならない、gあなたはそれを使用したい場合があります) 。最小の合計バイト数が優先され、標準の抜け穴は許可されません。

正規表現を使用しない場合は-25%のボーナスがあります。

いくつかの説明

これは、関数/プログラムの書き込みにまったく問題ありfその入力を無視し、常に表2、および機能/プログラムを返しg、常にそれが唯一のことを必要とする表1を返すことと;を 行動や他のすべての入力には無関係です。f(Table 1) == Table 2g(Table 2) == Table 1fg

「完全に分離した」部分とは、次のことを意味します。あなたの答えは、コードの2個に1つの提供fのためにと1をg好ましくは異なるコードボックスに、。のコードをfファイルに入れて実行すると、機能しgます。スコアは、2つのコードのバイト数の合計です。重複したコードは2回カウントされます。


if Table 1 is given `f` as inputどのようにして関数をテーブルに入力しますか?私はこの部分を理解していません

@Reticality「表1が入力として指定 fれている場合」
Zgarb

回答:


5

Perl、105 + 54 = 159

プログラムf私を試してください):

#!perl -p
s/vi /vka /;s/ve/va/g;s/en/an/;s/vi/voi/;s/ov/1&34960>>$.?jalk:jal/eg;s/ii/ihi/;s/loia/lkoje/;s/oia/oja/

プログラムg私を試してください):

#!perl -p
s/jalk?o?/ov/g;s/va /vi /;s/va/ve/g;s/an/en/;y/jh/i/d

の代替バージョンでf、2バイトしか長くありません(この方法も適用できますgが、長すぎます)。

#!perl -p0
ka1a1a1koj1a1a1ka1koj1a1o0a1o0kaa2koih1a1o0a1o0a1o0ka1ko0a1o0o0a1o0ko=~s!\D+!"s/ov".'.'x$'."/jal$&/"!gree

技術的にはこれはまだ正規表現を使用しており(置換文字列をデコードしてから適用するため)、ここではボーナスを主張できません。


うわー、良い仕事をs/jalk?o?/ov/g!それは強力です。
Sp3000 2015

4

Perl、131 + 74 = 205

表1から表2

$_=join"",<>;s/ee/kaa/;s/ii/koihi/;s/i(e|a)/koj$1/g;s/i(na|ne)/koi$1/g;s/v[ie](.?a| )/vka$1/g;s/vi/voi/g;s/ve/va/g;s/ov/jal/g;print

拡張:

$_=join"",<>;
s/ee/kaa/;
s/ii/koihi/;
s/i(e|a)/koj$1/g;
s/i(na|ne)/koi$1/g;
s/v[ie](.?a| )/vka$1/g;
s/vi/voi/g;
s/ve/va/g;
s/ov/jal/g;
print

表2から表1

$_=join"",<>;s/aan/aen/;s/jal(ka\b|oi|ko[ij]h?)/ovi/g;s/jalk?a/ove/g;print

拡張:

$_=join"",<>;
s/aan/aen/;
s/jal(ka\b|oi|ko[ij]h?)/ovi/g;
s/jalk?a/ove/g;
print

(Perlのヒントについて@nutkiに感謝)

正規表現のペナルティにもかかわらず、私はとにかくそれに取り組み、Perlを学んでいる間にPerlを学ぶことにしました。代替品をチェーンできるいくつかのPerlのトリックがあると思いますが、オンラインのクイック検索でそれらを見つけることができませんでした。

oviテーブルからjalkaテーブルに移動するのははるかに困難です。これは、jalkaテーブルには、単語を発音しやすくするための追加のニュアンスがあるためだと思います。


これは私が働いていた交換用のテーブルです:

i <-> ka
--------
ov i               jal ka

e <-> ka
--------
ov e a             jal ka a
ov e na            jal ka na

e <-> a
-------
ov e t             jal a t
ov e n             jal a n
ov e ssa           jal a ssa
ov e sta           jal a sta
ov e lla           jal a lla
ov e lta           jal a lta
ov e lle           jal a lle
ov e ksi           jal a ksi
ov e tta           jal a tta

i <-> oi
--------
ov i ssa           jal oi ssa
ov i sta           jal oi sta
ov i lla           jal oi lla
ov i lta           jal oi lta
ov i lle           jal oi lle
ov i ksi           jal oi ksi
ov i n             jal oi n
ov i tta           jal oi tta

i <-> koi
---------
ov i na            jal koi na
ov i ne            jal koi ne

i <-> koj
---------
ov i en            jal koj en
ov i a             jal koj a

i <-> koih
------------
ov i in            jal koih in

ee <-> kaa
----------
ov ee n            jal kaa n

2

Python 2、371-25%= 278

テーブル1が関数fへの入力である場合、テーブル2を返します。入力がテーブル1でない場合、その出力は未定義です(ただし、テーブル2を返すことは保証されていません)。たとえば、呼び出しf(9**9**9**9)はおそらくテーブル2を返しません。

f=lambda a:'jalkaBatAanBkojenAanBatAkaaBkojaAassaBoissaAastaBoistaAkaanBkoihinAallaBoillaAaltaBoiltaAalleBoilleAkanaBkoinaAaksiBoiksiAoinAattaBoittaAkoine'.replace('A','\njal').replace('B',' : jal')

同じロジックが関数gで使用されます。

g=lambda a:'oviBetAenBienAenBetAeaBiaAessaBissaAestaBistaAeenBiinAellaBillaAeltaBiltaAelleBilleAenaBinaAeksiBiksiAinAettaBittaAine'.replace('A','\nov').replace('B',' : ov')

機能は独立しています。


0

Python-462-25%= 346.5

このプログラムは、いくつかのデータゴルフトリックを除いて、明白で直接的なアプローチを行います。未定義の動作については、定義された動作と同じようにテーブルを出力します。なんと驚くべき「偶然」でしょう!:)

x,y="""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
ovineXjalka: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""".replace(':',' : ').split('X')
f=lambda n:y
g=lambda n:x

さて、この不正行為を考えると(そうですね)、あと20文字のルールの精神= 482-25%= 361.5に従うことができます。最後の2行を次のように置き換えるだけです。

f=lambda n:[x,y][n==x]
g=lambda n:[y,x][n==y]

これにより、未定義の動作は正しいテーブルではなく入力テーブルを返します。


常に同じテーブルを返すのはまったく問題ありません。ただし、課題では、関数の定義に使用するすべてのコードを分離する必要があると述べています(これは少しあいまいだった可能性があります。明確にしていきます)。特に、1つの式でを定義しxたりy、で一方を使用しfたり、他方でを使用したりすることはできませんy
Zgarb 2015

"in y"-> "in g"
Zgarb 2015

0

VBA 1204(1605-25%) 1191(1587-25%)

直接的なアプローチ。

編集:バグを修正し、@ Maltysenの置換トリックを使用

Function f(s)
    If Replace(s, " : ", ":") = "ovi:ovet" & vbLf & "oven:ovien" & vbLf & "oven:ovet" & vbLf & "ovea:ovia" & vbLf & "ovessa:ovissa" & vbLf & "ovesta:ovista" & vbLf & "oveen:oviin" & vbLf & "ovella:ovilla" & vbLf & "ovelta:ovilta" & vbLf & "ovelle:oville" & vbLf & "ovena:ovina" & vbLf & "oveksi:oviksi" & vbLf & "ovin" & vbLf & "ovetta:ovitta" & vbLf & "ovine" Then f = Replace("jalka:jalat" & vbLf & "jalan:jalkojen" & vbLf & "jalan:jalat" & vbLf & "jalkaa:jalkoja" & vbLf & "jalassa:jaloissa" & vbLf & "jalasta:jaloista" & vbLf & "jalkaan:jalkoihin" & vbLf & "jalalla:jaloilla" & vbLf & "jalalta:jaloilta" & vbLf & "jalalle:jaloille" & vbLf & "jalkana:jalkoina" & vbLf & "jalaksi:jaloiksi" & vbLf & "jaloin" & vbLf & "jalatta:jaloitta" & vbLf & "jalkoine", ":", " : ")
End Function

Function g(s)
    If Replace(s, " : ", ":") = "jalka:jalat" & vbLf & "jalan:jalkojen" & vbLf & "jalan:jalat" & vbLf & "jalkaa:jalkoja" & vbLf & "jalassa:jaloissa" & vbLf & "jalasta:jaloista" & vbLf & "jalkaan:jalkoihin" & vbLf & "jalalla:jaloilla" & vbLf & "jalalta:jaloilta" & vbLf & "jalalle:jaloille" & vbLf & "jalkana:jalkoina" & vbLf & "jalaksi:jaloiksi" & vbLf & "jaloin" & vbLf & "jalatta:jaloitta" & vbLf & "jalkoine" Then f = Replace("ovi:ovet" & vbLf & "oven:ovien" & vbLf & "oven:ovet" & vbLf & "ovea:ovia" & vbLf & "ovessa:ovissa" & vbLf & "ovesta:ovista" & vbLf & "oveen:oviin" & vbLf & "ovella:ovilla" & vbLf & "ovelta:ovilta" & vbLf & "ovelle:oville" & vbLf & "ovena:ovina" & vbLf & "oveksi:oviksi" & vbLf & "ovin" & vbLf & "ovetta:ovitta" & vbLf & "ovine", ":", " : ")
End Function

イミディエイトウィンドウから実行します。

msgbox f("ovi : ovet" & vbLf & "oven : ovien" & vbLf & "oven : ovet" & vbLf & "ovea : ovia" & vbLf & "ovessa : ovissa" & vbLf & "ovesta : ovista" & vbLf & "oveen : oviin" & vbLf & "ovella : ovilla" & vbLf & "ovelta : ovilta" & vbLf & "ovelle : oville" & vbLf & "ovena : ovina" & vbLf & "oveksi : oviksi" & vbLf & "ovin" & vbLf & "ovetta : ovitta" & vbLf & "ovine")

最初の文字が「o」または「j」であるかどうかを確認するだけでよいのではないですか?
Claudiu 2015

@Claudiu実際、何もチェックする必要はありません。入力を無視して常に同じテーブルを返す関数は有効な答えです。チャレンジでそれを明らかにします。
Zgarb 2015

@Claudiuそれについて考えましたが、誰かが「o」を渡してそれを実行した場合はどうなりますか?
phrebh

@Zgarb私の関数は入力を無視しているように思われますが、それは(技術的には)無視されているようです。ただし、文字の翻訳はありません。
phrebh

いいえ、私は彼ら単に入力を無視してもまだ有効であると言っているだけです。
Zgarb 2015

0

JavaScript(ES6)271(165 + 196 -25%)

簡単に始めましょう。関数は入力パラメータをまったく無視します。
正規表現を回避するために、置換ではなく分割/結合を使用します。

g=_=>'ovi1et0n1ien0n1et0a1ia0ssa1issa0sta1ista0en1iin0lla1illa0lta1ilta0lle1ille0na1ina0ksi1iksi\novin0tta1itta\novine'
.split(0).join('\nove').split(1).join(' : ov')
f=_=>'jalka1at0an1kojen0an1at0kaa1koja0assa1oissa0asta1oista0kaan1koihin0alla1oilla0alta1oilta0alle1oille0kana1koina0aksi1oiksi0oin0atta1oitta0koine'
.split(0).join('\njal').split(1).join(' : jal')

Firefox / FireBugコンソールでテストする

console.log(f('ovi : ovet\noven : ovien\noven : ovet\novea : ovia\novessa : ovissa\novesta : ovista\noveen : oviin\novella : ovilla\novelta : ovilta\novelle : oville\novena : ovina\noveksi : oviksi\novin\novetta : ovitta\novine'))

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
jaloin
jaloin

console.log(g("jalka : jalat\njalan : jalkojen\njalan : jalat\njalkaa : jalkoja\njalassa : jaloissa\njalasta : jaloista\njalkaan : jalkoihin\njalalla : jaloilla\njalalta : jaloilta\njalalle : jaloille\njalkana : jalkoina\njalaksi : jaloiksi\njaloin\njalatta : jaloitta\njalkoine"))

ovi:ovet
オーブン:ovien
オーブン:ovet
ovea:ovia
ovessa:ovissa
ovesta:ovista
oveen:oviin
ovella:ovilla
ovelta:ovilta
ovelle:oville
オーブン:ovina
oveksi:oviksi
ovin
ovetta:ovitta
ovine

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.