Cetak semua 2 kata Scrabble Words


40

Tantangan:

Cetak setiap kata 2 huruf yang dapat diterima di Scrabble menggunakan sesedikit mungkin byte. Saya telah membuat daftar file teks di sini . Lihat juga di bawah. Ada 101 kata. Tidak ada kata yang dimulai dengan C atau V. Kreatif, bahkan jika solusi tidak optimal, dianjurkan.

AA
AB
AD
...
ZA

Aturan:

  • Kata-kata yang dikeluarkan harus dipisahkan entah bagaimana.
  • Kasus tidak masalah, tetapi harus konsisten.
  • Ruang tambahan dan baris baru diizinkan. Tidak boleh ada karakter lain yang dihasilkan.
  • Program seharusnya tidak mengambil input apa pun. Sumber daya eksternal (kamus) tidak dapat digunakan.
  • Tidak ada celah standar.

Daftar kata:

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
Apakah kata-kata harus dikeluarkan dalam urutan yang sama?
Sp3000

2
@ Sp3000 Saya akan mengatakan tidak, jika sesuatu yang menarik dapat dipikirkan
qwr

2
Tolong jelaskan apa yang sebenarnya dianggap terpisah entah bagaimana . Apakah itu harus spasi? Jika demikian, apakah ruang tanpa melanggar diizinkan?
Dennis

5
Oke, temukan terjemahan
Mikey Mouse

3
Vi bukan sebuah kata? Berita kepada saya ...
jmoreno

Jawaban:


39

Python 3, 194 188 byte

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

Hampir pasti bukan metode yang terpendek, tetapi saya pikir ini akan menjadi awal yang baik. Cobalah untuk mengemas setiap pasangan ke jalur dengan tumpang tindih sebanyak mungkin (misalnya "ODEX..."= ["OD", "DE", "EX", ...]). Spasi digunakan untuk memisahkan jalur, dan setiap pasangan dengan spasi di dalamnya akan dihapus (ruang trailing adalah untuk mencegah satu Edari dicetak pada akhir).

Saya juga mencoba regex golf ini tetapi itu lebih lama.


1
+1 pendekatan yang bagus! Saya Pinjam string Anda untuk jawaban Ruby
daniero

Saya juga membuat jawaban berdasarkan ide Anda menggunakan bash dan regex
sergioFC

2
+1 untuk AYAHOYOWOMUNUHAID!
Level River St

28

CJam, 96 94 byte

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+

Di atas adalah hexdump, yang dapat dibalik dengan xxd -r -c 16 -g 1.

Cobalah online di juru bahasa CJam .

Bergantung pada apa yang sebenarnya dianggap terpisah , entah bagaimana , jumlah byte bisa diturunkan menjadi 93 atau bahkan 92 :

  • Jika kita ganti -55dengan 59, kata-kata akan dipisahkan oleh spasi yang tidak putus (0xA0).

  • Jika kita ganti -55dengan W, kata-kata akan dipisahkan dengan tanda-at (0x40).

Ide

Kita dapat menyandikan setiap pasangan huruf xy sebagai (ord (x) - 65) × 25 + (ord (y) - 65) . 1

Alih-alih menyimpan bilangan bulat yang dihasilkan, kami akan menyimpan perbedaan semua pasangan yang sesuai dengan dua kata yang berdekatan (diurutkan berdasarkan abjad).

Perbedaan tertinggi adalah 35 , jadi kami menganggap mereka digit basis 36 integer dan mengonversi integer itu menjadi string byte.

Kode

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 Karena huruf kedua tidak pernah Z , menggunakan 25 bukan 26 sudah cukup.


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 

Jelas bukan skor yang bagus, tetapi saya menyukai tantangannya.

Saya membuat tabel opsi, menciptakan sistem bitwise untuk menandai opsi mana yang valid.

masukkan deskripsi gambar di sini

Kemudian saya base-36 mengkodekan opsi-opsi itu untuk mendapatkan string:

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

