Baris, baris, baris perahu Anda

26

Semua orang mungkin akrab dengan lagu berikut , yang merupakan babak musikal :

Lagu.

Latar Belakang

Lebih sedikit orang mungkin ingat mencoba menyanyikan versi 4-orang ini dengan beberapa teman dan gagal. Mengimbangi lirik lagu dengan nada harmonis yang berbeda dikenal sebagai menyanyikan "putaran" dan itulah yang akan kita simulasikan hari ini menggunakan output statis. Berikut adalah contoh seseorang yang benar-benar melakukan karya tersebut (tautan ke audio / video, akan bersuara) .

Tantangan

Tantangan ini adalah untuk menampilkan teks sebagai berikut persis seperti berikut:

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.               

Aturan

  • Trailing whitespace dapat diterima, tetapi tidak wajib, ini termasuk baris baru.
  • Tanda hubung dan bilah adalah bagian dari output yang diperlukan, ya.
  • Diperlukan koma, titik, huruf besar, dan semua elemen sintaksis terkait tata bahasa.

Ini adalah , byte-hitung terendah tanpa menggunakan celah standar adalah pemenangnya.

Guci Gurita Ajaib
sumber
2
Saya hanya ingin mengatakan, saya sangat menikmati kompleksitas kolmogorov dan ascii-art Anda yang besar! Baik ini dan keyboard begitu nyata telah sangat menyenangkan untuk menulis solusi. :)
DJMcMayhem
2
@DJMcMayhem sejak menemukan situs ini saya melihat tantangan secara acak dalam kehidupan sehari-hari saya dan menyimpan notepad kecil untuk ide-ide yang saya dapatkan, saya akan terus mencoba membuat yang menyenangkan!
Magic Gurita Guci

Jawaban:

12

05AB1E , 80 77 byte

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

Cobalah online!

Bekerja dalam proses.

Emigna
sumber
Saya cukup terkesan dengan kamus tidak memiliki "05AB1E" di dalamnya, omong-omong. Itu membuat hampir mustahil untuk secara efisien menyanyikan selamat ulang tahun 05AB1E. Jawaban sejuk, berharap untuk melihat kamus-base 05AB1E jawaban haha. Juga DJMcMayhem benar, benar.
Magic Octopus Urn
Tunggu apa ª? Tidak masalah, kalimatnya tegas, brilian.
Magic Octopus Urn
@carusocomputing: Ya, saya baru-baru ini memperhatikan bahwa itu ada. Telah membutuhkannya beberapa kali di masa lalu: P
Emigna
vybisa ʒuntuk menyimpan byte.
Kevin Cruijssen
10

V , 139 , 128 byte

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

Satu garis! (sortof: P)

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

Apakah saya mendapatkan poin bonus untuk pendaratan tepat 2^7?

Butuh beberapa saat untuk mencari tahu. Saya berharap saya bisa bermain golf seperti jawaban seni ASCII keyboard saya, tapi saya tidak yakin. Kita lihat saja nanti. Mereka adalah tantangan yang sangat mirip (dan keduanya sangat menyenangkan: D)

