Rudern Sie, rudern Sie, rudern Sie Ihr Boot

26

Jeder kennt wahrscheinlich das folgende Lied , das eine musikalische Runde ist :

Das Lied.

Hintergrund

Weniger Leute erinnern sich vielleicht daran, mit ein paar Freunden versucht zu haben, die 4-Personen-Version davon zu singen, und scheitern. Das Versetzen der Texte eines Songs mit verschiedenen harmonischen Tonhöhen wird als "Runde" bezeichnet, und genau das wollen wir heute mit statischer Ausgabe simulieren. Hier ist ein Beispiel von jemandem, der das Stück tatsächlich aufführt (Link zu Audio / Video, wird Ton haben) .

Die Herausforderung

Diese Herausforderung besteht darin, den Text genau wie folgt auszugeben:

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.               

Regeln

  • Das nachgestellte Leerzeichen ist akzeptabel, aber nicht erforderlich, dies schließt Zeilenumbrüche ein.
  • Bindestriche und Balken sind Teil der erforderlichen Ausgabe, ja.
  • Kommas, Punkte, Großschreibung und alle syntaktischen Elemente, die sich auf die Grammatik beziehen, sind erforderlich.

Dies ist , der Code mit der niedrigsten Byteanzahl ohne Verwendung von Standardlücken ist der Gewinner.

Magische Kraken-Urne
quelle
2
Ich möchte nur sagen, ich freue mich sehr über Ihre großen Herausforderungen in Bezug auf Kolmogorov-Komplexität und ASCII-Kunst ! Sowohl dieses als auch eine Tastatur, die so echt ist, haben extrem viel Spaß gemacht, Lösungen zu schreiben. :)
DJMcMayhem
2
@DJMcMayhem Seit ich diese Seite gefunden habe, sehe ich zufällig Herausforderungen in meinem täglichen Leben und halte einen kleinen Notizblock für die Ideen, die ich bekomme. Ich werde weiterhin versuchen, lustige zu machen!
Magic Octopus Urn

Antworten:

12

05AB1E , 80 77 Bytes

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

Probieren Sie es online!

In Arbeit.

Emigna
quelle
Das Wörterbuch ohne "05AB1E" hat mich übrigens ziemlich unbeeindruckt. Es war fast unmöglich, 05AB1E zum Geburtstag zu singen. Coole Antwort aber, hoffte, eine Dictionary-Basis 05AB1E Antwort zu sehen haha. Auch DJMcMayhem ist richtig.
Magic Octopus Urn
Warten Sie, was ist ª? Egal, Urteilsspruch, brillant.
Magic Octopus Urn
@carusocomputing: Ja, ich habe erst kürzlich bemerkt, dass es existiert. Habe es in der Vergangenheit mehrmals gebraucht: P
Emigna
vykann sein ʒ, ein Byte zu speichern.
Kevin Cruijssen
10

V , 139 , 128 Bytes

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

Ein Einzeiler! (Art von: P)

Probieren Sie es 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|

Bekomme ich Bonuspunkte für die Landung genau auf 2^7?

Es dauerte eine Weile, bis ich es herausgefunden hatte. Ich hoffe, ich kann tonnenweise Golf spielen wie meine Tastatur-ASCII-Kunstantwort, aber ich bin nicht sicher. Wir werden sehen. Das sind sehr ähnliche Herausforderungen (und beide machen sehr viel Spaß: D)

