«Cowsay» en bref [fermé]


12

Simulez cowsaydans le mode par défaut.

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

Quelle est la longueur du code? La vache et le ballon peuvent être légèrement différents, mais tous les éléments doivent être présents. Le ballon dynamique / multiligne est un plus.

Liste explicite des éléments requis:

  • Texte;
  • Ballon;
  • Ligne de la vache au ballon;
  • La vache (œil [s], mois, oreilles, corps, jambes (minimum deux), pis, queue).

/usr/share/cowsay/cows/peut être consulté, mais évidemment pas /usr/games/cowsaylui-même.

Remarque: voici le /usr/share/cowsay/cows/default.cowfichier:

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

L'utilisation du fichier est facultative. Lorsqu'il est utilisé, il doit être accessible par un chemin complet. (Les utilisateurs de Windows peuvent le copier sur quelque chose comme C:\usr\share\cowsay\co\default.cow, par souci d'équité).


Je vote pour fermer ceci comme hors sujet parce que la spécification du format est extrêmement non descriptive, ce qui rend impossible la détermination de la validité des sorties.
Mego

Réponses:



16

Perl, 84 caractères

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

Production:

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

Certes, je jouais à la vache autant que je jouais au code. Mais la vache Mathematica va quand même gagner :)

Remarque: Requiert Perl 5.16 pour l' /rindicateur de substitution non destructif.


Pouvez-vous nous dire ce que c'est raprès le s///? Impossible de trouver un tel indicateur dans la documentation. Je vous remercie.
manatwork

3
A voté. Tout le monde n'est pas assez courageux pour appeler cela "une vache"
Dr. belisarius

1
Inclinez la tête vers la gauche pour voir la vache.
Vi.

@manatwork l' rindicateur renvoie le résultat, au lieu de modifier l'opérande en place ( <>est bien sûr en lecture seule, et ne peut pas être modifié).
primo

Merci pour l'explication, Vi. @belisarius, il obtient un look de teckel ici parce que l' line-height: 1.4emensemble pour les blocs de code, mais dans le terminal, il a l'air mieux.
manatwork

5

Rubis: 152 150 149 146 143 143 caractères

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}

L'art de la vache est lu à partir du fichier default.cow et décoré de la manière après 12 rounds vs Mike-Tyson, similaire à une cowthink -e 'o*' -T 'U~'invocation.

Le texte est lu à partir de l'entrée standard et encapsulé au plus 40 caractères. Les sauts de ligne dans le texte d'entrée ne sont pas pris en charge.

Exemple d'exécution:

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

Avec flexion artistique: 138 135 136 136 caractères

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

Comme les éléments doivent être juste présents, nous pouvons utiliser ce que nous avons en place au lieu d'en définir des réalistes.

Exemple d'exécution:

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

Ce liner prend l'entrée d'écran sous la forme d'un vecteur de caractères ou d'un tableau entre guillemets via: ← ⍎⍞ L'apparence de la sortie est améliorée en incluant des espaces de début et de suite dans l'entrée.

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

Les emplacements des caractères de vache sur chaque ligne du tableau sont spécifiés en tant que vecteurs booléens de 19 bits.

Pour utiliser la saisie d'une ligne, suivie du texte de la bulle entre guillemets:

' Hello '

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

Le texte multiligne est entré sous forme de tableau.

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

Cette version peut être testée via l'interpréteur APL gratuit sur www.nars2000.org


Comment compter correctement les personnages? J'ai compté 171 octets UTF-8 et 141 points de code Unicode ici (nouvelles lignes incluses). / * Je n'ai pas non plus trouvé ce dont j'avais besoin apt-get installpour exécuter APL ... * /
Vi.

1
@Vi. Le jeu de caractères APL + WIN v5 est basé sur des caractères à un octet. Je dois les convertir en UTF-8 pour les rendre correctement sur ce site. Par conséquent, je crois que je suis justifié de compter les caractères, y compris les caractères de nouvelle ligne comme octets uniques. Je ne sais pas comment vous pouvez exécuter APL. Je recommande normalement la version gratuite sur nars2000.org mais elle ne semble pas prendre en charge l' assignation relative.
Graham
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.