打印所有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
以某种方式弄清什么算作分隔。它必须是空格吗?如果是这样,是否允许使用不间断的空格?
丹尼斯

5
好的,找到翻译了
Mikey Mouse 2015年

3
Vi不是一个字吗?给我的新闻...
jmoreno

Answers:


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", ...])。空格用于分隔路径,并且其中任何带有空格的对都将被删除(结尾的空格是为了防止E最后打印单个)。

我也尝试过正则表达式打高尔夫球,但是时间更长。


1
+1不错的方法!我借了您的字符串以获取Ruby答案
daniero

我还根据您的想法使用bash和regex做出了答案
sergioFC

2
+1 AYAHOYOWOMUNUHAID
Level River St

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+

上面是一个十六进制转储,可以用反转xxd -r -c 16 -g 1

CJam解释器中在线尝试。

根据确切地算作分隔的不同,字节数可以降低到93甚至92

  • 如果我们替换-5559,言非中断空格(0XA0)分开。

  • 如果我们更换-55W的话会被通过,标志(0x40的)分离。

理念

我们可以将每对字母xy编码为(ord(x)-65)×25 +(ord(y)-65)1个

代替存储结果整数,我们将存储与两个相邻单词相对应的所有对的差(按字母顺序排列)。

最高差为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 因为第二个字母永远都不是Z,所以使用25而不是26就足够了。


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没有选项。

要打印值,我只是将有效选项转换为char。

认识到没有以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的更新,pow(,)可以通过**节省另外4个字节来替换。

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我可以使用它!谢谢
James Webster

另外,您可以替换$e++;for($f=0;$f<26;$f++)for($e++,$f=0;$f<26;$f++),现在可以删除那些讨厌的东西{}。如果要将char转换为小写,请使用$e^' '
Ismael Miguel

接得好!我不会有那个。
詹姆斯·韦伯斯特

8

Perl中,167个 164 157字节

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

编写了一个单独的脚本,以将字母尽可能紧凑地分组到一个包含所有有效2个字母词的字符串中。然后,这将遍历所有两个字母词并打印有效的字母词,每行一个。用运行perl -M5.10.1 script.pl


我无法在在线编译器中使用它。
mbomb007

@ mbomb007根据版本,您可能需要命令行标志-M5.10.1来使用say在该版本中添加的关键字,或者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以外的许多字符,几乎可以肯定这些字符已经被改编为Unicode等效项。非高尔夫版本使用十六进制代替,并作为常量而不是文字。另外,非高尔夫版本用换行符分隔单词,这使复制和粘贴到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,则会观察到所有单词都由一个元音和另一个字母(可能是也可能不是元音)组成。因此,对于所有以元音结尾的单词,我们需要一个26字节的表,每个第一个字母一个,每个位对应于元音。对于以元音开头的单词,我们需要一个类似的表,只是这次只需要25个字节,因为没有以Z结尾的单词。将这两个表合并在一起以创建最终表。

为了避免在区域0..31中出现任何ASCII码,将两个最不常见的“元音” M和H分配给第6位和第7位,并且编码将1视为无效单词,将0视为有效单词。由于没有辅音与M和H配对,因此可以确保这些位中的至少一位为1。

将第8位分配给最常见的元音A,以尝试限制非ASCII字符(仍然有很多非ASCII字符)。

所用的表格如下。对于包含2个元音的单词,我优先考虑第一个字母为“元音”,第二个字母为“字母”。例外是以M开头的单词,因为这样可以避免MM与HM之间发生冲突。

以元音开头的单词的十六进制编码

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 

以元音结尾的单词的十六进制编码

 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

也许做一个高尔夫球版的六边形转储,以便可以轻松地还原
变形

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 2015年

4
"".format看起来很痛苦,但很有趣。
密码破解者

6

Ruby,166个字节

借用sp3000的整洁方法将单词编码为紧凑的字符串。这里的踢球者是将其解码回两个字母的单词的简短方法:在传递给String的scan方法的正则表达式中使用前瞻,以提取重叠的匹配项,而不包含空格:

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个字节

我自己的方法:生成AA和之间的所有两个字母的单词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
真好!没有字母!
Brain Guider'Aug

1
脱下帽子。这是我
多年来

多谢你们!由于采用base-64编码,因此仅是神秘的。该字符串实际上包装了允许的字母对的26x25二进制矩阵
Luis

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思想,而第二个正则表达式使用不带空格的通用输入。

说明:

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
您可以使用空格将其缩小七个字节,然后`grep -o ..代替`sed -r 's/ / &/g',这是下面我的回答的技巧。
亚当·卡兹

5

警告,此答案在程序上并不有趣。

由于所有单词的长度均为两个字符,因此我们可以将它们粉碎在一起,然后使用简单的正则表达式将它们再次撕开。

任何对正则表达式友好的语言都可以做到这一点,其中一些比其他语言更有效:

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 Shell,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

Ç - 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));}我已经将输出定界符从换行符更改为空格,但是如果您更喜欢换行符(一个额外的字节),将printf格式字符串更改为"%c%c\n"
Level River St

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
这是一个代码高尔夫挑战,因此您应该发布字节数(代码长度)。也可以尝试将其缩短一点,例如通过删除空格。
雅库布2015年

@Jakube,好点了吗?
Jodrell

