Wiosłuj wiosłuj wiosłuj łódką


26

Wszyscy prawdopodobnie znają następującą piosenkę , która jest rundą muzyczną :

Piosenka.

tło

Mniej osób może sobie przypomnieć, jak próbowała śpiewać czteroosobową wersję tego utworu z kilkoma przyjaciółmi i nie udało się. Przesunięcie tekstu piosenki o różnych harmonijnych tonach znane jest jako śpiewanie „rundy” i właśnie tutaj jesteśmy tutaj, aby przeprowadzać symulację za pomocą wyjścia statycznego. Oto przykład kogoś, kto faktycznie wykonuje utwór (link do audio / wideo, będzie miał dźwięk) .

Wyzwanie

Wyzwanie polega na wyświetleniu tekstu w następujący sposób:

Row, row, row your boat,           |-----------------------------------|-----------------------------------|-----------------------------------
Gently down the stream.            |Row, row, row your boat,           |-----------------------------------|-----------------------------------
Merrily, merrily, merrily, merrily,|Gently down the stream.            |Row, row, row your boat,           |-----------------------------------
Life is but a dream.               |Merrily, merrily, merrily, merrily,|Gently down the stream.            |Row, row, row your boat,           
-----------------------------------|Life is but a dream.               |Merrily, merrily, merrily, merrily,|Gently down the stream.            
-----------------------------------|-----------------------------------|Life is but a dream.               |Merrily, merrily, merrily, merrily,
-----------------------------------|-----------------------------------|-----------------------------------|Life is but a dream.               

Zasady

  • Końcowe białe znaki są dopuszczalne, ale nie są wymagane, w tym znaki nowej linii.
  • Łączniki i słupki są częścią wymaganej wydajności, tak.
  • Wymagane są przecinki, kropki, wielkie litery i wszystkie elementy składniowe związane z gramatyką.

To jest , zwycięzca otrzymuje o najniższej liczbie bajtów bez użycia standardowych luk.


2
Chcę tylko powiedzieć, że bardzo podoba mi się twoja duża złożoność kolmogorowa i ascii-art wyzwania! Zarówno ta, jak i tak prawdziwa klawiatura były bardzo fajne do pisania rozwiązań. :)
DJMcMayhem

2
@DJMcMayhem Od czasu znalezienia tej witryny losowo widzę wyzwania w moim codziennym życiu i trzymam mały notes z pomysłami, które dostaję, będę starał się robić fajne!
Magic Octopus Urn

Odpowiedzi:


12

05AB1E , 80 77 bajtów

“¢ã,¢ã,¢ã€žžÄ,““èî„‹€€šæ.“"merrily, "4ר“‚쀈€³€…žâ.“'-35×Ð)€ª.B3FDÁ})øvy'|ý,

Wypróbuj online!

Praca w toku.


Nawiasem mówiąc, nie byłem pod wrażeniem, że słownik nie ma w sobie „05AB1E”. Sprawiło, że efektywne śpiewanie wszystkiego najlepszego z okazji urodzin 05AB1E było prawie niemożliwe. Fajna odpowiedź, ale miałem nadzieję zobaczyć odpowiedź słownika 05AB1E haha. Także DJMcMayhem ma rację.
Magic Octopus Urn

Zaraz, co to jest ª? Bez względu na zdanie, genialne.
Magic Octopus Urn

@carusocomputing: Tak, dopiero niedawno zauważyłem, że istnieje. Potrzebowałem go kilka razy w przeszłości: P
Emigna

vymoże być ʒzapisanie bajtu.
Kevin Cruijssen

10

V , 139 , 128 bajtów

iLife is but a dream ±µ |4amerrily, x7b~A|Gently down the stream.±² |3arow, X5b~Ayour boat,±± |3I³µ-|3AòÄó.û-}|ò5DÎ4f|C|

Jednowarstwowy! (sortof: P)

Wypróbuj online!

Hexdump:

