Codage en chanson - Représentation des paroles de musique dans un langage de programmation de votre choix [fermé]

13

Écrivez un programme dans la langue de votre choix qui, une fois lus, sont les paroles d'une chanson. Ce doit être un programme valide qui peut être compilé et exécuté sans erreur. Bien que vous puissiez techniquement imprimer à l'écran toutes les paroles, vous êtes encouragé à le faire avec style et à éviter les littéraux de chaîne chaque fois que possible.

Étant donné que cela est difficile en soi, vous êtes autorisé à écrire une seule section de code passe-partout qui ne compte pas pour être lisible dans les paroles. Cependant, une fois que le bloc de code a commencé et doit être lu comme les paroles d'une chanson, vous ne pouvez pas l'interrompre tant que la chanson n'est pas terminée. Vous pouvez indiquer le début et la fin du code de la chanson avec des commentaires. Veuillez également spécifier les paroles elles-mêmes comme si vous lisiez le code. Vous pouvez être "libéral" avec votre interprétation tant que vous ne vous éloignez pas trop de ce qui est écrit, sinon cela vous coûtera des points.

Les paroles de chansons partielles sont autorisées, bien que vous obteniez le double de points pour avoir les paroles d'une chanson entière. Le jugement est divisé en 3 catégories:

  1. 10 points - Originalité
  2. 10 points - Difficulté du chant
  3. 20 points - Représentation de cette chanson dans le code.

Pour chaque soumission, je vous donnerai votre score dans un commentaire ci-dessous. Si vous modifiez votre réponse, donnez-moi simplement un indicateur de commentaire et je le réévaluerai en conséquence. Cependant, pour être juste, chaque réévaluation soustrait 2 points de votre score total.

Un exemple pourrait être le suivant:

public class Song {
    public String play() {
        // Song begin
        try {
            if(this instanceof TheRealLife || this instanceof JustFantasy) {
                throw new InALandSlide();
            }
        } catch (InALandSlide e) {
        }
        return "No \"FromReality\"";
        // Song end
    }

    public static void main(String [] args) {
        Song song = new Song();
        song.play();
    }
}

Qui se lit:

Is this TheRealLife?
Or is this JustFantasy?
Caught InALandSlide.
No escape \"FromReality\"

Les instrumentaux ne sont pas autorisés, les gars sages. ;)

Neil
la source
4
C'est un concept intéressant, et je suis intéressé de voir les résultats, mais ce n'est pas très objectif. Comment détermine-t-on la «difficulté» de la chanson? (etc.)
Gaffi
3
Me rappelle fortement ce vainqueur de l'IOCCC
ugoren
@Gaffi, surtout la longueur, mais aussi la verbosité. Exemple d'une chanson qui marquerait 0 pourrait être cette chanson ne fait que 6 mots .
Neil
Et le HQ9programme 9? : P
Li-aung Yip
1
Astuce pour quiconque essaie de trouver une chanson appropriée pour le codage: "Escape to the Void" semble être un titre prometteur :) - lyricstime.com/sepultura-escape-to-the-void-lyrics.html
Cristian Lupascu

Réponses:

8

Python - 8 + 4 + 15 = 27 points

Voici quelques strophes de The Hunting of the Snark de Lewis Carroll.
Il calcule un nombre, basé sur l'algorithme suggéré dans le poème, et l'utilise pour énoncer une preuve sur la voix du jubjub.

class taking:
    def __init__(self, n): convenient.val = (n)
    def __enter__(self): pass
    def __exit__(self, type, value, traceback): pass
def a(x,y): x.val = y(x.val); return True
class We:
    def __init__(self): self.val=0
    def __add(self, y): return y+sum(self.x)
    def add(self, *x): self.x = x; return self.__add
    def multiply(self,x,by,diminished_by): self.val *= by-diminished_by
    def proceed2divide(self,x,by): self.val /= by
    def subtract(self,x): self.val -= x; return True
perfectly = lambda x: x and not not x
def must_be(x):
    if x: 
        print "\n".join(["Tis the %s of the Jubjub!"%["voice","note","song"][x%3] for x in range(out.val)])
        return out.val