Awalnya saya mencoba ini (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

Cobalah online!

Yang menyisipkan ini:

RDDD
GRDD
MGRD
LMGR
DLMG
DDLM
DDDL

dan kemudian melakukan substitusi untuk memperluasnya. Tetapi membangunnya sebagai gaya jauh lebih pendek (dan TBH lebih menyenangkan)

DJMcMayhem
sumber
Anda mendapatkan 0^(2^7)poin bonus untuk pendaratan di 2^7haha. Pikiran pertama yang menarik meskipun pada versi 180.
Magic Octopus Urn
1
@carusocomputing Aww, mengapa tidak memberinya (2 ^ 7) / 0 poin bonus?
Matius Roh
6

Batch, 292 288 275 byte

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

Sunting: Disimpan 13 byte dengan menulis ulang kode untuk menggunakan versi trik substring yang saya gunakan dalam jawaban Retina saya. Mudah saya dapat mengulang enam kali dan kemudian jatuh untuk iterasi ketujuh dari loop body, yang berarti kutipan yang diperlukan untuk output |tidak terlalu berat, namun saya harus berhati-hati untuk memperhitungkan nilai ^ketika memilih substring .

Neil
sumber
6

Python 3, 252 235 208 206 205 byte

Baiklah baiklah. Inilah jawaban yang tidak terlalu membosankan:

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

Jawaban lama, 252 byte:

Jawaban membosankan, dan jawaban Python lainnya lebih pendek, tapi saya pikir saya akan mencoba jika pendekatan ini lebih pendek. Python 3 meskipun penghematan dalam byte / string 2-3 perbedaan karena keduanya gzipdan base64lebih shittier di Python 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())
L3viathan
sumber
25% dari panjang aslinya, cukup mengesankan, tetapi Anda bisa jauh lebih pintar dan kompres hanya iterasi pertama, bagi baris baru dan lakukan 4 shift. Ini kemungkinan akan mengalahkan implementasi python lainnya. Pikiran untuk dipertimbangkan. Saya bukan orang yang ke -1, tidak tahu siapa yang melakukan itu.
Magic Gurita Guci
@carusocomputing Benar. Saya benar-benar hanya tertarik seberapa baik kompresi run-off-the-mill bekerja pada tugas output tetap yang sangat redundan. Konversi jawaban saya ke yang lebih pendek, kurang bodoh.
L3viathan
Bisakah Anda juga mengedit kembali di kompresi? Saya, secara pribadi, menganggap pendekatan itu menarik juga. Yaitu seberapa rendah byte-count didapat melalui gzip sederhana. Itu harus menggunakan Huffman atau sesuatu ... +1 terlepas dari usahanya.
Magic Octopus Urn
1
@carusocomputing saya akan menambahkannya di bagian bawah kurasa. Juga, saya pikir bukan bagian Huffman dari mengempis yang membuat ini relatif hebat, tetapi bagian LZ.
L3viathan
1
@ Jonathan Allan Memang, aku merindukan itu. Memperbaiki, kehilangan satu byte.
L3viathan
5

PowerShell , 224 207 202 byte

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

Cobalah online! (output dibungkus jika layar Anda tidak cukup lebar)

Astaga, pembuatan array ini jelek, tetapi menghemat 17 byte, jadi ...

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

Kami beralih dari 0ke 6. Setiap iterasi, kami mengindeks ke dalam array (0,1,2,3,4,4,4). Pengindeksan didasarkan pada digit saat ini +6, digit saat ini , itu -1, dan kemudian itu -1 . Masing-masing mereka kemudian makan melalui loop di mana kita modulo dengan %7. Sebagai contoh, jika kita berada di loop 0luar 0..6, maka ini akan menjadi 0,6,5,4, maka masing-masing %7, jadi 0,6,5,4. Itu diindeks ke dalam (0,1,2,3,4,4,4)array, jadi hasilnya 0,4,4,4. Untuk input 1kita dapatkan 1,7,6,5kemudian 1,0,6,5yang menghasilkan 1,0,4,4. Dan seterusnya. (Hal-hal akan jauh lebih mudah jika kita memiliki .clampfungsi)

Itu adalah meludah satu per satu menjadi satu lingkaran |%{}. Setiap iterasi, kami indeks ke tempat yang tepat di larik-lirik-lagu, dan meninggalkan string itu di pipeline. String-string tersebut kemudian -joindiedit bersama |untuk memformat garis output. String-string tersebut ditinggalkan di jalur pipa dan hasilnya tersirat.

Menyimpan beberapa byte berkat Value Ink.

AdmBorkBork
sumber
Mengingat Anda sudah $amenyimpan hingga 11 spasi, Anda dapat mengubah baris keempat menjadi berakhir dengan $aditambah 4 spasi alih-alih $(' '*15)dengan -3 byte, ya?
Value Ink
4

JavaScript (ES8), 285 256 240 231 229 217 214 213 211 210 byte

_=>"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)])

Menyimpan beberapa byte dengan meminjam trik dari jawaban Arnauld


Cobalah

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>

Shaggy
sumber
1
'0444,1044,2104,3210,4321,4432,4443'.split, .mapmenghemat 10 byte. Juga, padEndbukan bagian dari ES6, atau bahkan ES7.
Neil
Ups, dimaksudkan untuk memperbarui ke ES8 - terima kasih, @Neil. Dan terima kasih atas tipnya, tapi saya sedang dalam proses mengerjakan solusi lain yang akhirnya menyelamatkan saya 12 byte.
Shaggy
4

PHP, 191 Bytes

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]);

