"Cowsay" kurz [geschlossen]


12

cowsayIm Standardmodus simulieren .

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

Wie kurz kann der Code sein? Die Kuh und der Ballon können leicht voneinander abweichen, es sollten jedoch alle Elemente vorhanden sein. Dynamischer / mehrzeiliger Ballon ist ein Plus.

Explizite Liste der benötigten Elemente:

  • Text;
  • Ballon;
  • Linie von der Kuh zum Ballon;
  • Die Kuh (Auge (n), Monat, Ohren, Körper, Beine (mindestens zwei), Euter, Schwanz).

/usr/share/cowsay/cows/kann zugegriffen werden, aber offensichtlich nicht /usr/games/cowsayselbst.

Hinweis: Hier ist die /usr/share/cowsay/cows/default.cowDatei:

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

Die Verwendung der Datei ist optional. Bei Verwendung muss über den vollständigen Pfad darauf zugegriffen werden. (Windows-Benutzer können es C:\usr\share\cowsay\co\default.cowaus Gründen der Fairness auf etwas kopieren ).


Ich stimme dafür, dies als nicht thematisch zu schließen, da die Spezifikation für das Format äußerst unbeschreiblich ist, was es unmöglich macht, die Gültigkeit von Ausgaben zu bestimmen.
Mego

Antworten:



16

Perl, 84 Zeichen

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

Ausgabe:

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

Zugegeben, ich habe die Kuh genauso golfen wie den Code. Aber die Mathematica-Kuh wird trotzdem gewinnen :)

Hinweis: Erfordert Perl 5.16 für das /rzerstörungsfreie Ersetzungsflag.


Können Sie uns bitte sagen, was das rnach dem ist s///? Kann ein solches Flag nicht in der Dokumentation finden. Vielen Dank.
Manatwork

3
Upvoted. Nicht jeder ist mutig genug, das "eine Kuh" zu nennen
Dr. belisarius

1
Beugen Sie den Kopf nach links, um die Kuh zu sehen.
Vi.

@manatwork das rFlag gibt das Ergebnis zurück, anstatt den Operanden an Ort und Stelle zu ändern ( <>ist natürlich schreibgeschützt und kann nicht geändert werden).
Primo

Vielen Dank für die Erklärung, Vi. @belisarius, es bekommt einen Dackel Blick hier , weil der line-height: 1.4emSatz für die Code - Blöcke, sondern in Terminal es sieht besser aus.
Manatwork

5

Ruby: 152 150 149 146 143 Zeichen

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}

Die Kuhkunst wird aus der Datei default.cow gelesen und nach 12 Runden gegen Mike Tyson dekoriert, ähnlich wie bei einem cowthink -e 'o*' -T 'U~'Aufruf.

Der Text wird aus der Standardeingabe gelesen und mit maximal 40 Zeichen umbrochen. Zeilenumbrüche im Eingabetext werden nicht unterstützt.

Probelauf:

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

Mit Kunstbiegung: 138 135 136 Zeichen

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

Da die Elemente nur vorhanden sein müssen, können wir das, was wir haben, verwenden, anstatt realistische zu definieren.

Probelauf:

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

133 140 138 122 APL

Diese eine Zeile nimmt Bildschirmeingaben in Form eines in Anführungszeichen eingeschlossenen Zeichenvektors oder Arrays vor: ← ⍎⍞ Das Erscheinungsbild der Ausgabe wird verbessert, indem führende und folgende Leerzeichen in die Eingabe eingeschlossen werden.

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

Die Positionen der Kuhzeichen in jeder Zeile des Arrays werden als 19-Bit-Boolesche Vektoren angegeben.

Um die Eingabe zu verwenden, geben Sie den einen Zeilenumbruch gefolgt vom Blasentext in Anführungszeichen ein:

' Hello '

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

Mehrzeiliger Text wird als Array eingegeben.

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

Diese Version kann über den kostenlosen APL-Interpreter unter www.nars2000.org getestet werden


Wie werden die Zeichen richtig gezählt? Ich habe hier 171 UTF-8-Bytes und 141 Unicode-Codepunkte gezählt (einschließlich Zeilenumbrüche). / * Ich habe auch nicht gefunden, was ich brauche apt-get install, um APL auszuführen ... * /
Vi.

1
@Vi. Der APL + WIN v5-Zeichensatz basiert auf Einzelbytezeichen. Ich muss sie in UTF-8 konvertieren, damit sie auf dieser Site richtig dargestellt werden. Deshalb glaube ich, dass ich berechtigt bin, Zeichen einschließlich Zeilenumbrüchen als einzelne Bytes zu zählen. Ich bin nicht sicher, wie Sie APL ausführen können. Normalerweise empfehle ich die kostenlose Version auf nars2000.org, aber sie scheint die relative Zuweisung nicht zu unterstützen.
Graham
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.