“ Cowsay”的简称[关闭]


12

cowsay在默认模式下模拟。

$ cowsay <<< Hello
 _______
< Hello >
 -------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

$ perl -e 'print "Long text "x20' | cowsay
 __________________________________________
/ Long text Long text Long text Long text  \
| Long text Long text Long text Long text  |
| Long text Long text Long text Long text  |
| Long text Long text Long text Long text  |
\ Long text Long text Long text Long text  /
 ------------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

代码有多短?母牛和气球可能略有不同,但是所有元素都应存在。动态/多行气球是一个加号。

必需元素的明确列表:

  • 文本;
  • 气球;
  • 从牛到气球的线;
  • 牛(眼睛,月份,耳朵,身体,腿(最少两个),乳房,尾巴)。

/usr/share/cowsay/cows/可以访问,但显然不能访​​问/usr/games/cowsay

注意:这是/usr/share/cowsay/cows/default.cow文件:

$the_cow = <<"EOC";
        $thoughts   ^__^
         $thoughts  ($eyes)\\_______
            (__)\\       )\\/\\
             $tongue ||----w |
                ||     ||
EOC

该文件的使用是可选的。使用时,必须通过完整路径进行访问。(C:\usr\share\cowsay\co\default.cow为了公平起见,Windows用户可以将其复制到诸如之类的文件中)。


我投票关闭此主题,因为该格式的规范极不具描述性,因此无法确定输出的有效性。
Mego

Answers:



16

Perl,84个字符

print$a='-'x52,<>=~s/.{1,50}\b/sprintf"
|%-50s|",$&/rge,"$a
\\   
]:p
| )=
| P= 
 ¬"

输出:

----------------------------------------------------
|Long text Long text Long text Long text Long text |
|Long text Long text Long text Long text Long text |
|Long text Long text Long text Long text Long text |
|Long text Long text Long text Long text Long text |
----------------------------------------------------
\   
]:p
| )=
| P= 
 ¬

诚然,我打高尔夫球和打代码的次数一样多。但是无论如何,Mathematica牛会赢:)

注意:/r非破坏性替换标志需要Perl 5.16 。


您能告诉我们r之后s///吗?在文档中找不到这样的标志。谢谢。
manatwork 2013年

3
已投票。并非每个人都
敢于

1
低头看看牛。
六。

@manatwork r标志将返回结果,而不是就地修改操作数(<>当然是只读的,不能修改)。
primo

谢谢您的解释,Vi。@belisarius,它在这里看起来像腊肠,因为line-height: 1.4em代码块的设置,但是在终端看起来更好。
manatwork 2013年

5

红宝石:152个 150 149 146 143字符

load'/usr/share/cowsay/cows/default.cow'
p=%w{U~ o* o o}
puts l=?-*44,gets.gsub(/(.{1,40})\b\s*/){"( %-41s)\n"%$1}+l,$the_cow.gsub(/\$\w+/){p.pop}

从default.cow文件中读取母牛的艺术作品,并在12轮后对vs迈克·泰森的方式进行修饰,与cowthink -e 'o*' -T 'U~'调用类似。

从标准输入中读取文本,并最多包含40个字符。不支持输入文本中的换行符。

样品运行:

bash-4.2$ perl -e 'print "Long text "x15' | ruby cow.rb 
--------------------------------------------
( Long text Long text Long text Long text  )
( Long text Long text Long text Long text  )
( Long text Long text Long text Long text  )
( Long text Long text Long text            )
--------------------------------------------
        o   ^__^
         o  (o*)\_______
            (__)\       )\/\
             U~ ||----w |
                ||     ||

与现有技术的弯曲:138 135 136字符

load'/usr/share/cowsay/cows/default.cow'
puts l=?-*44,gets.gsub(/(.{1,40})\b\s*/){"( %-41s)\n"%$1}+l,$the_cow.gsub(/\$.+?([use]+)\b/,'\1')

由于必须只显示元素,因此我们可以使用现有元素,而不用定义现实元素。

样品运行:

bash-4.2$ ruby cow.rb <<< 'Hello poor little cow'
--------------------------------------------
( Hello poor little cow                    )
--------------------------------------------
        s   ^__^
         s  (es)\_______
            (__)\       )\/\
             ue ||----w |
                ||     ||

2

178

{-1'g,({"+ ",x,((&/(c-4;60-#x))#" ")," +"}'l),(g:,(&/(64;4+c::#*l:(60*!-_-(#x)%60)_x))#"+"),("+  ^__^";" + (oo)\\_______";"   (__)\\       )\\/\\";"       ||----w |";"       ||     ||");}

k){-1'g,({"+ ",x,((c-#x)#" ")," +"}'l),(g:,(&/(64;4+c::#*l:(60*!-_-(#x)%60)_x))#"+"),("+  ^__^";" + (oo)\\_______";"   (__)\\       )\\/\\";"       ||----w |";"       ||     ||");}"Hello codegolf.stackexchange.com"
++++++++++++++++++++++++++++++++++++
+ Hello codegolf.stackexchange.com +
++++++++++++++++++++++++++++++++++++
+  ^__^
 + (oo)\_______
   (__)\       )\/\
       ||----w |
       ||     ||

2

APL 133 140 138 122

该衬板通过以下字符将屏幕输入以字符向量或数组形式括在引号中:←⍎⍞通过在输入中包含前导和后缀空格,可以改善输出的外观。

('∘'⍪'∘',((¯2↑1,⍴t)⍴t←⍎⍞),'∘')⍪'∘'⋄5 19⍴(,⍉(19⍴2)⊤323584 196592 63503 4072 3096)\'∘^__^∘(oo)\_______(__)\)\/\||----w|||||'

数组每一行上的母牛字符位置被指定为19位布尔向量。

要使用输入,请使用一个衬线,后跟引号中的气泡文本:

' Hello '

°°°°°°°°°
° Hello °
°°°°°°°°°
°  ^__^
 ° (oo)\_______
   (__)\       )\/\
       ||----w |
       ||     ||

多行文本作为数组输入。

3 36⍴' Multi-line text input as an array. '

°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
° Multi-line text input as an array. °
° Multi-line text input as an array. °
° Multi-line text input as an array. °
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
°  ^__^
 ° (oo)\_______
   (__)\       )\/\
       ||----w |
       ||     ||

此版本可以通过www.nars2000.org上的免费APL解释器进行测试。


如何正确计算字符?我在这里计算了171个UTF-8字节和141个Unicode代码点(包括换行符)。/ *还没有找到apt-get install运行APL所需的内容... * /
Vi。

1
@Vi。APL + WIN v5字符集基于单字节字符。我必须将它们转换为UTF-8,才能使其在此网站上正确呈现。因此,我认为将包括换行符的字符计为单个字节是合理的。我不确定如何运行APL。我通常建议在nars2000.org上使用免费版本,但它似乎不支持相对分配。
Graham
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.