Sing Baby Shark

68

„Baby Shark” to piosenka dla dzieci o rodzinie rekinów. Od dawna popularna jako piosenka przy ognisku, została spopularyzowana od połowy 2000 roku przez media społecznościowe, wideo online i radio. - Wikipedia

Napisz program, który nie przyjmuje danych wejściowych i zapisuje następujący tekst na standardowym wyjściu lub w dowolnym pliku:

Baby Shark doo doo doo doo doo doo
Baby Shark doo doo doo doo doo doo
Baby Shark doo doo doo doo doo doo
Baby Shark!
Daddy Shark doo doo doo doo doo doo
Daddy Shark doo doo doo doo doo doo
Daddy Shark doo doo doo doo doo doo
Daddy Shark!
Mommy Shark doo doo doo doo doo doo
Mommy Shark doo doo doo doo doo doo
Mommy Shark doo doo doo doo doo doo
Mommy Shark!
Grandpa Shark doo doo doo doo doo doo
Grandpa Shark doo doo doo doo doo doo
Grandpa Shark doo doo doo doo doo doo
Grandpa Shark!
Grandma Shark doo doo doo doo doo doo
Grandma Shark doo doo doo doo doo doo
Grandma Shark doo doo doo doo doo doo
Grandma Shark!

To jest kod golfowy - wygrywa najkrótszy kod.

Znalazłem to na Reddit ^ 1 ^ 2 i wydaje się to ciekawym wyzwaniem dla golfa.

Aktualizacje:

Brak nowego wiersza między zwrotkami, co sprawia, że ​​jest to zbyt łatwe :)

Wiodące / końcowe znaki nowej linii są w porządku.

njha
źródło
6
Czy nowa linia między każdą zwrotką (każdym rekinem) jest dopuszczalna? (Tak zawsze widziałem napisane teksty)
Quintec
6
Ech, brakuje kilku wersów, takich jak te o pływakach pływających i tracących kończyny w atakach rekinów.
mbomb007
2
„doo doo doo doo doo doo doo” jest naprawdę nadmiernie uproszczone.
R ..
26
Jako rodzic odczuwam najsilniejszą potrzebę głosowania za tym. Tłumię tę potrzebę, ponieważ nie tak działa Stack Exchange. Ale jeśli dziś wieczorem będę nucić „doo doo doo doo”, wracam tutaj i pociągam cię do odpowiedzialności!
Cort Ammon
5
Ile dni ludzi zrujnowało teraz, gdy jest to na HNQ?
CactusCake

Odpowiedzi:

74

Emojicode, 292 bajtów (140 znaków)

🏁🍇🔤Baby🔤➡️b🔤Daddy🔤➡️y🔤Mommy🔤➡️o🔤Grandpa🔤➡️g🔤Grandma🔤➡️a🔤 Shark🔤➡️s🔤 doo🔤➡️d🍨b y o g a🍆➡️f🔂m f🍇🔂i🆕⏩⏩0 3❗️🍇😀🍪m s d d d d d d🍪️❗️🍉😀🍪m s🔤!🔤🍪❗️🍉🍉

Uruchom

Rozszerzony:

🏁🍇
  🔤Baby🔤 ➡️ b
  🔤Daddy🔤 ➡️ y
  🔤Mommy🔤 ➡️ o
  🔤Grandpa🔤 ➡️ g
  🔤Grandma🔤 ➡️ a
  🔤 Shark🔤 ➡️ s
  🔤 doo🔤 ➡️ d
  🍨b y o g a🍆➡️f
  🔂m f🍇
    🔂i🆕⏩⏩0 3❗️🍇
      😀🍪m s d d d d d d🍪️❗️
    🍉
    😀🍪m s🔤!🔤🍪❗️
  🍉
🍉

Wyjaśnione (zgodnie z dokumentem Emojicode ):

🍇🍉

To samo co a {i }(np. Blok kodu)

🏁

„Uruchomienie programu” (np. int main())

🔤Baby🔤 ➡️ b

Zmienne przypisanie (np. const char* b = "Baby";)

🍨b y o g a🍆➡️f

Mówi, stwórz listę wartości między 🍨 i 🍆 i przypisz (➡️) do f(np. const char* f[] = {b,y,o,g,a};)

🔂m f🍇 ... 🍉

Ta linia mówi o zapętleniu elementów przy fużyciu aliasu m, gdzie ...jest kodem między 🍇 a 🍉.

🔂 i 🆕⏩⏩ 0 3❗️🍇 ... 🍉

Ta linia mówi, że ...zapętla się w zakresie [0,3), gdzie jest kodem między 🍇 i 🍉.

😀🍪 ... 🍪️❗️

