Pengodean dalam lagu - Mewakili lirik musik dalam bahasa pemrograman pilihan Anda [ditutup]

13

Tulis program dalam bahasa yang Anda pilih yang ketika dibaca adalah lirik sebuah lagu. Itu harus program yang valid yang dapat dikompilasi dan dijalankan tanpa kesalahan. Meskipun Anda secara teknis dapat mencetak ke layar semua lirik, Anda didorong untuk melakukannya dengan gaya dan menghindari string literal bila memungkinkan.

Mengingat hal ini sulit dengan sendirinya, Anda diperbolehkan menulis satu bagian kode boilerplate yang tidak diperhitungkan dapat dibaca dalam lirik. Namun, setelah blok kode dimulai yang harus dibaca sebagai lirik lagu, Anda tidak dapat menyela lagu itu sampai lagu selesai. Anda dapat menunjukkan awal dan akhir kode lagu dengan komentar. Harap tentukan juga liriknya sendiri seperti Anda membaca kode. Anda bisa "liberal" dengan interpretasi Anda selama Anda tidak menyimpang terlalu jauh dari apa yang ditulis, jika tidak maka Anda akan dikenakan poin.

Lirik lagu parsial diperbolehkan, meskipun Anda mendapatkan poin ganda karena memiliki kata-kata untuk seluruh lagu. Penjurian dibagi menjadi 3 kategori:

  1. 10 poin - Orisinalitas
  2. 10 poin - Kesulitan lagu
  3. 20 poin - Representasi lagu itu dalam kode.

Untuk setiap pengiriman, saya akan memberikan skor Anda dalam komentar di bawah. Jika Anda mengedit jawaban Anda, cukup beri saya indikator komentar dan saya akan mengevaluasi kembali sesuai. Namun agar adil, setiap evaluasi ulang mengurangi 2 poin dari total skor Anda.

Contohnya mungkin sebagai berikut:

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

Yang dibaca:

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

Instrumental tidak diizinkan, orang bijak. ;)

Neil
sumber
4
Ini adalah konsep yang menarik, dan saya tertarik untuk melihat hasilnya, tetapi ini tidak terlalu objektif. Bagaimana cara menentukan 'kesulitan' lagu? (dll.)
Gaffi
3
Sangat mengingatkan saya pada pemenang IOCCC ini
ugoren
@ Gaffi, kebanyakan panjang, tetapi juga lincah. Contoh lagu yang akan skor 0 mungkin lagu ini hanya 6 kata .
Neil
Bagaimana dengan HQ9programnya 9? : P
Li-aung Yip
1
Petunjuk bagi siapa pun yang mencoba menemukan lagu yang cocok untuk pengkodean: "Escape to the Void" tampaknya menjadi judul yang menjanjikan :) - lyricstime.com/sepultura-escape-to-the-void-lyrics.html
Cristian

Jawaban:

8

Python - 8 + 4 + 15 = 27 poin

Berikut adalah beberapa bait dari The Hunting of the Snark oleh Lewis Carroll.
Ini menghitung angka, berdasarkan algoritma yang disarankan dalam puisi itu, dan menggunakannya untuk menyatakan bukti tentang suara 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))

Teks asli:

"Mengambil Tiga sebagai alasan untuk alasan—
Jumlah yang tepat untuk dinyatakan—
Kita tambahkan Tujuh, dan Sepuluh, lalu kalikan
dengan Seribu dikurangi menjadi Delapan.

"Hasil yang kita lanjutkan untuk membelah, seperti yang Anda lihat,
oleh Sembilan Ratus dan Sembilan Dua:
Kemudian kurangi Tujuh Belas, dan jawabannya harus
Benar dan benar sepenuhnya.

ugoren
sumber
Itu bagus, saya suka itu. Originality: 8/10, Song difficulty: 4/10, Representation of that song in code: 15/20, Membuat skor akhir 27. Malu Anda Anda tidak bisa menggunakan seluruh lagu.
Neil
2
Saya pikir kriteria "seluruh lagu" terlalu berat. Akan jauh lebih mudah untuk memilih lagu satu baris.
ugoren
Mengingat bahwa The Hunting of the Snark memiliki panjang lebih dari 500 baris, itu tentu saja merupakan prestasi yang mengesankan.
kotak roti
1
@breadbox, bahkan satu fit akan menjadi prestasi yang mengesankan, semuanya akan menjadi penderitaan.
ugoren
6