Perhatikan entri ke-3 dalam array string itu tidak memiliki nilai, karena C tidak memiliki opsi.

Untuk mencetak nilai, saya hanya mengonversi opsi yang valid ke karakter.

Mungkin ada sesuatu yang bisa saya lakukan untuk mengurangi pengakuan bahwa tidak ada kata yang diakhiri dengan C, J, K, Q, V atau Z, tetapi saya tidak bisa memikirkan metode untuk menguranginya atm.


Dengan transposing tabel, ada lebih banyak elemen kosong dan data dikodekan sedikit lebih kompak yang mencukur beberapa byte. Array sekarang dicetak dalam urutan yang berbeda:

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

Terima kasih kepada Ismael untuk ledakan dan untuk petunjuk lingkaran.

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)." ":"";

Dengan pembaruan ke php5.6, pow(,)dapat diganti dengan **menyimpan 4 byte lainnya.

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)." ":"";

Alih-alih meledak oleh ",", Anda dapat menggunakanexplode(0,UB1YB0100CUP[...])
Ismael Miguel

Bukankah itu pecah karena ada 0s dalam pengkodean?
James Webster

Namun .. tidak ada yang 3bisa saya gunakan itu! Terima kasih
James Webster

Juga, Anda dapat mengganti $e++;for($f=0;$f<26;$f++)dengan for($e++,$f=0;$f<26;$f++), dan sekarang Anda dapat menghapus sial itu {}. Dan jika Anda ingin mengonversi karakter menjadi huruf kecil, gunakan $e^' '.
Ismael Miguel

Tangkapan yang bagus! Saya tidak akan mendapatkannya.
James Webster

8

Perl, 167 164 157 byte

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

Tulis skrip terpisah untuk mengelompokkan huruf-huruf tersebut menjadi seringkas mungkin menjadi string yang berisi semua kata 2 huruf yang valid. Ini kemudian mengulangi semua kata dua huruf dan mencetak yang valid, satu per baris. Jalankan dengan perl -M5.10.1 script.pl.


Saya tidak bisa menjalankan ini dalam kompiler online.
mbomb007

@ mbomb007 Tergantung pada versinya, Anda memerlukan flag baris perintah -M5.10.1untuk menggunakan saykata kunci yang ditambahkan dalam versi itu, atau menambahkan use feature 'say';di badan skrip.
AKHolland

7

C, 155 byte

Versi golf

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];}

Keluaran

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

Versi tidak disatukan

String sihir 51-byte dalam versi golf berisi banyak karakter di luar ASCII 126, yang hampir pasti telah diubah menjadi setara Unicode. Versi ungolfed menggunakan hex sebagai gantinya, dan sebagai konstanta daripada literal. Juga, versi yang tidak dipisahkan memisahkan kata-kata dengan baris baru, yang membuatnya lebih mudah untuk menyalin dan menempel ke Excel, memesan daftar dan membandingkannya dengan yang diperlukan.

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];}

Penjelasan

Jika kita memperluas definisi vokal untuk memasukkan 8 huruf AHMEIOUY, kami mengamati bahwa semua kata terdiri dari satu vokal dan satu huruf lainnya (yang mungkin atau mungkin bukan vokal.) Oleh karena itu, untuk semua kata yang diakhiri dengan vokal, kami memerlukan tabel 26 byte, satu untuk setiap huruf pertama, dengan bit individual yang sesuai dengan vokal. Kita membutuhkan tabel yang sama untuk kata-kata yang dimulai dengan vokal, kecuali bahwa kali ini kita hanya membutuhkan 25 byte, karena tidak ada kata yang diakhiri dengan Z. Kedua tabel tersebut di-riffled bersama untuk membuat tabel final.

Untuk menghindari kode ASCII di wilayah 0..31, dua "vokal" paling umum M dan H ditugaskan ke bit ke-6 dan ke-7, dan pengkodean menganggap 1 untuk kata yang tidak benar dan 0 untuk kata yang valid. Karena tidak ada konsonan yang berpasangan dengan M dan H, dimungkinkan untuk memastikan setidaknya satu dari bit-bit ini adalah 1.

