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