out=convenient=as_you_see=we=then=the=We()
_ = exactly = 15
with\
\
    taking(3) as the_subject_to_reason_about:
    a(convenient, #2 state
    we.add(7,_ & 10)) and then.multiply(out,
    by=1000, diminished_by=8)

    the_result = we.proceed2divide(as_you_see,
    by=992)
    then.subtract(17) and the; answer = must_be(
    exactly and perfectly(True))

Le texte original:

"En prenant trois comme sujet de raisonnement sur -
Un nombre commode à énoncer -
Nous ajoutons sept et dix, puis nous multiplions
par mille diminués de huit.

"Le résultat que nous procédons à diviser, comme vous le voyez,
par neuf cent quatre-vingt-douze:
puis soustrayez dix-sept, et la réponse doit être
exactement et parfaitement vraie.

ugoren
la source
C'est sympa, j'aime ça. Originality: 8/10, Song difficulty: 4/10, Representation of that song in code: 15/20, Ce qui rend votre score final 27. Honte vous ne pouviez pas utiliser toute la chanson.
Neil
2
Je pense que le critère "chanson entière" a beaucoup trop de poids. Il aurait été beaucoup plus facile de choisir une chanson d'une ligne.
ugoren
Étant donné que The Hunting of the Snark fait plus de 500 lignes, cela aurait en effet été un exploit impressionnant.
boîte à pain
1
@breadbox, même un seul ajustement serait un exploit impressionnant, le tout serait une agonie.
ugoren
6

Python (8 + 7 + 15 = 30)

Code Python valide de manière synoptique bien qu'il ne fasse rien d'utile particulièrement ;-)

from sys import exit as stops ; import os
thing = [] ; me = can = remember = False ; this = open(__file__)
def terrible(v): return v

# ==== start song snippet

me = can = remember = not any(thing)
can = not this.tell(), [True, "dream"]
locals()["deep"] = {"down":{"inside":{"feel_to":"scream"}}}
if `this` + (terrible("silence")): stops(me)

# ===== end song snippet

Comment est-il censé être lu:

Je ne me souviens de rien.
Je ne peux pas dire si c'est vrai ou rêver.
Au fond de moi, je sens crier.
Ce terrible silence m'arrête.
...
(Metallica - One)

ChristopheD
la source
Wow, choix de chanson difficile, mais très impressionné par la façon dont vous avez réussi. Originality: 8/10, Song difficulty: 7/10, Representation of that song in code: 15/20, Rendant votre score final 30
Neil
5

C

Un peu bâclé, j'ai écrit ceci en environ 15 minutes pour des rires. Compile et fonctionne correctement avec la dernière version de G ++ / MinGW (ne fait pas vraiment grand-chose, cependant). Vous pouvez comprendre cela très bien par vous-même, je pense:

class Rick {

public:

    struct us { bool you; bool me; };

    bool giveYouUp()  { return false; }
    bool letYouDown() { return false; }
    bool runAround()  { return false; }
    bool desertYou()  { return false; }
    bool makeYouCry() { return false; }
    bool sayGoodbye() { return false; }
    bool tellALie()   { return false; }
    bool hurtYou()    { return false; }

    bool thinkingOf(bool whatImThinkingOf) { return whatImThinkingOf; }
    bool justWantTo(bool whatIWantToDo) { return whatIWantToDo; }
    bool tellYou(bool whatIWantToTellYou) { return whatIWantToTellYou; }

    void roll() {
        bool gonna = false;
        while (gonna) {
            giveYouUp();
            letYouDown();
            gonna = (runAround() && desertYou());
            makeYouCry();
            sayGoodbye();
            gonna = (tellALie() && hurtYou());
        }

        bool strangersToLove = true;
        us we = {!strangersToLove, !strangersToLove};

        bool knowTheRules = true;
        bool you = knowTheRules, I = knowTheRules;

        bool aFullCommitment = true;
        we.me = thinkingOf(aFullCommitment);

        int me = 0;
        Rick* guys[] = {this, nullptr, nullptr, nullptr, nullptr};

        bool howImFeeling = true;
        we.me = justWantTo(tellYou(howImFeeling));

        bool understand = true;
        while (we.you != understand) {
            we.you = understand;
        }
    }

};