Python (8 + 7 + 15 = 30)

Kode Python yang valid secara sintaksis walaupun tidak melakukan hal yang berguna ;-)

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

Bagaimana seharusnya dibaca:

Saya tidak dapat mengingat apapun.
Tidak tahu apakah ini benar atau mimpi.
Jauh di lubuk hati aku merasa ingin menjerit.
Keheningan mengerikan ini menghentikan saya.
...
(Metallica - One)

ChristopheD
sumber
Wow, pilihan lagu yang sulit, tetapi sangat terkesan bagaimana Anda melakukannya. Originality: 8/10, Song difficulty: 7/10, Representation of that song in code: 15/20, Membuat skor akhir Anda 30.
Neil
5

C

Agak ceroboh, saya menulis ini sekitar 15 menit untuk cekikikan. Kompilasi dan berjalan dengan baik dengan versi terbaru G ++ / MinGW (meskipun tidak terlalu banyak). Anda bisa memikirkannya sendiri, saya pikir:

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

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

Itu Linux! lagu.

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
}

Keluaran:

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!
Pangeran John Wesley
sumber
Originality: 7/10, Song difficulty: 4/10, Representation of that song in code: 13/20. Karena Anda meletakkan seluruh lagu, itu menggandakan skor Anda, sehingga itu berarti skor akhir Anda adalah 48. Bagus :)
Neil
1

PHP

Mencoba lagu favorit saya, 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

}

Bagaimana cara membaca:

Ada seorang wanita yang yakin semua yang berkilau itu adalah emas
Dan dia membeli tangga ke surga.
Ketika dia sampai di sana dia tahu, jika bintang-bintang semua dekat
Dengan kata dia bisa mendapatkan untuk apa dia datang.
Ooh, ooh, dan dia membeli tangga ke surga.

Ada sebuah tanda di dinding tetapi dia ingin memastikan
karena kadang-kadang kata-kata memiliki dua makna.
Di sebatang pohon dekat sungai, ada seekor burung penyanyi yang bernyanyi,
Kadang-kadang semua pikiran kita disesatkan.
Ooh, itu membuatku heran,
Ooh, itu membuatku heran.

karthik
sumber
1

C

Ini lagu yang lengkap.
Anda dapat mendengarkannya di Dunia Mama Lisa .
Perhatikan bahwa lagu disertakan apa adanya, termasuk tanda baca.

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

Mencetak angka 4.

ugoren
sumber
1

Rubi

Pandangan saya pada representasi sedekat mungkin. Mudah dengan chaining panggilan 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
}

Keluaran

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

Melakukan

  1. Koma multiline (argumen)
  2. Titik multiline (panggilan metode)
cabron
sumber
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;

Ya saya tahu saya sedikit curang dan saya mungkin memiliki anggota yang menyanyikan lagu yang salah juga.

Stephen
sumber
0

C - Botol Bir

Kompilasi dan jalankan ini. Lirik dimasukkan ke dalam kode sumber. Kompilasi dan jalankan output untuk mendapatkan baris lagu berikutnya. Ketika dikatakan "Saatnya pergi ...." kemudian kompilasi dan jalankan dengan jumlah botol yang ditentukan pada baris perintah, mis:

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

Kode, diuji menggunakan 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);}
Mendesis
sumber
1
Saya tidak meminta maaf untuk seni ASCII saya!
Skizz
1
Cukup mengesankan, tetapi bagaimana itu cocok dengan tantangan? Saya pikir idenya adalah Anda dapat membaca sumbernya sebagai sebuah lagu.
ugoren
1
@ugoren: Kompilasi dan jalankan executable dengan parameter tunggal, jumlah awal bir. Kemudian program menampilkan ayat pertama dari lagu tersebut sebagai kode sumber (well, lirik di komentar teratas). Kompilasi output dan jalankan lagi untuk mendapatkan ayat berikutnya dan seterusnya.
Skizz
Sangat bagus, tetapi idenya bukan program yang mencetak lagu. Ini adalah program yang, ketika sumbernya dibaca, IS lagu.
ugoren
0

Perl melakukan Barnes & Barnes

Sejak saya pertama kali belajar Perl, saya ingin alasan untuk menggunakan -Popsi ini. Hari ini, alasan itu akhirnya tiba:

#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

Jalankan dengan -M5.010selain -Popsi, seperti:

$ perl -PM5.010 whenyoudie
goodbye
Hangup
$ 
kotak roti
sumber