2文字のスクラブルワードをすべて印刷


40

チャレンジ:

Scrabbleで使用可能な 2文字の単語を、できるだけ少ないバイト数印刷します。ここにテキストファイルリストを作成しました。以下も参照してください。101個の単語があります。CやVで始まる言葉はありません。最適ではない場合でも、クリエイティブなソリューションが推奨されます。

AA
AB
AD
...
ZA

ルール:

  • 出力された単語はどういうわけか分離しなければなりません。
  • 大文字と小文字は区別されませんが、一貫している必要があります。
  • 末尾のスペースと改行を使用できます。他の文字は出力されません。
  • プログラムは何も入力しないでください。外部リソース(辞書)は使用できません。
  • 標準的な抜け穴はありません。

単語リスト:

AA AB AD AE AG AH AI AL AM AN AR AS AT AW AX AY 
BA BE BI BO BY 
DE DO 
ED EF EH EL EM EN ER ES ET EX 
FA FE 
GO 
HA HE HI HM HO 
ID IF IN IS IT 
JO 
KA KI 
LA LI LO 
MA ME MI MM MO MU MY 
NA NE NO NU 
OD OE OF OH OI OM ON OP OR OS OW OX OY 
PA PE PI 
QI 
RE 
SH SI SO 
TA TI TO 
UH UM UN UP US UT 
WE WO 
XI XU 
YA YE YO 
ZA

8
単語は同じ順序で出力する必要がありますか?
Sp3000

2
@ Sp3000何かおもしろいことが考えられるなら、ノーと言います
-qwr

2
正確にカウントを明確してください何とか分離。空白にする必要がありますか?もしそうなら、改行しないスペースは許可されますか?
デニス


3
Viは言葉ではありませんか?私へのニュース
...-jmoreno

回答:


39

Python 3、194 188バイト

s="BI ODEXIF BAAX ASOHER LOXUMOPAGOR KI US AMY BOITONOSI MMEMINANEHI UPI AYAHOYOWOMUNUHAID PEFARED QIS BEN JOFETAE KAT ABYESHMALI UTI ZADOELAWE "
while s:" "in s[:2]or print(s[:2]);s=s[1:]

ほとんど間違いなく最短の方法ではありませんが、これは良い出発点になると思いました。可能な限り重複してパスに各ペアをパックしてみてください(例"ODEX..."= ["OD", "DE", "EX", ...])。スペースを使用してパスを区切り、スペースが含まれるペアはすべて削除されます(末尾のスペースは、末尾に1つのシングルEが印刷されないようにするためです)。

私もこれを正規表現でゴルフしてみましたが、もっと長くなりました。


1
+1すてきなアプローチ!Rubyの答えのためにあなたの文字列を借りた
daniero

また、bashと正規表現を使用してあなたの考えに基づいて答えを作った
sergioFC

2
+1のためのAYAHOYOWOMUNUHAID
レベルリバーセント

28

CJam、96 94バイト