Cobalah online!

Diperluas

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]);
Jörg Hülsermann
sumber
Anda dapat menyimpan karakter dengan menghapus tanda kurung dari gema (itu bukan fungsi)
Robbie Averill
@RobbieAverill Saya tahu tetapi tanda kurung termasuk operator ternary dan saya bisa menghapusnya hanya itu saya mengganti titik melalui koma
Jörg Hülsermann
3

Python 2 , 199 byte

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

Cobalah online!


Terima kasih kepada @mathjunkie karena telah menghemat 14 byte

ovs
sumber
'Merrily, merrily, merrily, merrily,'mungkin ('merrily, '*4).capitalize()benar? Atau bukankah itu Python?
Magic Gurita Guci
2
Atau bahkan lebih pendek,'Merrily,'+' merrily,'*3
pecandu matematika
2

CJam , 128 122 byte

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

Cobalah online!

Penjelasan

"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.
Kucing Bisnis
sumber
2

SOGL , 83 byte

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

Bagian 1 ┌׀0ρMVxDrž|⁷ΨB≈π93|↑D~Νķ‰¤t╤▼ΣΗ⁶⅔¾№⁷Ζ÷│²╥Ν9°‘adalah string terkompresi yang menghasilkan

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

Ini adalah garis yang dibalik (karena ini mencetaknya baris demi baris), dengan bagian "riang" dipotong untuk diganti dalam program.
Sisa program:

...‘                                        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
dzaima
sumber
2

/// , 200 byte

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

Cobalah online!

Sederhana, menggunakan kejadian umum sebagai pengganti.

Kamerad SparklePony
sumber
2

PHP, 179 byte:

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

ungolfed

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;
}
Titus
sumber
2

JavaScript (ECMAScript 2017), 191 187 182 byte

Disimpan 3 byte berkat 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>

Arnauld
sumber
Saya pikir 'Merrily,'+' merrily,'.repeat(3)menghemat satu byte.
Neil
Oh, dan saya lupa menyebutkan bahwa padEndtidak ada dalam ES7, apalagi ES6.
Neil
1
M${s='errily, '}m${s}m${s}mbukannya M${s='errily,'} m${s} m${s} mmenyimpan 2 byte
Luke
1
Anda dapat menyimpan 3 byte dengan "Merrily,"+(s=" merrily,")+s+s.
Shaggy
1
@ Shaggy Ah ya. Itu tampaknya menjadi pilihan terbaik. Terima kasih!
Arnauld
2

Microsoft Sql Server, 421 byte

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)

Periksa secara Online

Andrei Odegov
sumber
Aku menyukainya. Database adalah pesan saya!
Zahiro Mor
2

C (GCC), 231 230 byte

-1 byte berkat ceilingcat!

#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]);}

Cukup mudah. Pertama itu membangun 7 baris string array, bagian melalui makro untuk memfaktorkan keluar bagian "riang", maka garis-garis garis diisi denganmemset . Kemudian garis-garis dicetak dengan offset dan separator yang memadai.

Cobalah online!

Quentin
sumber
@ceilingcat terima kasih!
Quentin
1

MATLAB, 280 byte

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

Pengindeksan array sel cukup mahal, yang sepertinya merupakan tempat termudah untuk membuang beberapa byte (jika mungkin).

jerj
sumber
Selamat datang di situs ini!
DJMcMayhem
1

Retina , 153 150 byte


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

Cobalah online!

Saya mencoba encoding sewenang-wenang sewenang-wenang tetapi $1$*$2tidak melakukan apa yang saya inginkan dan mengulangi string terbukti terlalu rumit. Sunting: Disimpan 2 byte dengan pengodean errily,dan 1 byte dengan menghapus yang tidak perlu ^.

Neil
sumber
1

Python 2, 225 Bytes

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

Cobalah online!

Neil
sumber
1

Perl 5 , 215 byte

$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

Cobalah online!

Kjetil S.
sumber
1

Swift , 416 406 405 380 372 307 byte

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:"|"))}}

Kamu bisa mencobanya sini .

Terima kasih untuk @Mr. Xcoder untuk menyelamatkan saya 65 byte!