int main() {
    Rick rick;
    rick.roll();

    return 0;
}
Stuntddude
la source
2

Scala (48 = 2 * (7 + 4 + 13))

C'est Linux! chanson.

object Song extends App {
  // Compose a song
  trait Compose {
    override def toString = {
      val token = """^.*\$(.*)\$.*$""".r
      val token(verse) = super.toString
      verse.replaceAll("([a-z])([A-Z])", "$1 $2").capitalize
    }
    def excl(ex: String) = println(this + ex)
    def !!(c: Compose) = { excl("."); c }
    def ***(c: Compose) = { excl("..."); c }
    def !(c: Compose) = { excl("!"); c }
    def *(c: Compose) = { excl(","); c }
    def ! = excl("!")
  }
  // It's linux  - lyrics
  case object ItBootsUpFine extends Compose
  case object AllOfTheTime extends Compose
  case object TuxThePenguinIsGreat extends Compose
  case object aPieInTheFace extends Compose
  case object ToTheManIHate extends Compose
  case object EveryoneKnowsItsLinux extends Compose
  case object StableForYouAndMe extends Compose
  case object ItsLinux extends Compose
  case object NoMoreBSODs extends Compose
  case object BetterThanNT extends Compose
  case object BestOfAllItsFree extends Compose
  case object FreeSoftwareForYouAndMe extends Compose
  case object LinuxGPLd extends Compose

  // Singer to sing a song
  def sing(song: => Unit) = { song }

  // Song begins
  sing {
      ItBootsUpFine!
      AllOfTheTime!!
      TuxThePenguinIsGreat!
      aPieInTheFace*
      ToTheManIHate***
      EveryoneKnowsItsLinux!
      ItsLinux!
      ItsLinux!
      StableForYouAndMe!
      ItsLinux!
      ItsLinux!
      NoMoreBSODs!
      ItsLinux!
      ItsLinux!
      BetterThanNT!
      ItsLinux!
      ItsLinux!
      BestOfAllItsFree!
      FreeSoftwareForYouAndMe***
      LinuxGPLd!
  }
  // Song ends
}

Production:

It Boots Up Fine!
All Of The Time.
A Pie In The Face,
Tux The Penguin Is Great!
To The Man IHate...
Everyone Knows Its Linux!
Its Linux!
Its Linux!
Stable For You And Me!
Its Linux!
Its Linux!
No More BSODs!
Its Linux!
Its Linux!
Better Than NT!
Its Linux!
Its Linux!
Best Of All Its Free!
Free Software For You And Me...
Linux GPLd!
Prince John Wesley
la source
Originality: 7/10, Song difficulty: 4/10 , Representation of that song in code: 13/20. Puisque vous mettez la chanson entière, cela double votre score, ce qui signifie que votre score final est de 48. Sympa. :)
Neil
1

PHP

J'ai essayé ma chanson préférée, Stairway to Heaven.

$GLOBALS['sign']= 'words';

class lady extends me // there is a lady
{
  function __construct(){   // who is sure
    global $glitters = 'gold'; // all that glitters is gold
    $buy('stairway_to_heaven'); // and shes buying the stairway to heaven
  }
  $know[] = 'stars are close'; // when she get's there she knows, the stars are close
  function word(){  // with a word she can get
    debug_backtrace(); // what she come for
  }

  $this->buy('stairway_to_heaven'); // and she's buying the stairway to heaven

  $sign = 'words'; // there is a sign on the door
  if(!$sign === $GLOBALS['sign']) // but she want to be sure, cause you know sometimes words have 2 meanings
    exit();

  in_array($tree / $brook, $songbird ? 'sings'); // (literal) in a tree by the brook, there is a songbird who sings