0000000: 31 30 31 2c 22 5a 0a d0 fd 64 f6 07 a3 81 30 f2  101,"Z...d....0.
0000010: c2 a5 60 0c 59 0f 14 3c 01 dd d1 69 7d 66 47 6e  ..`.Y..<...i}fGn
0000020: db 54 e5 8f 85 97 de b9 79 11 35 34 21 cb 26 c3  .T......y.54!.&.
0000030: f0 36 41 2b b4 51 fb 98 48 fc cb 52 75 1f 1d b1  .6A+.Q..H..Ru...
0000040: 6b c3 0c d9 0f 22 32 36 30 62 33 36 62 66 7b 3c  k...."260b36bf{<
0000050: 31 62 32 35 6d 64 2d 35 35 7d 27 41 66 2b        1b25md-55}'Af+

上記はhexdumpであり、これはで元に戻すことができますxxd -r -c 16 -g 1

CJamインタープリターでオンラインで試してください。

どういうわけか分離されたものとして正確にカウントされるものに応じて、バイトカウントを93または92まで下げることができます。

  • に置き換える-5559、単語は改行なしスペース(0xA0)で区切られます。

  • に置き換える-55W、単語はアットマーク(0x40)で区切られます。

アイディア

文字xyの各ペアを(ord(x)-65)×25 +(ord(y)-65)としてエンコードできます。1

結果の整数を保存する代わりに、2つの隣接する単語に対応するすべてのペアの差を保存します(アルファベット順にソート)。

最高の差は35です。したがって、36を底とする整数の数字と見なし、その整数をバイト文字列に変換します。

コード

101,   e# Push [0 ... 100].
"…"    e# Push the string that encodes the differences/increments.
260b   e# Convert from base 260 to integer.
36b    e# Convert from integer to base 36 (array).
f{     e# For each I in [0 ... 100]:
       e#   Push the base 36 array.
  <    e#   Keep it's first I elements.
  1b   e#   Compute their sum.
  25md e#   Push quotient and residue of the sum's division by 25.
  -55  e#   Push -55 = '\n' - 'A'.
}      e#
'Af+   e# Add 'A' to all resulting integers. This casts to Character.

1 2番目の文字は決してZではないため、26の代わりに25を使用すれば十分です。


14

PHP 224、218、210 206

foreach(explode(",","I19SR,9ZY8H,,CNK,5JRU0,H,CN4,G0H,H160,CN4,75,CU9,AMIHD,MTQP,HQOXK,7L,74,G,CXS,CU9,HTOG,,CNK,MHA8,CNL,1")as$a){$b++;for($c=0;$c<26;$c++)echo base_convert($a,36,10)&pow(2,$c)?chr(96+$b).chr(97+$c)." ":"";}
aa ab ad ae ag ah ai al am an ar as at aw ax ay ba be bi bo by de do ed ef eh el em en er es et ex fa fe go ha he hi hm ho id if in is it jo ka ki la li lo ma me mi mm mo mu my na ne no nu od oe of oh oi om on op or os ow ox oy pa pe pi qi re sh si so ta ti to uh um un up us ut we wo xi xu ya ye yo za 

確かに素晴らしいスコアではありませんが、私は挑戦が好きでした。

オプションのテーブルを作成し、有効なオプションを示すビット単位のシステムを作成しました。

ここに画像の説明を入力してください

次に、これらのオプションをbase-36エンコードして文字列を取得します。

"I19SR,9ZY8H,,CNK,5JRU0,H,CN4,G0H,H160,CN4,75,CU9,AMIHD,MTQP,HQOXK,7L,74,G,CXS,CU9,HTOG,,CNK,MHA8,CNL,1"

Cにはオプションがないため、文字列配列の3番目のエントリには値がありません。

値を印刷するには、有効なオプションをcharsに変換するだけです。

C、J、K、Q、V、またはZで終わる単語がないという認識を減らすために何かできることがありますが、atmを減らす方法は考えられません。


テーブルを転置することで、空の要素が増え、データは少しコンパクトにエンコードされ、数バイト削り取られます。これで、配列は異なる順序で印刷されます。

foreach(explode(",","UB1YB,1,,CUP,CLMEJ,CUO,1,SG0H,5J9MR,,,H,MX01,MTXT,CYO5M,MTQ8,,CNL,MTXT,MHAP,50268,,CN5,CNL,FSZ,,")as$a){$b++;for($c=0;$c<26;$c++)echo base_convert($a,36,10)&pow(2,$c)?chr(97+$c).chr(96+$b)." ":"";} 

aa ba fa ha ka la ma na pa ta ya za ab ad ed id od ae be de fe he me ne oe pe re we ye ef if of ag ah eh oh sh uh ai bi hi ki li mi oi pi qi si ti xi al el am em hm mm om um an en in on un bo do go ho jo lo mo no so to wo yo op up ar er or as es is os us at et it ut mu nu xu aw ow ax ex ox ay by my oy

爆発とループのヒントを提供してくれたIsmaelに感謝します。

foreach(explode(3,UB1YB3133CUP3CLMEJ3CUO313SG0H35J9MR333H3MX013MTXT3CYO5M3MTQ833CNL3MTXT3MHAP35026833CN53CNL3FSZ)as$d)for($e++,$f=0;$f<26;$f++)echo base_convert($d,36,10)&pow(2,$f)?chr(97+$f).chr(96+$e)." ":"";

php5.6への更新により、さらに4バイトを保存してpow(,)置き換えることができ**ます。

foreach(explode(3,UB1YB3133CUP3CLMEJ3CUO313SG0H35J9MR333H3MX013MTXT3CYO5M3MTQ833CNL3MTXT3MHAP35026833CN53CNL3FSZ)as$d)for($e++,$f=0;$f<26;$f++)echo base_convert($d,36,10)&2**$f?chr(97+$f).chr(96+$e)." ":"";

代わりによって爆発の","は、使用することができますexplode(0,UB1YB0100CUP[...])
イスマエルミゲル

エンコーディングに0が含まれているので、それは壊れませんか?
ジェームズウェブスター

しかし.. 3使用できるものはありません!ありがとう
ジェームズウェブスター

また、あなたは置き換えることができ$e++;for($f=0;$f<26;$f++)for($e++,$f=0;$f<26;$f++)、そして今、あなたはそれらの厄介を削除することができます{}。また、文字を小文字に変換する場合は、を使用します$e^' '
イスマエルミゲル

良いキャッチ!私はそれを持っていなかっただろう。
ジェームズウェブスター

8

Perl、167 164 157バイト

"AMAEDOXUHALAXISHENUNUPABEFAHIDEMYESOHOSITAAGOYAYAWOWETOINODOREX KIFEHMMER BYONELI BOEMUS PELOMI UMOFAD BATAR KANAS JOPI UTI ZAI BI QI"=~/$_/&&say for AA..ZZ

別のスクリプトを作成して、文字をできるだけコンパクトにまとめて、すべての有効な2文字の単語を含む文字列にしました。これにより、2文字の単語すべてを反復処理し、有効なものを1行に1つずつ出力します。で実行しperl -M5.10.1 script.plます。


これをオンラインコンパイラで動作させることはできません。
mbomb007

@ mbomb007バージョンに応じて、そのバージョンに追加され-M5.10.1sayキーワードを使用するためにコマンドラインフラグが必要かuse feature 'say';、スクリプトの本文に追加します。
AKHolland

7

C、155バイト

ゴルフバージョン

i,v;main(){for(;++i-408;" >b  Ùc :oÒ¹ i ;¹ w so@)ia ¥g¨¸ ´k¦ase    Ù{§k {"[i/8]>>i%8&1||printf("%c%c%c ",i/8%2*v,i/16+65,!(i/8%2)*v))v="YUOIEMHA"[i%8];}

出力

YA HA AA BY BO BI BE BA AB DO DE OD ID ED AD YE OE HE AE FE FA OF IF EF GO AG UH OH EH AH OI HI AI JO KI KA LO LI LA EL AL MY MU MO MI ME MM MA UM OM EM HM AM NU NO NE NA UN ON IN EN AN YO HO PI PE PA UP OP QI RE OR ER AR SO SI SH US OS IS ES AS TO TI TA UT IT ET AT WO WE OW AW XU XI OX EX AX OY AY ZA

ゴルフされていないバージョン

ゴルフバージョンの51バイトの魔法の文字列には、ASCII 126を超える多くの文字が含まれています。ASCII126は、ほぼ間違いなくUnicodeに相当するものに変換されています。使用されていないバージョンでは、代わりに16進数が使用され、リテラルではなく定数として使用されます。また、非ゴルフバージョンでは、単語が改行で区切られているため、Excelへのコピーと貼り付け、リストの順序付け、必要なリストとの比較が容易になります。

char a[]=
{0xFF,0x3E ,0x62,0x7F ,0xFF,0xFF ,0xEB,0x63 ,0xFF,0x3A ,0x6F,0xE3 ,0xFB,0x7F ,0xFF,0x69 ,0xFF,0x3B
,0xFB,0xFF ,0x77,0xFF ,0x73,0x6F ,0x40,0x29 ,0x69,0x61 ,0xFF,0xBE ,0x67,0xF9 ,0xF7,0xFF ,0xEF,0x6B
,0xB3,0x61 ,0x73,0x65 ,0xFF,0xFF ,0xFF,0xFF ,0xEB,0x7B ,0xF5,0x6B ,0xFF,0x7B ,0x7F};

//iterate through i = 16*letter + 8*order + vowel
i,v;main(){for(;i++-408;a[i/8]>>i%8&1||printf("%c%c%c\n",i/8%2*v,i/16+65,!(i/8%2)*v))v="YUOIEMHA"[i%8];}

説明

母音の定義を8文字のAHMEIOUYを含むように拡張すると、すべての単語が1つの母音と1つの別の文字(母音である場合とそうでない場合がある)で構成されることがわかります。したがって、母音で終わるすべての単語について母音に対応する個々のビットを使用して、最初の文字ごとに1つ、26バイトのテーブルが必要です。母音で始まる単語についても同様のテーブルが必要です。ただし、Zで終わる単語はないため、今回は25バイトしか必要ありません。2つのテーブルをまとめて最終テーブルを作成します。

領域0..31のASCIIコードを回避するために、2つの最も一般的な「母音」MとHが6番目と7番目のビットに割り当てられ、エンコードでは無効な単語に対して1、有効な単語に対して0が考慮されます。MとHの両方とペアになる子音がないため、これらのビットの少なくとも1つが1であることを確認できます。

8番目のビットは、非ASCII文字を制限しようとするために、最も一般的な母音であるAに割り当てられます(まだ多くあります)。

使用される表は以下のとおりです。2つの母音を含む単語の場合、最初の文字を「母音」と見なされ、2番目の文字を「文字」と見なします。これの例外は、MMとHMの間の衝突を回避するため、Mで始まる単語です。

母音で始まる単語の16進エンコード

3E 7F FF 63 3A E3 7F 69 3B FF FF 6F 29 61 BE F9 FF 6B 61 65 FF FF 7B 6B 7B

AA AB    AD AE    AG AH AI       AL AM AN          AR AS AT       AW AX AY 
HA          HE          HI          HM    HO 

         ED    EF    EH          EL EM EN          ER ES ET          EX 
         ID    IF                      IN             IS IT 
         OD OE OF    OH OI          OM ON     OP   OR OS          OW OX OY 
                     UH             UM UN     UP       US UT 
YA          YE                            YO 

母音で終わる単語の16進エンコード

 A  H  M  E  I  O  U  Y
                         FF
BA       BE BI BO    BY  62
                         FF 
         DE    DO        EB
                         FF
FA       FE              6F
               GO        FB
                         FF
                         FF
               JO        FB
KA          KI           77
LA          LI LO        73
MA    MM ME MI MO MU MY  40
NA       NE    NO NU     69
                         FF
PA       PE PI           67
            QI           F7
         RE              EF
    SH      SI  SO       B3
TA          TI  TO       73
                         FF
                         FF
         WE     WO       EB
            XI     XU    F5
                         FF
ZA                       7F

マングリングを簡単に元に戻すことができるので、多分golfedバージョンのhexdumpに対してを作る
masterX244

7

Javaの、484の 448 407 391 389バイト

私の最初の試み

public static void main(String[]a){int[]x={57569742,35784706,0,2099200,5534148,35651584,2048,35792896,5247168,2048,33685504,33687552,35794978,35653664,7746958,35782656,131072,2097152,395264,33687552,551296,0,2099200,131104,35653632,33554432};for(Integer i=0;i<26;i++){for(int z=0;z<26;z++){if("".format("%26s",i.toString(x[i],2)).charAt(z)=='1'){System.out.format("%c%c ",'A'+i,'A'+z);}}}}

フォーマット済み:

public static void main(String[] a) {
    int[] x = { 57569742, 35784706, 0, 2099200, 5534148, 35651584, 2048, 35792896, 5247168, 2048, 33685504, 33687552, 35794978, 35653664,
            7746958, 35782656, 131072, 2097152, 395264, 33687552, 551296, 0, 2099200, 131104, 35653632, 33554432 };
    for (Integer i = 0; i < 26; i++) {
        for (int z = 0; z < 26; z++) {
            if ("".format("%26s", i.toString(x[i], 2)).charAt(z) == '1') {
                System.out.format("%c%c ", 'A' + i, 'A' + z);
            }
        }
    }
}

オンラインで試す


良くやった!いくつかの提案:java.lang.Exceptionは単にExceptionと呼ぶことができます。「args」は「a」のみです。String.format()は "" .format()にすることができます。main()宣言には少し余分なスペースもあります。全体的にいいアプローチですが、私からの+1 :)
jrich

印刷物の声明で遊んでいますが、あなたは私にそれを打ち負かしました!\nスペースだけで置き換えることにより、別のバイトを保存できます。改行で区切る必要はありません。
ジェームズウェブスター

また、削除できるスペースがいくつかありません。
ジェームズウェブスター

ヒントについては@JamesWebster thx。
griFlo

4
"".format見るのは苦痛ですが、陽気です。
コードブレーカー

6

ルビー、166バイト

借入SP3000のコンパクトな文字列に単語をエンコードするためのきちんとした方法を。ここでのキッカーは、2文字の単語にデコードする短い方法です。文字列のスキャンメソッドに渡される正規表現で先読みを使用して、スペースを含まない重複する一致を抽出します。

puts "BI ODEXIF BAAX ASOHER LOXUMOPAGOR KI US AMY BOITONOSI MMEMINANEHI UPI AYAHOYOWOMUNUHAID PEFARED QIS BEN JOFETAE KAT ABYESHMALI UTI ZADOELAWE".scan /(?=(\w\w))/

ルビー、179バイト

私自身のアプローチ:AAとの間の2文字の単語をすべて生成ZAし、ベース36エンコードビットマスクを使用して有効なものを選択します。

i=-1
puts ("AA".."ZA").select{|w|"djmsjr5pfw2omzrfgydo01w2cykswsrjaiwj9f2moklc7okcn4u2uxyjenr7o3ub90fk7ipdq16dyttg8qdxajdthd6i0dk8zlmn5cmdkczrg0xxk6lzie1i45mod7".to_i(36)[i+=1]>0}

6

Matlab、177バイト

許可されたすべての文字のペアを定義するバイナリマトリックスを生成し、再形成して、base-64エンコードします。base-64エンコード文字列('CR+ ... % ')は、プログラムのデータとして使用されます。プログラムは操作を逆にして行列をアンパックし、許可されたペアを読み取ります。

x=de2bi('CR+"''        1$$ L*\"%$!! !   $!04P@<W(        0$   1"%$$100@RZP4  $$    0$ ! 1$$$$1 0  P (    $ 0 0$ ! # %  '-32)';[i,j]=find(reshape(x(1:650),26,[])');char([j i]+64)

2
いいね、ルイス!ゴルフは実際にはちょっとした楽しみです。= P
Stewie Griffin

1
いいね!アルファベットはありません!
ブレインガイダー

1
脱帽。これは...私は年齢で見た中で最も不可解なMATLABコードである
ホキ

みんなありがとう!base-64エンコーディングのため、暗号化のみです。その文字列は、実際に許可文字のペアの26x25バイナリ行列パック
ルイスMendo

6

Malbolge、2118バイト

D'``_#>nI||38h6/vdtO*)_^mI7)"XWfB#z@Q=`<)\xwvuWm32ponmfN+ibJfe^$\[`Y}@VUySXQPUNSLpJINMLEiC+G@EDCB;_?>=}|492765.R210p(-,+*#G'&feB"baw=u]sxq7Xnsrkjoh.fNdchgf_%]\a`Y^W{>=YXWPOsSRQ3OHMLKJIBfF('C<`#"8=<;:3W1w5.R2+q/('&J$)"'~D$#"baw=utsxq7Xnsrkjoh.fNdchgf_%c\D`_X|\>=YXWPOsSRQ3OHMLKJIBfFEDC%$@9]=6|:32V6/.3210)M-m+$)"'&%|Bcb~w|u;yxwvuWm3kpinmfe+ihgfH%cb[ZY}]?UZYRWVOs65KPIHGkKJIH*)?c&BA@?8\6|:32V6/.3210)M-,lk)"F&feBzbxw=uzyrwpon4Ukpi/mfkdc)g`ed]#DZ_^]VzZ<;QPt7MLQPOHlFEJIHAe(>C<;_?>765:981Uv.32+*)Mnm%$)(!Efe{zy?}|{zyxqpo5mrkpoh.fNdihg`ed]#DZ_^]Vz=YRQuUTMqQ32NMLEDhHG@(>C<;_?>76;:3W76v43,+O/.nm+*)"Fgf${z@a}v{zyr8vo5Vrqj0nmfN+Lhg`_%cbDCY}@VUySRWPt76Lp3ONMLEDhHG@(>C<;_"8\6|:32V0v.Rs10/.'&+$H('&feB"!x>|^]srwvun4Ukpi/gfe+Lbaf_%cE[`Y}@?[TxRWPUNMLKo2NGFjD,BAeED&<A:^>=6|:32V6v.R21*/(L,+*#"!E}|{z@xw|{t:[qpotsrk1Rhmlkd*Kgfe^$bDZ_^]VzZ<;QuUTMqKJOHGkEJCBA@dD=<;:^>=6|:32V654t,+O).',+*#G'&feBzbx>|^]yr8vXnsrkjoh.fkdcbg`&^Fba`Y^WVzZ<XWPUTMqQ3INMFjD,BAe?>=B;_9>7<54X8765u-Q10)o'&J$)"!~%${A!x}v<]\xwpun4rTpoh.leMchgf_d]#DZ_^]VzZYR:Pt7SLKPOHlFEJIHAeED&<`@"87<5Y98165.3,P*/(-&+$H(!~}C#c!x}|u;\[wvun4lTjih.fN+Lbgfe^c\"CY}@VUyYXWPOsSRKJIHlLE-IBAeE'&<`@"87<5Y98165.3,Pq/.-,+*#G'&fe#"!x>|{zyr8Yotml2ponPlkdcb(fH%]\[`Y^W{zZ<XWPUTMq4JIHMLEi,BA@d>=B;:9]7};:3W7wv.3,+O)o'&J*)('g%${Ay~}v{zyrq7otmrqpoh.fejiha'eG]\[ZY}@VUy<;WVOsSRQPImM/KJIBAe(>=aA:^>=6|:32V65u-Qr0/.'K+$j"'~De#zy~wv<]yrqpo5srkjohg-kdib(feG]b[Z~^]\UTYRvP8TSRKJIHlLKD,BAe?>=B;_?>7<;:981U54t,+O)o'&Jkj('&}C#"bx>_{tyr8vuWVl2pihgle+ihgfH%cEDZ~XWVUy<XWPUTMqQP2NGLEiCBGF?>b%A@?87[;:zy1U54t210/.'K+$j"'~De#zy~wv<zyxwp6Wmlqpohg-kdib(feG]ba`Y^W{>=YXWPOs65KJIHl/KJIBA@dDCB;:9]=<;:zy1Uvu3,P0)o'&J$#(!~D|#"y?}v{zyr8vXnml2ponPledc)gfH%c\D`_^]VzZ<;QVOTSLpPIHGkKJCBG@dD=<;:^>=6|:32Vw543,+*N.nm+*)"F&feB"y~}|{ts9qvonsl2ponmfN+Lha`e^$\[Z_X|\UTYRQVOsM5KJOHGFjD,BA@d>=B;:9]=};4X81w5.R210)o'&J$j"'~%|{"y?w_u;y[wpun4Ukponmfe+Lha'eGc\[!B^WV[TxXQ9ONrRQ32NMLEDh+AeE'&<`#"8=<;:3W7wv.3,+O/.'m+*)(!EfeBcbx>_{tsxwvun4Ukpi/POkdcha'_d]#DZ_^]VzZ<RQPUNMqQ3ONGkE-IBAeED=BA:9]=<|43870/St,+O/.-ml*)(!Ef|Bcb~w|u;y[Zvun4rTpoh.fN+cKgf_%cE[!BXWV[ZSwWP8TSLpJIHMLEJIBf)d'=aA@">=<5Y98165.3,Pq)('K%*#"!EfeBcyxwvu;yxwvuWm3~

オンラインでお試しください!


5

Bash、179バイト

echo U`sed -r 's/./& &/g'<<<HAABADEDOEFAEHELAGOFEMAHINAISHMENERESITALOHOMMONOPAMUMYAWETOSOWOYOXUNUPEXI`F `grep -o ..<<<ANARASATAXAYBEBIBOBYJOKAKILIMIOIDOIDORPIQITIUSUTYEZA`
  • Adam Katzコメントのおかげで7バイト節約

sed正規表現の置換を行うために使用します。最初の正規表現入力はSp3000のアイデアに基づいており、2番目の正規表現はスペースなしの一般的な入力を使用しています。

説明:

echo              print to standard output the following
U                 boundary U character
sed -r [etc]      the result of replacing regex
    .             select a character
    & &           replace it for: matched char, space, matched char
    g             do it globaly for every character
    <<<HAAB[etc]  string input based on Sp3000 idea => HA AA AB ...
F                 boundary F character
sed -r [etc]      the result of replacing regex
    ..            every two characters
    <space>&      for space+matched character
    g             do it globally
    <<<ANAR       normal input => AN AR ...

1
スペースを使用して7バイト縮小し、次にの`grep -o ..代わりにそれを縮小できます。これ`sed -r 's/ / &/g'以下の回答からのトリックです。
アダム・カッツ

5

警告、この答えはプログラム的に興味深いものではありません。

すべての単語は2文字の長さなので、簡単に正規表現を使用して、それらをすべてまとめて粉砕し、それらを再び引き裂くことができます。

正規表現に適した言語であれば、他の言語よりも効率的にこれを行うことができます。

Grep(Bash経由)、215バイト

grep -o ..<<<AAABADAEAGAHAIALAMANARASATAWAXAYBABEBIBOBYDEDOEDEFEHELEMENERESETEXFAFEGOHAHEHIHMHOIDIFINISITJOKAKILALILOMAMEMIMMMOMUMYNANENONUODOEOFOHOIOMONOPOROSOWOXOYPAPEPIQIRESHSISOTATIT

Javascript、224バイト

alert("AAABADAEAGAHAIALAMANARASATAWAXAYBABEBIBOBYDEDOEDEFEHELEMENERESETEXFAFEGOHAHEHIHMHOIDIFINISITJOKAKILALILOMAMEMIMMMOMUMYNANENONUODOEOFOHOIOMONOPOROSOWOXOYPAPEPIQIRESHSISOTATITOUHUMUNUPUSUTWEWOXIXUYAYEYOZA".match(/../g))

Perl、225バイト

 $_="AAABADAEAGAHAIALAMANARASATAWAXAYBABEBIBOBYDEDOEDEFEHELEMENERESETEXFAFEGOHAHEHIHMHOIDIFINISITJOKAKILALILOMAMEMIMMMOMUMYNANENONUODOEOFOHOIOMONOPOROSOWOXOYPAPEPIQIRESHSISOTATITOUHUMUNUPUSUTWEWOXIXUYAYEYOZA";s/../$&\n/g;print

Python、245バイト

import re
print re.sub(r'..','\g<0>\n',"AAABADAEAGAHAIALAMANARASATAWAXAYBABEBIBOBYDEDOEDEFEHELEMENERESETEXFAFEGOHAHEHIHMHOIDIFINISITJOKAKILALILOMAMEMIMMMOMUMYNANENONUODOEOFOHOIOMONOPOROSOWOXOYPAPEPIQIRESHSISOTATITOUHUMUNUPUSUTWEWOXIXUYAYEYOZA")

 


注として、ここでの回答のいくつかはを超えていますecho。これはベースラインと考えます。

POSIXシェル、307バイト

echo AA AB AD AE AG AH AI AL AM AN AR AS AT AW AX AY BA BE BI BO BY DE DO ED EF EH EL EM EN ER ES ET EX FA FE GO HA HE HI HM HO ID IF IN IS IT JO KA KI LA LI LO MA ME MI MM MO MU MY NA NE NO NU OD OE OF OH OI OM ON OP OR OS OW OX OY PA PE PI QI RE SH SI SO TA TI TO UH UM UN UP US UT WE WO XI XU YA YE YO ZA

3
実用的だと+1。実際、ベースエコーを提供することが、誰もが開始すべきポイントです。
-metalim

簡単な答えで+1されますが、それを非競合としてマークする必要がありますか?
マシュー

@MatthewRoh –リーダーボードパーサーが存在する場合、意図的に見出しから始めていなかったため、おそらく何も見つからないでしょう。特に投稿した言語ごとに短い回答があるので、私は心配していません。
アダム・カッツ

3

C - 228 217バイト- GCC

 _;main(){char *z,*i="AABDEGHILMNRSTWXY AEIOY  EO DFHLMNRSTX AE O AEIMO DFNST O AI AIO AEIMOUY AEOU DEFHIMNPRSWXY AEI I E HIO AIO HMNPST  EOU IEO A A ";for(z=i;_++^26;)for(;*++z^32;putchar(_+64),putchar(*z),puts(""));}

小さくできたら更新します。gcc-wでコンパイルするだけで、。/ a.outの出力は完全になります。所有者に興味があれば、教えてください。

私は頭の上からそれを短くする方法を考えることができません(技術的にプットの引用符を削除することができます、あなたはまだ正しい答えを得ることができます、出力はゴミのように見えます)とにかくそれを短くする


ここにいくつかの提案があります、私にとってはうまくいきます(コピーして貼り付けるだけでなく、スタック交換は奇妙な制御文字をコメントに挿入します)_;main(){char*z="AABDEGHILMNRSTWXY AEIOY EO DFHLMNRSTX AE O AEIMO DFNST O AI AIO AEIMOUY AEOU DEFHIMNPRSWXY AEI I E HIO AIO HMNPST EOU IEO A A ";for(;_++^26;)for(;*++z^32;printf("%c%c ",_+64,*z));}出力区切り文字を改行からスペースに変更しましたが、改行(1余分なバイトが)にprintfのフォーマット文字列を変更"%c%c\n"
レベル川セント

3

C#、348バイト

私は行った:

using System;class A{static void Main(){var a=new System.Collections.BitArray(Convert.FromBase64String("tnOciwgCCAAAAAggAFBxHIkAAAAACICIKABQQBgAAAIgIACAgCAAIqIgigCCADfWuIgAAAACAIAAAAAwCICAIAAAYRkAAAAAAggAgAAIIoAACA=="));int c, d;for(var i=0;i<652;i++){if(a[i]){c=Math.DivRem(i,26,out d);Console.Write("{0}{1} ",(char)('A' + c),(char)('@' + d));}}}}

ゴルフをしていない:

using System;

class A
{
    static void Main()
    {
        var a = new System.Collections.BitArray(Convert.FromBase64String(
            "tnOciwgCCAAAAAggAFBxHIkAAAAACICIKABQQBgAAAIgIACAgCAAIqIgigCCADfWuIgAAAACAI" + 
            "AAAAAwCICAIAAAYRkAAAAAAggAgAAIIoAACA=="));
        int c, d; 
        for(var i = 0; i < 652; i++)
        {
            if(a[i])
            {
                c = Math.DivRem(i, 26, out d);
                Console.Write("{0}{1} ", (char)('A' + c), (char)('@' + d));
            }
        }
    }
}

4
これはcodegolfの課題なので、バイト数(コードの長さ)を投稿する必要があります。また、空白を削除するなどして、少し短くしてみてください。
ジャクベ

@ジャクベ、それは良いですか?
ジョドレル

はい、大丈夫に見えます
ジャクベ

3

Pyth、140バイト

K"aeiou"=H+-G+K\zKL.[`Z25.Bib32jdSfTs.e.e?nZ`0+@Gk@HY""byMc"ljjns 1u  a 6jji0 o 2 100u 60hg0 2 k m 101v r 6hr7c s 4 8 g006 m hpg0  a 5 q g"d

オンラインでお試しください!

圧縮方法:Z単語の2番目の位置にはないため、並べ替えられたアルファベットbcdfghjklmnpqrstvwxyaeiouを使用して、各文字の有効性を最初の文字ごとに2番目の文字としてエンコードします(最初の文字はアルファベット順です)。
これは、文字あたり25ビット、または正確に5 Base-32桁です。ほとんどの子音は母音を2番目の文字としてのみ使用するため、母音を最後に付けて、ほとんどの場合1桁の数字を取得します。アルファベットをさらに分析して並べ替えることで全体的に改善されるはずですが、並べ替えられたアルファベットの定義はより多くのバイトを必要とします。

説明

K"aeiou"=H+-G+K\zK # Define the reordered alphabet
K"aeiou"           # K := "aeiou"
        =H         # H :=
           -G      #      G.removeAll(
             +K\z  #                   K + "z" 
          +      K #                           ) + K

L.[`Z25.Bib32      # Define a lambda function for decompression
L                  # y = lambda b:
         ib32      # convert b to int using Base 32
       .B          # convert to binary string
 .[`Z25            # pad to the left with "0" to the nearest multiple of 25 in length

                           c"..."d # split the compressed string on " "
                         yM        # Apply y (above lambda) to each element
                                   #   Intermediate result: List of binary strings
                                   #   with 1s for allowed combinations
      .e                           # map over ^ lambda b (current element), k (current index):
        .e              b          # map over b: lambda Z (cur. elem.), Y (cur. ind.):
               +@Gk@HY             # G[k] + H[Y] (G is the regular alphabet)
          ?nZ`0       ""           #     if Z != "0" else ""
     s                             # combine into one large list
   fT                              # remove all falsy values (empty strings)
  S                                # sort (if any order is possible, remove this)
jd                                 # join on spaces (if a normal list with the words is
                                   #   allowed, remove this)

2

PHP:211 209 204

警告をオフにする必要があります。そうしないと、次の暗黙的な作成に関して印刷されます。 $b

for($a=65;$b<strlen($c="ABDEGHILMNRSTWXY!AEIOY!EO!DFHLMNRSTX!AE!O!AEIMO!DFNST!O!AI!AIO!AEIMOUY!AEOU!DEFHIMNPRSWXY!AEI!I!E!HIO!AIO!HMNPST!EO!IU!AEO!A");$b++)if($c[$b]!='!')echo chr($a).$c[$b].' ';else$a++;

とても楽しい。初期の試みは250の範囲でしたが、これは私の中で最もスリムです。


2
このバイトカウンターを試してください。空白カウントオフにすると、あなたのスコアを超える186でなければなりませんので、それはまた、あなたが文字列で持っているすべてのスペースを割引するので、間違っていることに注意してください
SP3000

良いキャッチ。私はそれに応じて私の提出を更新しました
NickW

私はなぜ見ることができません..しかし、これは今だけ「AAAA A ...」印刷します
ジェームズ・ウェブスター

!if ..を取り出しました。それが必要でした。
ジェームズウェブスター

右。私はちょうどそれに気づいた。私が使用していた!先に区切り文字を使用すると、最初に何が起こるかを考慮することなく、迅速な検索置換を実行しました。
NickW

2

CJam(99バイト)

これにはいくつかの特殊文字が含まれているため、hexdumpを指定するのが最も安全です。(特に、0xa0改行のないスペースに対応するvalueの文字は、オンラインデモのセットアップでかなりのトラブルを引き起こしました)。

00000000  36 37 36 22 c4 b2 2d 51  3f 04 93 5c 64 6c 8d 6e  |676"..-Q?..\dl.n|
00000010  d7 f9 7d 97 29 aa 43 ef  04 41 12 e1 aa ce 12 4d  |..}.).C..A.....M|
00000020  05 f3 1c 2b 73 43 a0 f0  41 c0 a7 33 24 06 37 a3  |...+sC..A..3$.7.|
00000030  83 96 57 69 9b 91 c4 09  c3 93 e1 ed 05 3b 84 55  |..Wi.........;.U|
00000040  d9 26 fd 47 68 22 32 35  36 62 33 38 62 7b 31 24  |.&.Gh"256b38b{1$|
00000050  2b 7d 2f 5d 7b 32 36 62  28 3b 36 35 66 2b 3a 63  |+}/]{26b(;65f+:c|
00000060  4e 7d 2f                                          |N}/|
00000063

オンラインデモ

アプローチは、base-26の差分エンコードです。


あなたが交換できるように整数に文字を追加すると、文字を得65f+:c'Af+
デニス

本当です。そしてmd、素晴らしい改善ですが、私の答えがあなたのものにどれほど近いか気付いていませんでした。
ピーターテイラー

2

CJam、100 98バイト

'A'@" ©Ô&ñ±ð¨9_AÚá¼thÁätÑû¨HÙH&J3p¼ÛèVçckùá%´}xà41"260bGb{_{+N2$2$}{;;)'@}?}%-3<

(パーマリンク)

  • 事前初期化された変数を介して2バイトを保存しました(デニスに感謝!)

これは私の最初のCJamエントリーなので、おそらくもっとゴルフをする可能性があります。しかし、私は文字のリストを63バイトに圧縮する方法を思い付きました。できれば、他の誰かが役に立つと思います。

圧縮方法

これまで私が見たほとんどの方法は、各単語の両方の文字をエンコードしていました。しかし、単語をアルファベット順に並べると、最初の文字はあまり頻繁に変更されないため、明示的にエンコードするのは無駄です。

各単語の最後の文字のみをエンコードし、最初の文字が増加するたびに特別なアイテムを含めます。文字は最初の文字としてエンコードされ、次に相違点のリストとしてエンコードされます。重複する単語はないため、差はすべて少なくともでなければなりません1。したがって0、セパレータ項目として使用できます。(各サブシーケンスの最初の文字を1インデックスとして保存する必要があることに注意してください。そうしないと、「ロールオーバーの最初の文字0」と「Aで始まる」の間に混乱が生じ0ます。)

この場合の違いは15を超えないため、16進数を使用して、2つの(4ビット)アイテムを各(8ビット)バイトにパックできます。(実際のコードでは、印刷できない文字の問題を回避するために、ベース256ではなくベース260から変換しました。)


16と改行をプッシュするGand を使用してN、数バイトを節約できます。
デニス

@Dennisありがとう、変数が事前に初期化されていることに気付いていませんでした!
2012rcampion

1
26個の大文字はすべて事前に初期化された変数です。完全なリストはこちらでご覧いただけます
デニス

あなたは置き換えることによって、より多くのバイトを保存することができ%-3</;;も、または/&。(2番目のオプションはエラーメッセージを生成します。メタに関するコンセンサスでは、これを行うことは問題ありません。)
デニス

2

brainfuck、1371バイト

かなりゴルフに適していますが、あまり努力しませんでした。

>+[+[<]>>+<+]>[-<<+<+>>>]-[-[-<]>>+<]>-[-<<<<+>>>>]<<<<<<..>>.<<.>+.>.<<.>++.>.<
<.>+.>.<<.>++.>.<<.>+.>.<<.>+.>.<<.>+++.>.<<.>+.>.<<.>+.>.<<.>++++.>.<<.>+.>.<<.
>+.>.<<.>+++.>.<<.>+.>.<<.>+.>.<------------------------<+.>.>.<<.>++++.>.<<.>++
++.>.<<.>++++++.>.<<.>++++++++++.>.<--------------------<++.>.>.<<.>++++++++++.>
.<-----------<+.>.>.<<.>++.>.<<.>++.>.<<.>++++.>.<<.>+.>.<<.>+.>.<<.>++++.>.<<.>
+.>.<<.>+.>.<<.>++++.>.<-----------------------<+.>.>.<<.>++++.>.<<+.>++++++++++
.>.<--------------<+.>.>.<<.>++++.>.<<.>++++.>.<<.>++++.>.<<.>++.>.<-----------<
+.>.>.<<.>++.>.<<.>++++++++.>.<<.>+++++.>.<<.>+.>.<-----<+.>.>.<--------------<+
.>.>.<<.>++++++++.>.<--------<+.>.>.<<.>++++++++.>.<<.>+.>.<---------<+.>.>.<<.>
++++.>.<<.>++++.>.<<.>++++.>.<<.>++.>.<<.>++++++.>.<<.>++++.>.<-----------------
-------<+.>.>.<<.>++++.>.<<.>++++++++++.>.<<.>++++++.>.<-----------------<+.>.>.
<<.>+.>.<<.>+.>.<<.>++.>.<<.>+.>.<<.>++++.>.<<.>+.>.<<.>++.>.<<.>++.>.<<.>+.>.<<
.>++++.>.<<.>+.>.<<.>+.>.<------------------------<+.>.>.<<.>++++.>.<<.>++++.>.<
<+.>.>.<----<+.>.>.<<+.>+++.>.<<.>+.>.<<.>++++++.>.<--------------<+.>.>.<<.>+++
+++++.>.<<.>++++++.>.<-------<+.>.>.<<.>+++++.>.<<.>+.>.<<.>++.>.<<.>+++.>.<<.>+
.>.<---------------<++.>.>.<<.>++++++++++.>.<------<+.>.>.<<.>++++++++++++.>.<--
------------------<+.>.>.<<.>++++.>.<<.>++++++++++.>.<--------------<+.>.>.

オンラインでお試しください!


一つには、あなたが改行を取り除くことができますまあ
ジョー・キング

@JoKing誰かにゴルフをすることができる本当の方法はありません。この大規模で数バイトを削るのはあまり意味がないと思います。
クシシュトフシェフチク

2

Zsh、175バイト

このソリューションでは、小文字は区切り文字としての役割を果たす125-char型の文字列、使用する大文字の次のシーケンスの最初の文字を。

の文字を繰り返し処理し$Lます。現在の文字$XがASCII比較で小文字の場合、に設定$W$Xます。それ以外の場合は、$W連結し$Xて印刷して現在の単語を作成します。

オンラインでお試しください!

L=aABDEGHILMNRSTWXYbAEIOYdEOeDFHLMNRSTXfAEgOhAEIMOiDFNSTjOkAIlAIOmAEIMOUYnAEOUoDEFHIMNPRSWXYpAEIqIrEsHIOtAIOuHMNPSTwEOxIUyAEOzA
for X in ${(s::)L};{((#X>90))&&W=$X||<<<$W$X:l}

編集:添付の:l要件ごとに、一貫して小文字セットに
EDIT2:-4使用バイト$X変数および場合簡略化[[..]]条件
EDIT3:-4(引用符を除去することにより、バイト"
Edit5:-5は、配列変換を使用して、代わりにオーバー反復バイトL以下あたり
:Edit4 の代替アプローチを最初の33文字のリバーシブル文字列を利用する182バイト$Lは107文字です

L=aBHLMNTYdEOeFHMNRhOiSTmOUnOUoSWYaADEGIRSWXbEIOYeLSTXfAgOhIMiDFNjOkAIlIOmIMYoEFIPRXpAEIqIsHtOuHPSTwExIUyEzA
for ((;i++<$#L;))X=$L[i]&&((#X>90))&&W=$X:u||<<<$W$X`((i<34))&&<<<\ $X$W`

2

Stax、91 バイト

âG→æ£ilæα¿:√▒▓uøD¶[│█æä║¢v┼T↨σªΩ■&*φòb¡CÆ?ì▀┬6ù═╦±qBF!╘π╓╙'♣*ù&↕!£ä3±r⌡W-╓D╬☺╝ï╜²á5Æ÷§═ôφF;

実行してデバッグする

この回答が使用する唯一の巧妙なトリックは、「、」トークンを使用して、最初の文字の変更を表示することです。単語ごとに保存するのではありません。

m演算子を使用するというアイデアを再帰的に提供してくれてありがとう


よくできました。私が見ることができるいくつかの小さな最適化があります。のM代わりに1/使用し、m明示的なforeachとprintの代わりに簡略マップを使用します{ ... PFこの1〜89パック
再帰的に

1

Python 3、224バイト

s='';i=int("AQHU9HU1X0313T1J9OMYMZZSRFWLCYT3POSE06UGHXDZN6H5SQSZIFCE6VEB",36)
for c in range(26):
 b=i%6;i//=6;k=(1<<b)-1;j=i%(1<<k);i>>=k
 for d in 'AOIEHMUSTMNDFPYBCGJKLQRVWXZ':
  if j&1:s+=chr(c+65)+d+' '
  j>>=1
print s

可変長のビットマスクを使用して、可能な最初の文字ごとにどの2番目の文字が存在するかをエンコードします。ビットマスクの長さは0、1、3、7、15、または31ビットです。ビットを持つ文字にマッピングされfor d in 'AOIEHMUSTMNDFPYBCGJKLQRVWXZ':たビットマスクはほとんどの場合(ほとんどの子音のみ5つの母音またはYMまたはHのいずれかが続いているので、通常3又は7ビット)に短くすることができるように、以前のビットは、より一般的な文字のために使用されます。残念ながら、それをデコードするコードは、より単純なメソッドと比較して節約を無効にします(元のリストは303バイトのみです)。


1
私のソリューションでは、可能性のあるそれぞれの2番目の文字に対して、どの最初の文字が存在するかをエンコードする方が良いことを発見しました。試してみる価値があるかもしれません。
ジェームズウェブスター

1

Haskell、192バイト

putStr$(\(a:b)->((a:).(:" "))=<<b)=<<words"AABDEGHILMNRSTWXY BAEIOY DEO EDFHLMNRSTX FAE GO HAEIMO IDFNST JO KAI LAIO MAEIMOUY NAEOU ODEFHIMNPRSWXY PAEI QI RE SHIO TAIO UHMNPST WEO XIU YAEO ZA"

文字列内のスペースで区切られた単語ごとに、他のすべての文字の前に最初の文字を置き、スペースを追加します(例:SHIO->)SH SI SO


1

Java、334バイト

public class C{public static void main(String[]a){for(int i=0;i<26;i++){for(int j=0;j<26;j++){if(java.util.BitSet.valueOf(java.util.Base64.getDecoder().decode("2znORQQBBAAAAAQQAKg4jkQAAAAABEBEFAAoIAwAAAEQEABAQBAAEVEQRQBBgBtrXEQAAAABAEAAAAAYBEBAEACAsAwAAAAAAQQAQAAEEUAABA==")).get(i*26+j)){System.out.format("%c%c\n",'a'+i,'a'+j);}}}}}

フォーマット済み:

public class Code {
    public static void main(String[] a) {
        for (int i = 0; i < 26; i++) {
            for (int j = 0; j < 26; j++) {
                if (java.util.BitSet.valueOf(
                        java.util.Base64.getDecoder()
                            .decode("2znORQQBBAAAAAQQAKg4jkQAAAAABEBEFAAoIAwAAAEQEABAQBAAEVEQRQBBgBtrXEQAAAABAEAAAAAYBEBAEACAsAwAAAAAAQQAQAAEEUAABA=="))
                        .get(i * 26 + j)) {
                    System.out.format("%c%c\n", 'a' + i, 'a' + j);
                }
            }
        }
    }
}

それとは別に、単語リストを長さ26x26 = 676 BitSetにエンコードし、バイト配列に変換してから、最終的にBase 64に変換しました。最終的に単語のリストを印刷します


1

Java、356バイト

乱数ジェネレーターを使用して単語を取得します。

import java.util.Random;class X{public static void main(String[]a){int j,n,m=9,x;for(String u:"rgzza 2u2hh r2rxs qs5f fwiag 26i33y 2xqmje 5h94v 16ld2a 17buv 4zvdi 1elb3y 2t108q 5wne9 1mrbfe 1ih89 fh9ts r0gh".split(" ")){x=Integer.parseInt(u,36);Random r=new Random(x/2);j=m-=x%2;while(j-->0){n=r.nextInt(676);System.out.format(" %c%c",65+n/26,65+n%26);}}}}

ゴルフをしていない:

import java.util.Random;
class X{
    public static void main(String[]a){
        int j,n,m=9,x;
        for(String u:"rgzza 2u2hh r2rxs qs5f fwiag 26i33y 2xqmje 5h94v 16ld2a 17buv 4zvdi 1elb3y 2t108q 5wne9 1mrbfe 1ih89 fh9ts r0gh".split(" ")){
            x=Integer.parseInt(u,36);
            Random r=new Random(x/2);
            j=m-=x%2;
            while(j-->0){
                n=r.nextInt(676);
                System.out.format(" %c%c",65+n/26,65+n%26);
            }
        }
    }
}

ここで試すことができます:http : //ideone.com/Qni32q


1

Perl、248バイト

@v=split(//,"AEIOU");@s=split(' ',"ADEGIRSWX LSTX DFN EFIPRX HPST BHLMNTY DFHMNR ST DHMNSWY MN ZFKP WYPB KQXLHPMB LGJTB X");for(0..14){foreach $c(split(//,@s[$_])){$_<10?print @v[$_%5].$c." ":a;$_>4?print $c.@v[$_%5]." ":a;}}print "MM MY BY HM SH";

初めてperlを使用する(そして初めてのゴルフ)ので、間違いなく改善の余地があります。母音を因数分解し、結果の単語の作成方法に基づいて残りの文字をグループ化します-母音を最初、最後、または母音の最初と最後の両方を追加してリストに単語を作成します。


Perlはわかりませんが、出力はスペースで区切られていると思います。に"MM "."MY "."BY "."HM "."SH "短縮できるよう"MM MY BY HM SH"です。
レベルリバーセント

@steveverrillありがとう!私は残りのコードに追いついたので、それがどれほど冗長であるかを見落としていました。
VoiceOfFolly

1

Javascript(ES6)、214

おそらくそれを行う最短の方法ではありませんが、間違いなく面白いです。

_=>(i=0,[...'ABDEFGHILMNOPRSTUWXY'].map(z=>[...`ABFHKLMNPTYZ
A
AEIO
ABDFHMNOPRWY
EIO
A
AEOSU
ABHKLMOPQSTX
AE
AEHMOU
AEIOU
BDGHJLMNSTWY
OU
AEO
AEIOU
AEIU
MNX
AO
AEO
ABMO`.split`
`[i++]].map(g=>g+z).join` `).join`
`)

最初の文字列の各文字をループし、2番目の対応する行の各文字に追加します。次のように、最後の文字の順に単語を返します。

AA BA FA HA KA LA MA NA PA TA YA ZA
AB
AD ED ID OD
AE BE DE FE HE ME NE OE PE RE WE YE
EF IF OF
AG
AH EH OH SH UH
AI BI HI KI LI MI OI PI QI SI TI XI
AL EL
AM EM HM MM OM UM
AN EN IN ON UN
BO DO GO HO JO LO MO NO SO TO WO YO
OP UP
AR ER OR
AS ES IS OS US
AT ET IT UT
MU NU XU
AW OW
AX EX OX
AY BY MY OY

提案を歓迎します!


1

Java、255 254バイト

それからもう1バイトを圧縮する方法を見つけました。

class C{public static void main(String[]a){char c='A';for(char l:"ABDEGHILMNRSTWXY AEIOY  EO DFHLMNRSTX AE O AEIMO DFNST O AI AIO AEIMOUY AEOU DEFHIMNPRSWXY AEI I E HIO AIO HMNPST  EO IU AEO A".toCharArray())if(l<'A')c++;else System.out.print(" "+c+l);}}

または(あまり明確ではありませんが):

class C {
    public static void main(String[] a) {
        char c = 'A';
        for (char l : "ABDEGHILMNRSTWXY AEIOY  EO DFHLMNRSTX AE O AEIMO DFNST O AI AIO AEIMOUY AEOU DEFHIMNPRSWXY AEI I E HIO AIO HMNPST  EO IU AEO A"
                .toCharArray())
            if (l < 'A')
                c++;
            else
                System.out.print(" " + c + l);
    }
}

の両方の出現を'A'に変更することにより、2バイトを節約できます65
ProgramFOX

1

ハスケル、333の 308 298バイト

楽しみのためだけに!

評価sすると、すべての単語が奇妙な順序で出力されます-ほとんどの組み合わせは母音と子音、またはその逆であり、おそらくカスタム文字「クラス」でさらに最適化できるという事実を使用し、エンコードされたマトリックスを短縮します(ここでwおよびk)。

私のモナド的なものよりも引用符や括弧なしで文字列を印刷する短い方法を知っている人はいますか?型クラスは、私が知る限り、さらに長くなっています。

また、より短い方法でp仕事をすることもできます...

v="AEIOU"
c="BCDFGHJKLMNPQRSTVWXYZ"
w=[976693,321324,50188,945708,52768]
k=[15,0,10,3,8,15,8,5,13,31,27,7,4,2,12,13,0,10,20,11,1]
z a b x=[[c:[e]|(e,f)<-b#p d,f]|(c,d)<-a#x]
(#)=zip
p 0=[]
p n=((n`mod`2)>0):p(n`div`2)
s=mapM_ putStrLn$concat$z v c w++z c v k++[words"AA AE AI BY HM MM MY OE OI SH"]

sequence_と同じではありませんvoid$sequenceか?その後、import。も省略できます。
-nimi

それは奇妙にパッケージ化されていますが、はい。ありがとう!
レイフウィラーツ

そうではない、voidインポートする必要がありました。とにかく、これを覚えておくつもりです。
レイフウィラーツ

1
ああ、とsequence_$map putStrLnありますmapM_ putStrLn。交換してください()周りのconcat$...他に$
-nimi

1

05AB1E、143バイト(非競合)

•ZÐFý8ù6„=4ÅœÿWì±7Ë5Œ¾`ó/îAnµ%Ñ¥Ëø±/ÀéNzքѧIJ¶D—ÙVEStvÖò…¸¾6F³#EXŠm¯Cĵ±ÓoÊ°}^€Ftå߀ðŒ=«j;F-Â1;xX3i&QZÒ'Ü”>lwìlOs>íÙVÇI)~î‰Hç²?Öd0È^ÝQ°•36B2ô»

オンラインでお試しください!



1
しゅう 91(と私は確信し、この方法は、低得ることができるんだけど、私のユーモアのための辞書の単語を手摘み)。
グリムミー

1

PHP、170バイト

私がこれまでに見つけた最短のアプローチ...

for(;$c=ABFHKLMNPTYZ1A2AEIO1ABDFHMNOPRWY1EIO1A1AEOSU1ABHKJMOPQSTX3AE1AEHMOU1AEIOU1BDGHJLMNSTWY1OU11AEO1AEIOU1AEIU1MNX2AO1AEO1ABMO[$i++];)$c<1?print$c.chr($k+65)._:$k+=$c;

壊す

for(;$c=CHARACTERS[$i++];)  // loop $c through map
    $c<1                            // if $c is a letter (integer value < 1)
        ?print$c.chr($k+65)._           // print first letter, second letter, delimiter
        :$k+=$c                         // else increase second letter
    ;

印刷可能なASCIIを使用した最短ビットマッピングバージョンは、6ビット=ベース64を使用すると190バイト(113バイトデータ+ 77バイトデコード)、7ビット(ベース128)を使用すると174バイト(97データ、77デコード)です。おそらくエスケープのためにもう少し。

for(;$p<676;)                   // loop through combinations
    ord("MAPPING"[$p/6])-32>>$p%6&1     // test bit
        ?                                       // if set, do nothing
        :print chr($p/26+65).chr($p++%26+65)._; // if not, print combination+delimiter

ベース224(ascii 32..255を使用)は87バイトのデータ(+エスケープ)を取ります。しかし、デコードには10バイト以上余分にかかると思います。
マップからCとVを除外すると、データの16/14/13バイトを節約できますが、デコードに多大なコストがかかります。

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