是的,看起来还不错
Jakube 2015年

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任何单词的第二个位置都没有,所以使用重新排序的字母bcdfghjklmnpqrstvwxyaeiou将每个字母的有效性编码为每个第一个字母的第二个字母(第一个字母按字母顺序排列)。
每个字母25位,或正好5个Base-32位数字。由于大多数辅音仅将元音作为第二个字母,因此我将元音放在末尾,以便获得大部分的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 ...”
James Webster

您已经!在if ..上取出了。
詹姆斯·韦伯斯特

对。我只是注意到了。我正在使用!较早的定界符,我做了快速查找替换,没有考虑先发生什么。
NickW

2

CJam(99字节)

其中包括一些特殊字符,因此提供十六进制转储是最安全的。(特别是,带有value的字符0xa0对应于一个不间断的空格,这给我设置在线演示带来了很多麻烦)。

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<

(永久链接)

  • 通过预初始化的变量保存了两个字节(感谢丹尼斯!)

这是我第一次参加CJam,所以可能会有更多打高尔夫球的潜力。但是,我想出了一种将字符列表压缩到63个字节的方法,希望对其他人有所帮助。

压缩方式

到目前为止,我看到的大多数方法都对每个单词的两个字母进行了编码。但是,当我们按字母顺序排列单词时,第一个字母不会经常更改,因此显式编码似乎很浪费。

我仅对每个单词的最后一个字符进行编码,并在第一个字符增加时添加一个特殊项。字符被编码为第一个字符,然后是差异列表。由于没有重复的单词,因此差异必须至少为1。因此,我可以将其0用作分隔符。(请注意,然后我必须将每个子序列的第一个字母存储为一个索引,否则在“翻转第一个字符0”和“以A开头” 之间会有混淆0。)

由于这种情况下的差异永远不会大于15,因此我们可以使用base-16并将两个(4位)项打包到每个(8位)字节中。(在实际代码中,我是从base-260而不是base-256转换的,以避免出现不可打印字符的问题。)


您可以使用G和来保存几个字节N,这些键可以按16和换行键。
丹尼斯

@Dennis谢谢,没有意识到变量是预先初始化的!
2012rcampion 2015年

1
所有26个大写字母都是预初始化变量。您可以在此处查看完整列表。
丹尼斯

您可以%-3</;;或替换来节省更多字节/&。(第二个选项将生成一条错误消息。对meta的共识是可以这样做。)
Dennis,2015年

2

脑干,1371字节

高尔夫很不错,但是我并没有付出太多努力。

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

在线尝试!


好了,您可以摆脱换行符
乔·金

@JoKing没有真正的方法可以超越某人,我认为在如此大的规模上削减几个字节没有太大意义。
Krzysztof Szewczyk

2

Zsh,175个字节

此解决方案使用125个字符的字符串,其中小写字母用作定界符以下大写字母序列的第一个字母。

我们遍历的字母$L。如果$X通过ascii比较当前字母是小写字母,请设置$W$X。否则,请$W与串联$X以显示当前单词。

在线尝试!

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

编辑::l根据要求附加以一致的方式设置小写字母
Edit2:使用$X变量-4字节,并在[[..]]条件简化的情况下
Edit3:通过删除引号(")的-4字节
Edit5:使用数组转换而不是L按下面的迭代遍历的-5字节
Edit4:替代方法182个字节(利用前33个字母中的可逆字符串$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这一个礼包,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

使用可变长度的位掩码来编码每个可能的第一个字母存在哪些第二个字母。位掩码的长度可以为0、1、3、7、15或31位。将位映射到具有的字母for d in 'AOIEHMUSTMNDFPYBCGJKLQRVWXZ':,较早的位用于更常用的字母,以便在大多数情况下位掩码可以较短(通常为3或7位,因为大多数辅音仅跟5个元音或YM或H之一)。不幸的是,与更简单的方法相比(原始列表只有303个字节),用于解码的代码抵消了节省的费用。


1
我发现最好对解决方案中每个可能的第二个字母都存在的第一个字母进行编码。可能值得尝试。
詹姆斯·韦伯斯特

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,将其转换为字节数组,然后最终转换为Base64。该字符串在此程序中进行了硬编码,并且使用相反的过程来重现BitSet,并最终打印出单词列表


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`
`)

循环遍历第一个字符串中的每个字母,将其添加到第二个字符串的相应行中的每个字母上。这将按最后一个字母的顺序返回单词,如下所示:

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字节

找到一种从中再挤出一个字节的方法。

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'65
ProgramFOX

1

Haskell中,333个 308 298字节

纯娱乐!

评估s会以一种奇怪的顺序打印所有单词-我使用了这样一个事实,即大多数组合都是元音辅音,反之亦然,可以使用自定义字符“类”进一步优化,从而缩短编码矩阵(此处wk)。

有没有人比我的单子弦更短的不带引号和括号的字符串打印方式?据我所知,类型类甚至更长。

另外,可能还有更短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

那是奇怪的包装,但是是的。谢谢!
Leif Willerts,2015年

不是,void必须进口。无论如何,一定要记住这一点。
Leif Willerts,2015年

1
啊,sequence_$map putStrLnmapM_ 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
@KevinCruijssen 91(而且我敢肯定,这种方法会降低,但是我为幽默选择了词典中的单词)。
Grimmy

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的最短位图版本使用190位(113字节数据+ 77字节解码)使用6位=基数64,需要174字节(97数据,77解码)使用7位(基数128)。可能还会有更多逃生。

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字节的数据,但解码成本很高。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.