"Cowsay" in breve [chiuso]


12

Simula cowsaynella modalità predefinita.

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

Quanto può essere breve il codice? La mucca e il pallone possono essere leggermente diversi, ma tutti gli elementi dovrebbero essere presenti. Palloncino dinamico / multilinea è un vantaggio.

Elenco esplicito degli elementi richiesti:

  • Testo;
  • Palloncino;
  • Linea dalla mucca al pallone;
  • La mucca (occhio [i], mese, orecchie, corpo, gambe (minimo due), mammella, coda).

/usr/share/cowsay/cows/è possibile accedervi, ma ovviamente non è esso /usr/games/cowsaystesso.

Nota: ecco il /usr/share/cowsay/cows/default.cowfile:

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

L'uso del file è facoltativo. Se utilizzato, è necessario accedervi tramite il percorso completo. (Gli utenti Windows possono copiarlo in qualcosa del genere C:\usr\share\cowsay\co\default.cow, per correttezza).


Sto votando per chiudere questo come fuori tema perché le specifiche per il formato sono estremamente non descrittive, il che rende impossibile determinare la validità degli output.
Mego,

Risposte:



16

Perl, 84 caratteri

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

Produzione:

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

Certo, ho giocato a golf la mucca tanto quanto ho giocato a golf il codice. Ma la mucca Mathematica vincerà comunque :)

Nota: richiede Perl 5.16 per il /rflag di sostituzione non distruttiva.


Puoi dirci per favore cosa c'è rdopo s///? Impossibile trovare tale flag nella documentazione. Grazie.
arte

3
Upvoted. Non tutti sono abbastanza coraggiosi da chiamarla "mucca"
Dr. belisarius,

1
Piega la testa a sinistra per vedere la mucca.
Vi.

@manatwork il rflag restituisce il risultato, invece di modificare l'operando in posizione ( <>è ovviamente di sola lettura e non può essere modificato).
primo

Grazie per la spiegazione, Vi. @belisarius, qui appare un bassotto perché il line-height: 1.4emset per i blocchi di codice, ma nel terminale sembra migliore.
arte

5

Rubino: 152 150 149 146 143 caratteri

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'arte della mucca viene letta dal file default.cow e decorata in modo after-12-rounds-vs-Mike-Tyson, simile a cowthink -e 'o*' -T 'U~'un'invocazione.

Il testo viene letto dall'input standard e racchiuso al massimo 40 caratteri. Le interruzioni di riga nel testo di input non sono supportate.

Esecuzione di esempio:

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

Con piegatura artistica: 138 135 136 caratteri

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

Poiché gli elementi devono essere solo presenti, possiamo usare ciò che abbiamo in atto anziché definire quelli realistici.

Esecuzione di esempio:

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

Questa riga prende l'input dello schermo sotto forma di un vettore di carattere o di un array racchiuso tra virgolette tramite: ← ⍎⍞ L'aspetto dell'output viene migliorato includendo spazi iniziali e seguenti nell'input.

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

Le posizioni dei caratteri della mucca su ogni riga dell'array sono specificate come vettori booleani a 19 bit.

Per usare l'input di una riga seguita dal testo a bolle tra virgolette:

' Hello '

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

Il testo su più righe viene inserito come un array.

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

Questa versione può essere testata tramite l'interprete APL gratuito su www.nars2000.org


Come contare correttamente i personaggi? Ho contato 171 byte UTF-8 e 141 punti di codice Unicode qui (newline inclusi). / * Inoltre non ho trovato ciò di cui ho bisogno apt-get installper eseguire APL ... * /
Vi.

1
@Vi. Il set di caratteri APL + WIN v5 si basa su caratteri a byte singolo. Devo convertirli in UTF-8 per renderli correttamente su questo sito. Pertanto credo di essere giustificato nel contare i caratteri inclusi i caratteri di nuova riga come singoli byte. Non sono sicuro di come eseguire APL. Normalmente raccomando la versione gratuita su nars2000.org ma non sembra supportare l'assegnazione relativa.
Graham,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.