Kısaca “Cowsay” [kapalı]


12

cowsayVarsayılan modda simüle edin .

$ 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 |
                ||     ||

Kod ne kadar kısa olabilir? İnek ve balon biraz farklı olabilir, ancak tüm elemanlar mevcut olmalıdır. Dinamik / çok satırlı balon bir artı.

Gerekli öğelerin açık listesi:

  • Metin;
  • Balon;
  • İnekten balona doğru çizgi;
  • İnek (göz [ler], ay, kulaklar, vücut, bacaklar (en az iki), meme, kuyruk).

/usr/share/cowsay/cows/erişilebilir, ama belli ki /usr/games/cowsaykendisi değil .

Not: İşte /usr/share/cowsay/cows/default.cowdosya:

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

Dosyanın kullanımı isteğe bağlıdır. Kullanıldığında, tam yoldan erişilmelidir. (Windows kullanıcıları bunu C:\usr\share\cowsay\co\default.cowadillik olarak kopyalayabilir ).


Biçim için spesifikasyon son derece açıklayıcı olmadığı için çıktıların geçerliliğini belirlemeyi imkansız hale getirdiğinden bunu konu dışı olarak kapatmak için oy kullanıyorum.
Mego

Yanıtlar:



16

Perl, 84 karakter

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

Çıktı:

----------------------------------------------------
|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= 
 ¬

Kuşkusuz, ben kod golf kadar inek golf. Ama Mathematica ineği yine de kazanacak :)

Not:/r Tahribatsız ikame bayrağı için Perl 5.16 gerektirir .


Bize bundan rsonra ne olduğunu söyler misiniz s///? Belgede böyle bir bayrak bulunamıyor. Teşekkür ederim.
manatwork

3
Upvoted. Herkes buna "inek" diyebilecek kadar cesur değil
Dr. belisarius

1
İnek görmek için başını sola eğ.
Vi.

@manatwork rbayrak, işleneni yerinde değiştirmek yerine sonucu döndürür <>(elbette salt okunurdur ve değiştirilemez).
primo

Açıklama için teşekkürler, Vi. @belisarius, burada dachshund görünümü alır çünkü line-height: 1.4emkod blokları için set, ancak terminalde daha iyi görünüyor.
manatwork

5

Yakut: 152 150 149 146 143 karakter

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}

İnek sanatı, default.cow dosyasından okunur ve bir cowthink -e 'o*' -T 'U~'çağrıyla benzer şekilde, 12 turdan sonra-Mike-Tyson tarzında dekore edilir .

Metin standart girişten okunur ve en fazla 40 karakterle sarılır. Giriş metnindeki satır kesmeleri desteklenmez.

Örnek çalışma:

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

: Sanat bükme ile 138 135 136 karakterden

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

Elemanların sadece mevcut olması gerektiğinden, gerçekçi olanları tanımlamak yerine, sahip olduklarımızı kullanabiliriz.

Örnek çalışma:

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

2

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

Bu bir astar, ekran girdisini tırnak işareti içine alınmış bir karakter vektörü veya dizi şeklinde alır: ← ⍎⍞ Çıktının görünümü, girişe önde gelen ve aşağıdaki boşluklar eklenerek geliştirilir.

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

Dizinin her satırındaki inek karakteri konumları 19 bit boole vektörleri olarak belirtilir.

Bir astarı ve ardından kabarcık metnini tırnak içinde girmek için:

' Hello '

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

Çok satırlı metin dizi olarak girilir.

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

Bu sürüm www.nars2000.org adresindeki ücretsiz APL yorumlayıcısı aracılığıyla test edilebilir


Karakterler nasıl doğru sayılır? 171 UTF-8 bayt ve 141 Unicode kod noktasını burada saydım (yeni satırlar dahil). / * Ayrıca apt-get installAPL'yi çalıştırmak için neye ihtiyacım olduğunu bulamadım ... * /
Vi.

1
@Vi. APL + WIN v5 karakter kümesi tek baytlık karakterlere dayanır. Bu sitede düzgün bir şekilde görüntülenmelerini sağlamak için onları UTF-8'e dönüştürmeliyim. Bu nedenle, yeni satır karakterlerini içeren karakterleri tek bayt olarak saymada haklı olduğuma inanıyorum. APL'yi nasıl çalıştıracağınızdan emin değilim. Normalde nars2000.org'da ücretsiz sürümü öneriyorum, ancak göreceli atamayı desteklemiyor gibi görünüyor.
Graham
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.