Ta linia mówi, aby wydrukować format określony w ...(np. printf("%s\n");)

Kod przetłumaczony na C:

#include <stdio.h>

int main() {
  const char* b = "Baby";
  const char* y = "Daddy";
  const char* o = "Mommy";
  const char* g = "Grandpa";
  const char* a = "Grandma";
  const char* s = " Shark";
  const char* d = " doo";
  const char* f[] = {b,y,o,g,a};
  int m = 0, i = 0;
  for (; m < 5; ++m) {
    for (i = 0; i < 3; ++i) {
      printf("%s%s%s%s%s%s%s%s\n", f[m], s, d, d, d, d, d, d);
    }
    printf("%s%s!\n", f[m], s);
  }
  return 0;
}

Następnie oryginalny kod (zamieszczony poniżej dla potomności) miał pewne problemy; przede wszystkim, że blok 🏁🍇🍉 nie został uwzględniony dla tych, którzy chcą go uruchomić, a emoji nie zostały właściwie usunięte, oto faktyczna działająca wersja tego kodu:

Oryginał zmodyfikowany do uruchomienia: Emojicode, 224 bajty (67 znaków)

🏁🍇🍨🔤👶🔤🔤👨🔤🔤🤱🔤🔤👴🔤🔤👵🔤🍆➡️f🔂m f🍇🔂i🆕⏩⏩0 3❗️🍇😀🍪m🔤🦈💩💩💩💩💩💩🔤🍪️❗️🍉😀🍪m🔤🦈!🔤🍪❗️🍉🍉

Rozszerzony:

🏁🍇
  🍨
    🔤👶🔤
    🔤👨🔤
    🔤🤱🔤
    🔤👴🔤
    🔤👵🔤
  🍆 ➡️ f
  🔂 m f 🍇
    🔂 i 🆕⏩⏩ 0 3❗️🍇
      😀🍪m🔤🦈💩💩💩💩💩💩🔤🍪️❗️
    🍉
    😀🍪m🔤🦈!🔤🍪❗️
  🍉
🍉

Co daje wynik:

👶🦈💩💩💩💩💩💩
👶🦈💩💩💩💩💩💩
👶🦈💩💩💩💩💩💩
👶🦈!
👨🦈💩💩💩💩💩💩
👨🦈💩💩💩💩💩💩
👨🦈💩💩💩💩💩💩
👨🦈!
🤱🦈💩💩💩💩💩💩
🤱🦈💩💩💩💩💩💩
🤱🦈💩💩💩💩💩💩
🤱🦈!
👴🦈💩💩💩💩💩💩
👴🦈💩💩💩💩💩💩
👴🦈💩💩💩💩💩💩
👴🦈!
👵🦈💩💩💩💩💩💩
👵🦈💩💩💩💩💩💩
👵🦈💩💩💩💩💩💩
👵🦈!

Uruchom

Gdzie w tobie są poszczególne emoji reprezentujące słowa:

👶 -> Baby
👨 -> Daddy
🤱 -> Mommy
👴 -> Grandpa
👵 -> Grandma
🦈 -> Shark
💩 -> doo

Oryginał: Emojicode, 138 bajtów (47 znaków)

🍨👶👨🤱👴👵🍆➡️f🔂m f🍇🔂i🆕⏩⏩0 3❗️🍇😀m🦈💩💩💩💩💩💩❗️🍉😀m🦈!❗️🍉

Rozszerzony:

🍨👶👨🤱👴👵🍆➡️f
🔂m f🍇
  🔂 i 🆕⏩⏩ 0 3❗️🍇
    😀 m 🦈💩💩💩💩💩💩❗️
  🍉
  😀 m 🦈!❗️
🍉
txtechhelp
źródło
31
Punkty za kreatywność, ale to nie zapewnia wymaganej wydajności
Jo King
15
Witamy na stronie! Gdy JoKing się zbliżał, wymagamy, aby odpowiedzi odpowiadały dokładnie temu, co zadaje pytanie. Oznacza to, że chociaż twoja interpretacja wyzwania jest kreatywna, odpowiedź powinna zostać poprawiona, aby uzyskać poprawny wynik, lub usunięta.
Kreator pszenicy
12
Chociaż ta odpowiedź jest twórcza, nie spełnia wymagań wyzwania, a zatem jest nieprawidłowa - tekst musi zostać wydrukowany dokładnie tak, jak podano w wyzwaniu.
Mego
8
Zmodyfikuj tę odpowiedź, aby uzyskać poprawny wynik, lub usuń ją.
mbomb007
6
Witamy na stronie! Gdy próbuję uruchomić ten kod online , pojawia się błąd. (Liczy również 98 znaków zamiast 94). Czy coś brakuje?
DJMcMayhem
31

