単語または近い単語?


8

文字列(またはあなたの言語で同等のもの)を指定するプログラムまたは関数を記述し、文字列が単語かどうかを判断し、真または偽の値を出力します。

(これは単語でもありますか?の重複でありませんか?間違った単語は非常に異なる方法で生成され、これはまったく異なる課題になると思います)

単語はすべて小文字で、5〜10文字で、アポストロフィはありません。

正しい単語は、SCOWL英語単語リスト(サイズ50)のランダムに選択されたサブセットです。

不適切な単語は、スワッピングと置換の2つの方法で生成されます。

「スワッピング」単語は、ランダムに選択された(実際の)単語の文字に変更されたフィッシャーイェーツのシャッフルを使用して生成されます。毎回文字を交換する代わりに、文字を交換する場合としない場合があります(確率が異なるため、一部の単語は他の単語よりも現実的です)。新しい単語が既存の単語と一致する場合、結果は破棄され、別の単語が生成されます。

「置換」単語は、同様の方法を使用して生成されますが、文字を別の文字と交換する代わりに、各文字が別のランダムな文字に置き換えられる可能性があります。

各メソッドは、偽の単語の50%を生成するために使用されます。

得点

関数は150バイト未満でなければなりません。スコアリングは次のように決定されます。

percentage of answers correct + ((150 - length of program) / 10) 

ルール

これは多数のテストケース(各ワードリストは1000ワード)を扱うため、自動テストプログラムで問題ありません。自動テスターはプログラムの長さにはカウントされません。ただし、他のユーザーがテストできるように投稿する必要があります。

  • 抜け穴はありません。
  • スペル/辞書関連のビルトインはありません。

資源

単語のリスト: http : //pastebin.com/Leb6rUvt

単語ではないリスト(更新済み)http : //pastebin.com/rEyWdV7S

その他のリソース(SCOWLワードリストとランダムワードの生成に使用されるコード):https ://www.dropbox.com/sh/46k13ekm0zvm19z/AAAFL25Z8ogLvXWTDmRwVdiGa?dl=0


2
単語リストを利用できるようにすることで課題を解決できることはわかっていますが、プログラムは、グリット(非単語リストの404)が単語ではないことを知っているはずです。
ジオビット2016

2
誤解しないでください。グリッツは全然好きじゃない。なぜ誰かがそれらを食べるのかは私を超えています。しかし、私自身も単語自体を拒否することはありません:P
Geobits

公正な警告:私はリストにあるものよりも遠くに行っていないので、他にもある可能性があります。
ジオビット2016

さらにいくつかの単語非単語、いくつかは少しあいまい:quaispavescolicsupermax。(補足:supermax実際の単語であることを知って私は嬉しく思います)
Sp3000

奇妙なのは、SCOWLの最大のリストを介してリストを実行しても、それらはまったく言葉ではありませんが、それらのどれもキャッチしませんでした。別の1000ワードを生成しました(これらは他のリソースリンクにあります)。not-wordが実際にワードである場合、同じ行番号にある代替リストのワードに置き換えられます。それまでの間、not-wordsという単語の代わりの単語を使用するようにペーストビンを更新しました。
ダニエルM.

回答:


8

PHP、64.9(50%、1バイト)

まあ、これが許容できる答えかどうかは本当にわかりませんが、ここに行きます:

1

次のように実行します。

echo '1' | php -- word

当然のことながら、正しい単語と正しくない単語の同じくらい大きなリストの場合、これは結果として50%の誤検知と0%の誤検知となるため、50%は正解です。ただし、プログラムは1バイトなので、可能な限り最大の長さのボーナスを得られます(長さゼロの回答にもかかわらず)。


興味深いことに、これは得点バランスによりかなり競合しています。+1
Addison Crump 2016

6

CJam、78.6(78.5%、149バイト)

l2b0"(1»\]ÁûKëá*ßð%äp`Ï_5ÚY÷:Ä$î ëQXV)­JKÆ¿-(ivHì?{'à\ßÐiCæz°P0ãª/îÏèÄ)WCÅH±Ø^2Ô¥?
î'jJ#OAõ~×cA$[8,ô#~¬#7>"255b2b+=