00000000: 694c 6966 6520 6973 2062 7574 2061 2064  iLife is but a d
00000010: 7265 616d 20b1 b520 7c1b 3461 6d65 7272  ream .. |.4amerr
00000020: 696c 792c 201b 7837 627e 417c 4765 6e74  ily, .x7b~A|Gent
00000030: 6c79 2064 6f77 6e20 7468 6520 7374 7265  ly down the stre
00000040: 616d 2eb1 b220 7c1b 3361 726f 772c 201b  am... |.3arow, .
00000050: 5835 627e 4179 6f75 7220 626f 6174 2cb1  X5b~Ayour boat,.
00000060: b120 7c1b 3349 b3b5 2d7c 1b33 4101 1bf2  . |.3I..-|.3A...
00000070: c4f3 2efb 2d7d 7cf2 3544 ce34 667c 437c  ....-}|.5D.4f|C|

Czy dostaję punkty bonusowe za lądowanie dokładnie na 2^7?

Wymyślenie tego zajęło trochę czasu. Mam nadzieję, że mogę grać w golfa jak moja odpowiedź ASCII na klawiaturze, ale nie jestem pewien. Zobaczymy. Są to bardzo podobne wyzwania (i oba bardzo zabawne: D)

Początkowo próbowałem tego (180):

3irow, ch your boat,±± ||"rCLife is but a dream.±µ ||"lD4imerrily, r||"mCGently down the stream.±² ||"gC³µ-|B"dCR³D
GRDD
MGRD
LMGR
DLMG
DDLM
³DLÍR/r
ÍG/g
ÍM/m
ÍL/l
ÍD/d

Wypróbuj online!

Który wstawia to:

RDDD
GRDD
MGRD
LMGR
DLMG
DDLM
DDDL

a następnie dokonuje substytucji, aby ją rozwinąć. Ale budowanie go w stylu jest znacznie krótsze (i bardziej zabawne TBH)


Dostajesz 0^(2^7)punkty bonusowe za lądowanie na 2^7haha. Ciekawe pierwsze przemyślenie na temat wersji 180.
Magic Octopus Urn

1
@carusocomputing Aww, dlaczego nie dać mu (2 ^ 7) / 0 punktów bonusowych?
Matthew Roh

6

Partia, 292 288 275 bajtów

@set d=-------
@set "d=%d%%d%%d%%d%%d%^|
@set "m=M_ m_ m_ m_^|
@set "s=           ^|
@set "s=Life is but a dream.    %s%%m:_=errily,%Gently down the stream. %s%Row, row, row your boat,%s%%d%%d%%d%"
@for /l %%i in (1,1,6)do @call:c
:c
@echo %s:~111,146%
@set "s=%d%%s%

Edycja: Zapisano 13 bajtów, przepisując kod, aby użyć wersji podciągu, której użyłem w odpowiedzi Retina. Dogodnie mogę zapętlić sześć razy, a następnie wpaść na siódmą iterację korpusu pętli, co oznacza, że ​​cytowanie potrzebne do wyjścia |s nie staje się zbyt uciążliwe, jednak muszę uważać, aby wziąć ^pod uwagę s przy wyborze podłańcucha .


6

Python 3, 252 235 208 206 205 bajtów

Dobrze dobrze. Oto mniej nudna odpowiedź:

w=' '*11
t=["Row, row, row your boat,"+w,"Gently down the stream. "+w,"Merrily,"+" merrily,"*3,"Life is but a dream.    "+w,*['-'*35]*3]
for a in zip(*[t[z:]+t[:z]for z in range(7,3,-1)]):print(*a,sep='|')

Stara odpowiedź, 252 bajty:

Nudna odpowiedź, a druga odpowiedź w języku Python jest krótsza, ale pomyślałem, że spróbuję, jeśli to podejście jest krótsze. Python 3 pomimo oszczędności w ciąg bajtów / 2-3 różnicy, ponieważ oba gzipi base64są shittier w Pythonie 2.

from base64 import*
from gzip import*
print(decompress(b85decode('ABzY8Fgf~I0{;ujFV|5hf)Waq`K3h)N%@H-ItmC-qe~c2OAVKMYF<fBr9w)6d7eT^Myf(_Nl|KIuATz2dxGfaW-i~<qN2>4N*#q<oQxVex|z!-Gc8pivsfXiv_v6MAqB%CkU6w=GZ!&|OJj#}Q7chW$(>wu%p_Rd3;?AKH=M}>000')).decode())

