Tout le monde connaît probablement la chanson suivante , qui est une tournée musicale :
Contexte
Moins de gens se souviendront d'avoir essayé de chanter la version à 4 personnes avec quelques amis et d'avoir échoué. Compenser les paroles d'une chanson avec des hauteurs harmonieuses différentes est connu comme chanter un "round" et c'est ce que nous sommes ici pour simuler aujourd'hui en utilisant une sortie statique. Voici un exemple de quelqu'un qui exécute réellement la pièce (lien vers audio / vidéo, aura du son) .
Le défi
Ce défi consiste à produire le texte comme suit exactement comme suit:
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.
Règles
- Les espaces vides sont acceptables, mais pas obligatoires, cela inclut les retours à la ligne.
- Les tirets et les barres font partie de la sortie requise, oui.
- Des virgules, des points, des majuscules et tous les éléments syntaxiques liés à la grammaire sont requis.
C'est le code-golf , le code comptant le moins d'octets sans utiliser de failles standard est le gagnant.
code-golf
kolmogorov-complexity
Urne de poulpe magique
la source
la source
Réponses:
05AB1E ,
8077 octetsEssayez-le en ligne!
Travail en cours.
la source
ª
? Peu importe, phrase encadrée, brillante.vy
peut êtreʒ
de sauvegarder un octet.V ,
139, 128 octetsUn one-liner! (sortof: P)
Essayez-le en ligne!
Hexdump:
Puis-je obtenir des points bonus pour avoir atterri exactement
2^7
?Cela a pris du temps à comprendre. J'espère pouvoir jouer des tonnes comme ma réponse d'art ASCII au clavier, mais je ne suis pas sûr. Nous verrons. Ce sont des défis très similaires (et tous deux très amusants: D)
À l'origine, j'ai essayé ceci (180):
Essayez-le en ligne!
Ce qui insère ceci:
puis fait la substitution pour l'étendre. Mais le construire en style ascii-art est beaucoup plus court (et plus amusant TBH)
la source
0^(2^7)
des points bonus pour atterrir sur2^7
haha. Première réflexion intéressante sur la version 180.Lot,
292288275 octetsEdit: économisé 13 octets en réécrivant le code pour utiliser une version de l'astuce de sous-chaîne que j'ai utilisée dans ma réponse Retina. Idéalement, je peux boucler six fois, puis tomber pour une septième itération du corps de la boucle, ce qui signifie que la citation nécessaire pour sortir
|
s ne devient pas trop onéreuse, mais je dois faire attention à prendre^
en compte les s lors de la sélection de la sous-chaîne .la source
Python 3,
252235208206205 205 octetsD'accord d'accord. Voici une réponse moins ennuyeuse:
Ancienne réponse, 252 octets:
Réponse ennuyeuse, et l'autre réponse Python est plus courte, mais j'ai pensé essayer si cette approche était plus courte. Python 3 malgré les économies de différence d'octet / chaîne 2-3 car les deux
gzip
etbase64
sont plus timides en Python 2.la source
PowerShell ,
224207202 octetsEssayez-le en ligne! (la sortie est enveloppée si votre écran n'est pas assez large)
Bon sang, cette génération de tableaux est moche, mais elle a économisé 17 octets, alors ...
Nous bouclons de
0
à6
. Chaque itération, nous indexons dans un tableau(0,1,2,3,4,4,4)
. L'indexation est basée sur le chiffre actuel, le chiffre actuel+6
, cela-1
, puis cela-1
. Chacun d' eux est ensuite alimenté à travers une boucle avec laquelle nous modulons%7
. Par exemple, si nous sommes sur0
de la partie extérieure en0..6
boucle, puis ceux - ci seraient0,6,5,4
, chacun%7
, donc0,6,5,4
. C'est indexé dans le(0,1,2,3,4,4,4)
tableau, donc la sortie est0,4,4,4
. Pour l'entrée,1
nous obtenons1,7,6,5
alors1,0,6,5
ce qui donne1,0,4,4
. Etc. (les choses seraient tellement plus faciles si nous avions une.clamp
fonction)Ce sont des crachats un à un dans une boucle
|%{}
. À chaque itération, nous indexons au bon endroit dans le tableau des paroles de chansons et laissons cette chaîne dans le pipeline. Ces chaînes sont ensuite-join
éditées avec|
pour formater la ligne de sortie. Ces chaînes sont laissées sur le pipeline et la sortie est implicite.Enregistré quelques octets grâce à Value Ink.
la source
$a
enregistré 11 espaces, vous pouvez modifier la quatrième ligne pour qu'elle se termine par$a
plus de 4 espaces au lieu de$(' '*15)
-3 octets, oui?JavaScript (ES8),
285256240231229217214213211210 octetsÉconomisé quelques octets en empruntant une astuce à la réponse d' Arnauld
Essayez-le
la source
'0444,1044,2104,3210,4321,4432,4443'.split
,.map
vous fait économiser 10 octets. De plus,padEnd
ne fait pas partie d'ES6, ni même d'ES7.PHP, 191 octets
Essayez-le en ligne!
Étendu
la source
Python 2 , 199 octets
Essayez-le en ligne!
Merci à @mathjunkie pour avoir économisé 14 octets
la source
'Merrily, merrily, merrily, merrily,'
pourrait avoir('merrily, '*4).capitalize()
raison? Ou n'est-ce pas Python?'Merrily,'+' merrily,'*3
CJam ,
128122 octetsEssayez-le en ligne!
Explication
la source
SOGL , 83 octets
La 1ère partie
┌׀0ρMVxDrž|⁷ΨB≈π93|↑D~Νķ‰¤t╤▼ΣΗ⁶⅔¾№⁷Ζ÷│²╥Ν9°‘
est une chaîne compressée résultant enCe sont les lignes inversées (puisqu'il s'agit de les imprimer ligne par ligne), la partie "gaiement" étant découpée pour être remplacée dans le programme.
Le reste du programme:
la source
/// , 200 octets
Essayez-le en ligne!
Simple, utilise des occurrences courantes comme remplacements.
la source
PHP, 179 octets:
non golfé
la source
JavaScript (ECMAScript 2017),
191187182 octetsEnregistré 3 octets grâce à Shaggy
la source
'Merrily,'+' merrily,'.repeat(3)
sauve un octet.padEnd
n'est pas dans ES7, encore moins ES6.M${s='errily, '}m${s}m${s}m
au lieu d'M${s='errily,'} m${s} m${s} m
enregistrer 2 octets"Merrily,"+(s=" merrily,")+s+s
.Serveur Microsoft SQL, 421 octets
Vérifiez-le en ligne
la source
C (GCC),
231230octets-1 octet grâce au plafond!
Assez simple. Tout d'abord, il construit le tableau de chaînes de 7 lignes, une partie via une macro pour factoriser la partie "joyeusement", puis les lignes de tirets sont remplies d'un
memset
. Ensuite, les lignes sont imprimées avec le décalage et les séparateurs adéquats.Essayez-le en ligne!
la source
MATLAB, 280 octets
L'indexation des tableaux de cellules est assez coûteuse, ce qui semble être l'endroit le plus simple pour supprimer certains octets (si possible).
la source
Rétine ,
153150 octetsEssayez-le en ligne!
J'ai essayé un encodage arbitraire mais
$1$*$2
je ne fais pas ce que je veux et la répétition des chaînes s'est avérée trop délicate. Edit: enregistré 2 octets en encodanterrily,
et 1 octet en supprimant un inutile^
.la source
Python 2, 225 octets
Essayez-le en ligne!
la source
Perl 5 , 215 octets
Essayez-le en ligne!
la source
Swift ,
416406405380372307 octetsVous pouvez l'essayer ici .
Merci à @Mr. Xcoder pour m'avoir sauvé 65 octets!
la source
f
ce qui suitvar f=String.init(repeating:count:)
print(o())
, vous devez simplement appelero()
parce que vous avez uneprint
déclaration à l'intérieur, ce qui donne un()
à la fin de la sortieT-SQL,
296 277276 octetsLes sauts de ligne au début font partie de la chaîne d'origine, les sauts de ligne près de la fin sont uniquement à des fins d'affichage et ne sont pas comptés dans le total d'octets.
Inspiré en grande partie par la réponse de Conrade SparklePony . Technique différente de la réponse SQL d' Andrei Odegov .
Multi-remplacement assez simple, mais quelques éléments qui permettent d'économiser des octets:
Si seulement je pouvais
REPLACE
tous lesREPLACE
s avec quelque chose de plus court. Hmm ....la source
Japt
-R
,99959492908987 octetsEssayez-le
la source
Rubis, 162 octets
la source
Java, 295 octets /
272259 octetsavec des nouvelles lignes toutes les 4 colonnes (295b)
Essayez-le en ligne
pas de nouvelle version (259b):
Essayez-le en ligne
la source
Japt ,
158157 bytesEssayez-le en ligne!
la source
Stax , 63 octets
Exécuter et déboguer
la source
Perl 5 , 163 octets
Essayez-le en ligne!
la source
Enchantements runiques , 292 octets
Essayez-le en ligne!
Je ne fais généralement pas de défis de complexité kolmogorov , mais la mise en page était celle avec laquelle je pouvais travailler sans trop de problèmes. Runic n'a pas de bons moyens pour compresser des chaînes arbitraires, donc tout ce que nous avons à faire, ce sont les parties répétitives.
Explication:
Décompresser légèrement:
Les 5 premières lignes agissent comme des fonctions pour construire chaque partie du morceau (où la première ligne génère les 35
-
pour l'espaceur en utilisant la valeur décimale de#
pour enregistrer 2 octets3X5+
). L'instruction de retour est au début de la ligne pour s'assurer que toutes les adresses IP qui entrent dans une fonction quitteront également la fonction après le même nombre de cycles pour éviter la fusion des adresses IP (entraînant des lignes de sortie manquantes), car les programmes sont des cellules rectangulaires et vides. sont implicites.Les quatre lignes suivantes sont responsables de l'impression des quatre premières lignes de la sortie
La cinquième ligne imprime ensuite les 3 dernières lignes de sortie. Étant donné que les trois lignes doivent commencer avec au moins un espaceur de strophe, il n'est pas possible d'utiliser 3 adresses IP distinctes (car elles auraient besoin de retards pour éviter la fusion).
>
,y
,@
, Et un coût plus d' octets de saut de ligne (4) à0[...]
(3 octets) , où...
est instructions arbitraires ( par exemple un autre. Ligne de sortie).Inversement remplaçant
>
et@
utilisation d'une seule IP nécessitent plus d'octets.Enfin, la fusion des cinq lignes d'entrée sur la 2e ligne permet d'économiser 5 octets de sauts de ligne. Nous devons juste nous assurer que l'
B͍
instruction de retour de ranch passe d'abord à la fin de sa ligne, préservant ainsi la fonctionnalité de la fonction.la source