Bit ke-8 ditugaskan ke A, yang merupakan vokal paling umum, untuk mencoba membatasi karakter non-ASCII (masih ada cukup banyak dari mereka.)

Tabel yang digunakan di bawah ini. Untuk kata-kata yang mengandung 2 vokal, saya mengutamakan huruf pertama yang dianggap sebagai "vokal" dan huruf kedua sebagai "huruf." Pengecualian untuk ini adalah kata-kata yang dimulai dengan M, karena ini menghindari bentrokan antara MM dan HM.

Hex encoding kata-kata dimulai dengan vokal

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 

Pengodean heks kata-kata yang berakhir dengan vokal

 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

Mungkin membuat hexdump dari versi golf sehingga mangling dapat dikembalikan dengan mudah
masterX244

7

Java, 484 448 407 391 389 byte

Percobaan pertama saya

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);}}}}

Diformat:

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);
            }
        }
    }
}

Cobalah online


Pekerjaan yang baik! Beberapa saran: java.lang.Exception bisa disebut Exception. "args" bisa hanya "a". String.format () dapat berupa "" .format (). Ada juga sedikit spasi tambahan di deklarasi main (). Pendekatan bagus secara keseluruhan, +1 dari saya :)
jrich

Saya baru saja bermain dengan pernyataan cetak, tetapi Anda mengalahkan saya untuk itu! Anda dapat menyimpan byte lain \ndengan hanya mengganti spasi. Mereka tidak harus dipisahkan oleh garis baru.
James Webster

Anda juga melewatkan beberapa ruang yang dapat Anda hapus.
James Webster

@ JamesWebster thx untuk petunjuknya.
griFlo

4
"".formatmenyakitkan untuk dilihat, tetapi lucu.
codebreaker

6

Ruby, 166 byte

Meminjam metode rapi sp3000 untuk menyandikan kata-kata menjadi string yang ringkas. Kicker di sini adalah metode pendek untuk mendekodekannya kembali ke dalam kata-kata dua huruf: Menggunakan lookahead di regex diteruskan ke metode pemindaian String untuk mengekstraksi pertandingan yang tumpang tindih, bukan ruang containg:

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

Ruby, 179 byte

Pendekatan saya sendiri: Hasilkan semua kata dua huruf antara AAdan ZA, dan pilih yang valid menggunakan basis 36 bitmask yang disandikan:

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

6

Matlab, 177 byte

Hasilkan matriks biner yang mendefinisikan semua pasangan huruf yang diizinkan, bentuk ulang dan basis-64 mengkodekannya. String encoded base-64 ( 'CR+ ... % ') digunakan sebagai data dalam program. Program membalikkan operasi untuk membongkar matriks, dan kemudian membaca pasangan yang diperbolehkan:

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
Luis yang bagus! Bermain golf sebenarnya menyenangkan ... = P
Stewie Griffin

1
Bagus! Tidak ada alfabet!
Brain Guider

1
hormat. Ini adalah kode matlab paling samar yang pernah saya lihat di usia ...
Hoki

Terima kasih kawan! Itu hanya samar karena encoding basis-64. String itu sebenarnya mengemas matriks biner 26x25 dari pasangan surat yang diizinkan
Luis Mendo

6

Malbolge , 2118 bytes

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~

Cobalah online!


5

Bash, 179 byte

echo U`sed -r 's/./& &/g'<<<HAABADEDOEFAEHELAGOFEMAHINAISHMENERESITALOHOMMONOPAMUMYAWETOSOWOYOXUNUPEXI`F `grep -o ..<<<ANARASATAXAYBEBIBOBYJOKAKILIMIOIDOIDORPIQITIUSUTYEZA`
  • Disimpan 7 byte berkat komentar Adam Katz

Ini digunakan seduntuk melakukan penggantian regex. Input regex pertama didasarkan pada ide Sp3000 sedangkan regex kedua menggunakan input umum tanpa spasi.

