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.