Ursprünglich habe ich Folgendes versucht (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

Probieren Sie es online!

Was fügt dies ein:

RDDD
GRDD
MGRD
LMGR
DLMG
DDLM
DDDL

und dann macht Substitution, um es zu erweitern. Aber es im Stil zu bauen ist viel kürzer (und macht mehr Spaß, TBH)

DJMcMayhem
quelle
Sie erhalten 0^(2^7)Bonuspunkte für die Landung auf 2^7haha. Interessanter erster Gedanke allerdings an die 180er Version.
Magic Octopus Urn
1
@carusocomputing Aww, warum nicht ihm (2 ^ 7) / 0 Bonuspunkte geben?
Matthew Roh
6

Batch, 292 288 275 Bytes

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

Bearbeiten: 13 Bytes wurden gespeichert, indem der Code neu geschrieben wurde, um eine Version des Teilstringtricks zu verwenden, den ich in meiner Retina-Antwort verwendet habe. Günstigerweise kann ich eine sechsmalige Schleife ausführen und dann eine siebte Iteration des Schleifenkörpers durchführen, was bedeutet, dass das für die Ausgabe von |s erforderliche Zitieren nicht zu lästig wird, ich muss jedoch darauf achten, das ^s bei der Auswahl der Teilzeichenfolge zu berücksichtigen .

Neil
quelle
6

Python 3, 252 235 208 206 205 Bytes

Also gut. Hier ist eine weniger langweilige Antwort:

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

Alte Antwort, 252 Bytes:

Langweilige Antwort, und die andere Python-Antwort ist kürzer, aber ich dachte, ich würde versuchen, wenn dieser Ansatz kürzer ist. Python 3 trotz der Einsparungen bei Byte / String 2-3 unterscheiden sich da beide gzipund base64sind in Python 2 beschissener.

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
quelle
25% der ursprünglichen Länge, ziemlich beeindruckend, aber Sie könnten viel schlauer sein und nur die erste Iteration komprimieren, auf Zeilenumbrüche aufteilen und 4 Schichten ausführen. Dies würde wahrscheinlich die andere Implementierung von Python schlagen. Überlegungen Ich war nicht derjenige, der -1 machte, weiß nicht, wer das getan hat.
Magic Octopus Urn
@carusocomputing Wahr. Ich war wirklich nur daran interessiert, wie gut die Standardkomprimierung bei einer derart redundanten Aufgabe mit fester Ausgabe funktioniert. Wandelte meine Antwort in eine kürzere, weniger dumme um.
L3viathan
Kannst du auch wieder in der Komprimierung eine bearbeiten? Ich persönlich fand diesen Ansatz ebenfalls interessant. Nämlich wie niedrig die Byteanzahl per einfachem gzip wurde. Es muss Huffman oder etwas ... +1 verwenden, unabhängig von der Anstrengung.
Magic Octopus Urn
1
@carusocomputing Ich werde es am unteren Rand hinzufügen, denke ich. Außerdem denke ich, dass es nicht der Huffman-Teil der Deflation ist, der das relativ großartig macht, sondern der LZ-Teil.
L3viathan
1
@ JonathanAllan In der Tat habe ich das verpasst. Behoben, ein Byte verloren.
L3viathan
5

PowerShell , 224 207 202 Bytes

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

Probieren Sie es online! (Die Ausgabe wird umgebrochen, wenn Ihr Bildschirm nicht breit genug ist.)

Meine Güte, diese Array-Generierungssache ist hässlich, hat aber 17 Bytes gespart, also ...

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

Wir machen eine Schleife von 0bis 6. Bei jeder Iteration indizieren wir in ein Array (0,1,2,3,4,4,4). Die Indizierung basiert auf der aktuellen Ziffer, der aktuellen Ziffer +6, der -1und dann der -1 . Jedes von diesen wird dann durch eine Schleife geführt, mit der wir modulieren %7. Wenn wir uns zum Beispiel 0in der äußeren 0..6Schleife befinden 0,6,5,4, dann sind %7dies alle 0,6,5,4. Das ist in das (0,1,2,3,4,4,4)Array indiziert , so ist die Ausgabe 0,4,4,4. Für Input 1bekommen wir 1,7,6,5dann 1,0,6,5welche Erträge 1,0,4,4. Und so weiter. (Dinge wären so viel einfacher, wenn wir eine .clampFunktion hätten)

Diese werden einzeln in eine Schleife gespuckt |%{}. Bei jeder Iteration indexieren wir die richtige Stelle im Song-Lyrics-Array und belassen diesen String in der Pipeline. Diese Zeichenfolgen werden dann -joinzusammen mit |bearbeitet, um die Ausgabezeile zu formatieren. Diese Zeichenfolgen verbleiben in der Pipeline und die Ausgabe ist implizit.

Dank Value Ink konnten einige Bytes eingespart werden.

AdmBorkBork
quelle
In Anbetracht dessen, dass Sie bereits $a11 Leerzeichen gespeichert haben , können Sie die vierte Zeile so ändern, dass sie mit $aplus 4 Leerzeichen endet , anstatt mit $(' '*15)-3 Byte, ja?
Wert Tinte
4

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

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

Sparte ein paar Bytes, indem du einen Trick aus Arnauld's Antwort borgst


Versuch es

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>

Zottelig
quelle
1
'0444,1044,2104,3210,4321,4432,4443'.split, .mapspart Ihnen 10 Bytes. Auch padEndist nicht Teil des ES6 oder sogar ES7.
Neil
Ups, wollte das auf ES8 updaten - danke, @Neil. Und danke für den Tipp, aber ich war gerade dabei, an einer anderen Lösung zu arbeiten, die mir letztendlich 12 Bytes erspart hat.
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]);