IBM PC DOS, zestaw 8088, 115 114 109 108 bajtów

bd43 01e8 1600 bd48 01e8 1000 bd4e 01e8 0a00 bd54 01e8 0400 c646 056d b409 b103
8bd5 cd21 ba5c 01cd 21e3 1249 b306 ba63 01cd 214b 75fb ba69 01cd 21eb e3ba 6801
cd21 c342 6162 7924 4461 6464 7924 4d6f 6d6d 7924 4772 616e 6470 6124 2053 6861
726b 2420 646f 6f24 210d 0a24

Niezmontowane:

    MOV  BP, OFFSET BABY        ; Baby Shark
    CALL VERSE
    MOV  BP, OFFSET DADDY       ; Daddy Shark
    CALL VERSE
    MOV  BP, OFFSET MOMMY       ; Mommy Shark
    CALL VERSE
    MOV  BP, OFFSET GRAND       ; Grandpa/ma Shark
    CALL VERSE
    MOV  BYTE PTR [BP+5], 'm'   ; change 'p' to 'm'                 
                                ; fall through for last VERSE                               

; display a shark verse
; input: BP: address of shark name string
; output: display full verse for shark
VERSE   PROC
        MOV  AH, 9              ; DOS API display string function
        MOV  CL, 3              ; loop verse three times
LOOP_VERSE:
        MOV  DX, BP             ; load shark name from BP
        INT  21H                ; display shark name
        MOV  DX, OFFSET SHARK   ; load 'Shark'
        INT  21H                ; display 'Shark'
        JCXZ LAST_VERSE         ; if last verse, skip to !
        DEC  CX                 ; decrement verse count
        MOV  BL, 6              ; loop 'doo' 6 times
        MOV  DX, OFFSET DOO     ; load 'doo' string
LOOP_DOO:
        INT  21H                ; display 'doo'
        DEC  BX                 ; decrement doo count
        JNZ  LOOP_DOO           ; if not zero, start again
        MOV  DX, OFFSET CRLF    ; load CRLF string
        INT  21H                ; display CRLF
        JMP  LOOP_VERSE
LAST_VERSE:
        MOV  DX, OFFSET BANG    ; display !, CRLF
        INT  21H
        RET
VERSE   ENDP

BABY    DB  'Baby$'
DADDY   DB  'Daddy$'
MOMMY   DB  'Mommy$'
GRAND   DB  'Grand'
PA      DB  'pa$'
SHARK   DB  ' Shark$'
DOO     DB  ' doo$'
BANG    DB  '!'
CRLF    DB  0DH,0AH,'$'

Wynik

DOS DIR, SHARK

Pobierz SHARK.COM!

  • -5 bajtów dzięki @Deadcode
640 KB
źródło
6
Jesteś absolutnym szaleńcem.
MGOwen
5
Kiedy powiedziałeś Download SHARK.COM!, natychmiast pomyślałem o wirusach komputerowych.
MilkyWay90
@gwaugh żartowałem
MilkyWay90
@gwaugh Ale to 109 bajtów
MilkyWay90
21

Python 2 , 93 bajty

for w in"Baby Daddy Mommy Grandpa Grandma".split():w+=" Shark";print(w+" doo"*6+"\n")*3+w+"!"

Wypróbuj online!

94 bajty

for w in"Baby Daddy Mommy Grandpa Grandma".split():print((" doo"*6+"\n%s Shark"%w)*4)[25:]+"!"

Wypróbuj online!

xnor
źródło
16

05AB1E , 50 41 bajtów

“‡ÍÊТ×myîºpaîºma“#ð«'㢫™v…doo6иyšÐy'!«»

Ostatnią część v4FN3Qiy'!«ë…doo6иyšðý},można zdecydowanie trochę pograć w golfa. I miałem rację, -9 bajtów dzięki @Emigna (nawet więcej, niż się spodziewałem).

Wypróbuj online.

Wyjaśnienie:

“‡ÍÊТ×myîºpaîºma # Push dictionary string "baby daddy mommy grandpa grandma"
 #                 # Split by spaces: ["baby","daddy","mommy","grandpa","grandma"]
  ð«               # Append a space to each
    '㢫          '# Append dictionary string "shark" to each
                  # Title-case each word
v                  # Loop `y` over these strings
 doo              #  Push string "doo"
     6и            #  Repeat it 6 times as list
       yš          #  Prepend the string `y` at the front of the list
         Ð         #  Triplicate this list
 y'!«             '#  Push string `y`, concatted with a "!"
 »                 #  Join everything on the stack by newlines
                   #  (and each list implicitly by spaces)
                   # (and after the loop, output the result implicitly)