696の実際の単語に一致し、874の非単語には一致しません1570/2000 = 0.785。Chromeのオンラインインタープリターでテスト済み-パーマリンクがFirefoxで機能するかどうかはわかりません。含まれていない場合、印刷不可を含む文字列は次のようにして取得できます。

[24 40 5 49 25 187 92 93 193 251 158 131 75 235 131 225 42 129 223 240 14 37 228 112 96 207 95 53 218 89 247 58 3 196 3 36 1 238 143 32 235 139 81 15 88 86 41 20 173 74 75 198 191 45 40 105 118 72 236 63 123 39 224 15 15 92 223 208 16 147 105 140 67 16 230 122 176 80 26 48 133 227 148 144 170 47 238 207 232 136 24 196 41 87 132 67 197 72 177 216 94 24 50 212 165 63 10 238 39 106 74 35 79 65 245 126 215 136 6 99 65 36 91 56 44 143 155 150 244 35 126 172 35 55 62]:c

プログラムは単に入力をハッシュし、1077の可能なバケットに基づいてルックアップを実行します。私はこれを正規表現でゴルフしようとしましたが、非単語は実際の単語に近すぎて役に立たなかった。

オンラインでお試しください!| テストスイート(完全な単語リストを貼り付けて、一致数をカウントします)


1
「正規表現でゴルフを試しましたが、非単語が実際の単語に近すぎました」
ダニエルM.

3

Mathematica、69.35(69.35%、150バイト)

StringContainsQ[" "|##&@@"seaeiislaanreuaooesrtnlneimdiuuosnlrlggtwtwnsdjexexavsvnuvtxsgokcmairlzlzeyatgpnlfiyhtcdxrvmuqtqtmsfohnk"~StringPartition~2]

説明

この関数は、実際の単語ではほとんど発生しない特定の文字ペアが単語に含まれているかどうかをチェックします。その場合、関数はを返しTrue、単語がおそらく実際の単語ではないことを示します。たとえば、ペア"ii"はnot wordのリストでは21回発生しますが、wordsのリストでは発生しません。

正しい率

Words:      85.4%  
Not words:  53.3%

0

CSharp、69.85(57.45%、26バイト)

"hoeiaunrt".Contains(s[1])

単語の2番目の文字が英語で最も人気のある2番目の文字のリストにあるかどうかを確認します(このサイトから)。

自動テスト:

static void Main(string[] args)
{
string[] good = System.IO.File.ReadAllLines( @"PATH_GOOD.txt");
string[] bad = System.IO.File.ReadAllLines(@"PATH_BAD.txt");

int counter_good = 0;
int counter_bad = 0;

foreach (string s in good)
{
    if ("hoeiaunrt".Contains(s[1])) counter_good++;
}

foreach (string s in bad)
{
    if (!("hoeiaunrt".Contains(s[1]))) counter_bad++;
}

Console.WriteLine(counter_good);
Console.WriteLine(counter_bad);

Console.ReadLine();
}

結果:

828
321

計算:

(828+321)/20 + 124/10 = 57.45 + 12.4 = 69.85

0

ES6、76(67.4%、64バイト)

今回はもっと真剣な答え。これはかなり単純なアルゴリズムです。単語の2番目の文字がのいずれかである場合、真の値を返しますaeinoru。それだけ1で成功率が大幅に向上するわけではありませんが、それでも非常に短いです。

w=>/^[^qxy][aehil-prux]/.test(w)>/[^aeiouy]{3}|[fiopq]$/.test(w)

ここでテストします。

  • +2.7正規表現を追加して、3つ以上の連続する子音を持つ単語を検索し、それらを「非単語」としてルール化する
  • +0.1と置き換え&!>
  • 最も一般的qxyでない最初の文字を除外して+1.95、有効な(一般的な)2番目の文字を追加して偽陰性を補正し、正規表現内の冗長なコンマを取り除く
  • +0.05ありそうにない文字で終わる単語を除外する fiopq
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.