Probieren Sie es online!

Erweitert

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
quelle
Sie können einen Charakter speichern, indem Sie die Klammern vom Echo entfernen (es ist keine Funktion)
Robbie Averill
@RobbieAverill Ich weiß, aber die Klammern enthalten einen ternären Operator und ich konnte ihn nur entfernen, indem ich den Punkt durch ein Komma ersetzte
Jörg Hülsermann
3

Python 2 , 199 Bytes

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

Probieren Sie es online!


Vielen Dank an @mathjunkie für das Speichern von 14 Bytes

ovs
quelle
'Merrily, merrily, merrily, merrily,'könnte ('merrily, '*4).capitalize()richtig sein? Oder ist das nicht Python?
Magic Octopus Urn
2
Oder noch kürzer,'Merrily,'+' merrily,'*3
Math Junkie
2

CJam , 128 122 Bytes

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

Probieren Sie es online!

Erläuterung

"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.
Geschäfts-Katze
quelle
2

SOGL , 83 Bytes

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

Der 1. Teil ┌׀0ρMVxDrž|⁷ΨB≈π93|↑D~Νķ‰¤t╤▼ΣΗ⁶⅔¾№⁷Ζ÷│²╥Ν9°‘ist eine komprimierte Zeichenfolge, die ergibt

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

Dies sind die umgekehrten Zeilen (da diese Zeile für Zeile gedruckt werden), wobei der "lustige" Teil ausgeschnitten wird, um im Programm ersetzt zu werden.
Der Rest des Programms:

...‘                                        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
quelle
2

/// , 200 Bytes

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

Probieren Sie es online!

Einfach, verwendet häufige Vorkommen als Ersatz.

Genosse SparklePony
quelle
2

PHP, 179 Bytes:

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

JavaScript (ECMAScript 2017), 191 187 182 Byte

3 Bytes dank Shaggy gespart

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
quelle
Ich denke, 'Merrily,'+' merrily,'.repeat(3)spart ein Byte.
Neil
Oh, und ich habe vergessen zu erwähnen, dass padEnddas nicht in ES7 ist, geschweige denn in ES6.
Neil
1
M${s='errily, '}m${s}m${s}mstatt M${s='errily,'} m${s} m${s} mspart 2 Bytes
Luke
1
Mit können Sie 3 Bytes einsparen "Merrily,"+(s=" merrily,")+s+s.
Shaggy
1
@ Shaggy Ah ja. Das scheint die beste Option zu sein. Vielen Dank!
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)

Überprüfen Sie es online

Andrei Odegov
quelle
Ich liebe es. Datenbank ist meine Nachricht!
Zahiro Mor
2

C (GCC), 231 230 Bytes

-1 byte dank 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]);}

Ziemlich einfach. Zuerst wird das 7-Zeilen-String-Array erstellt, Teil über ein Makro, um den "lustigen" Teil zu zerlegen, dann werden die Strichzeilen mit einem ausgefülltmemset . Anschließend werden die Zeilen mit dem entsprechenden Offset und den entsprechenden Trennzeichen gedruckt.

Probieren Sie es online!

QUentin
quelle
@ceilingcat danke!
Quentin
1

MATLAB, 280 Bytes

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

Die Indizierung von Zellen-Arrays ist ziemlich kostspielig. Dies scheint der einfachste Weg zu sein, um einige Bytes zu verwerfen (falls möglich).

Jerj
quelle
Willkommen auf der Seite!
DJMcMayhem
1

Retina , 153 bis 150 Bytes


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

Probieren Sie es online!

Ich habe es mit willkürlicher Lauflängencodierung versucht, $1$*$2tue aber nicht, was ich will, und das Wiederholen von Zeichenfolgen hat sich als zu schwierig erwiesen. Bearbeiten: 2 Bytes durch Codierung errily,und 1 Byte durch Entfernen eines unnötigen gespeichert ^.

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

Probieren Sie es online!

Neil
quelle
1

Perl 5 , 215 Bytes

$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

Probieren Sie es online!

Kjetil S.
quelle
1

Swift , 416 406 405 380 372 307 Bytes

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

Sie können es hier ausprobieren .

Vielen Dank an @Mr. Xcoder um mir 65 Bytes zu ersparen!