Zobacz moją wskazówkę 05AB1E (sekcja Jak korzystać ze słownika? ), Aby zrozumieć, dlaczego “‡ÍÊТ×myîºpaîºma“jest "baby daddy mommy grandpa grandma"i 'ã¢jest "shark".

Kevin Cruijssen
źródło
2
Możesz v…doo6иyšÐy'!«»
zagrać w
@Emigna Nawet grałeś w golfa więcej, niż się spodziewałem, dzięki! Sprytny sposób korzystania z trzech egzemplarzy i »!
Kevin Cruijssen
14

PowerShell, 88 86 85 80 79 76 bajtów

-5 bajtów dzięki @mazzy
-1 bajt dzięki @Joey
-3 bajty dzięki @AdmBorkBork

echo Baby Daddy Mommy Grandpa Grandma|%{,(($a="$_ Shark")+" doo"*6)*3;"$a!"}

Wypróbuj online!

Z pewnością przeszliśmy długą drogę.

PowerShell (z zamianą tekstu na mowę), 156 bajtów

NIE jest to zgodne ze specyfikacją, ale jest trochę zabawne. Dzięki @rkeet za pomysł!

Add-Type -a System.Speech;echo Baby Daddy Mommy Grandpa Grandma|%{(New-Object Speech.Synthesis.SpeechSynthesizer).Speak((($a="$_ Shark")+" doo"*6)*3+" $a")}

.NET Wymowa na mowę jest ... cóż ... interesująca. Pamiętaj o tym podczas słuchania. Cieszyć się!

Gabriel Mills
źródło
2
80 bajtów :)
mazzy
1
Możesz zapisać kolejny bajt, przypisując "$_ Shark"zmienną i wykorzystując ją ponownie.
Joey,
2
76 bajtów używając echozamiast -split.
AdmBorkBork
1
Myślę, że powinieneś również mieć tam „tekst na mowę”: p Cholera, próbowałem trochę połączyć to z tym kodem , nie całkiem działało :-)
rkeet
@rkeet Wyzwanie przyjęte! Obecnie zastanawiam się nad tym.
Gabriel Mills,
10

Java (JDK) , 135 bajtów

v->{for(var s:"Baby Daddy Mommy Grandpa Grandma".split(" "))System.out.println(((s+=" Shark")+" doo".repeat(6)+"\n").repeat(3)+s+"!");}

Wypróbuj online!

Olivier Grégoire
źródło
Która wersja JDK? Zgaduję 8+ (lambda).
NoOneIsHere
3
@NoOneIsHere Biorąc pod uwagę repeatmetodę, jest to wersja 11+
Olivier Grégoire
9

Retina 0.8.2 , 77 75 74 bajtów


Baby¶Daddy¶MommyGpaGma
G
¶Grand
.+
$&s$&s$&s$&S!
s
S6$*O¶
O
 doo
S
 Shark

Wypróbuj online! Wyjaśnienie:


Baby¶Daddy¶MommyGpaGma
G
¶Grand

Wstaw relacje w osobnych wierszach.

.+
$&s$&s$&s$&S!¶

Rozwiń na cztery linie.

s
S6$*O¶
O
 doo
S
 Shark

Rozwiń symbole zastępcze.

69 68 bajtów w Retina 1:


Baby¶Daddy¶MommyGpaGma
G
¶Grand
.+
$& Shark
.+
3*$($&6*$( doo)¶)$&!

Wypróbuj online! Wyjaśnienie:


Baby¶Daddy¶MommyGpaGma
G
¶Grand

Wstaw relacje w osobnych wierszach.

.+
$& Shark

Dołącz Shark do każdego.

.+
3*$($&6*$( doo)¶)$&!

Rozwiń całe wersety.

Neil
źródło
9

Python 3, 105 97 96 bajtów

for x in"Baby","Daddy","Mommy","Grandpa","Grandma":z=x+' Shark';print((z+' doo'*6+"\n")*3+z+"!")

Wypróbuj online!

Proste rozwiązanie Python 3. (9 bajtów zapisanych przez Jo King i Quintec)

njha
źródło
2
' doo'*6
Nawiasy
1
Co powiedział kwintec ... 97 bajtów
Jo King
2
@ReverseCold technicznie tam, gdzie nie ma [], to krotka, a nie lista, ale to nie dotyczy tego programu
Stephen
2
96 bajtów przez ustawienie x+' Shark'zmiennej
Jo King
1
To wydaje się działać również w wersji 2.7?
uhoh,
9

Haskell , 122 113 108 106 104 bajtów

