首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >代码Golf: 2D平台

代码Golf: 2D平台
EN

Stack Overflow用户
提问于 2010-07-04 01:28:05
回答 1查看 2.2K关注 0票数 26

挑战

  • 达到水平的末尾!
  • 加值点,如果你击中每一个(C)燕麦块正好2次。

不允许

  • 以任何方式硬编码命令序列。
  • "One character language"恰好做了一件事情,那就是解决这个高尔夫。

如何操作

您的程序通过标准输入接收下面的级别(没有换行)。

然后,它必须打印出成功完成该级别所需的命令。

水平

  • S是你的起点。
  • E你需要进入的位置来完成这个级别。
  • C是一个有两个硬币的硬币块,你永远不必跳过其中的一个来完成这个级别。
  • C_都算作地面,只有坚实的地面,没有浮动平台。
  • |是一堵墙,所有你需要跳起来才能完成这个级别的墙都是最高一堵墙高的,任何更高的东西你都可以认为是一个你无法走出的深渊。
  • x是尖峰,如果你碰它们会发生什么。尖峰总是在围绕着它们的地面以下的一个水平。

所有的层次都有4条线高,每条线的63字符宽。这使得每个级别总共有252个字符。

代码语言:javascript
复制
>                       ______  ____       ________  ___        <
>    C            ______|    |  |  |  C  __|      |  | |   ____E<
>S______  __  ____|          |  |  |_____|        |__| |___|    <
>       xx  xx                xx                                <

注释: ><只是为了说明边框,它们是而不是程序输入中包含的。也要小心你的文本编辑器,因为我的很多次都把空格搞砸了。

命令

  • M =把你移到右边,如果你下面没有地面,你就会摔倒,直到你撞到它为止。当你跌倒时,你不能移动
  • J =跳转,在接下来的3个命令中将你移动1,或者直到你到达一个(C)oin块。在那之后,你会跌倒,直到你到达地面。你只能在地上跳。如果一个M将你带到与地面相同的水平,那么跳转就会得到canceled.
  • O = NOP,会让你等待/什么都不做。这样你就可以跳过一个街区宽的洞和刺(上面的水平你不需要这个,但是如果你能解决需要这个的等级,你会得到额外的分数)。

解决方案(用硬币块)

连续的命令互相堆叠在一起。

F表示您将坠落的位置(请记住,您在坠落时不能做任何事情),

代码语言:javascript
复制
                            MMMF                 MMMF            
    M                 MMMMMMJ  MMMMF M   MMMMMMMMJ  MMMF        
M   J MMMFMMMF  MMMMMMJ|    |  |  |F J MMJ|      |  | |F MMMMME
SMMMJMJ  MJ  MMMJ|          |  |  |MMJMJ|        |__| |MMJ|    
       xx  xx                xx                                

生成的命令序列,75个字符长:

代码语言:javascript
复制
MMMMJJMMJMMMMJMMMMMMJMMMMMMJMMMMMMJMMMMMMMMMJJMMJMMJMMMMMMMMJMMMMMMMMJMMMMM

希望这能带来一些有趣的结果..。而不是成吨的火焰

编辑

好吧,有比我最初想象的更多的可能性,我为所有的编辑道歉。

EN

回答 1

Stack Overflow用户

发布于 2010-07-04 22:49:52

C- 275字节(DOS行尾)

代码语言:javascript
复制
#define A(B,C)!memcmp(p+1,B,C)
#define P printf
char*p,l[318],k=63;f(){P("M");++p;while(*p<33)p+=k;}main(){read(0,l+k,4*k);p=strchr(l+k,83);while(*p!=69)p[-k]==67?(P("JJM"),++p):(p[1-k]>94?(P("JM"),p+=1-k):(A("  _",3)?(P("JMMM"),p+=3):(A(" _",2)?(P("JMMO"),p+=2):f())));}

这满足了一个字符的差距,和情况下,球员是走在最顶端的水平。如果你不关心那两个案子,你可以省点钱。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3173415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档