フランス語で男性名詞と女性名詞を100文字以内で区別する


21

100文字以内の非常に小さなプログラムを作成します。プログラムは、男性と女性のフランス語の名詞を区別する必要があります。出力unは、男性的なものでありune、女性的なものでなければなりません。多くの場合、従うことができる特定の統計ルールがあります(たとえば、「e」で終わる場合は、男性より女性的である可能性が高い)。

入力

フランス語の単語。小文字のアクセントと小文字を含むダッシュとダッシュで構成されます。

入力例: ami

出力

un単語が男性的でありune、単語が女性的である場合。

出力例: un

すべての単語を正しくする必要はありません。あなたの目標は、可能な限り正確であることです。

得点:あなたの答え 100文字以内でなければなりません。以下のようなステートメントprintconsole.logかではalertないではない、あなたの総バイト数の一部としてカウントされます。このタスクを実行する関数またはメソッドを作成することもできます。その場合f=x=>、関数宣言の一部である最初の数バイト(例:)は合計には含まれません。合計スコアは、不正解の数です。ネクタイはコードサイズによって壊れます。

テストする名詞:

un ami
un café
un chapeau
un concert
un crayon
un garage
un garçon
un lit
un livre
un mari
un musée
un oncle
un ordinateur
un pantalon
un piano
un pique-nique
un portable
un père
un sandwich
un saxophone
un stade
un stylo
un théâtre
un téléphone
un voisin
une botte
une boum
une chaise
une chaussette
une chemise
une clarinette
une copine
une femme
une fille
une glace
une heure
une lampe
une maison
une montagne
une personne
une piscine
une pizza
une radio
une raquette
une salade
une souris
une sœur
une table
une télé
une voiture

6
私は物事を難しくするためだけにリストにun squeletteを追加したでしょう。
200_success 14

回答:


23

CJam、0間違った、32の 29バイト

このコードでは、いくつかの奇妙な文字(一部は印刷できない)を使用していますが、それらはすべて拡張ASCII範囲内にあります。繰り返しますが、各文字を1バイトとしてカウントしています。

"un"'el2b"zPB:  ":i+:%2/*

印刷できない文字があるため、Stack Exchangeが一部を飲み込むと確信しているので、文字カウンターからコードをコピーすることをお勧めします(UTF-8エンコードでバイトを表示します。これはこの課題に最適ではありません。また、リンクもtはFirefoxで動作するようですが、Chromeでは動作します)。

ここでテストしてください。

チャットでさらに話し合った後、正規表現のゴルフはこれ以上先に進まないだろうと考えました。そこで、以前の(冗談)提案に続いて、特定の機能を持つ単語の文字コードの操作を検討し始めました。つまり、1つのグループのすべての単語が、チェックしやすいプロパティを持つ数字を生成するようになりました。そして、予想以上に幸運になりました!コードが単語に対して行うことは次のとおりです。

  • 単語の文字を暗黙的にコードポイントに変換します。
  • それらを基数2の数字として解釈します(はい、数字は0または1よりはるかに大きくなりますが、CJamはそれを処理できます)。
  • 次の数値を法として結果を繰り返し取得します[133, 122, 80, 66, 58, 26, 20, 14, 9, 4]。この数字のシーケンス自体は、文字列のコードポイントとしてエンコードされます(これは、奇妙で印刷できない文字が入る場所です)。
  • まるで魔法のように、すべての25個の男性的な名詞は得01、およびすべての25個の女性名詞が得23、この手順で。したがって、これを2(整数除算)で除算すると、男性名詞の場合はゼロ、女性名詞の場合は1になります。

四捨五入する"un"には、スタックをプッシュし、シングルをプッシュしeます。次に、STDINから入力ワードを読み取り、上記の計算を実行し、最後eに結果を乗算します。

これまでにリストにモジュロを畳んだことは一度もありません。

アイデアを投げかけ、除数チェーンの検索を支援してくれたxnorとSp3000に感謝します。


短くなるだけでなく、2分速くなります。ホラー!
デニス14

@sudo;)...私はあなたを打ち負かすことができるまれな時間の1つです...私はあなたの説明にも非常に興味があります:)
マーティン・エンダー14

11
待って、私は混乱しています。魔法が存在する場合、なぜあなたは愚かなプログラミングチャレンジサイトでそれを無駄にし、世界平和などを解決しないのですか?(いいえ、しかし真剣に、すごい。+ 1)
ドアノブ

22

ルビー、0不正、63 56 53 52 51 50バイト

すべての文字は拡張ASCII、特にISO 8859-1であるため、各文字を1バイトとしてカウントしています。

f=->s{s[/la|tt|i.e|[égdzœu]..$|^b|^f|so|^ta/]?'une':'un'}

テストセットが短すぎるようです。Peter Norvigのメタ正規表現ゴルファーと正規表現を生成しました。

上記の関数を次のように呼び出すことができますf["ami"]。このテストハーネスを使用して、すべてのテストケースをチェックできます。

puts "ami café chapeau concert crayon garage garçon lit livre mari musée 
      oncle ordinateur pantalon piano pique-nique portable père sandwich 
      saxophone stade stylo théâtre téléphone voisin botte boum chaise 
      chaussette chemise clarinette copine femme fille glace heure lampe 
      maison montagne personne piscine pizza radio raquette salade souris 
      sœur table télé voiture".split.map{|s|f[s]+" "+s}

コーディンググラウンドでテストします。

編集:Peter Norvigの2番目のスクリプトを使用して、実際には1バイト長い別の正規表現を見つけましたが、手作業で2バイト短縮できました。

編集: Sp3000は、最近の正規表現チャレンジ用に書いた正規表現ゴルファーを設定し、使用する36 35 34バイトの正規表現を見つけました。それをありがとう!


2
ので、ここでのメタ正規表現ゴルフの悪夢を追体験tableするストリングですportable...、そして第二セットが一致しやすいと思われるので、スイッチングセットマッチには非常に有用ではありません
SP3000

13

CJam、エラー0(36 32 29 28バイト)

{"un"oEb72^"+ÕåWïº"583b2b='e*o}:F;

これは名前付き関数なので、内部コードのみをカウントしています。また、oprintステートメントであるため、バイトカウントには寄与しません。

CJamインタープリターでテストケースを試してください。

使い方

"un"o       " Print 'un'.                                                  ";
Eb          " Consider the input a base 14 number.                        ";
72^         " XOR the result with 72.                                     ";
"+ÕåWïº"    " Push that string.                                           ";
583b2b      " Convert from base 583 to base 2.                            ";
=           " Retrieve the corresponding element (0 or 1) from the array. ";
'e*o        " Print 'e' that many times.                                  ";

ハッシュ関数とテーブル検索のみ。

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