代码高尔夫 - 横幅生成

Cla*_*diu 37 language-agnostic code-golf rosetta-stone

感谢某人,你不想只是给他们发一封电子邮件说"谢谢!",你想要一些FLASHY:

Input: THANKS!!
Output:
TTT H H AAA N N K K SSS !!! !!! 
 T  H H A A NNN K K S   !!! !!! 
 T  HHH AAA NNN KK  SSS !!! !!! 
 T  H H A A N N K K   S            
 T  H H A A N N K K SSS !!! !!! 
Run Code Online (Sandbox Code Playgroud)

编写程序以生成横幅.您只需要生成大写AZ以及空格和感叹号(什么是没有感叹号的横幅?).所有字符都由相同字符的3x5网格组成(因此S是由S组成的3x5网格).所有输出应该在一行(所以没有换行).以下是您需要的所有字母:

Input: ABCDEFGHIJKL
Output:
AAA BBB CCC DD  EEE FFF GGG H H III JJJ K K L
A A B B C   D D E   F   G   H H  I    J K K L
AAA BBB C   D D EE  FF  G G HHH  I    J KK  L
A A B B C   D D E   F   G G H H  I  J J K K L
A A BBB CCC DD  EEE F   GGG H H III JJJ K K LLL

Input: MNOPQRSTUVWX
Output:
M M N N OOO PPP QQQ RR  SSS TTT U U V V W W X X
MMM NNN O O P P Q Q R R S    T  U U V V W W  X
M M NNN O O PPP Q Q RR  SSS  T  U U V V WWW  X
M M N N O O P   QQQ R R   S  T  U U V V WWW  X
M M N N OOO P   QQQ R R SSS  T  UUU  V  WWW X X

Input: YZ!
Output:
Y Y ZZZ !!!
Y Y   Z !!!
YYY  Z  !!!
  Y Z
YYY ZZZ !!!
Run Code Online (Sandbox Code Playgroud)

获胜者是最短的源代码,通过以utf-8编码存储文件所需的字节数来计算.源代码应该从stdin读取输入,输出到stdout.您可以假设输入仅包含[A-Z! ].如果您侮辱用户输入错误,您将获得10个字符的折扣= P.

我要求这些确切的28个字符,但为了使它更有趣,你可以选择你想要的样子 - 无论什么使你的代码更短!要证明您的字母看起来像普通字母,请显示最后三次运行的输出.


到目前为止最短的代码,字符(如果非ASCII存在,则为utf8编码):

133 J

205 Python

209 Ruby

313哈斯克尔

345 C89

382 F#

Dav*_*vid 43

J,133 135 79 83 84 88个字符(utf-8编码)

;/5 3$"1(' ',.s){~"1#:3 u:(ucp'???????????????????????????'){~0>.64-~a.i.s=:
Run Code Online (Sandbox Code Playgroud)

用法:

    ;/5 3$"1(' ',.s){~"1#:3 u:(ucp'???????????????????????????'){~0>.64-~a.i.s=:'ABCDEFGHIJKLMNOPQRSTUVWXYZ !'
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?AAA?BBB?CCC?DD ?EEE?FFF?GGG?H H?III?JJJ?K K?L  ?M M?N N?OOO?PPP?QQQ?RR ?SSS?TTT?U U?V V?W W?X X?Y Y?ZZZ?   ?!!!?
?A A?B B?C  ?D D?E  ?F  ?G  ?H H? I ?  J?K K?L  ?MMM?NNN?O O?P P?Q Q?R R?S  ? T ?U U?V V?W W? X ?Y Y?  Z?   ?!!!?
?AAA?BBB?C  ?D D?EE ?FF ?G G?HHH? I ?  J?KK ?L  ?M M?NNN?O O?PPP?Q Q?RR ?SSS? T ?U U?V V?WWW? X ?YYY? Z ?   ?!!!?
?A A?B B?C  ?D D?E  ?F  ?G G?H H? I ?J J?K K?L  ?M M?N N?O O?P  ?QQQ?R R?  S? T ?U U?V V?WWW? X ?  Y?Z  ?   ?   ?
?A A?BBB?CCC?DD ?EEE?F  ?GGG?H H?III?JJJ?K K?LLL?M M?N N?OOO?P  ?QQQ?R R?SSS? T ?UUU? V ?WWW?X X?YYY?ZZZ?   ?!!!?
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????

    ;/5 3$"1(' ',.s){~"1#:3 u:(ucp'???????????????????????????'){~0>.64-~a.i.s=:'this is incorrect input.'