s=" Shark";m=do x<-words"Baby Daddy Mommy Grandpa Grandma";("aaa">>x++s++(s>>" doo")++"\n")++x++s++"!\n"

Wypróbuj online!

  • "aaa">>xpowiela się x3 razy, podobnie jak "aaa"ma długość 3.

  • s>>" doo"powiela się " doo"6 razy, podobnie jak " Shark"długość 6!

  • 2 bajty zapisane dzięki @Fox

  • 2 bajty zapisane dzięki @Laikoni
starsandspirals
źródło
2
Witamy na stronie! Zezwalamy tylko na wygenerowanie stałego ciągu wyjściowego jako wyrażenia , dzięki czemu można go pominąć main=putStr. Zobacz także podsumowanie reguł Haskell .
xnor
1
Witamy w PPCG. Niezła oszczędność dzięki s>>.
Kudłaty
@xnor dzięki za linki!
starsandspirals
1
m=(stuff)może być tylko m=stuffo dwa mniej bajtów
Fox
1
104 bajty za pomocą do-notacji: Wypróbuj online!
Laikoni
7

Perl 6 , 79 78 bajtów

(<Baby Daddy Mommmy Grandpa Grandma>X~" Shark"X~ |((" doo"x 6)xx 3),'!')>>.say

Wypróbuj online!

Dość proste.

Wyjaśnienie:

 <...>X~                                  # Combine family members
        " Shark"X~                        # With "Shark" and
                   |((" doo"x 6)xx 3)     # doo repeated 6 times then 3 times
                                     ,'!' # Then !
(                                        )>>.say  # And print each line
Jo King
źródło
7

JavaScript, 104 bajty

Więcej golfa do naśladowania.

_=>`Baby
Daddy
Mommy
Grandpa
Grandma`.replace(/.+/g,x=>(s=(x+=` Shark`)+` doo`.repeat(6)+`
`)+s+s+x+`!`)

Wypróbuj online!

Kudłaty
źródło
1
Z technicznego punktu widzenia nie jest to prawidłowe rozwiązanie, ponieważ nie zapisuje ani nie rejestruje pliku. Chociaż jeśli uznasz, że jest to poprawne rozwiązanie, owijając za pomocą console.log(), możesz sprawić, że nie będzie to deklaracja lambda (tylko 10 znaków)
Delioth
3
@Delioth, powrót z funkcji jest całkowicie poprawny na tej stronie. Zajrzyj do Meta, aby zapoznać się z naszymi domyślnymi regułami We / Wy.
Kudłaty
2
Generalnie zgodziłbym się, ale to pytanie wyraźnie stwierdza, że ​​program „zapisuje następujący tekst na standardowe wyjście lub dowolny plik”
Delioth
7

bash, 78 bajtów

printf %s\\n {Baby,Daddy,Mommy,Grand{p,m}a}\ Shark{" `echo doo{,,}{,}`"{,,},!}

TIO

73 bajty, jeśli dozwolone jest końcowe miejsce

echo '
'{Baby,Daddy,Mommy,Grand{p,m}a}\ Shark{" `echo doo{,,}{,}`"{,,},!}
Nahuel Fouilleul
źródło
6

/// , 124 bajty

