甲壳虫的歌曲和六边形


30

编写两个三角形(即金字塔)形状的程序。

第一个应该是一个向上的文字三角形,其最小底边宽度为三个字符。所以它的结构像

 X
XXX

要么

  X
 XXX
XXXXX

要么

   X
  XXX
 XXXXX
XXXXXXX

或更大。每个都X将替换为实际代码中的字符,除了行终止符外,其他任何字符都可以(因此X可以为空格)。X必须将所有的都替换掉,并且需要保留有助于形成三角形的空格和换行符。

第二个程序必须具有与第一个程序相同的大小和形状,除了三角形将指向下方。

因此,如果您的第一个程序看起来像

  X
 XXX
XXXXX

然后你的第二个程序看起来像

yyyyy
 yyy
  y

每个y字符都是您需要在实际代码中填充的字符(可能与您的X代码不同)。空格和换行符在这里也必须保持不变。

您的任务是编写这些程序,以使它们各自输出(以stdout或最接近的替代音)甲壳虫乐队独特歌曲的标题,而不输入任何内容。这篇Wikipedia文章将作为我们披头士乐队的正式歌曲清单。输出应该是所列标题之一,例如I Want You (She's So Heavy)

但是,即使有奇怪的三角形程序要求,这也很容易。因此,我们将从前两个程序组成另一个程序,该程序必须输出另一个歌曲名称。

通过组合两个三角形程序中每个程序的三个副本,我们可以创建形状像六边形的第三个程序。

如果您的第一个程序的基本宽度为3,则它将如下所示:

 XyyyX
XXXyXXX
yyyXyyy
 yXXXy

如果基本宽度为5,则它将如下所示:

  XyyyyyX
 XXXyyyXXX
XXXXXyXXXXX
yyyyyXyyyyy
 yyyXXXyyy
  yXXXXXy

该程序(与其他空格和换行符一起运行时)必须输出另一个甲壳虫乐队的歌曲标题,就像前两个程序一样。也:

  • 您的三个程序必须输出不同的歌曲标题。
  • 歌曲标题长度不得超过8个字符。
  • 您只能选择之一RevolutionRevolution 1并且Revolution 9因为标题是如此相似。
  • 您必须选择三首喜欢的甲壳虫歌曲。(好吧,尝试。)

请注意,需要实际程序。不允许使用功能。也不允许在任何程序中读取自己的源代码。

如果您的第一个程序是

  A
 AAA
AAAAA

它可以输出Across the Universe

然后你的第二个程序

bbbbb
 bbb
  b

可以输出Revolution

然后合并到六角程序中

  AbbbbbA
 AAAbbbAAA
AAAAAbAAAAA
bbbbbAbbbbb
 bbbAAAbbb
  bAAAAAb

输出可能是Get Back

计分

具有最小三角形底宽的提交将获胜。在平局的情况下,其三首歌曲的总长度最大的作品将获胜。


2
当然决胜局应该是三首歌的最佳选择吗?;)
Doug McClean 2015年

1
我很难编写Python条目而不只是复制Sp3000的方法(从来没有想过我会抱怨语法空白!),但是我编写了一个脚本,将两个三角形组装成一个六边形。万一它对其他人有用,这里就是要点
蒂姆·佩德里克

@ mbomb007不是三角形模式一部分的尾部空格不正确。
加尔文的爱好

@TimPederick由于我无法使用您的六角形校正器,因此我编写了一个Python脚本以2个多行字符串开头。看看这里是否有人要使用它。
mbomb007 2015年

@ mbomb007很抱歉,但由于结尾不是标题的一部分,所以不能在结尾加上空格。(由于许多打印语句添加了一个,所以我允许在末尾使用换行符。)我不确定通常的退格策略,但我也可以接受。
加尔文的爱好

Answers:


18

GolfScript,宽度= 9个字符,标题= 33个字符

六边形

    "Let It Be"
   }";"Yeste"}";      
  "Twi""rda""Twi"
 "st an""y""st an"