  mysql_real_escape_string($_GET['thoughts']); // sometimes all of our thoughts are misgiven
  for ($i=0;$i<2;i++)
    parent::wonder(); // makes me wonder , makes me wonder

}

Comment est-il lu:

Il y a une dame qui est sûre que tout ce qui brille est de l'or
Et elle achète un escalier vers le ciel.
Quand elle y arrive, elle sait, si les étoiles sont toutes proches
Avec un mot, elle peut obtenir ce qu'elle est venue chercher.
Ooh, ooh, et elle achète un escalier vers le ciel.

Il y a un signe sur le mur mais elle veut être sûre
Parce que tu sais parfois les mots ont deux sens.
Dans un arbre près du ruisseau, il y a un oiseau chanteur qui chante,
Parfois toutes nos pensées sont trompeuses.
Ooh, ça me fait me demander,
Ooh, ça me fait me demander.

karthik
la source
1

C

Voici une chanson complète.
Vous pouvez l'écouter dans Mama Lisa's World .
Notez que la chanson est incluse telle quelle, y compris la ponctuation.

#define breath,
#define smell breath
#define an;}Englishman; main(){printf("%d\n",sizeof
struct x{int
// Song starts here
Fee, fa, fie, fo, fum,
I smell the breath of an Englishman.
// Song ends here
I);}

Imprime le chiffre 4.

ugoren
la source
1

Rubis

Ma vision d'une représentation aussi proche que possible. C'est facile avec le chaînage d'appels de Ruby.

$lines = []

def thisline n=2
    caller(n).first.match(/:(\d+):/)[1].to_i
end