Penjelasan:

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
Anda dapat mengecilkan bahwa dengan tujuh byte menggunakan ruang dan kemudian `grep -o ..di tempat `sed -r 's/ / &/g', trik dari jawaban saya di bawah ini.
Adam Katz

5

Peringatan, jawaban ini tidak menarik secara pemrograman.

Karena semua kata panjangnya dua karakter, kita dapat menghancurkan semuanya bersama-sama dan kemudian memecahnya lagi menggunakan ekspresi reguler sederhana.

Bahasa ramah regex apa pun bisa melakukan ini, beberapa lebih efisien daripada yang lain:

Grep (via Bash), 215 byte

grep -o ..<<<AAABADAEAGAHAIALAMANARASATAWAXAYBABEBIBOBYDEDOEDEFEHELEMENERESETEXFAFEGOHAHEHIHMHOIDIFINISITJOKAKILALILOMAMEMIMMMOMUMYNANENONUODOEOFOHOIOMONOPOROSOWOXOYPAPEPIQIRESHSISOTATIT

Javascript, 224 byte

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

Perl, 225 byte

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

Python, 245 byte

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

 


Sebagai catatan, beberapa jawaban di sini lebih panjang dari echoyang saya anggap sebagai dasar:

Shell POSIX, 307 byte

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 karena praktis. Sungguh, memberikan dasar gema adalah titik semua orang harus mulai dari.
metalim

Memberi +1 pada jawaban yang mudah, tetapi Anda harus menandainya sebagai tidak bersaing, bukan?
Matius Roh

@ MatthewRoh - Jika ada parser papan pemimpin, mungkin akan gagal menemukan apa pun karena saya sengaja tidak memulai dengan tajuk. Saya tidak khawatir, terutama karena ada jawaban yang lebih pendek untuk setiap bahasa yang saya posting.
Adam Katz

3

C - 228 217 Bytes - 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(""));}

Akan memperbarui jika saya bisa membuatnya lebih kecil, hanya kompilasi dengan gcc -w, ./a.out output dengan sempurna. Jika ada minat pada ungolfed, beri tahu saya.

Saya tidak bisa memikirkan cara untuk memendekkannya dari atas kepala saya, (Anda dapat menghapus tanda kutip secara teknis dan Anda masih akan mendapatkan jawaban yang benar, hasilnya hanya terlihat seperti sampah) jadi tolong beri tahu saya lagian untuk mempersingkatnya


Berikut adalah beberapa saran, ini berjalan baik bagi saya (jangan hanya menyalin dan menempel, menukar pertukaran memasukkan karakter kontrol aneh ke dalam komentar) _;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));}Saya telah mengubah pembatas output dari baris baru ke spasi, tetapi jika Anda lebih suka baris baru (satu byte tambahan) ubah string format printf ke"%c%c\n"
Level River St

3

C #, 348 byte

Saya sudah mencoba:

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));}}}}

Tidak Disatukan:

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
Ini adalah tantangan codegolf, jadi Anda harus memposting byte-count Anda (panjang kode Anda). Coba juga persingkat sedikit, misalnya dengan menghapus spasi putih.
Jakube

@ Jakube, apakah itu lebih baik?
Jodrell

Ya, terlihat oke
Jakube

3

Pyth , 140 byte

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

Cobalah online!

Metode kompresi: Karena tidak ada Zdi posisi kedua kata apa pun, gunakan alfabet yang disusun ulang bcdfghjklmnpqrstvwxyaeiouuntuk menyandikan validitas masing-masing huruf sebagai huruf kedua untuk setiap huruf pertama (huruf pertama dalam urutan abjad).
Ini adalah 25 bit per huruf, atau tepatnya 5 Base-32 digit. Karena sebagian besar konsonan hanya menggunakan huruf vokal sebagai huruf kedua, saya meletakkan huruf vokal di bagian akhir untuk mendapatkan angka 1 digit untuk mereka. Saya yakin secara keseluruhan dapat ditingkatkan dengan analisis lebih lanjut dan penyusunan ulang alfabet, meskipun kemudian definisi alfabet yang disusun ulang akan memakan lebih banyak byte.