"d Shout"}"d Shout"
Let It Be"Let It Be
 "Yeste"}";"Yeste"
  "rda""Twi""rda"
   "y""st an""y"
    }"d Shout"}

版画随它去吧。(9个字符)

在线尝试。

怎么运行的

"Let It Be"第一行上的令牌将字符串Let It Be压入堆栈。

第二行以开头},这是未记录的“超级注释”,将立即中止执行。

退出之前,GolfScript将打印堆栈中的内容。

X三角

    "
   }";
  "Twi"
 "st an"
"d Shout"

打印Twist和Shout。(15个字符)

在线尝试。

怎么运行的

前两行压入字符串"\n }",该命令;将从堆栈中丢弃该字符串。

剩余的行包含令牌"Twi""st an"并且"d Shout",这推动串扭曲和怒吼在三段。

退出之前,GolfScript将打印堆栈中的内容。

Y三角形

Let It Be
 "Yeste"
  "rda"
   "y"
    }

昨天打印。(9个字符)

在线尝试。

怎么运行的

该令牌LetItBe在第一行是不确定的,所以他们什么都不做。

接下来的三行包含"Yeste""rda"和标记,"y"它们将字符串Yesterday分为三部分。

}最后一行不执行任何操作; 该程序无论如何都会完成。

在退出之前,GolfScript再一次打印堆栈的内容。


21

Befunge -93,宽度= 13 15,标题= 31 24个字符

昨晚停电使我无法解决此问题,但我设法减小了三角形的宽度增加了歌曲的长度!

指向程序:“挖小马”,10个字符:

      v
     v> 
    v#  >
   "<     
  v <>"y"v>
 <v"Dig a P"
"^>:#,_@.>"no

说明

我真的利用了Befunge的环绕技巧,之所以选择“挖小马”,是因为它在第6位有一个空格。这使得程序流动通过歌曲名称。在在线解释器中尝试一下以了解其工作原理。

指向下方的程序:“如果我摔倒”,9个字符:

< v"f I Fell"
 v>"I">:#,_@
  "raC yM "
   v"Drive


       .

(句号是无关紧要的,仅包含在其他行中。)

说明

这里唯一相关的行是前两个。我使用了环绕式技巧(指令指针立即向左发送)挤进了另外一个字符。第二行打印出歌曲名称。

组合:“开车我的车”,12个字符:

      v< v"f I Fell"v
     v> v>"I">:#,_@v> 
    v#  >"raC yM "v#  >
   "<     v"Drive"<     
  v <>"y"v>     v <>"y"v>
 <v"Dig a P"   <v"Dig a P"
"^>:#,_@.>"no "^>:#,_@.>"no
< v"f I Fell"v< v"f I Fell"
 v>"I">:#,_@v> v>"I">:#,_@
  "raC yM "v#  >"raC yM "
   v"Drive"<     v"Drive
         v <>"y"v>     
        <v"Dig a P"   
       "^>:#,_@.>"no 

这是同一件事,但是增加了显示六边形和三角形的线。

       -----------------
      /v\< v"f I Fell"/v\
     /v> \v>"I">:#,_@/v> \
    /v#  >\"raC yM "/v#  >\
   /"<     \v"Drive/"<     \
  /v <>"y"v>\     /v <>"y"v>\
 /<v"Dig a P"\   /<v"Dig a P"\
/"^>:#,_@.>"no\ /"^>:#,_@.>"no\
-------------------------------
\< v"f I Fell"/v\< v"f I Fell"/
 \v>"I">:#,_@/v> \v>"I">:#,_@/
  \"raC yM "/v#  >\"raC yM "/
   \v"Drive/"<     \v"Drive/
    \     /v <>"y"v>\     /
     \   /<v"Dig a P"\   /
      \ /"^>:#,_@.>"no\ /
       -----------------

说明