25% oryginalnej długości, imponujące, ale możesz być znacznie mądrzejszy i skompresować tylko pierwszą iterację, podzielić na nowe linie i wykonać 4 zmiany. Prawdopodobnie pobiłoby to inną implementację Pythona. Myśli do rozważenia. Nie byłem tym -1, nie wiem kto to zrobił.
Magic Octopus Urn

@carusocomputing True. Byłem naprawdę zainteresowany po prostu, jak dobrze działa kompresja wybiegu przy tak bardzo redundantnym zadaniu o stałej wydajności. Przekształciłem jednak moją odpowiedź na krótszą, mniej głupią.
L3viathan

Czy możesz także edytować z powrotem kompresję? Osobiście uważam to podejście za interesujące. Mianowicie jak niska liczba bajtów spadła przez prosty gzip. Musi użyć Huffmana lub czegoś ... +1 bez względu na wysiłek.
Magic Octopus Urn

1
@ carusocomputing Dodam to na dole. Myślę też, że to nie część deflacji Huffmana czyni tę relatywnie świetną, ale część LZ.
L3viathan

1
@JonathanAllan Rzeczywiście, tęskniłem za tym. Naprawiono, utracono bajt.
L3viathan

5

PowerShell , 224 207 202 bajtów

$a=' '*11;0..6|%{((0..4+4+4)[($_,($_+=6),--$_,--$_|%{$_%7})]|%{("Row, row, row your boat,$a","Gently down the stream.$a ","Merrily,$(' merrily,'*3)","Life is but a dream.$a    ",('-'*35))[$_]})-join'|'}

Wypróbuj online! (wynik jest zawijany, jeśli ekran nie jest wystarczająco szeroki)

Żałoba, ta generacja tablic jest brzydka, ale zaoszczędziła 17 bajtów, więc ...