|index error
Run Code Online (Sandbox Code Playgroud)

解释(NB.是J中的评论):

;/              NB. String together along the third dimension...
5 3$"1          NB. ... reshape each line to 5x3...
(' ',.s)        NB. ... a space before each letter of the input string...
{~"1            NB. ... indexed using...
#:              NB. ... the (15 bit) binary representation of ...
3 u:            NB. ... the integer representation of...
(ucp'???????????????????????????')  ... the unicode versions of these code points...
{~              NB. ...indexed using...
0>.             NB. ...the max of 0 and...
64-~            NB. ...64 less than...
a.i.            NB. the ascii indexes of s
s=:             NB. Assign the input string to the variable s.
Run Code Online (Sandbox Code Playgroud)

  • 这到底是什么 (69认同)
  • 嗯,好吧这是作弊 - 至少在计算代码大小方面.保存在磁盘上时文本需要多少钱?您必须将它保存在158字节的UCS-2或~135字节的__UTF-8中.我认为utf8是计数标准化的好选择,其中每个汉字都是3个字节. (16认同)
  • @ M28:这真是太棒了. (11认同)
  • 我的抗议者抱怨篭篯礧歮禧祯祯寭璗牯䤧䤧䤧䤧 (8认同)
  • @ M28:添加了解释.基本上,28个unicode字符中的每一个都是15位整数,它是字母的二进制表示.例如,第一个代表'A',相当于111101111101101(或31725) (4认同)
  • 这伤害了我的头,眼睛,脸颊,舌头和我的心脏.但我爱它. (3认同)
  • 还有哈哈,J中的评论是拉丁语的缩写是多么自命不凡/好笑?(NB意为"注意bene"意思是"注意") (3认同)
  • 你怎么敢这样侮辱我的母亲!?不然,太棒了!; O) (2认同)
  • 我已经更新了char计数以反映UTF-8的成本(以字节为单位)(通过使用UTF-8编码的记事本保存文件) (2认同)

dou*_*lep 16

Python,250 224个字符

s=raw_input()
for i in range(5):
    for c in s:
        print''.join((' ',c)[int('2zj93fqzj6hsh2bc8i2b1ycncj5yc2v9i0m16dz91gcizj18blbw6wt0p3qqh8svchwc5onna2808of',36)>>((ord(c)-65 if c>'@'else 26)*15+i*3+j)&1]for j in[0,1,2]),
    print
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 很大程度上依赖于2.x打印声明;
  • 支持空间.

跑步(我改变了几个字母的外观,仅出于保证的原因;):

$ echo ABCDEFGHIJKL | python code-golf.py
AAA BBB CCC DD  EEE FFF GGG H H III JJJ K K L   
A A B B C   D D E   F   G   H H  I    J K K L   
AAA BBB C   D D EEE FFF G   HHH  I    J KK  L   
A A B B C   D D E   F   G G H H  I  J J K K L   
A A BBB CCC DD  EEE F   GGG H H III JJJ K K LLL 

$ echo MNOPQRSTUVWX | python code-golf.py
M M N N OOO PPP QQQ RR  SSS TTT U U V V W W X X 
MMM NNN O O P P Q Q R R S    T  U U V V W W X X 
M M NNN O O PPP Q Q RR  SSS  T  U U V V WWW  X  
M M N N O O P   QQQ R R   S  T  U U V V WWW X X 
M M N N OOO P   QQQ R R SSS  T  UUU  V  W W X X 

$ echo YZ\! | python code-golf.py
Y Y ZZZ !!! 
Y Y   Z !!! 
YYY  Z  !!! 
  Y Z       
YYY ZZZ !!! 
Run Code Online (Sandbox Code Playgroud)

有尾随空格.

  • 基地36.聪明. (4认同)

Jor*_*wis 9

Figlet(0个字符)

wget -q 3.ly/gzkv;figlet -f b
Run Code Online (Sandbox Code Playgroud)

样本输出:

% wget -q 3.ly/gzkv;figlet -f b ABCDEFGHIJKLMNOPQRS

 A  BB   CC DD  EEE FFF  GG H H III  JJ K K L   M M NNN  O  PP   Q  RR   SS 
A A B B C   D D E   F   G   H H  I    J K K L   MMM N N O O P P Q Q R R S   
AAA BB  C   D D EE  FF  G G HHH  I    J KK  L   MMM N N O O PP  Q Q RR   S  
A A B B C   D D E   F   G G H H  I  J J K K L   M M N N O O P    QQ R R   S 
A A BB   CC DD  EEE F    GG H H III  J  K K LLL M M N N  O  P     Q R R SS 
% wget -q 3.ly/gzkv;figlet -f b TUVWXYZ \!

TTT U U V V W W X X Y Y ZZZ     !!! 
 T  U U V V W W X X Y Y   Z     !!! 
 T  U U V V WWW  X   Y   Z      !!! 
 T  U U V V WWW X X  Y  Z           
 T  UUU  V  W W X X  Y  ZZZ     !!! 
Run Code Online (Sandbox Code Playgroud)

  • 这可以在明确的意识中得到支持吗?= d (14认同)
  • 这是对问题的适当解决方案,因为声称"wget -q --output-document = - 3.ly/DhWP"解决问题"计算并打印Pi的前10000位数字";-) (9认同)