这是指向下方的三角形的第三和第四行起作用的地方。两个三角形的边缘都有多个重定向,用于将指令指针移动通过这两行并将“ Drive My Car”推入堆栈。然后使用>:#,_@指向三角形中的位将其打印出来。顺便提及,同时使用了左侧右侧的三角形。

可能是使用更多的空白空间的一种方式,但我认为我的时间是在其他问题更好地度过。:P


嗯 PPCG的规则是,如果一个程序至少可以在一个解释器中运行,那么它是有效的。好地方,虽然。
El'endia Starman

PPCG的另一个“规则”是解释器定义语言,而不是规范。因此,我的Befunge代码本质上是有效的。
El'endia Starman

18

Python 2,宽度= 51

                         #print "Yellow Submarine" if id else "(Reprise)"   ##
                        #.##...............................................##.#
                       #...##.............................................##...#
                      #.....##...........................................##.....#
                     #.......##.........................................##.......#
                    #.........##.......................................##.........#
                   #...........##.....................................##...........#
                  #.............##...................................##.............#
                 #...............##.................................##...............#
                #.................##...............................##.................#
               #...................##.............................##...................#
              #.....................##...........................##.....................#
             #.......................##.........................##.......................#
            #.........................##.......................##.........................#
           #...........................##.....................##...........................#
          #.............................##...................##.............................#
         #...............................##.................##...............................#
        #.................................##...............##.................................#
       #...................................##.............##...................................#
      #.....................................##...........##.....................................#
     #.......................................##.........##.......................................#
    #.........................................##.......##.........................................#
   #...........................................##.....##...........................................#
  #.............................................##...##.............................................#
 #...............................................##.##...............................................#
print "Sgt. Pepper's Lonely Hearts Club Band",;id=0#print "Sgt. Pepper's Lonely Hearts Club Band",;id=0
print "Yellow Submarine" if id else "(Reprise)"   ##print "Yellow Submarine" if id else "(Reprise)"   #
 #...............................................##.##...............................................#
  #.............................................##...##.............................................#
   #...........................................##.....##...........................................#
    #.........................................##.......##.........................................#
     #.......................................##.........##.......................................#
      #.....................................##...........##.....................................#
       #...................................##.............##...................................#
        #.................................##...............##.................................#
         #...............................##.................##...............................#
          #.............................##...................##.............................#
           #...........................##.....................##...........................#
            #.........................##.......................##.........................#
             #.......................##.........................##.......................#
              #.....................##...........................##.....................#
               #...................##.............................##...................#
                #.................##...............................##.................#
                 #...............##.................................##...............#
                  #.............##...................................##.............#
                   #...........##.....................................##...........#
                    #.........##.......................................##.........#
                     #.......##.........................................##.......#
                      #.....##...........................................##.....#
                       #...##.............................................##...#
                        #.##...............................................##.#
                         #print "Sgt. Pepper's Lonely Hearts Club Band",;id=0#

是的,嗯... Python。

Python注释以开头#,因此大多数行只是注释。对于朝上的三角形,唯一执行的是

print "Sgt. Pepper's Lonely Hearts Club Band",;id=0

打印Sgt. Pepper's Lonely Hearts Club Band

对于向下的三角形,我们执行

print "Yellow Submarine" if id else "(Reprise)"

哪个打印出来Yellow Submarine,因为函数id是真实的。

但是,当我们组合程序时,所有发生的事情都是依次出现上述两行。由于第一行的结尾(id=0现在是虚假的),最终结果是我们将a固定(Reprise)到结尾,并获得Sgt. Pepper's Lonely Hearts Club Band (Reprise)我们的输出(Calvin 表示还可以)。


15
这让我比任何披头士乐队的歌曲都更想起帝国游行……
卡尔文的爱好

6
看到这种形状,我就能听到TIE-fighter的音效
Fatalize

@ Calvin'sHobbies哈哈哈。确实!
路易斯·门多

17