Penjelasan

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

Anda harus mematikan peringatan, jika tidak, orang akan mencetak sehubungan dengan pembuatan implisit dari $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++;

Sangat menyenangkan. Upaya awal berada di kisaran 250, tapi ini adalah yang tertipis saya.


2
Coba penghitung byte ini . Perhatikan bahwa mematikan penghitungan spasi putih tidak benar, karena itu juga mendiskon setiap ruang yang Anda miliki dalam string, sehingga skor Anda harus lebih dari 186.
Sp3000

Tangkapan yang bagus. Saya telah memperbarui kiriman saya
NickW

Saya tidak bisa melihat mengapa .. tetapi ini sekarang hanya mencetak "AAAA A ..."
James Webster

Anda telah mengambil !pada jika .. Anda membutuhkannya.
James Webster

Kanan. Saya hanya memperhatikan itu. Saya menggunakan! pembatas sebelumnya dan saya melakukan pencarian-ganti cepat tanpa mempertimbangkan apa yang akan terjadi terlebih dahulu.
NickW

2

CJam (99 bytes)

Ini termasuk beberapa karakter khusus, jadi paling aman untuk memberikan hexdump. (Khususnya, karakter dengan nilai 0xa0, yang sesuai dengan ruang tanpa putus, menyebabkan saya sedikit kesulitan dalam mengatur demo online).

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

Demo online .

Pendekatan ini adalah pengkodean perbedaan pada basis-26.


Menambahkan karakter ke integer menghasilkan karakter, sehingga Anda bisa menggantinya 65f+:cdengan 'Af+.
Dennis

Benar. Dan mdini adalah peningkatan yang brilian, tetapi saya tidak menyadari seberapa dekat jawaban saya dengan jawaban Anda.
Peter Taylor

2

CJam, 100 98 byte

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

(permalink)

  • Menyimpan dua byte melalui variabel yang sudah diinisialisasi (terima kasih Dennis!)

Ini adalah entri CJam pertama saya, jadi mungkin ada potensi untuk bermain golf lagi. Namun, saya menemukan cara untuk mengompres daftar karakter hingga 63 byte yang, semoga, orang lain akan menemukan bermanfaat.

Metode Kompresi

Sejauh ini sebagian besar metode yang saya lihat menyandikan kedua huruf dari setiap kata. Namun, ketika kita meletakkan kata-kata dalam urutan abjad, huruf pertama tidak terlalu sering berubah, jadi sepertinya sia-sia untuk menyandikannya secara eksplisit.

Saya menyandikan hanya karakter terakhir dari setiap kata, dan memasukkan item khusus setiap kali karakter pertama bertambah. Karakter dikodekan sebagai karakter pertama, lalu daftar perbedaan. Karena tidak ada kata-kata rangkap, perbedaannya semua harus setidaknya 1. Jadi saya bisa gunakan 0sebagai item pemisah. (Perhatikan bahwa saya kemudian harus menyimpan huruf pertama dari setiap urutan sebagai satu-diindeks, jika tidak akan ada kebingungan antara 'karakter rollover pertama 0' dan 'mulai dengan A 0'.)

Karena perbedaan dalam hal ini tidak pernah lebih besar dari 15, kita dapat menggunakan basis-16 dan mengemas dua (4-bit) item ke dalam masing-masing (8-bit) byte. (Dalam kode aktual saya mengkonversi dari base-260 bukannya base-256 untuk menghindari masalah dengan karakter yang tidak patut dicetak.)


Anda dapat menyimpan beberapa byte dengan menggunakan Gdan N, yang mendorong 16 dan linefeed.
Dennis

@ Dennis Terima kasih, tidak menyadari bahwa variabel diinisialisasi!
2012rcampion

1
Semua 26 huruf besar adalah variabel yang diinisialisasi. Anda dapat melihat daftar lengkapnya di sini .
Dennis

