创建落球图


16

介绍

对于以前从未听说过该游戏的人。您正在打一个需要尽可能长久生存的球。这是通过向左或向右移动,然后转到孔来完成的。由于地图向上移动,因此您需要向下移动才能生存更长的时间。如果您搜索图像,您可能知道我的意思是哪个游戏。

任务

给定正整数n,输出n层的下降球图。在各层之间,有4条换行符。层的宽度由25个下划线字符组成,其中一个孔的长度为5。这意味着总宽度等于30。在每个层之后随机地移动该宽度。有效层的示例是:

_______________     __________

孔也可以在边缘,就像该层像圆柱一样:

  _________________________   

请注意,有2个前导空格和3个尾随空格。制作单曲宽度5的孔。

测试用例

对于n = 4,这是有效的输出:

_______________     __________





______     ___________________





_______________________     __





  _________________________

注意:孔必须均匀分布。尾随和/或前导换行符是允许的。

这是,因此,字节数最少的提交将获胜!


1
@ DonMuesli Haha,任何人都可能发生:p
Adnan

Answers:


7

Pyth,19个字节

VQ.>+*\_25*d5O30*b4

在这里尝试!

说明

VQ。> + * \ _ 25 * d5O30 * b4#Q =输入

VQ#重复Q次
     * \ _ 25#25下划线
          * d5#5个空格
    +#强调下划线和空格
  。> O25#将此字符串旋转0-29次
                * b4#打印单独的换行符

4

红宝石,74 71 59

感谢Alex A.提醒我基本上是一行代表我可以使用稳定的lambda

f=->n{n.times{puts (('_'*25+' '*5)*2)[rand(30),30]+"\n"*5}}

puts在末尾添加一个换行符(而Ruby print没有),因此它已更新为5换行符。
价值墨水

所有人都赞美times我在for循环中为我节省3个字节的功能:D
值墨

1
57字节:->n{n.times{puts (('_'*25+' '*5)*2)[rand(30),30]+"\n"*5}} 尝试在这里
Alex A.

您不需要在提交中分配lambda,因为我们不需要命名函数。
Alex A.

1
您可以执行(->n{n.times{puts (('_'*25+' '*5)*2)[rand(30),30]+"\n"*5}})[input]或仅指定需要对其进行分配才能调用它。这在网站上很常见。
Alex A.

3

朱莉娅72字节

n->join([join(circshift(["_"^25*" "^5...],rand(1:30)))"\n"^5 for i=1:n])

这是一个接受整数并返回字符串的匿名函数。要调用它,请将其分配给变量。

我们构造一个由25个下划线和5个空格组成的字符串,然后将其撒入字符数组中。我们将其循环移位随机次数(介于1到30之间),将其重新连接成一个字符串,并在5个换行符上添加大头钉。此过程重复n次,其中n是输入。结果数组将被连接并返回。

在这里尝试


3

PowerShell 65字节

0..$args[0]|%{-join("_"*25+" "*5)[($r=Random 25)..($r-29)];,""*5}

运行循环n次迭代。获取一个随机数,并在下划线后加5个空格。索引到字符串中作为数组,从随机位置开始提取。负索引从末尾换行。再次加入备份,并添加5个换行符。

编辑:我不知道为什么我以为我需要参数,-Maximum因为它是位置参数。多亏了TimmyD,我剃了一些字节并忘了得到输入,所以使我回到了65岁。


@TimmyD如果有人还有1.0,我会感到惊讶。它只能通过下载获得,并且未随任何操作系统一起提供。2.0应该被视为规范。
马特

@TimmyD我确实同意这一点,而与PowerShell 1.0无关。如果有人在该网站上使用它,那会让我感到惊讶。如果我使用3.0或更高版本的功能,则可以肯定地突出显示该功能。
马特


2

SpecBAS-93字节