Caleb Kleveter
sumber
1
Luar biasa melihat jawaban cepat!
brimstone
1
Anda dapat membuatnya lebih pendek dengan mengganti deklarasi fsebagai berikut var f=String.init(repeating:count:)
:,
1
Juga, di kotak pasir Anda tidak boleh print(o()), Anda hanya perlu menelepon o()karena Anda memiliki printpernyataan di dalamnya, yang memberikan ()pada akhir output
Tn. Xcoder
1
Juga, hapus spasi yang tidak perlu. Ini akan menghemat banyak byte. Saya akan mengomentari versi yang ditingkatkan.
Tn. Xcoder
1
Ini adalah versi yang ditingkatkan, 309 byte. Ini 63 byte lebih pendek dan bisa golf, saya percaya
Tn. Xcoder
1

T-SQL, 296 277 276 byte

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

Jeda baris di awal adalah bagian dari string asli, jeda baris di dekat akhir hanya untuk tujuan tampilan, dan tidak dihitung terhadap total byte.

Terinspirasi sebagian besar oleh jawaban Conrade SparklePony . Teknik yang berbeda dari jawaban SQL Andrei Odegov .

Multi-penggantian yang cukup mudah, tetapi beberapa hal yang membantu menghemat byte:

  • SQL memungkinkan jeda baris dalam string asli
  • Menggunakan angka alih-alih karakter memungkinkan saya untuk menghilangkan sejumlah tanda kutip tunggal
  • Penggantian tersarang (5 dan 6), selamatkan saya lebih banyak byte (terima kasih, @ t-clausen.dk)

Kalau saja saya bisa REPLACEsemua REPLACEdengan sesuatu yang lebih pendek. Hmm ....

BradC
sumber
1
Jika Anda MENGGANTI ruang 11,12,15 menggunakan metode Anda sendiri, Anda dapat menyimpan 1 byte
t-clausen.dk
1

Japt -R , 99 95 94 92 90 89 87 byte

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

Cobalah

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
Shaggy
sumber
0

Ruby, 162 byte

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)}*?|}
Nilai Tinta
sumber
0

Java, 295 byte / 272 259 byte

dengan baris baru setiap 4 kolom (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();}}

Cobalah secara Online

tidak ada versi baris baru (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]+'|');}
  • 2 terkondensasi untuk loop menjadi 1

Cobalah secara Online

Targz
sumber
0

Japt , 158 157 byte

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

Cobalah online!

Oliver
sumber
0

Perl 5 , 163 byte

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

Cobalah online!

Xcali
sumber
0

Pesona Rise , 292 byte

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

Cobalah online!

Saya biasanya tidak melakukan tantangan , tetapi tata letak adalah salah satu yang bisa saya kerjakan tanpa terlalu banyak kesulitan. Runic tidak memiliki cara yang baik untuk mengompresi string yang arbitrer, jadi yang harus kita kerjakan hanyalah bagian yang berulang.

Penjelasan:

Tanpa kompresi sedikit:

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

5 baris pertama berfungsi sebagai fungsi untuk membangun setiap bagian dari lagu (di mana baris pertama menghasilkan 35 -untuk spacer menggunakan nilai desimal #untuk menyimpan 2 byte lebih 3X5+). Instruksi pengembalian ada di awal baris untuk memastikan bahwa semua IP yang masuk fungsi juga akan pergi fungsi setelah jumlah siklus yang sama untuk menghindari penggabungan IP (menghasilkan garis output yang hilang), karena program adalah sel empat persegi dan kosong tersirat.

Empat baris berikutnya bertanggung jawab untuk mencetak empat baris pertama dari output

Baris kelima kemudian mencetak 3 baris output terakhir. Karena ketiga baris perlu mulai dengan setidaknya satu stanza-spacer, tidak layak untuk menggunakan 3 IP terpisah (karena mereka akan membutuhkan penundaan untuk menghindari penggabungan). >, y, @, Dan biaya newline lebih byte (4) dari 0[...](3 bytes) di mana ...merupakan petunjuk sewenang-wenang (yaitu. Baris lain dari output).

Sebaliknya mengganti >dan @menggunakan IP tunggal membutuhkan lebih banyak byte.

Akhirnya, menggabungkan kelima garis titik masuk ke baris ke-2 menghemat baris baru sebesar 5 byte. Kita hanya harus memastikan bahwa instruksi ranch-return bergerak ke akhir barisnya terlebih dahulu, menjaga fungsi fungsinya.

Draco18s
sumber