雪人1.0.2,宽度= 13

      }?}///////////}
     ///"Get Back"////
    ///////////////////
   /////////////////////
  "Sun King//"[["Sun King
 "*"BirthdaysP/"*"Birthday
"]]8AaLsP[[///"]]8AaLsP[[//
?}///////////}?}///////////
 "Get Back"////"Get Back"/
  ///////////////////////
   /////////////////////
    //"[["Sun King//"[[
     sP/"*"BirthdaysP/
      /"]]8AaLsP[[///

最后!雪人能够蓬勃发展的挑战!:D:D

斜线主要是出于美学目的,并且大多数斜线都可以用空格代替(但这会使它看起来更加无聊)。需要一些斜线以供评论。

程序A(输出:)Birthday

      }
     ///
    /////
   ///////
  "Sun King
 "*"Birthday
"]]8AaLsP[[//

这很简单。第一个字符(})设置了我们的活动变量,然后有很多注释/禁止操作。然后,它将存储该字符串"Sun King\n "并立即将其丢弃(通过*将其存储在我们从未使用过的永久性对象中)。然后存储"Birthday\n"

]]这里是空操作,因为[[ foo ]]在Snowman中是一个块注释,但是由于[[在此之前没有匹配项]](在程序A本身内),因此它什么都不做。然后8AaL抓取字符串的前8个字符,将其sP打印出来,并[[注释掉程序的其余部分(再次,因为没有匹配项]]

程序B(输出:)Get Back

?}///////////
 "Get Back"/
  /////////
   ///////
    //"[[
     sP/
      /