0..6|%{((0..4+4+4)[($_,($_+=6),--$_,--$_|%{$_%7})]

Pętli od 0do 6. Każdej iteracji indeksujemy do tablicy (0,1,2,3,4,4,4). Indeksowanie opiera się na bieżącej cyfrze, bieżącej cyfrze +6, tamtej -1, a następnie tamtej -1 . Każdy z nich jest następnie zasilany przez pętlę, w której modulujemy %7. Na przykład, jeśli jesteśmy w 0zewnętrznej 0..6pętli, to byłyby to 0,6,5,4, więc każda %7, więc 0,6,5,4. To jest indeksowane do (0,1,2,3,4,4,4)tablicy, więc wynik jest 0,4,4,4. Do danych wejściowych 1otrzymujemy 1,7,6,5wtedy, 1,0,6,5która daje 1,0,4,4. I tak dalej. (byłoby znacznie łatwiej, gdybyśmy mieli .clampfunkcję)

Są to jednorazowe splunięcia w pętlę |%{}. Każdej iteracji indeksujemy do odpowiedniego miejsca w tablicy piosenek-tekstów i zostawiamy ten ciąg w kolejce. Te ciągi są następnie -joinedytowane razem w |celu sformatowania linii wyjściowej. Te ciągi są pozostawione w potoku, a dane wyjściowe są niejawne.

Oszczędność niektórych bajtów dzięki Value Ink.


Biorąc pod uwagę, że $azapisałeś już 11 spacji, możesz zmienić czwartą linię na $aplus 4 spacje zamiast $(' '*15)na -3 bajty, tak?
Wartość tuszu

4

JavaScript (ES8), 285 256 240 231 229 217 214 213 211 210 bajtów

_=>"0444104421043210432144324443".replace(/./g,(x,y)=>a[x].padEnd(35)+`
|||`[++y&3],a=["Row, row, row your boat,","Gently down the stream.","Merrily,"+(m=" merrily,")+m+m,"Life is but a dream.","-".repeat(35)])

Zaoszczędził kilka bajtów, pożyczając sztuczkę z odpowiedzi Arnaulda


Spróbuj

f=

_=>"0444104421043210432144324443".replace(/./g,(x,y)=>a[x].padEnd(35)+`
|||`[++y&3],a=["Row, row, row your boat,","Gently down the stream.","Merrily,"+(m=" merrily,")+m+m,"Life is but a dream.","-".repeat(35)])

o.innerText=f()
<pre id=o>


1
'0444,1044,2104,3210,4321,4432,4443'.split, .maposzczędza Ci 10 bajtów. Ponadto padEndnie jest częścią ES6, a nawet ES7.
Neil

Ups, chciałem to zaktualizować do ES8 - dzięki, @Neil. I dziękuję za wskazówkę, ale byłem w trakcie pracy nad innym rozwiązaniem, które ostatecznie pozwoliło mi zaoszczędzić 12 bajtów.
Kudłaty

4

PHP, 191 bajtów

for(;$n<7;$n++)for($m=0;$m<4;)echo $m?"|":"\n",str_pad($i=["Row, row, row your boat,","Gently down the stream.",M.($t="errily,")." m$t m$t m$t","Life is but a dream."][$n-$m++],35," -"[!$i]);

Wypróbuj online!

Rozszerzony

for(;$n<7;$n++)
  for($m=0;$m<4;)
    echo $m?"|":"\n"
     ,str_pad($i=["Row, row, row your boat,","Gently down the stream."
       ,M.($t="errily,")." m$t m$t m$t","Life is but a dream."][$n-$m++]
       ,35," -"[!$i]);

Możesz uratować postać, usuwając nawiasy z echa (to nie jest funkcja)
Robbie Averill,

@RobbieAverill Wiem, ale w nawiasach podano operatora trójskładnikowego i mógłbym go usunąć tylko wtedy, gdy
zastąpię

3

Python 2 , 199 bajtów

w=' '
s=['-'*35]
t=['Row, row, row your boat,'+w*11,'Gently down the stream.'+w*12,'Merrily,'+' merrily,'*3,'Life is but a dream.'+w*15]
print'\n'.join(map('|'.join,zip(t+s*3,s+t+s+s,s+s+t+s,s*3+t)))

Wypróbuj online!


Dzięki @mathjunkie za zapisanie 14 bajtów


'Merrily, merrily, merrily, merrily,'może mieć ('merrily, '*4).capitalize()rację? Czy to nie jest Python?
Magic Octopus Urn

2
Lub jeszcze krócej,'Merrily,'+' merrily,'*3
ćpun matematyki

2

CJam , 128 122 bajtów

"Row, row, row your boat,""gently down the stream."'M" merrily,"4*2>+"Life is but a dream."'-35*__]{35Se]}%a4*4,.m>z'|f*N*

Wypróbuj online!

Wyjaśnienie

"Row, row, row your boat,"  e# Push this string.
"gently down the stream."   e# Push this string.
'M                          e# Push the character 'M'.
" merrily,"4*               e# Push the string " merrily, merrily, merrily, merrily,".
2>+                         e# Remove the first two letters of it, and append it to 'M',
                            e#   fixing the capitalization.
"Life is but a dream."      e# Push this string.
'-35*__                     e# Push a string containing 35 hyphens and make two copies of it.
]                           e# Collect all these strings in an array.
{35Se]}%                    e# Pad each of them to length 35 by adding spaces to the right.
a4*                         e# Repeat the array 4 times.
4,                          e# The range [0 1 2 3].
.m>                         e# Rotate each subarray of strings rightward by the corresponding
                            e#   number in the range.
z                           e# Transpose the array.
'|f*                        e# Join the strings on each row with '|' characters.
N*                          e# Join the rows together with newlines.

2

SOGL , 83 bajty

┌׀0ρMVxDrž|⁷ΨB≈π93|↑D~Νķ‰¤t╤▼ΣΗ⁶⅔¾№⁷Ζ÷│²╥Ν9°‘-”)0ΔH«‘4*jŗ"ΣΨ¬¹‘4*;+7{’⁄{»}⁽:’∞n1wpX

Pierwsza część ┌׀0ρMVxDrž|⁷ΨB≈π93|↑D~Νķ‰¤t╤▼ΣΗ⁶⅔¾№⁷Ζ÷│²╥Ν9°‘to skompresowany ciąg znaków, w wyniku czego