Nas*_*nov 7

Python,233 231 225 224 205字符

这里最短的python解决方案的候选人:-)
这是一个双线 - 最后一行在3中被破坏了urrrr 可读性

s=raw_input()
for i in range(5):print' '.join(''.join((' ',c)[ord(
'W_E__U__QQ_QN_UQ_EA_Q]_D_Q_QYQ__D[_PP_B__F__Q__EG_Y__EZWU]A_A_P_OPO_\\_QNQWT_YUS'
[max(0,3*ord(c)-192-k)])>>i&1]for k in(2,1,0))for c in s)
Run Code Online (Sandbox Code Playgroud)

PS.感谢您的评论,更正的问题,现在只使用7位ASCII!

测试横幅:

TTT H H EEE     QQQ U U III CCC K K     BBB RR  OOO W W N N     FFF OOO X X     JJJ U U M M PPP SSS     OOO V V EEE RR      TTT H H EEE     L   AAA ZZZ Y Y     DD  OOO GGG !!!
 T  H H E       Q Q U U  I  C   K K     B B R R O O W W NNN     F   O O  X        J U U MMM P P S       O O V V E   R R      T  H H E       L   A A   Z Y Y     D D O O G   !!!
 T  HHH EE      Q Q U U  I  C   KK      BBB RR  O O WWW NNN     FF  O O  X        J U U M M PPP SSS     O O V V EE  RR       T  HHH EE      L   AAA  Z  YYY     D D O O G G !!!
 T  H H E       QQQ U U  I  C   K K     B B R R O O WWW N N     F   O O  X      J J U U M M P     S     O O V V E   R R      T  H H E       L   A A Z     Y     D D O O G G    
 T  H H EEE     QQQ UUU III CCC K K     BBB R R OOO WWW N N     F   OOO X X     JJJ UUU M M P   SSS     OOO  V  EEE R R      T  H H EEE     LLL A A ZZZ YYY     DD  OOO GGG !!!
Run Code Online (Sandbox Code Playgroud)