Codificação na música - Representando letras de músicas em uma linguagem de programação de sua escolha [fechado]

13

Escreva um programa no idioma de sua escolha e, quando lido, será a letra de uma música. Ele deve ser um programa válido que possa ser compilado e executado sem erros. Embora você possa imprimir tecnicamente na tela todas as letras, você deve fazê-lo com estilo e evitar literais de string sempre que possível.

Dado que isso é difícil por si só, você pode escrever uma única seção do código padrão, que não conta para ser legível nas letras. No entanto, uma vez iniciado o bloco de código que deve ser lido como a letra de uma música, você não poderá interrompê-lo até que a música termine. Você pode indicar o início e o fim do código da música com comentários. Especifique também a letra como você leria o código. Você pode ser "liberal" com sua interpretação, desde que não se afaste muito do que está escrito; caso contrário, isso lhe custará pontos.

Letras de músicas parciais são permitidas, embora você receba pontos em dobro por ter as palavras de uma música inteira. O julgamento é dividido em 3 categorias:

  1. 10 pontos - Originalidade
  2. 10 pontos - dificuldade na música
  3. 20 pontos - Representação dessa música no código.

Para cada envio, apresentarei sua pontuação em um comentário abaixo. Se você editar sua resposta, me dê um indicador de comentário e eu a reavaliarei de acordo. No entanto, para ser justo, cada reavaliação subtrai 2 pontos da sua pontuação total.

Um exemplo pode ser o seguinte:

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();
    }
}

O que é lido:

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

Os instrumentais não são permitidos, espertinhos. ;)

Neil
fonte
4
Este é um conceito interessante, e estou interessado em ver os resultados, mas isso não é muito objetivo. Como se determina a 'dificuldade' da música? (etc.)
Gaffi 15/05
3
Fortemente me lembra este vencedor IOCCC
ugoren
@ Gaffi, principalmente comprimento, mas também a palavra. O exemplo de uma música com pontuação 0 pode ser de apenas 6 palavras .
Neil
E o HQ9programa 9? : P
Li-aung Yip
1
Dica para quem tenta encontrar uma música adequada para a codificação: "Escape to the Void" parece ser um título promissor :) - lyricstime.com/sepultura-escape-to-the-void-lyrics.html
Cristian Lupascu

Respostas:

8

Python - 8 + 4 + 15 = 27 pontos

Aqui estão algumas estrofes de A Caça do Snark, de Lewis Carroll.
Ele calcula um número, com base no algoritmo sugerido no poema, e o usa para declarar uma prova sobre a voz do 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))

O texto original:

"Tomando Três como o assunto para raciocinar sobre -
Um número conveniente para declarar
- Adicionamos sete e dez e depois multiplicamos
por mil diminuídos por oito.

Como resultado, passamos a dividir, como você vê,
novecentos e noventa e dois:
Subtraia dezessete, e a resposta deve ser
exata e perfeitamente verdadeira.

Ugoren
fonte
É legal, eu gosto disso. Originality: 8/10, Song difficulty: 4/10, Representation of that song in code: 15/20, Tornando a sua pontuação final 27. Vergonha você não poderia usar a música inteira.
Neil
2
Eu acho que o critério "música inteira" tem peso demais. Teria sido muito mais fácil escolher uma música de uma linha.
Ugoren
Dado que The Hunting of the Snark tem mais de 500 linhas, isso seria realmente um feito impressionante.
Breadbox
1
@breadbox, mesmo um único ajuste seria uma façanha impressionante, a coisa toda seria uma agonia.
Ugoren
6

Python (8 + 7 + 15 = 30)

Código Python válido de forma sintática, embora não faça nada particularmente útil ;-)

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

Como deve ser lido:

Não me lembro de nada.
Não posso dizer se isso é verdade ou sonho.
No fundo, sinto vontade de gritar.
Este terrível silêncio me para.
...
(Metallica - Um)

ChristopheD
fonte
Uau, difícil escolha de música, mas muito impressionado com a forma como você conseguiu isso. Originality: 8/10, Song difficulty: 7/10, Representation of that song in code: 15/20, Tornando a sua pontuação final 30.
Neil
5

C

Um tanto desleixado, escrevi isso em cerca de 15 minutos para rir. Compila e roda bem com a versão mais recente do G ++ / MinGW (apesar de não fazer muito). Você pode descobrir isso muito bem sozinho, eu acho:

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

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

É o Linux! música.

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
}

Resultado:

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
fonte
Originality: 7/10, Song difficulty: 4/10, Representation of that song in code: 13/20. Como você abaixa a música inteira, isso dobra sua pontuação, o que significa que sua pontuação final é 48. Legal. :)
Neil
1

PHP

Tentei minha música favorita, 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

}

Como é lido:

Há uma senhora que tem certeza de que tudo que brilha é ouro
E ela está comprando uma escada para o céu.
Quando ela chega lá, ela sabe, se as estrelas estão todas próximas
Com uma palavra, ela pode conseguir o que ela veio.
Ooh, ooh, e ela está comprando uma escada para o céu.

Há uma placa na parede, mas ela quer ter certeza
Porque você sabe que às vezes as palavras têm dois significados.
Em uma árvore perto do riacho, há um pássaro que canta.
Às vezes , todos os nossos pensamentos são confusos.
Ooh, isso me faz pensar,
Ooh, isso me faz pensar.

Karthik
fonte
1

C

Aqui está uma música completa.
Você pode ouvi-lo no Mama Lisa's World .
Observe que a música está incluída como está, incluindo a pontuação.

#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 o número 4.

Ugoren
fonte
1

Rubi

Minha opinião é a mais próxima possível. É fácil com o encadeamento de chamadas 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
}

Resultado

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

Façam

  1. Vírgulas multilinhas (argumentos)
  2. Pontos multilinhas (chamadas de método)
cabron
fonte
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;

Sim, eu sei que trapacei um pouco e posso ter os membros que cantaram qual linha está errada também.

Stephen
fonte
0

C - Garrafas de Cerveja

Compile e execute isso. As letras são inseridas no código fonte. Compile e execute a saída para obter a próxima linha de música. Quando diz "Hora de ir ....", compile e execute com o número de garrafas especificado na linha de comando, por exemplo:

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

O código, testado usando o 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
fonte
1
Não peço desculpas pela minha arte ASCII!
Skizz
1
Bastante impressionante, mas como isso corresponde ao desafio? Eu pensei que a idéia é que você possa ler a fonte como uma música.
Ugoren
1
@ugoren: Compile e execute o executável com um único parâmetro, o número inicial de cervejas. Em seguida, o programa exibe o primeiro verso da música como código-fonte (bem, a letra no comentário principal). Compile a saída e execute novamente para obter o próximo verso e assim por diante.
Skizz
Muito bom, mas a ideia não é um programa que imprima a música. É um programa que, quando sua fonte é lida, É a música.
Ugoren
0

Perl executa Barnes & Barnes

Desde que aprendi Perl, eu queria uma desculpa para usar o -P opção. Hoje, essa desculpa finalmente chegou:

#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

Execute-o -M5.010além da -Popção, da seguinte maneira:

$ perl -PM5.010 whenyoudie
goodbye
Hangup
$ 
caixa de pão
fonte