`life is but a dream.               |-|gently down the stream.            |row, row, row your boat,           |`

Są to linie odwrócone (ponieważ drukuje się je linia po linii), z częścią „wesoło” wyciętą do zastąpienia w programie.
Reszta programu:

...‘                                        Push the compressed string
      )0ΔH«‘                                push "merrily, "
            4*                              repeat it 4 times
              j                             take the last letter off
    -”         ŗ                            replace "-" with the merrily line
                "ΣΨ¬¹‘                      push 35 dashes with an appending "|"
                      4*                    repeat it 4 times
                        ;+                  add inverted ("---|---..."+"Life is but a dream  ...")
                                            The resulting string of above is "-----------------------------------|-----------------------------------|-----------------------------------|-----------------------------------|life is but a dream.               |merrily, merrily, merrily, merrily,|gently down the stream.            |row, row, row your boat,           |"
                          7{                repeat 7 times
                            ’⁄{»}            rotate right 35 times
                                 ⁽           uppercase the 1st letter
                                  :          duplicate
                                   ’∞n       split into parts of length 135
                                      1w     get the 1st one
                                        p    output that
                                         X   delete the splat array

2

/// , 200 bajtów

/_/     //&/errily,//*/ m&//+/-------//@/Row, row, row your boat, __//#/Gently down the stream.  __//$/M&***//%/Life is but a dream.___//~/+++++/@|~|~|~
#|@|~|~
$|#|@|~
%|$|#|@
~|%|$|#
~|~|%|$
~|~|~|%

Wypróbuj online!

Prosty, wykorzystuje typowe zdarzenia jako zamienniki.


2

PHP, 179 bajtów:

for($m="errily,";$i<28;)echo str_pad($s=["Row, row, row your boat,","Gently down the stream.","M$m m$m m$m m$m","Life is but a dream."][($i>>2)-$i%4],35," -"[!$s]),"
|||"[++$i%4];

bez golfa

for($i=0;$i<28;$i++)
{
    $x=$i%4;
    $y=$i>>2;

    $s=["Row, row, row your boat,",
        "Gently down the stream.",
        M.($m="errily,")." m$m m$m m$m",
        "Life is but a dream."
    ][$y-$x];

    $pad_string = $s ? " ":"-";
    $postfix = $x<3 ? "|" : "\n";
    echo str_pad($s,35,$pad_string),$postfix;
}

2

JavaScript (ECMAScript 2017), 191 187 182 bajtów

Zaoszczędź 3 bajty dzięki Shaggy

f=(i=27,s=['Life is but a dream.','Merrily,'+(m=' merrily,')+m+m,'Gently down the stream.','Row, row, row your boat,'][(i>>2)-i%4]||'')=>i?s.padEnd(35,' -'[+!s])+`
|||`[i&3]+f(i-1):s

o.innerHTML = f();
<pre id=o style="font-size:10px"></pre>


Myślę, że 'Merrily,'+' merrily,'.repeat(3)oszczędza bajt.
Neil

Aha, zapomniałem wspomnieć, że padEndnie ma go w ES7, nie mówiąc już o ES6.
Neil

1
M${s='errily, '}m${s}m${s}mzamiast M${s='errily,'} m${s} m${s} moszczędzać 2 bajty
Łukasz

1
Możesz zapisać 3 bajty za pomocą "Merrily,"+(s=" merrily,")+s+s.
Kudłaty

1
@Shaggy Ah tak. To wydaje się być najlepszą opcją. Dzięki!
Arnauld

2

Serwer Microsoft Sql, 421 bajtów

with v as(select left(s+space(35),35)s,n from(values('Row, row, row your boat,',1),('Gently down the stream.',2),('Merrily, merrily, merrily, merrily,',3),('Life is but a dream.',4))t(s,n))select isnull(v.s,s.s)+'|'+isnull(b.s,s.s)+'|'+isnull(c.s,s.s)+'|'+isnull(d.s,s.s)from v full join v b on v.n=b.n+1 full join v c on b.n=c.n+1 full join v d on c.n=d.n+1 cross apply(select replicate('-',35)s)s order by isnull(v.n,9)

Sprawdź to online


Kocham to. Baza danych to moja wiadomość!
Zahiro Mor

2

C (GCC), 231 230 bajtów

-1 bajt dzięki pułapkowi cat!

#define m"errily, "
char s[7][35]={"Life is but a dream.","M"m"m"m"m"m"m"m,"Gently down the stream.","Row, row, row your boat,"};f(l,c){memset(s[4],45,'k');for(l=7;l--;)for(c=0;c<4;)printf("%-35.35s%c",s[(4+l+c++)%7],"|||\n"[c]);}

Całkiem proste. Najpierw buduje tablicę ciągów 7 linii, część za pomocą makra, aby rozdzielić część „wesoło”, a następnie linie myślników są wypełniane znakiem memset. Następnie linie są drukowane z odpowiednim przesunięciem i separatorami.

Wypróbuj online!


@ceilingcat dzięki!
Quentin

1

MATLAB, 280 bajtów

a='errily,';
z={'Row, row, row your boat,';'Gently down the stream.';['M',a,' m',a,' m',a,' m',a];'Life is but a dream.'};
z{5}(1:35)='-';
y=5*ones(7,4);
for j=1:4;z{j}(end+1:35)=' ';y(j:j+3,j)=(1:4)';end
x=z(y);
for j=1:7;fprintf('%s|%s|%s|%s\n',x{j,1},x{j,2},x{j,3},x{j,4});end

Indeksowanie macierzy komórek jest dość kosztowne, co wydaje się najłatwiejszym miejscem do odrzucenia niektórych bajtów (jeśli to możliwe).


Witamy na stronie!
DJMcMayhem

1

Siatkówka , 153 150 bajtów


<-|>Life is but a dream.15|M!< m!>|Gently down the stream.12|Row, row, row your boat,11<|->
<(.*?)>
$1$1$1
!
errily,
-
35$*-
\d+
$* 
r!&`.{71}\|.{71}

Wypróbuj online!

Próbowałem kodowania w $1$*$2sposób ciągły, ale nie robię tego, co chcę, a powtarzanie ciągów okazało się zbyt trudne. Edycja: Zapisano 2 bajty, kodując errily,i 1 bajt, usuwając niepotrzebne ^.


1

Python 2, 225 bajtów

w=[["-"*35]*7for _ in[0]*4]
for i in [0]*4:w[i][i:i+4]=[a.ljust(35)for a in["Row, row, row your boat,","Gently down the stream.","Merrily,"+" merrily,"*3,"Life is but a dream."]]
print "\n".join(["|".join(i)for i in zip(*w)])

Wypróbuj online!


1

Perl 5 , 215 bajtów

$m='merrily,';$s=' 'x11;$l='-'x35;
@t=@s=("Row, row, row your boat,$s","Gently down the stream. $s",
       "\u$m $m $m $m","Life is but a dream.    $s",$l,$l,$l);
map{$i--;map$t[$_].="|".$s[$i++%7],0..6}1..3;print"$_\n"for@t

Wypróbuj online!


1

Szybki , 416 406 405 380 372 307 bajtów

var f=String.init(repeating:count:);_={[[0,4,4,4],[1,0,4,4],[2,1,0,4],[3,2,1,0],[4,3,2,1],[4,4,3,2],[4,4,4,3]].forEach{print($0.map{["Row, row, row your boat,"+f(" ",11),"Gently down the stream."+f(" ",12),"Merrily,"+f(" merrily,",3),"Life is but a dream."+f(" ",15),f("-",35)][$0]}.joined(separator:"|"))}}

Możesz spróbować tutaj .

Dzięki @Mr. Xcoder dla oszczędności 65 bajtów!


1
Wspaniale jest zobaczyć szybką odpowiedź!
siarka

1
Możesz go skrócić, zastępując deklarację fnastępującym: var f=String.init(repeating:count:)co oszczędza tonę bajtów: 30
Mr. Xcoder

1
Również w piaskownicy nie powinieneś print(o()), powinieneś po prostu zadzwonić, o()ponieważ masz w printśrodku instrukcję, która daje ()na końcu wyniku
Mr. Xcoder

1
Usuń także niepotrzebne białe znaki. Zaoszczędzi to wiele bajtów. Skomentuję ulepszoną wersję.
Pan Xcoder

1
Oto ulepszona wersja, 309 bajtów. Jest to 63 bajty krótsze i, jak sądzę, można
grać w

1

T-SQL, 296 277 276 bajtów

PRINT REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE('1|0|0|0
2|1|0|0
3|2|1|0
4|3|2|1
0|4|3|2
0|0|4|3
0|0|0|4',0,REPLICATE('-',35))
        ,1,'Row, row, row your boat,6')
        ,2,'Gently down the stream. 6')
        ,3,'M5 m5 m5 m5')
        ,4,'Life is but a dream.    6')
        ,5,'errily,')
        ,6,SPACE(11))

Przerwania linii na początku są częścią oryginalnego ciągu, przerwy linii pod koniec służą wyłącznie do celów wyświetlania i nie są liczone do sumy bajtów.

Zainspirowany głównie odpowiedzią Conrade SparklePony . Inna technika niż odpowiedź SQL Andrei Odegov .

Całkiem prosta wymiana wielu elementów, ale kilka rzeczy, które pomagają zaoszczędzić bajty:

  • SQL pozwala na łamanie wierszy w oryginalnym ciągu
  • Używanie cyfr zamiast znaków pozwala mi wyeliminować całą masę pojedynczych cudzysłowów
  • Zagnieżdżone zamienniki (5 i 6), oszczędzają mi jeszcze więcej bajtów (dzięki, @ t-clausen.dk)

Gdybym tylko mógł REPLACEwszystkie REPLACEz czymś krótszym. Hmm ....


1
Jeśli WYMIENISZ miejsce 11,12,15 przy użyciu własnej metody, możesz zapisać 1 bajt
t-clausen.dk

1

Japt -R , 99 95 94 92 90 89 87 bajtów

R³i`Life  ¿t a Ým.
M{34î`Îk, m`}
Gt§ ܵ e Ðpam.
Row, w, w yr ¾,`ú)·ú-
£éY Ťq|

Spróbuj

R³i`L...{34î`...`}...,`ú)·ú-
R                                :Newline
 ³                               :Repeat 3 times
  i                              :Prepend
   `                             :  Decompress
    L...                         :    "Life is but a dream.\nM"
        {                        :    Interpolate
         34î                     :      Repeat & slice to length 34
            `...`                :        The compressed string "errily, m"
                 }               :    End interpolation
                  ...,           :    "\nGently down the stream.\nRow, row, row your boat,"
                      `          :  End decompression
                       ú         :  Right pad each line with spaces to the length of the longest
                        )        :End prepend
                         ·       :Split on newlines
                          ú-     :Right pad each element with "-" to the length of the longest
£éY Ťq|                         :Assign the above to U
£                                :Map each element at 0-based index Y
 éY                              :  Rotate U right Y times
    Å                            :  Slice off the first element
     ¤                           :  Slice off the first two elements
      q|                         :  Join with "|"
                                 :Implicit output, joined with newlines

0

Rubin, 162 bajty

7.times{|i|puts (~i..~i+3).map{|j|[*[?-*35]*3,"Life is but a dream.",?M+['errily,']*4*" m","Gently down the stream.","Row, row, row your boat,"][j].ljust(35)}*?|}

0

Java, 295 bajtów / 272 259 bajtów

z nowymi wierszami co 4 kolumny (295b)

void r(){String m=" merrily,",t="-------",s="     ",e=t+t+t+t+t;String[]v={"Gently down the stream.  "+s+s, "Merrily,"+m+m+m, "Life is but a dream."+s+s+s, e, e, e, "Row, row, row your boat, "+s+s};for(int i=0;i<7;i++){for(int j=6+i;j>2+i;j--)System.out.print(v[j%7]+'|');System.out.println();}}

Wypróbuj online

brak wersji nowej linii (259b):

void r(){String m=" merrily,",t="-------",s="     ",e=t+t+t+t+t;String[]v={"Gently down the stream.  "+s+s, "Merrily,"+m+m+m, "Life is but a dream."+s+s+s, e, e, e, "Row, row, row your boat, "+s+s};for(int i=0;i<28;i++)System.out.print(v[(6-i%4+i/4)%7]+'|');}
  • Skondensowane 2 dla pętli w 1

Wypróbuj online


0

Japt , 158 157 bajtów

='|L=`Row, žw, žw yŒr ¾…,`+Sp11 +UV=`Gt§ ܵ e Ðpam.`+S³²²+UW=`M€Îk,`+` ´rÎk,`³+UJ=W+VX=`Life ‰ ¿t a Ý„m.`+Sp15 +UZ='-p35 +U[LZ³RVLZ²RJLZRXJLRZXJRZ²XWRZ³X]q

Wypróbuj online!



0

Perl 5 , 163 bajtów

say join'|',(('-'x26)x3,"Life is but a dream".$"x7,ucfirst(join$",("merrily,")x3),"Gently down the stream    ",ucfirst "row, "x3 ."your boat  ")[-$_..3-$_]for 1..7

Wypróbuj online!


0

Runiczne Zaklęcia , 292 bajty

B͍"-"'#*"|"3s
"Row, row, row your boat,"b" "S*q"|"3sB͍>01B10B3*1-akr@>12B01B10B2*1-akr@>13B12B01B10B1-akr@>14B13B12B01B1-akr@>10B3*14B1-r0[10B2*14B13B1-akr0[10B14B13B12B1-akr]]@
B͍"Gently down the stream."c" "S*q"|"3s
B͍"Merrily,"3" merrily,"S*q"|"3s
B͍"Life is but a dream."f" "S*q"|"3s

Wypróbuj online!

Zasadniczo nie wyzwań związanych ze , ale układ był taki, z którym mogłem pracować bez większych problemów. Runiczna nie ma dobrych sposobów na kompresowanie dowolnych ciągów, więc wszystko, z czym musimy pracować, to powtarzalne części.

Wyjaśnienie:

Lekko dekompresujący:

B͍"-"'#*"|"3s
B͍"Row, row, row your boat,"b" "S*q"|"3s
B͍"Gently down the stream."c" "S*q"|"3s
B͍"Merrily,"3" merrily,"S*q"|"3s
B͍"Life is but a dream."f" "S*q"|"3s
>11B10B3*1-akr@
>12B11B10B2*1-akr@
>13B12B11B10B1-akr@
>14B13B12B11B1-akr@
>10B3*14B1-r0[10B2*14B13B1-akr0[10B14B13B12B1-akr]]@

Pierwsze 5 wierszy działa jako funkcje do budowania każdej części utworu (gdzie pierwszy wiersz generuje 35 -dla odstępu przy użyciu wartości dziesiętnej w #celu zaoszczędzenia 2 bajtów ponad 3X5+). Instrukcja return znajduje się na początku wiersza, aby upewnić się, że wszystkie adresy IP, które wchodzą do funkcji, opuszczą również tę funkcję po tej samej liczbie cykli, aby uniknąć scalenia adresów IP (co powoduje brak linii wyników), ponieważ programy są prostokątnymi i pustymi komórkami są niejawne.

Następne cztery wiersze odpowiadają za wydruk pierwszych czterech wierszy wydruku

Piąty wiersz wypisuje następnie 3 ostatnie wiersze wyniku. Ze względu na to, że wszystkie trzy linie muszą zaczynać się od co najmniej jednej zwrotki zwrotki zwrotnej, nie jest możliwe użycie 3 oddzielnych adresów IP (ponieważ potrzebowałyby one opóźnień, aby uniknąć scalenia). >, y, @, A koszt nowej linii więcej bajtów (4) niż 0[...](3 bajty), gdzie ...jest arbitralne instrukcje (np. Inny wiersz wyjścia).

Natomiast zamiana >i @używanie pojedynczego adresu IP wymaga więcej bajtów.

Wreszcie, połączenie wszystkich pięciu linii punktu wejścia do drugiej linii pozwala zaoszczędzić 5 bajtów nowych linii. Musimy tylko upewnić się, że instrukcja ranch-return przesuwa się najpierw na koniec linii, zachowując funkcjonalność funkcji.

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.