Viết mã trong bài hát - Thể hiện lời bài hát bằng ngôn ngữ lập trình bạn chọn [đã đóng]


13

Viết một chương trình bằng ngôn ngữ bạn chọn mà khi đọc là lời bài hát. Nó phải là một chương trình hợp lệ có thể được biên dịch và chạy mà không có lỗi. Mặc dù về mặt kỹ thuật, bạn có thể in ra màn hình tất cả lời bài hát, bạn được khuyến khích thực hiện theo phong cách và tránh các chuỗi ký tự bất cứ khi nào có thể.

Cho rằng điều này rất khó, bản thân bạn được phép viết một phần của mã soạn sẵn mà không được tính vào khả năng đọc được trong lời bài hát. Tuy nhiên, một khi khối mã bắt đầu phải được đọc làm lời cho bài hát, bạn không thể ngắt nó cho đến khi bài hát kết thúc. Bạn có thể chỉ ra phần đầu và phần cuối của mã bài hát bằng các bình luận. Vui lòng chỉ định lời bài hát như bạn sẽ đọc mã. Bạn có thể "tự do" với cách giải thích của mình miễn là bạn không đi quá xa so với những gì được viết, nếu không nó sẽ khiến bạn mất điểm.

Lời bài hát một phần được cho phép, mặc dù bạn nhận được hai điểm khi có lời cho toàn bộ bài hát. Đánh giá được chia thành 3 loại:

  1. 10 điểm - Độc đáo
  2. 10 điểm - Khó bài hát
  3. 20 điểm - Đại diện của bài hát đó trong mã.

Đối với mỗi bài nộp, tôi sẽ cho bạn điểm của bạn trong một bình luận bên dưới. Nếu bạn chỉnh sửa câu trả lời của mình, chỉ cần đưa cho tôi một chỉ báo nhận xét và tôi sẽ đánh giá lại cho phù hợp. Tuy nhiên, để công bằng, mỗi đánh giá lại trừ 2 điểm vào tổng số điểm của bạn.

Một ví dụ có thể là như sau:

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

Mà được đọc:

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

Nhạc cụ không được phép, những người khôn ngoan. ;)


4
Đây là một khái niệm thú vị và tôi rất muốn xem kết quả, nhưng điều này không khách quan lắm. Làm thế nào để xác định "độ khó" của bài hát? (v.v.)
Gaffi

3
Rất nhắc nhở tôi về người chiến thắng IOCCC này
ugoren

@Gaffi, chủ yếu là chiều dài, nhưng cũng là chữ. Ví dụ về một bài hát có điểm 0 có thể là bài hát này chỉ dài 6 từ .
Neil

Làm thế nào về HQ9chương trình 9? : P
Li-aung Yip

1
Gợi ý cho bất cứ ai đang cố gắng tìm một bài hát phù hợp để viết mã: "Escape to the Void" dường như là một tiêu đề đầy hứa hẹn :) - lyricstime.com/sepultura-escape-to-the-void-lyrics.html
Cristian Lupascu

Câu trả lời:


8

Con trăn - 8 + 4 + 15 = 27 điểm

Đây là một vài khổ thơ trong The Hunting of the Snark của Lewis Carroll.
Nó tính toán một con số, dựa trên thuật toán được đề xuất trong bài thơ và sử dụng nó để đưa ra một bằng chứng về giọng nói của 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))

Văn bản gốc:

"Lấy ba làm chủ đề cho lý do về việc
Một số thuận tiện để phát biểu ra
Chúng tôi thêm Bảy, và Mười, và sau đó nhân với
một nghìn một nghìn giảm tám.

"Kết quả chúng tôi tiến hành phân chia, như bạn thấy,
bởi Chín trăm và chín mươi hai:
Sau đó trừ đi Seventeen, và câu trả lời phải
chính xác và hoàn toàn đúng.


Thật tuyệt, tôi thích nó. Originality: 8/10, Song difficulty: 4/10, Representation of that song in code: 15/20, Làm cho thức điểm 27. Shame của bạn, bạn có thể không sử dụng toàn bộ bài hát.
Neil

2
Tôi nghĩ rằng tiêu chí "toàn bộ bài hát" có trọng lượng quá lớn. Nó sẽ dễ dàng hơn nhiều để chọn một bài hát một dòng.
ugoren

Cho rằng The Hunting of the Snark dài hơn 500 dòng, đó thực sự sẽ là một kỳ tích ấn tượng.
hộp bánh mì

1
@breadbox, thậm chí một lần phù hợp sẽ là một kỳ công ấn tượng, toàn bộ điều sẽ là một nỗi đau.
ugoren

6

Con trăn (8 + 7 + 15 = 30)