这也很简单。?}等价于}?简单地将所有变量设置为非活动状态,这在这里是无操作的,但稍后将再次强调)。然后,它存储字符串"Get Back",执行一堆无操作(//到行尾总是注释),并通过打印sP

完整程序

您猜它的输出是Sun King1

让我们逐行看一下:

  • 1号线

          }?}///////////}
    

    就像之前的程序一样,这将设置我们的活动变量(我们现在可以看到?需要使用,这样就不必简单地将它们打开然后再用关闭}})。该行的其余部分已被注释掉。

  • 第2-4行

         ///"Get Back"////
        ///////////////////
       /////////////////////
    

    评论...

  • 5号线

      "Sun King//"[["Sun King
    

    在这里,我们存储字符串"Sun King//",然后开始一个块注释。这实质上跳过了所有操作,直到下一个]]

  • 6号线

     "*"BirthdaysP/"*"Birthday
    

    仍在块注释中...

  • 7号线

    "]]8AaLsP[[///"]]8AaLsP[[//
    

    在这里,我们在短时间内中断了块注释,以执行代码8AaLsP。实际上,这已从程序A中重新使用。由于我选择了所有8个字母长的歌曲,因此我可以简单地对组合程序使用相同的代码。

    然后变得有些棘手。下次我们从方框注释中出现时,我们会8AaLsP再次看到。但是,这一次,所有变量都未定义(我们sp在消耗模式下称为,print摆脱了变量)。由于aal需要两个参数,并且这次只有一个(8),因此会出错并保持变量不变。

    同样,sp遇到时8,意识到它是错误的打印类型,并将变量保留原样。

  • 8-13行

    ?}///////////}?}///////////
     "Get Back"////"Get Back"/
      ///////////////////////
       /////////////////////
        //"[["Sun King//"[[
         sP/"*"BirthdaysP/
    

    仍然停留在该区块评论中...

  • 14号线

          /"]]8AaLsP[[///
    

    最后,我们尝试再次调用相同的print-first-8-chars序列,然后再次失败,并产生另外两个错误。(该8方法的变量现在8 8,这是正确的数量为变量的aal现在,但仍然没有正确的类型。)


1:以及SnowmanExceptionSTDERR的四个运行时错误,但对于每个meta来说都没有关系


The slashes are mostly for aesthetic purposes, and the majority of them can be replaced with spaces (but that would make it look a whole lot more boring)但这确实使事情变得更加难掌握……
curiousdannii 2015年

14

> <>,宽度= 11

     /"yadhtri"\ /
           v"B"/   
        ?!;>ol      
  duJ yeH" /"eduJ yeH
 o   >l?!;   o   >l?!;
staC"/"klaw staC"/"klaw
"yadhtri"\ /"yadhtri"\ 
     v"B"/       v"B"/
  ?!;>ol      ?!;>ol 
   " /"eduJ yeH" /"e
       o   >l?!;   
      staC"/"klaw 

2D语言在应对这一挑战方面度过了一段美好的时光。

向上箭头

     /


  duJ yeH
 o   >l?!;
staC"/"klaw

程序流程从左上角开始,向右移动。的/反映了,因为> <>是环形的,我们从底部出现。然后,我们再打另一个/,然后再次进行反射,然后klawstaC以字符串""模式将字符逐一推入堆栈。最后,我们向上反射并>l?!;o循环,这是在> <>中打印整个堆栈的惯用方式。

打印Catswalk

向下箭头

"yadhtri"\ 
     v"B"/
  ?!;>ol 
   " /"e

基本上是一样的,从一开始就推字符,并使用镜像和箭头指示程序流。打印Birthday

组合式

     /

  ?!;>ol      ?!;>ol 
     /"eduJ yeH" / 

相关部分在上方(我在中间剪了很多行)。使用/向上的箭头,我们向上反射并环绕,但是由于现在下面有向下的箭头,所以该代码的一部分被执行。然后,我们将相关字符推入堆栈,并重复使用向下箭头的输出循环。

打印Hey Jude


5

Python 2,大小21

该程序需要一个ANSI兼容终端(特定于DOS ANSI.SYS),因为我用于\x1b[2J清除控制台并将光标移到左上角。为了使其与其他ANSI端子兼容,请进行打印\x1b[1J\x1b[H(该尺寸仍可适合21号六角形)。我无法测试这部分,因为我没有显示ANSI转义码的终端。

我认为程序看起来很酷,类似于放射性符号(尽管ASCII阴影表示颜色是向后的)或《银河战士:狙击手》中的狙击武器图标。

确实适合17号尺寸,但我忘id=0了向上箭头。我认为我无法将其缩小,因为这必须全部集中在一行上...

同样,功劳归Sp3000使用id

          #exec('print"'       ##
         ###'\x1b[2J"+(id '   ####
        #####'and"Hey Ju'    ######
       #######'de"or"Ca'    ########
      #########'tswalk'    ##########
     ###########'")')     ############
    ##############       ##############
   ################     ################
  ##################   ##################
 #################### ####################
id=0;print"Birthday"##id=0;print"Birthday"#
exec('print"'       ##exec('print"'       #
 '\x1b[2J"+(id '   ####'\x1b[2J"+(id '   #
  'and"Hey Ju'    ######'and"Hey Ju'    #
   'de"or"Ca'    ########'de"or"Ca'    #
    'tswalk'    ##########'tswalk'    #
     '")')     ############'")')     #
      #       ###############       #
       #     #################     #
        #   ###################   #
         # ##################### #
          #id=0;print"Birthday"##

向上箭头:

          #
         ###
        #####
       #######
      #########
     ###########
    #############
   ###############
  #################
 ###################
id=0;print"Birthday",

向下箭头:

exec('print"'       #
 '\x1b[2J"+(id '   #
  'and"Hey Ju'    #
   'de"or"Ca'    #
    'tswalk'    #
     '")')     #
      #       #
       #     #
        #   #
         # #
          #

“嘿裘德”是我最喜欢的甲壳虫乐队的歌曲之一,但我真的不多。我从未听过我正在使用的另外两首歌。我经常不听这种类型的音乐。


1
1. \x1b[2J作品只有与ANSI.SYS; 它不应该在其他终端上做任何事情。另外,\x1b[;H期望在分号后有一个整数。要将行和列的默认值都设置为1,请使用\x1b[H。2. \x1b[1J\x1b[H\x1b[H\x1b[J应在所有ANSI端子上工作。3.在Linux终端上,您可以简单地使用\x1bc重置终端。4. \x1b可以用文字ESC字节替换,以帮助提高分数。
丹尼斯

@丹尼斯感谢您清理。我仍然无法提高自己的分数,因为我没有办法将向上箭头的代码分成多行。
mbomb007'9

2

C(gcc),基本宽度= 17

顶部,“嘿裘德”

        s
       ;//
      s;///
     main(//
    ){puts(//
   #define T//
  s?"Michell"//
 "e":"Hey Jud"//
"e");}///////////

在线尝试!

底部,“火柴盒”

s=1;/////////////
 #ifndef T//////
  main(){puts//
   ("Matchb"//
    "ox");}//
     # endif
      /////
       //\
        ;

在线尝试!

六角形,“米歇尔”

        ss=1;/////////////s
       ;//#ifndef T//////;//
      s;///main(){puts//s;///
     main(//("Matchb"//main(//
    ){puts(//"ox");}//){puts(//
   #define T//# endif#define T//
  s?"Michell"///////s?"Michell"//
 "e":"Hey Jud"////\"e":"Hey Jud"//
"e");}///////////;"e");}///////////
s=1;/////////////ss=1;/////////////
 #ifndef T//////;//#ifndef T//////
  main(){puts//s;///main(){puts//
   ("Matchb"//main(//("Matchb"//
    "ox");}//){puts(//"ox");}//
     # endif#define T//# endif
      /////s?"Michell"///////
       //\"e":"Hey Jud"////\
        ;"e");}///////////;

在线尝试!


1

基克,基长15

刚刚发现它不适用于mawk:/

它不是很棘手,但是在70年代长大,而甲壳虫乐队仍然无处不在,我不得不回答这个问题。首先,我认为awk不适合,但后来我想到了。

由于这些脚本包含BEGIN和/或END块,因此需要告知它们没有输入来执行END块。可以通过在启动它们后按Ctrl-D或像这样启动它们来实现:

awk -f script.awk </dev/null

我认为这更方便。echo | awk -f script.awk也会起作用,但是如果我将空行用作输入,则我将完全不同。

向上指点,无人打印(Youtube链接)

       #
      # #
     #   #
    BEGIN {
   print n?#
  #         #
 n"So Tired":#
n="For No One"}

没有注释的基本代码是这个。由于n未定义,因此如果单独调用,则打印“ For No One”。

    BEGIN {
   print n?

 n"So Tired":
n="For No One"}

指向下方,打印黑鸟

END{a="Blackb"#
 a=n?_:a"ird"#
  printf a  #
   n="I'm "#
    if(a) #
     print
      } #
       #

基本的代码是这个。如果n在未定义之前定义了if 。我在每个轨道名称后都用换行符强制执行了不错的输出,因为我有足够的空间来做,而且在控制台中看起来更好。n在过程中定义;六角形需要的。

END{a="Blackb"
 a=n?_:a"ird"
  printf a
   n="I'm "
    if(a)
     print
      }

六角形,版画我很累

       #END{a="Blackb"##
      # #a=n?_:a"ird"## #
     #   #printf a  ##   #
    BEGIN {n="I'm "#BEGIN {
   print n?#if(a) #print n?#
  #         #print#         #
 n"So Tired":#} #n"So Tired":#
n="For No One"}#n="For No One"}
END{a="Blackb"##END{a="Blackb"#
 a=n?_:a"ird"## #a=n?_:a"ird"#
  printf a  ##   #printf a  #
   n="I'm "#BEGIN {n="I'm "#
    if(a) #print n?#if(a) #
     print#         #print
      } #n"So Tired":#} #
       #n="For No One"}#

基本代码。现在终于使用了那个神秘n的东西。因为n是在第一行中定义的,所以指向上方的三角形将输出替代输出,而指向下方的三角形将输出空白。

    BEGIN {n="I'm "
   print n?

 n"So Tired":
n="For No One"}
END{a="Blackb"
 a=n?_:a"ird"
  printf a  
   n="I'm "
    if(a) 
     print
      } 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.