class Chain < Array
    def method_missing method, *args
        $lines[thisline] = Chain[first, self[1], [method, thisline, args]]
    end

    def -(arg)
        $lines[thisline] = Chain[' - ', thisline, self, arg]
    end

    def tokens
        if size < 3
            if first == :_
                []
            else
                [first.to_s.tr(?_, ?\s).strip]
            end
        elsif size < 4
            [first.to_s.tr(?_, ?\s)] + at(2).tokens
        else
            lhs = case el = at(2)
            when Chain then el.tokens
            when String
                el.empty? ? [?'] : [?', el, ?']
            end

            rhs = case el = at(3)
            when Chain then el.tokens
            when Range then el.first.tokens + ['... '] + el.last.tokens
            end

            lhs + [first.to_s.tr(?_, ?\s)] + rhs
        end
    end
end

def self.method_missing method, *args
    line = thisline(3)

    if args.length > 1
        newlines = args.first.is_a?(String) ? args.first.count(?\n) : 0
        $lines[line] = false
        $lines[line-newlines] = Chain[method, line, Chain[', ', line, *args]]
    else
        $lines[line] = Chain[method, line, *args]
    end
end

####################

The pest in_the eyes of death follows us
Through the dirty streets of blood
It begins to eat inside us, decaying_our_bones
How will we escape_if the void covers our lungs?
We are buried_in the spewed trash_for ourselves

Blood _, pain - nothing_to_say
Why then_- must_we_die?

Escape to the void
Escape to the void

I look at my face on the other side of the mirror
My face falls down_in pieces full of worms
I burst my rotten heart with my own hands
I'm dying and I can',t_help_myself

Blood _, pain - nothing_to_say
Why then_- must_we_die?

What have I been running from?
I'',m_not_guilty
You've shown me the worst way
Cause you',re_my_victim... the_next_one

The pest in_the eyes of death follows us
Through the dirty streets of blood
It begins to eat inside us, decaying_our_bones
How will we escape if_the void covers our lungs?
We are buried in_the spewed trash_for ourselves

Blood _, pain - nothing_to_say
Why then_ - must_we_die?

Escape to the void
Escape to the void

####################

$lines.drop_while {|line| !line }.each_with_index {|line, i|
    puts if line.nil?
    next if not line

    line = line.tokens
    line.map!.with_index {|el, j|
        punct = [', ', ' - ', '... ', ?']

        if line[j-1] == ?' and el == ', '
            ''
        elsif punct.include?(el) or punct.include?(line[j+1])
            el
        else
            el + ?\s
        end
    }

    puts line.join
}

Production

The pest in the eyes of death follows us 
Through the dirty streets of blood 
It begins to eat inside us, decaying our bones 
How will we escape if the void covers our lungs? 
We are buried in the spewed trash for ourselves 

Blood, pain - nothing to say 
Why then - must we die? 

Escape to the void 
Escape to the void 

I look at my face on the other side of the mirror 
My face falls down in pieces full of worms 
I burst my rotten heart with my own hands 
I'm dying and I can't help myself 

Blood, pain - nothing to say 
Why then - must we die? 

What have I been running from? 
I'm not guilty 
You've shown me the worst way
Cause you're my victim... the next one 

The pest in the eyes of death follows us 
Through the dirty streets of blood 
It begins to eat inside us, decaying our bones 
How will we escape if the void covers our lungs? 
We are buried in the spewed trash for ourselves 

Blood, pain - nothing to say 
Why then - must we die? 

Escape to the void 
Escape to the void

Faire

  1. Virgules multilignes (arguments)
  2. Points multilignes (appels de méthode)
cabron
la source
0

T-SQL Bone Thugs-N-Harmony

DECLARE @line1 varchar(25);
DECLARE @line2 varchar(25);
DECLARE @line4 varchar(25);
DECLARE @line5 varchar(25);

SET @line1 = 'Wake up, wake up, wake up,';
SET @line2 = 'its the';
SET @line4 = 'to get up, get up get up';
SET @line5 = 'so cash your checks and get up';

SELECT @line1 as Layzie, @line2 as Bizzy,
CONVERT(date,DATEADD(day, -
(SELECT
DATEPART(day, GETDATE()) 
- 1), GETDATE())) as FirstOfTheMonth,
@line4 as Layzie, @line5 as Bizzy;

Oui, je sais que j'ai un peu triché et je pourrais aussi avoir des membres qui ont chanté la mauvaise phrase.

Stephen
la source
0

C - Bouteilles de bière

Compilez et exécutez ceci. Les paroles sont mises dans le code source. Compilez et exécutez la sortie pour obtenir la prochaine ligne de morceau. Quand il dit "Time to go ...." alors compilez et exécutez avec le nombre de bouteilles spécifié sur la ligne de commande, par exemple:

cl prog.c
prog 32 > prog1.c
cl prog1.c
prog1 > .... etc

Le code, testé avec VS2005: -

// Time to go to the shop and get some beer
//
//
//
//
// #####.#####.#####.#####.#####.#####.#####
// ##.#####.#####.#####.#####.#####.#####.##
// #####.#####.#####.#####.#####.#####.#####
// ##.#####.#####.#####.#####.#####.#####.##

char *z [] = {
"void l(char *s,int b){int i;printf(\"// \");for(i=0;i<b;++i)printf(s);",
"printf(\"\\n\");}\nint main(int argc, char *argv[]){\nint i,j,k,x=%d;",
"char*p;\nif(!x&&argc==2)x=atoi(argv[1]);\nif(!x){printf(\"// Time to ",
"go to the shop and get some beer\\n//\\n//\\n//\\n//\\n\");k=7;\n",
"}else{printf(\"// %%d bottles of beer on the wall, %%d bottles of beer",
".\\n\",x,x);printf(\"// Take one down and pass it round, \");\n",
"if(x>1)printf(\"%%d bottles of beer on the wall.\\n//\\n\",x-1);\n",
"else printf(\"no more bottles of beer on the wall.\\n//\\n\");\n",
"k=x>2?x:2;l(\"  ^   \",x);l(\" / \\\\  \",x);l(\"/   \\\\ \",x);",
"l(\"|   | \",x);l(\"|Duf| \",x);l(\"|   | \",x);l(\"----- \",x);}\n",
"for(i=0;i<4;++i){\nprintf(\"// %%s\", i&1 ? \"##.\" : \"\");\n",
"for(j=i&1;j<k;++j)\nprintf(\"%%s#####\",j!=(i&1)?\".\":\"\");\n",
"printf(\"%%s\\n\",i&1?\".##\":\"\");}\nprintf(\"\\nchar *z [] = {\\n\");\n",
"for(i=0;i<sizeof z/sizeof z[0];++i){\nprintf(\"\\\"\");\n",
"for(p=z[i];*p;++p)\nswitch (*p){\ncase '\\n':printf(\"\\\\n\");break;\n",
"case '\\\\':printf(\"%%c%%c\",92,92);break;\n",
"case '%%':printf(\"%%c\",37);break;\ncase '\"':printf(\"%%c%%c\",92,'\"');break;\n",
"default:printf(\"%%c\", *p);break;}\nprintf(\"\\\",\\n\");}\n",
"printf(\"};\\n\");\nfor(i=0;i<sizeof z/sizeof z[0];++i)\n",
"printf(z[i],x?x-1:0);}\n",
};
void l(char *s,int b){int i;printf("// ");for(i=0;i<b;++i)printf(s);printf("\n");}
int main(int argc, char *argv[]){
int i,j,k,x=0;char*p;
if(!x&&argc==2)x=atoi(argv[1]);
if(!x){printf("// Time to go to the shop and get some beer\n//\n//\n//\n//\n");k=7;
}else{printf("// %d bottles of beer on the wall, %d bottles of beer.\n",x,x);printf("// Take one down and pass it round, ");
if(x>1)printf("%d bottles of beer on the wall.\n//\n",x-1);
else printf("no more bottles of beer on the wall.\n//\n");
k=x>2?x:2;l("  ^   ",x);l(" / \\  ",x);l("/   \\ ",x);l("|   | ",x);l("|Duf| ",x);l("|   | ",x);l("----- ",x);}
for(i=0;i<4;++i){
printf("// %s", i&1 ? "##." : "");
for(j=i&1;j<k;++j)
printf("%s#####",j!=(i&1)?".":"");
printf("%s\n",i&1?".##":"");}
printf("\nchar *z [] = {\n");
for(i=0;i<sizeof z/sizeof z[0];++i){
printf("\"");
for(p=z[i];*p;++p)
switch (*p){
case '\n':printf("\\n");break;
case '\\':printf("%c%c",92,92);break;
case '%':printf("%c",37);break;
case '"':printf("%c%c",92,'"');break;
default:printf("%c", *p);break;}
printf("\",\n");}
printf("};\n");
for(i=0;i<sizeof z/sizeof z[0];++i)
printf(z[i],x?x-1:0);}
Skizz
la source
1
Je ne m'excuse pas pour mon art ASCII!
Skizz
1
Assez impressionnant, mais comment correspond-il au défi? Je pensais que l'idée était que vous puissiez lire la source comme une chanson.
ugoren
1
@ugoren: compilez et exécutez l'exécutable avec un seul paramètre, le nombre de bières de départ. Ensuite, le programme sort le premier couplet de la chanson en tant que code source (enfin, les paroles dans le premier commentaire). Compilez la sortie et exécutez à nouveau pour obtenir le verset suivant et ainsi de suite.
Skizz
Très bien, mais l'idée n'est pas un programme qui imprime la chanson. C'est un programme qui, quand sa source est lue, EST la chanson.
ugoren
0

Perl interprète Barnes & Barnes

Depuis que j'ai appris Perl pour la première fois, je voulais une excuse pour utiliser cette -Poption. Aujourd'hui, cette excuse est enfin arrivée:

#define cry $$
#define people $_
#define some kill
#define we people
#define whenyoudie END
sub yeah{}

# "When You Die", Barnes & Barnes

whenyoudie { you stop drinking beer }
whenyoudie { you stop being here }
whenyoudie { some people,cry }
whenyoudie { we=say "goodbye" }

                yeah

Exécutez-le avec -M5.010en plus de l' -Poption, comme ceci:

$ perl -PM5.010 whenyoudie
goodbye
Hangup
$ 
boite à pain
la source