Anda dapat menyimpan lebih banyak byte dengan mengganti %-3<dengan /;;atau bahkan /&. (Opsi kedua akan menghasilkan pesan kesalahan. Konsensus tentang meta adalah tidak apa-apa untuk melakukan ini.)
Dennis

2

brainfuck , 1371 byte

Cukup golf, tapi saya tidak berusaha terlalu keras ke dalamnya.

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

Cobalah online!


Nah untuk satu hal, Anda dapat menyingkirkan baris baru
Jo King

@JoKing tidak ada cara nyata saya bisa mengalahkan seseorang, saya tidak berpikir ada banyak akal dalam mencukur beberapa byte pada skala besar ini.
Krzysztof Szewczyk

2

Zsh, 175 byte

Solusi ini menggunakan string 125-char, di mana huruf kecil berfungsi sebagai pembatas dan huruf pertama dari urutan huruf kapital berikut.

Kami beralih pada surat-surat dari $L. Jika huruf saat ini $Xadalah huruf kecil dengan perbandingan ascii, setel $Wke $X. Jika tidak, cetak $Wdigabungkan dengan $Xuntuk membuat kata saat ini.

Cobalah secara Online!

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

Edit: ditambahkan :lke set huruf kecil secara konsisten, sesuai kebutuhan
Edit2: -4 byte menggunakan $Xvariabel dan disederhanakan jika [[..]]kondisi
Edit3: -4 byte dengan menghapus tanda kutip ( ")
Edit5: -5 byte menggunakan konversi array, bukan iterasi Lper bawah
Edit4: pendekatan alternatif untuk 182 byte , mengeksploitasi string reversibel dalam 33 huruf pertama, $Lhanya 107 huruf

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

2

Stax , 91 byte

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

Jalankan dan debug itu

Satu-satunya trik rapi yang digunakan jawaban ini adalah menggunakan token "," untuk menunjukkan perubahan pada huruf pertama, daripada menyimpannya untuk setiap kata.

Berkat rekursif untuk gagasan menggunakan operator m


Bagus sekali. Ada beberapa optimasi kecil yang bisa saya lihat. Gunakan Malih-alih 1/, dan gunakan peta steno malih-alih foreach dan cetak eksplisit { ... PF. Yang satu ini paket ke 89.
rekursif

1

Python 3, 224 byte

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

Menggunakan bit mask panjang variabel untuk menyandikan huruf kedua mana yang ada untuk setiap huruf pertama yang mungkin. Topeng bit bisa panjang 0,1,3,7,15 atau 31 bit. Bit dipetakan ke huruf dengan for d in 'AOIEHMUSTMNDFPYBCGJKLQRVWXZ':, bit sebelumnya digunakan untuk huruf yang lebih umum sehingga topeng bit bisa pendek dalam kebanyakan kasus (biasanya 3 atau 7 bit karena sebagian besar konsonan hanya diikuti oleh salah satu dari 5 vokal atau YM atau H). Sayangnya kode untuk memecahkan kode itu meniadakan penghematan dibandingkan dengan metode yang lebih sederhana (daftar aslinya hanya 303 byte).


1
Saya menemukan lebih baik untuk menyandikan huruf pertama mana yang ada untuk setiap huruf kedua yang mungkin ada dalam solusi saya. Mungkin patut dicoba di hatimu.
James Webster

1

Haskell, 192 byte

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"

Untuk setiap kata yang dipisahkan spasi dalam string, letakkan huruf pertama di depan semua huruf lain dan tambahkan spasi, misalnya SHIO-> SH SI SO.


1

Java, 334 byte

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);}}}}}

Diformat:

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);
                }
            }
        }
    }
}

Secara terpisah, saya menyandikan daftar kata menjadi panjang 26x26 = 676 BitSet, mengubahnya menjadi array byte, dan akhirnya ke Basis 64. String itu adalah kode keras dalam program ini, dan prosedur sebaliknya digunakan untuk mereproduksi BitSet, dan akhirnya mencetak daftar kata-kata


1

Java, 356 byte