1 a$="_"*25+" "*5: INPUT n: FOR i=1 TO n: r=1+INT(RND*30): ?a$(r TO)+a$( TO r-1)''''': NEXT i

制作一个由25个下划线+ 5个空格组成的字符串,随机选择一个起点,然后在该位置拼接该字符串,然后将字符串的起点固定到结尾。

撇号强制换行符,因此1在字符串末尾和4空行。


2

MATL,23字节

:"95l25X"5Z"h30YrYS10ct

在线尝试!

说明

:"           % take input n implicitly. Repeat loop n times
  95l25X"    %   row vector with number 95 ('_') repeated 25 times
  5Z"        %   row vector of 5 blank spaces
  h          %   concatenate vertically
  30Yr       %   random number uniformly distributed on [1,2,...,30]
  YS         %   circularly shift
  10c        %   newline character. Includes another newline when printed
  t          %   duplicate
             % implicitly end loop and display stack contents

2

Java,177140字节

-1字节到Blue移动i ++

-2字节给我留了原本毫无意义的空格

-34字节发送给Blue以实现我根本不需要char []

因为,你知道,Java。

n->{String s="";for(;n-->0;){int r=(int)(Math.random()*30);for(int i=0;i<30;){s+=i>r&i<r+6|r>24&i++<=r%25?" ":"_";}s+="\n\n\n\n";}return s;}

略有偏差:

Function<Integer, String> fallingBall = n -> {
    String s = "";
    for (;n-->0;) {
        int r = (int)(Math.random()*30);
        for (int i=0; i<30; i++) {
            s += i>r&i<r+6|r>24&i<=r%25?" ":"_";
        }
        s += "\n\n\n\n";
    }
    return s;
}

由于Java没有String'rotate',因此我不得不采取另一种方法。我生成了一个随机的int 0-29,它表示孔的起始索引(OBO是因为>比短>=)。然后由逻辑决定每个单独的字符

l[index] = (index>random && index<random+6) || (random>24 && index<=random%25) ? ' ' : '_';

这处理了整体的“包装”性质。


通过将i ++放在最后使用i的位置,可以节省一个字节。
蓝色

聪明。暴躁,但聪明。我还是比较聪明,还是在代码段(s = "")的开头留下了毫无意义的空格。两者都已修复。
CAD97

您也可以通过摆脱char数组,将char文字更改为字符串文字,并在for循环的内部使用s + =来节省更多。我刚刚测试过
蓝色

顺便说一句好答案
蓝色

这就是我专注于一种实现方法的结果。-34(!)个字节。
CAD97

1

蟒3.5 - 109个 113字节(4用于打印出每个结果之间4个新行):

def g(a,j='_'*25+' '*5):
 for l in range(a):import random;n=random.randrange(len(j)+1);print(j[-n:]+j[:-n]+'\r'*4)

非高尔夫球形式:

# j is the starting string with the 25 underscores and then 5 spaces at the end
def g(a,j='_'*25+' '*5):
    import random #Import the random module
    for l in range(a): # Do the following as many times as provided by the user
        n=random.randrange(len(j)+1) Get a random number in the range 0-29
        print(j[-n:]+j[:-n]+'\r'*4) #Shift the string characters right "n" times and print out the results with 4 new lines in between

基本上发生的事情是,将字符串“ j”(由25个下划线和5个空格组成)作为参数提供给函数“ g”。然后,导入随机模块,并根据用户指定的次数进行多次选择,在范围内选择一个随机数0 => 29,并将字符串“ j”右移多次。然后在每次迭代之后打印出结果,每个结果之间有4行。


这还会在两者之间打印换行符吗?
阿德南

@AandN现在可以了。:)
R. Kap's

您实际上需要打印4个换行符:p。因此,更改'\r''\r'*4应该可行。另外,我认为您可以更改range(a+1)range(a)
阿德南

@AandN实际上,使用可以range(a)实际打印出行a-1数,因此,这range(a+1)是打印出用户提供的确切行数的最佳方法。而且,现在它在每个结果之间打印4条新行。
R. Kap

嗯,这很奇怪,因为我用进行了测试,g(5)并且打印了6个字符串而不是5个字符串,因此更改a+1a可能会解决该问题。
阿德南

1

Python,119103字节

import random
s='_'*20+' '*5
def f(n,a=random.randint(0,25)):[print(s[a:]+s[:a]+3*'\n')for _ in' '*n]

您最新的更新无效,因为您已将random放入默认参数中,因此该函数将始终输出相同的行n时间
Sp3000,2016年
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.