“Cowsay” em resumo [fechado]


12

Simule cowsayno modo padrão.

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

Quão curto pode ser o código? A vaca e o balão podem ser ligeiramente diferentes, mas todos os elementos devem estar presentes. Balão dinâmico / multilinha é uma vantagem.

Lista explícita dos elementos necessários:

  • Texto;
  • Balão;
  • Linha da vaca ao balão;
  • A vaca (olho (s), mês, orelhas, corpo, pernas (mínimo dois), úbere, cauda).

/usr/share/cowsay/cows/pode ser acessado, mas obviamente não /usr/games/cowsayele próprio.

Nota: aqui está o /usr/share/cowsay/cows/default.cowarquivo:

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

O uso do arquivo é opcional. Quando usado, ele deve ser acessado pelo caminho completo. (Os usuários do Windows podem copiá-lo para algo como C:\usr\share\cowsay\co\default.cow, para ser justo).


Estou votando para encerrar isso como fora de tópico, porque a especificação para o formato é extremamente não descritiva, o que torna impossível determinar a validade das saídas.
Mego

Respostas:



16

Perl, 84 caracteres

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

Resultado:

----------------------------------------------------
|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 que eu jogava a vaca tanto quanto jogava o código. Mas a vaca Mathematica vai ganhar de qualquer maneira :)

Nota: Requer Perl 5.16 para o /rsinalizador de substituição não destrutivo.


Você pode nos dizer o que é isso rdepois da s///? Não é possível encontrar esse sinalizador na documentação. Obrigado.
manatwork

3
Votado. Nem todo mundo é corajoso o suficiente para chamar isso de "uma vaca"
Dr. belisarius

1
Incline a cabeça para a esquerda para ver a vaca.
Vi.

@manatwork o rsinalizador retorna o resultado, em vez de modificar o operando no lugar ( <>é claro que é somente leitura e não pode ser modificado).
Primo12

Obrigado pela explicação, Vi. @belisarius, obtém uma aparência de dachshund aqui porque o line-height: 1.4emconjunto para os blocos de código, mas no terminal parece melhor.
manatwork

5

Ruby: 152 150 149 146 143 caracteres

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}

A arte da vaca é lida no arquivo default.cow e decorada da maneira após 12 rodadas contra Mike-Tyson, semelhante a uma cowthink -e 'o*' -T 'U~'invocação.

O texto é lido a partir da entrada padrão e agrupado em no máximo 40 caracteres. Quebras de linha no texto de entrada não são suportadas.

Exemplo de execução:

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

Com dobra de arte: 138 135 136 caracteres

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

Como os elementos precisam estar apenas presentes, podemos usar o que temos em vez de definir elementos realistas.

Exemplo de execução:

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

Esse liner recebe a entrada da tela na forma de um vetor ou matriz de caracteres entre aspas, através de: ← ⍎⍞ A aparência da saída é aprimorada ao incluir espaços iniciais e seguintes na entrada.

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

Os locais dos caracteres da vaca em cada linha da matriz são especificados como vetores booleanos de 19 bits.

Para usar a entrada, o liner seguido pelo texto da bolha entre aspas:

' Hello '

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

O texto de várias linhas é inserido como uma matriz.

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

Esta versão pode ser testada através do intérprete APL gratuito em www.nars2000.org


Como contar corretamente os caracteres? Contei 171 bytes UTF-8 e 141 pontos de código Unicode aqui (novas linhas incluídas). / * Também não encontrei o que preciso apt-get installpara executar o APL ... * /
Vi.

1
@Vi. O conjunto de caracteres APL + WIN v5 é baseado em caracteres de byte único. Eu tenho que convertê-los para UTF-8 para fazê-los renderizar corretamente neste site. Portanto, acredito que sou justificado na contagem de caracteres, incluindo caracteres de nova linha como bytes únicos. Não sei como você pode executar o APL. Normalmente, recomendo a versão gratuita no nars2000.org, mas ela não parece suportar a atribuição relativa.
Graham
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.