Gunakan generator angka acak untuk mendapatkan kata-kata:

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);}}}}

Tidak Disatukan:

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);
            }
        }
    }
}

Anda dapat mencobanya di sini: http://ideone.com/Qni32q


1

Perl, 248 byte

@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";

Pertama kali menggunakan perl (dan golf pertama kali), jadi pasti ada ruang untuk perbaikan. Memfaktorkan vokal dan mengelompokkan huruf-huruf yang tersisa berdasarkan bagaimana kata yang dihasilkan dibuat - menambahkan vokal pertama, terakhir, atau keduanya vokal pertama dan terakhir membuat kata dalam daftar.


Saya tidak tahu Perl, tapi saya berasumsi Anda memisahkan output dengan spasi. Sepertinya "MM "."MY "."BY "."HM "."SH "bisa disingkat "MM MY BY HM SH".
Level River St

@steveverrill Terima kasih! Saya begitu terjebak dalam sisa kode sehingga saya mengabaikan betapa mubazirnya itu.
VoiceOfFolly

1

Javascript (ES6), 214

Mungkin bukan cara terpendek untuk melakukannya, tetapi pasti menarik.

_=>(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`
`)

Putar setiap huruf dalam string pertama, tambahkan ke setiap huruf pada baris yang sesuai dari yang kedua. Ini mengembalikan kata-kata dalam urutan surat terakhir mereka, seperti:

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

Saran diterima!


1

Java, 255 254 byte

Menemukan cara untuk memeras satu byte lagi dari itu.

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);}}

Atau (meskipun tidak jauh lebih jelas):

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);
    }
}

Anda dapat menyimpan dua byte dengan mengubah kedua kejadian 'A'menjadi 65.
ProgramFOX

1

Haskell, 333 308 298 byte

Hanya untuk bersenang-senang!

Mengevaluasi sakan mencetak semua kata dalam urutan yang aneh - Saya menggunakan fakta bahwa sebagian besar kombinasi adalah vokal-konsonan atau sebaliknya, mungkin dapat lebih mengoptimalkan dengan karakter "kelas" kustom, memperpendek matriks yang dikodekan (di sini, wdan k).

Apakah ada yang tahu cara yang lebih pendek untuk mencetak string tanpa tanda kutip dan tanda kurung dari pada yang monadik? Tipe kelas bahkan lebih lama sejauh yang saya tahu.

Selain itu, mungkin juga ada cara yang lebih pendek untuk melakukan ppekerjaan ...

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"]

Tidak sequence_sama dengan void$sequence? Maka Anda dapat menghilangkan juga import.
nimi

Itu aneh dikemas, tapi ya. Terima kasih!
Leif Willerts

Bukankah, voidharus diimpor. Bagaimanapun, aku harus ingat ini.
Leif Willerts

1
Ah, dan sequence_$map putStrLnsekarang mapM_ putStrLn. Ganti (, )mainkan concat$...dengan yang lain $.
nimi

1

05AB1E , 143 byte (Tidak bersaing)

•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ô»

Cobalah online!



1
@KevinCruijssen 91 (dan saya yakin metode ini bisa lebih rendah, tapi saya memilih sendiri kata-kata kamus untuk humor).
Grimmy

1

PHP, 170 byte

pendekatan terpendek yang bisa saya temukan sejauh ini ...

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

kerusakan

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
    ;

Catatan Versi pemetaan bit tersingkat dengan biaya ascii yang dapat dicetak menghabiskan biaya 190 byte (113 data byte + 77 byte decoding) menggunakan 6 bit = base 64, 174 byte (97 data, 77 decoding) menggunakan 7 bit (base 128); mungkin beberapa lagi untuk melarikan diri.

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

Basis 224 (menggunakan ascii 32..255) membutuhkan 87 byte data (+ melarikan diri); tapi saya kira decoding akan dikenakan biaya lebih dari 10 byte tambahan.
Tidak termasuk C dan V dari peta akan menghemat 16/14/13 byte pada data tetapi membutuhkan banyak biaya dalam decoding.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.