/*/$!
//)/Grand//(/Baby//'/Mommy//&/Daddy//%/ doo//$/ Shark//#/a")//"/$%%%%%%
/("("("(*&"&"&"&*'"'"'"'*)p#p#p#pa*)m#m#m#ma$!

Wypróbuj online!

Conor O'Brien
źródło
5

> <> , 158 115 bajtów

Zaoszczędź dużo bajtów dzięki Jo Kingowi

>4>1-&0'krahS '0l3-.
~ ^oa~<
ooo:?!/1-'ood 'o
\ao'!'^?$6:&~
\!?:o
^'ybaB'
^'yddaD'
^'ymmoM'
^'apdnarG'
^'amdnarG'
;

Wypróbuj online! Możesz także wkleić kod w fishlanguage.com , gdzie możesz zobaczyć animację pływania .

DLosc
źródło
121 bajtów , głównie poprzez przestawienie dziecka / tatusia / ... na wiele linii zamiast jednej linii. W golfa jest jednak coś więcej
Jo King
115 bajtów
Jo King
@JoKing Ah, dzięki. Zazwyczaj zakładam (głównie na podstawie pracy z BitCycle), że mniej wierszy jest lepszych, ale w tym przypadku nie jest to prawdą z powodu różnych długości łańcucha.
DLosc
5

PostgreSQL, 162 156 138 bajtów

select a||' Shark'||replace(b,'1',repeat(' doo',6))from unnest('{Baby,Daddy,Mommy,Grandpa,Grandma}'::text[])a,unnest('{1,1,1,!}'::text[])b

Nie golfił

select 
    a || ' Shark' || replace(b,'1',repeat(' doo',6))
from unnest('{Baby,Daddy,Mommy,Grandpa,Grandma}'::text[]) a
    ,unnest('{1,1,1,!}'::text[]) b

Zaoszczędzono 6 24 bajtów dzięki @Nahuel Fouilleul!

  • użyj ||zamiastconcat()
  • użyj unnest('{foo,bar}'::text[])zamiastregexp_split_to_table('foo,bar')

Skrzypce DB <>

Peter Vandivier
źródło
1
-6 bajtów ||zamiast zamiast konkat Zobacz na DB Fiddle
Nahuel Fouilleul
1
select a||' Shark'||replace(b,'1',repeat(' doo',6))from unnest('{Baby,Daddy,Mommy,Grandpa,Grandma}'::text[])a,unnest('{1,1,1,!}'::text[])b
Nahuel Fouilleul
5

Haskell , 97 bajtów

unlines[x++s++p|x<-words"Baby Daddy Mommy Grandpa Grandma",p<-[a,a,a,"!"]]
s=" Shark"
a=s>>" doo"

Wypróbuj online!

Jest to optymalizacja rozwiązania Haskell przez gwiazdy i spirale . Nowa sztuczka polega na iteracji w rzędach każdej zwrotki za pomocą wewnętrznej pętli i łączeniu linii za pomocą unlines, oszczędzając konieczności jawnego wstawiania nowych linii.

Sufiksy czterech linii to [a,a,a,"!"], gdzie ajest " doo"replikowany 6 razy a=s>>" doo", w których gwiazdy i kręgi sprytnie wykorzystują długość sześciu znaków s=" Shark". Pisanie [a,a,a,...]wygląda trochę głupio, ale nie widzę krótszej drogi.

Wersja list-monad ma tę samą długość, ale wygląda świetnie.

unlines$(++).(++s)<$>words"Baby Daddy Mommy Grandpa Grandma"<*>[a,a,a,"!"]
s=" Shark"
a=s>>" doo"

Wypróbuj online!

xnor
źródło
4

Rubinowy , 82 bajty

%w(Baby Daddy Mommy Grandpa Grandma).map{|a|puts [a+" Shark"]*4*(" doo"*6+?\n)+?!}

Wypróbuj online!

Kirill L.
źródło
Trochę zajęło mi zrozumienie, że użyłeś części „doo” jako separatora macierzy. Dobra robota :)
Idva
4

R , 131 122 120 bajtów

-9 bajtów dzięki Giuseppe

-2 więcej bajtów, także Giuseppe

`?`=c
s="Shark"
for(x in "Baby"?"Daddy"?"Mommy"?"Grandpa"?"Grandma")cat(rep("
"?x?s?rep("doo",6),3)?"
"?x?paste0(s,"!"))

Wypróbuj online!

W rzeczywistości jestem z tego dość dumny, zwłaszcza że R jest raczej kiepski w posługiwaniu się łańcuchami. Zacząłem używać cat(sapply(...)), ale uświadomiłem sobie, że pętla for goli kilka bajtów.

Nadużywanie "?"=cznacznie zmniejsza liczbę potrzebnych nawiasów.

Próbowałem także "*"=reppowtórzyć poszczególne wiersze zwrotek i „doos”, ale to nie usunęło żadnych bajtów.

111 bajtów

Alternatywne (i lepsze) rozwiązanie Giuseppe i ASCII-only, które rozwiązuje niektóre problemy z odstępami.

write(paste0(rep(c("Baby","Daddy","Mommy","Grandpa","Grandma"),,,4)," Shark",c(rep(strrep(" doo",6),3),"!")),1)

Wypróbuj online!

Sumner18
źródło
1
122 bajty
Giuseppe
Jak zawsze dziękuję za mądre wejście @Giuseppe. Powinienem był zauważyć te golfa
Sumner18,
1
120 bajtów
Giuseppe
1
@Giuseppe wow, wektoryzacja, ładne. Zapomniałem, że R ma taką dobrą wektoryzację. 114? także 114?
Tylko ASCII
1
także 114
tylko ASCII
3

PHP, 104 bajty

foreach([Baby,Daddy,Mommy,Grandpa,Grandma]as$s)echo$t=$s.str_pad($u=" Shark",30," doo"),"
$t
$t
$s$u!
";

Uruchom php -nr '<code>'lub wypróbuj online .

Tytus
źródło
103 bajty
Noc
3

R , 126 125 bajtów

cat(paste(rep(c("Baby","Daddy","Mommy","Grandpa","Grandma"),,,4),c(rep("Shark doo doo doo doo doo doo",3),"Shark!")),sep="
")

Nie wydaje się to tak „sprytne”, jak odpowiedzi CT Halla lub Sumnera18 , ale dzięki uniknięciu narzutu związanego z definiowaniem zmiennych wydaje się mniejszy.

Wypróbuj online!

Edycja: Zapisano 1 bajt, używając znaku powrotu karetki, zgodnie z komentarzem Jonathana Frecha

BobbyBean
źródło
Witaj w PPCG! Dodałem linki do wspomnianych odpowiedzi użytkownika, aby lepiej porównać swoje rozwiązania. Gratulacje dla obu graczy. Czy możesz dodać link do internetowego środowiska testowego, aby ułatwić weryfikację?
Jonathan Frech
Dzięki za edycję @JonathanFrech. Dodałem teraz link do przetestowania kodu online (co dodało bajt do mojej odpowiedzi!).
BobbyBean
Możesz użyć nowej linii zamiast \nsprowadzać liczbę bajtów ponownie.
Jonathan Frech
125 bajtów
Giuseppe
1
Cóż, byłem całkowicie obezwładniony; czasami najlepsza jest najprostsza opcja. Podkreśla również, jak trudno jest pracować z ciągami w R.
CT Hall
3

R , 139 138 137 bajtów

s='Shark';d='doo';cat(paste(rep(c('Baby','Daddy','Mommy','Grandpa','Grandma'),e=4),c(rep(paste(s,d,d,d,d,d,d),3),paste0(s,'!'))),sep='
')

Prawdopodobnie jest lepszy sposób na zrobienie „doo”, ale nie byłem w stanie go zdobyć.

Edycja:
zastąpiono „\ n” rzeczywistą nową linią według sugestii JDL;
Usunięto końcowy znak nowej linii według sugestii Giuseppe.

Wypróbuj online

CT Hall
źródło
witamy w ppcg! Przynajmniej zastąpienie „\ n” dosłownym znakiem nowej linii pozwoli zaoszczędzić jeden bajt.
JDL
Dzięki, zrobiłem to, a potem zdałem sobie sprawę, że mój wynik został nieco odcięty, więc zaktualizowałem, że niestety spowodowało to więcej bajtów.
CT Hall
Uważam, że masz końcowy znak nowej linii dla dodatkowego bajtu
Giuseppe
3

C (gcc) , 123 122 bajtów

-1 bajt dzięki pułapkowi cat

#define A" doo doo"
f(i){for(i=20;i--;)printf("%.7s Shark%s\n","GrandmaGrandpaMommy\0 Daddy\0 Baby"+i/4*7,i%4?A A A:"!");}

Wypróbuj online!

gastropner
źródło
Jakie są zasady dla C? Nie ma potrzeby main(), lub #includeza printf?
BoBTFish
@BoBTFish: Nie jest specyficzny dla języka C, ale ogólnie można używać dowolnej funkcji (nazwa nie ma znaczenia, może to być nienazwana lambda lub podobna). Języki są definiowane przez (dowolną) implementację, ponieważ działa to gcc(generuje tylko ostrzeżenia, ale dobrze się kompiluje) i jest poprawne.
ბიმო
Uświadomiłem sobie, że brak #includejest tylko błędem, ponieważ wciąż kompilowałem jako C ++, ale nadal nie mogłem go skompilować bez zmiany nazwy twojej funkcji main.
BoBTFish
2

cQuents , 93 89 bajtów

|
#20&bk)~" Shark"~(" doo"6,Z,Z,bk)~" Shark!"
:"Baby","Daddy","Mommy","Grandpa","Grandma"

Wypróbuj online!

Pamiętaj, że od momentu opublikowania TIO nie jest aktualizowane do najnowszej wersji, więc łącze TIO może nie działać.

Wyjaśnienie

|                               Set delimiter to newline
#20                             n = 20
   &                            Output first n terms in sequence
                                k = 1
                                First term is
    bk)~" Shark"                 kth term from the third line concatenated to " Shark"
                ~(" doo"6,        concatenated to " doo" repeated 6 times
Z,Z,                            Second and third terms equal the first term
    bk)~" Shark!"               Fourth term is the kth term from the third line concatenated to " Shark!"
                                k += 1, restart

Third line                      5 terms, each a string
Stephen
źródło
2

JavaScript (Node.js) , 132 bajty

Prawdopodobnie bardzo zdolny do gry w golfa. Generuje wiersz „doo doo”, a następnie tworzy trzy z nich za pomocą „!” wiersz po i powtarza to dla każdego rekina.

a=""
c=" doo"
for(b of["Baby","Daddy","Mommy","Grandpa","Grandma"]){b+=" Shark"
t=b+c+c+c+c+c+c+"\n"
a+=t+t+t+b+"!\n"}console.log(a)

Wypróbuj online!

Neil A.
źródło
Nieznacznie zmienione rozwiązanie w Javascripcie, jednak bez zysku: a = ""; c = "doo"; for (b z [„Baby”, „Daddy”, „Mommy”, „Grandpa”, „Grandma”]) {b + = "Shark"; t = b + c.repeat (6) + "\ n"; a + = t + t + t + b + "! \ N"} console.log (a)
BogdanBiv
2

jq, 87 znaków

" Shark"as$s|("Baby Daddy Mommy Grandpa Grandma"/" ")[]|(.+$s+" doo"*6+"\n")*3+.+$s+"!"

Przykładowy przebieg:

bash-4.4$ jq -nr '" Shark"as$s|("Baby Daddy Mommy Grandpa Grandma"/" ")[]|(.+$s+" doo"*6+"\n")*3+.+$s+"!"'
Baby Shark doo doo doo doo doo doo
Baby Shark doo doo doo doo doo doo
Baby Shark doo doo doo doo doo doo
Baby Shark!
Daddy Shark doo doo doo doo doo doo
Daddy Shark doo doo doo doo doo doo
Daddy Shark doo doo doo doo doo doo
Daddy Shark!
Mommy Shark doo doo doo doo doo doo
Mommy Shark doo doo doo doo doo doo
Mommy Shark doo doo doo doo doo doo
Mommy Shark!
Grandpa Shark doo doo doo doo doo doo
Grandpa Shark doo doo doo doo doo doo
Grandpa Shark doo doo doo doo doo doo
Grandpa Shark!
Grandma Shark doo doo doo doo doo doo
Grandma Shark doo doo doo doo doo doo
Grandma Shark doo doo doo doo doo doo
Grandma Shark!

Wypróbuj online!

człowiek w pracy
źródło
2

whenyouaccidentallylose100endorsementsinnationstates - 123.065 123.716 113.695 100.889 98.554 bajtów

Program

Zagram w to później. Gotowy.

Zagram w to więcej (później) Gotowe.

Zagram w to jeszcze bardziej później. GOTOWY.

Później liczę bajtów na 5 cyfr. TAK

Liczę bajtów na 4 cyfry (nie wiem, czy jest to możliwe, ale wiem, że przy obecnym podejściu niemożliwe jest uzyskanie 3 cyfr).

MilkyWay90
źródło
Co to do diabła jest? Uwielbiam to
Adrian Zhang,
@AdrianZhang Język programowania trudny do zaprogramowania. Ponadto program wygląda na krzyczącą osobę („AAAAAAAAAAA ...”)
MilkyWay90
2

Zwykły TeX, 147 bajtów

\input pgffor\def\D{doo~}\def\d{\D\D\D\D\D\D}\def\S{Shark}\def\y{\x~\S~\d\par}\foreach\x in{Baby,Mommy,Daddy,Grandma,Grandpa}{\y\y\y\x~\S!\par}\bye

Raczej rozczarowujące, ale od wieków nie opublikowałem odpowiedzi na TeX. Pętle są bardzo szczegółowe w teX (a zapętlanie ciągów nie jest nawet wbudowane, więc nawet to jest trochę rozciągnięte)

Chris H.
źródło
2

PHP , 153 147 bajtów

<?php $s='Shark';$d=str_pad('',23,'doo ');foreach(explode(' ','Baby Daddy Mommy Grandpa Grandma')as$a){echo str_repeat("$a $s $d\n",3),"$a $s!\n";}

Dzięki @manatwork za zapisanie 6 bajtów przez wskazanie str_pad('',23'doo ');jest krótszy niżrtrim(str_repeat('doo ',6));

Wypróbuj online!

EvanBarbour3
źródło
Niestety nawet $d='doo doo doo doo doo doo'jest krótszy niż ta kombinacja rtrim()+ str_repeat(). :( Ale na szczęście $d=str_pad('',23,'doo ')jest jeszcze krótszy. Aby uzyskać więcej wskazówek dotyczących optymalizacji, zobacz Wskazówki dotyczące gry w golfa w PHP .
manatwork
@manatwork Dziękujemy za zwrócenie na to uwagi, zaktualizowałem post, aby odzwierciedlić
EvanBarbour3
1
W międzyczasie znalazłem trochę czasu, aby zagrać jeszcze trochę: Wypróbuj online!
manatwork
113 bajtów . Witamy w PPCG!
Kudłaty
2
109 bajtów
Kudłaty