„Cowsay” w skrócie [zamknięte]


12

Symuluj cowsayw trybie domyślnym.

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

Jak krótki może być kod? Krowa i balon mogą się nieco różnić, ale wszystkie elementy powinny być obecne. Balon dynamiczny / wieloliniowy to plus.

Jawna lista wymaganych elementów:

  • Tekst;
  • Balon;
  • Linia od krowy do balonu;
  • Krowa (oko [s], miesiąc, uszy, ciało, nogi (minimum dwa), wymiona, ogon).

/usr/share/cowsay/cows/można uzyskać dostęp, ale oczywiście nie /usr/games/cowsaysam.

Uwaga: oto /usr/share/cowsay/cows/default.cowplik:

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

Użycie pliku jest opcjonalne. Gdy jest używany, musi być dostępny pełną ścieżką. (Użytkownicy systemu Windows mogą skopiować to do czegoś podobnego C:\usr\share\cowsay\co\default.cow, dla uczciwości).


Głosuję za zamknięciem tego tematu jako nie na temat, ponieważ specyfikacja formatu jest wyjątkowo nieopisowa, co uniemożliwia określenie poprawności wyników.
Mego

Odpowiedzi:



16

Perl, 84 znaków

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

Wynik:

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

Trzeba przyznać, że grałem w krowę tak samo, jak grałem w kod. Ale krowa Mathematica i tak wygra :)

Uwaga: Wymaga Perla 5.16 dla /rnieniszczącej flagi substytucji.


Czy możesz nam powiedzieć, co to jest rpo s///? Nie można znaleźć takiej flagi w dokumentacji. Dziękuję Ci.
manatwork

3
Pozytywne. Nie każdy ma dość odwagi, by nazwać to „krową”
dr belizariusz 12.04.13

1
Pochyl głowę w lewo, aby zobaczyć krowę.
Vi.

@manatwork rflaga zwraca wynik, zamiast modyfikować operand w miejscu ( <>jest oczywiście tylko do odczytu i nie można go modyfikować).
primo

Dziękuję za wyjaśnienie, Vi. @belisarius, tutaj wygląda jamnik , ponieważ line-height: 1.4emzestaw bloków kodu, ale w terminalu wygląda lepiej.
manatwork

5

Rubin: 152 150 149 146 143 znaków

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}

Sztuka krowy jest odczytywana z pliku default.cow i dekorowana w sposób następujący po 12 rundach vs Mike-Tyson, podobnie jak cowthink -e 'o*' -T 'U~'wywołanie.

Tekst jest odczytywany ze standardowego wejścia i zawijany maksymalnie 40 znaków. Podziały wierszy w tekście wejściowym nie są obsługiwane.

Przykładowy przebieg:

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

Z gięciem grafiki: 138 135 136 znaków

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

Ponieważ elementy muszą być po prostu obecne, możemy użyć tego, co mamy na miejscu, zamiast definiować realistyczne.

Przykładowy przebieg:

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

Ta jedna linijka przyjmuje dane wejściowe na ekranie w postaci wektora znaków lub tablicy ujętej w cudzysłowy poprzez: ← ⍎⍞ Wygląd wydruku jest poprawiony poprzez włączenie początkowych i następujących po nim spacji.

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

Lokalizacje znaków krów w każdym rzędzie tablicy są określone jako 19-bitowe wektory boolowskie.

Aby skorzystać z danych wejściowych, użyj jednej linijki, a następnie tekstu bąbelka w cudzysłowach:

' Hello '

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

Tekst wielowierszowy jest wprowadzany jako tablica.

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

Tę wersję można przetestować za pomocą bezpłatnego interpretera APL na stronie www.nars2000.org


Jak poprawnie policzyć postacie? Naliczyłem tutaj 171 bajtów UTF-8 i 141 znaków kodowych Unicode (łącznie z nowymi liniami). / * Też nie znalazłem tego, co jest potrzebne apt-get installdo uruchomienia APL ... * /
Vi.

1
@Vi. Zestaw znaków APL + WIN v5 oparty jest na znakach jednobajtowych. Muszę przekonwertować je na UTF-8, aby poprawnie renderować na tej stronie. Dlatego uważam, że jestem uzasadniony licząc znaki, w tym znaki nowego wiersza jako pojedyncze bajty. Nie jestem pewien, jak uruchomić APL. Zwykle polecam darmową wersję na nars2000.org, ale wydaje się, że nie obsługuje względnego przypisania.
Graham,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.