Caleb Kleveter
quelle
1
Schön, eine schnelle Antwort zu sehen!
Schwefel
1
Sie können es kürzer machen, indem Sie die Deklaration von fwie folgt ersetzen var f=String.init(repeating:count:)
:,
1
Außerdem sollten Sie in der Sandbox nicht print(o())anrufen, o()weil Sie eine printAnweisung darin haben, die ()am Ende der Ausgabe eine gibt
Mr. Xcoder
1
Entfernen Sie außerdem das unnötige Leerzeichen. Es werden viele Bytes gespart. Ich werde eine verbesserte Version kommentieren.
Mr. Xcoder
1
Hier ist eine verbesserte Version, 309 Bytes. Dies ist 63 Bytes kürzer und kann, glaube ich, gespielt werden
Mr. Xcoder
1

T-SQL, 296 277 276 Bytes

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

Zeilenumbrüche am Anfang sind Teil der ursprünglichen Zeichenfolge, Zeilenumbrüche am Ende dienen nur Anzeigezwecken und werden nicht für die Bytesumme gezählt.

Vor allem durch die Antwort von Conrade SparklePony inspiriert . Andere Technik als Andrei Odegovs SQL-Antwort .

Ziemlich einfacher Multi-Ersatz, aber ein paar Dinge, die helfen, Bytes zu sparen:

  • SQL erlaubt Zeilenumbrüche in der Originalzeichenfolge
  • Durch die Verwendung von Ziffern anstelle von Zeichen kann ich eine ganze Reihe von einfachen Anführungszeichen entfernen
  • Verschachtelte Ersetzungen (5 und 6), spare mir noch mehr Bytes (danke, @ t-clausen.dk)

Wenn ich nur REPLACEalles REPLACEmit etwas kürzerem machen könnte. Hmm ....

BradC
quelle
1
Wenn Sie Platz 11,12,15 mit Ihrer eigenen Methode ERSETZEN, können Sie 1 Byte speichern
t-clausen.dk
1

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

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

Versuch es

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
Zottelig
quelle
0

Ruby, 162 Bytes

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)}*?|}
Wert Tinte
quelle
0

Java, 295 Bytes / 272 259 Bytes

mit Zeilenumbrüchen alle 4 Spalten (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();}}

Probieren Sie es online

keine Newline-Version (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 für Schleifen zu 1 zusammengefasst

Probieren Sie es online

Targz
quelle
0

Japt , 158 157 Bytes

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

Probieren Sie es online!

Oliver
quelle
0

Perl 5 , 163 Bytes

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

Probieren Sie es online!

Xcali
quelle
0

Runenverzauberungen , 292 Bytes

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

Probieren Sie es online!

Ich mache im Allgemeinen keine , aber das Layout war eines, mit dem ich ohne allzu große Probleme arbeiten konnte. Runic bietet keine guten Möglichkeiten, beliebige Zeichenfolgen zu komprimieren. Wir müssen also nur mit den sich wiederholenden Teilen arbeiten.

Erläuterung:

Leicht dekomprimieren:

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

Die ersten 5 Zeilen dienen als Funktionen zum Erstellen jedes Teils des Songs (wobei die erste Zeile die 35 -für den Abstandhalter generiert, wobei der Dezimalwert verwendet wird #, um 2 Bytes darüber zu sparen 3X5+). Der Rückgabebefehl befindet sich am Anfang der Zeile, um sicherzustellen, dass alle IPs, die eine Funktion eingeben, auch die IPs verlassen die Funktion auch nach der gleichen Anzahl von Zyklen verlassen, um zu vermeiden, dass IPs zusammengeführt werden (was zu fehlenden Ausgabezeilen führt), da Programme rechteckige und leere Zellen sind sind implizit.

Die nächsten vier Zeilen sind für das Drucken der ersten vier Zeilen der Ausgabe verantwortlich

Die fünfte Zeile druckt dann die letzten 3 Zeilen der Ausgabe. Da alle drei Zeilen mit mindestens einem Zeilengruppen-Abstandhalter beginnen müssen, ist es nicht möglich, drei separate IPs zu verwenden (da sie Verzögerungen benötigen würden, um ein Zusammenführen zu vermeiden). >, y, @, Und eine Neue - Zeile - Kosten mehr Bytes (4) als 0[...](3 Bytes) , wobei ...beliebige Befehle (dh. Eine andere Zeile der Ausgabe).

Umgekehrt erfordert das Ersetzen >und @Verwenden einer einzelnen IP mehr Bytes.

Durch das Zusammenführen aller fünf Eintrittspunktzeilen in die 2. Zeile werden 5 Byte Zeilenumbruch eingespart. Wir müssen nur sicherstellen, dass der Ranch-Return-Befehl zuerst an das Ende seiner Zeile verschoben wird, wodurch die Funktionalität der Funktion erhalten bleibt.

Draco18s
quelle