Mã Python hợp lệ đồng bộ mặc dù nó không làm bất cứ điều gì cụ thể hữu ích ;-)

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

Làm thế nào nó được đọc

Tôi không thể nhớ bất cứ điều gì.
Không thể biết điều này là đúng hay mơ.
Sâu thẳm bên trong tôi cảm thấy muốn hét lên.
Sự im lặng khủng khiếp này ngăn tôi lại.
...
(Metallica - Một)


Wow, lựa chọn bài hát khó khăn, nhưng rất ấn tượng về cách bạn thực hiện nó. Originality: 8/10, Song difficulty: 7/10, Representation of that song in code: 15/20, Nâng tỷ số cuối cùng của bạn 30.
Neil

5

C

Hơi cẩu thả, tôi đã viết cái này trong khoảng 15 phút cho những tiếng cười khúc khích. Biên dịch và chạy tốt với phiên bản G ++ / MinGW mới nhất (mặc dù không thực sự làm được gì nhiều). Bạn có thể tự mình nghĩ ra điều này tốt thôi, tôi nghĩ:

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

2

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

Đó là Linux! bài hát.

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
}

Đầu ra:

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!

Originality: 7/10, Song difficulty: 4/10, Representation of that song in code: 13/20. Vì bạn đặt toàn bộ bài hát xuống, nên nhân đôi số điểm của bạn, vì vậy điều đó có nghĩa là điểm cuối cùng của bạn là 48. Một bài hay. :)
Neil

1

PHP

Đã thử bài hát yêu thích của tôi, Nấc thang lên thiên đường.

$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

}

Nó được đọc như thế nào:

Có một người phụ nữ chắc chắn tất cả những thứ lấp lánh là vàng
Và cô ấy đang mua cầu thang lên thiên đường.
Khi cô ấy đến đó, cô ấy biết, nếu các ngôi sao đều gần gũi
Với một từ cô ấy có thể nhận được những gì cô ấy đã đến.
Ooh, ooh, và cô ấy đang mua một cầu thang lên thiên đường.

Có một dấu hiệu trên tường nhưng cô ấy muốn chắc chắn
'Vì bạn biết đôi khi các từ có hai nghĩa.
Trong một cái cây bên suối, có một con chim biết hót,
đôi khi tất cả những suy nghĩ của chúng ta đều bị đánh lừa.
Ooh, nó làm tôi tự hỏi,
Ooh, nó làm tôi tự hỏi.


1

C

Đây là một bài hát hoàn chỉnh.
Bạn có thể nghe nó trong Thế giới của Mama Lisa .
Lưu ý rằng bài hát được bao gồm nguyên trạng, bao gồm cả dấu câu.

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

In số 4.


1

Hồng ngọc

Tôi có đại diện càng gần càng tốt. Thật dễ dàng với cuộc gọi của 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
}

Đầu ra

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

Làm

  1. Dấu phẩy đa dòng (đối số)
  2. Dấu chấm đa dòng (gọi phương thức)

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;

Vâng tôi biết tôi đã lừa dối một chút và tôi có thể có những thành viên hát sai dòng nào.


0

C - Chai bia

Biên dịch và chạy này. Lời bài hát được đưa vào mã nguồn. Biên dịch và thực hiện đầu ra để có được dòng bài hát tiếp theo. Khi nó báo "Thời gian để đi ....", sau đó biên dịch và thực thi với số lượng chai được chỉ định trên dòng lệnh, ví dụ:

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

Mã, được kiểm tra bằng 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);}

1
Tôi không đưa ra lời xin lỗi cho nghệ thuật ASCII của mình!
Skizz

1
Khá ấn tượng, nhưng làm thế nào để nó phù hợp với thử thách? Tôi nghĩ ý tưởng là bạn có thể đọc nguồn như một bài hát.
ugoren

1
@ugoren: Biên dịch và chạy tệp thực thi với một tham số duy nhất, số lượng bia bắt đầu. Sau đó, chương trình xuất ra câu hát đầu tiên của bài hát dưới dạng mã nguồn (tốt, lời bài hát trong phần bình luận hàng đầu). Biên dịch đầu ra và chạy lại để có được câu thơ tiếp theo và cứ thế.
Skizz

Rất hay, nhưng ý tưởng không phải là một chương trình in bài hát. Đó là một chương trình mà khi nguồn của nó được đọc, là bài hát.
ugoren

0

Perl biểu diễn Barnes & Barnes

Ngay từ khi tôi mới học Perl, tôi đã muốn lấy cớ để sử dụng -Ptùy chọn này. Hôm nay, lý do đó cuối cùng đã đến:

#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

Chạy nó với -M5.010ngoài các -Ptùy chọn, thích như vậy:

$ perl -PM5.010 whenyoudie
goodbye
Hangup
$ 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.