放置滑翔机!


17

这个:

在此处输入图片说明

滑翔机

在Conway的《生命游戏》中,滑翔机是一种著名的图案,可以快速遍历整个滑板。对于今天的挑战,我们将绘制一个ASCII艺术的生命游戏板,并在其上放置一个滑翔机。

我们开始的董事会是这样的:

|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|

此木板完全由管道|和下划线组成_,为10x10。您必须编写一个包含两个整数“ x”和“ y”的程序或函数,并在这些坐标处使用滑翔机输出同一块板。例如,如果在位置(1, 1)(索引为0)有一个滑翔机,则必须输出以下内容:

|_|_|_|_|_|_|_|_|_|_|
|_|_|*|_|_|_|_|_|_|_|
|_|_|_|*|_|_|_|_|_|_|
|_|*|*|*|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|

您可以假设滑翔机将永远不会超出范围,因此x和y都将始终在该[0-7]范围内。您也可以选择采用1索引的坐标,但是必须在答案中指定。在这种情况下,输入将始终在[1-8]范围内。以下是一些示例(所有索引均为0):

0, 0:
|_|*|_|_|_|_|_|_|_|_|
|_|_|*|_|_|_|_|_|_|_|
|*|*|*|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|

7, 7:
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|*|_|
|_|_|_|_|_|_|_|_|_|*|
|_|_|_|_|_|_|_|*|*|*|

7, 4:
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|*|_|
|_|_|_|_|_|_|_|_|_|*|
|_|_|_|_|_|_|_|*|*|*|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|

5, 2:
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|*|_|_|_|
|_|_|_|_|_|_|_|*|_|_|
|_|_|_|_|_|*|*|*|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|

与往常一样,您可以采用任何合理格式的IO。这包括但不限于带换行符的字符串,字符串数组,2d字符串数组或写入文件/ STDOUT。您也可以选择采用xy的顺序。

由于这是漏洞,因此禁止了标准漏洞,并可以使代码最短!


我们可以改变哪个角来确定滑翔机的位置吗?
斯蒂芬,

@StephenS不,坐标应标识滑翔机左上角的起始位置。
DJMcMayhem


2
the glider is a famous pattern that slowly traverses across the boar.。慢慢来 它是GoL中最快的对角移动物体。它达到光速的1/4。
克里斯托夫(Christoph)”

1
@Christoph,好点,我们可以看到它的长度似乎不在行进方向上收缩,但是我不知道以相对论速度测量它的质量的任何方法。
Wossname

Answers:



5

V31,30字节

10O±°_|ÀGjjÀ|3r*kr*kh.Í*ü_/|&

在线尝试!

十六进制转储:

00000000: 3130 4fb1 b05f 7c1b c047 6a6a c07c 3372  10O.._|..Gjj.|3r
00000010: 2a6b 722a 6b68 2ecd 2afc 5f2f 7c26       *kr*kh..*._/|&

这将输入作为程序参数,并进行1索引。

说明:

10O                         " On the following 10 lines, insert:
   ±°_                      "   10 '_' characters
      |                     "   And a '|'
       <esc>                " Return to normal mode
            ÀG              " Go to the a'th line
              jj            " Move down two lines
                À|          " Go to the b'th column
                  3r*       " and replace the next 3 characters with asterisks
                     k      " Move up a line
                      r*    " And replace this char with an asterisk
                        kh  " Move up a line and to the left
                          . " And repeat the last change we performed (replace with asterisk)
                            "
Í                           " On every line, substitute:
 *                          "   An asterisk
  ü                         "   OR
   _                        "   An underscore
    /                       " With:
     |&                     "   A bar followed by the matched pattern

两个问题:什么?如何?
Pureferret

1
@Pureferret两个答案:高尔夫语言,科学(或者他写了V XD)
Christopher

1
@Pureferret我添加了一个解释。
DJMcMayhem

2

果冻37 35字节

ȷ2b1
Ḍ+“£Æßæç‘Ṭ+¢s⁵j3;0$€Fṭ0ị“_*¶|”

在线尝试!

怎么运行的

ȷ2b1                             - the literal [1,1,1,1,...,1,1,1] with 100 elements
Ḍ+“£Æßæç‘Ṭ+¢s⁵j3;0$€Fṭ0ị“_*¶|”   - input (x,y)
Ḍ                                - convert (x,y) to 10*x+y
 +                               - add, to get the five "*" positions,
  “£Æßæç‘                        - the literal [2,13,21,22,23]
         Ṭ                       - return an array with those positions as truthy elements
          +¢                    - Now we format: pad to length 100 with the above literal
            s⁵j3                 - add newlines (represented by 3) to each set of 10
                ;0$€F            - add pipes (represented by 0) to each
                     ṭ0          - add a 0 to the beginning
                       ị“_*¶|”   - index into the string “_*¶|”

1
您如何键入/生成程序?
RobotCaleb

1
@RobotCaleb:通常从Jelly代码页复制粘贴。我不是在我的主机上,而是在TIO关联上运行它们的,而在我的主计算机上,它们是Jelly存储库的一个副本。
fireflame241

2

Python 2,151字节

还会打高尔夫球。

def f(x,y):r,x=[list('|_'*10+'|')for i in[1]*10],x*2;r[y][x+3]=r[y+1][x+5]=r[y+2][x+1]=r[y+2][x+3]=r[y+2][x+5]='*';print'\n'.join(''.join(i)for i in r)

在线尝试!


如果您愿意切换到Python 3,则可以使用[*'|_'*10+'|']代替list()调用来节省3个字节。
L3viathan

2

Perl 6,88个字节

->\x,\y{(^10 »*»i X+ ^10).map:{<|* |_>[$_!=
(1-2i|2-i|0|1|2)+x+y*i+2i]~"|
"x(.re==9)}}
  • 复数用于表示坐标。

  • ^10 »*» i X+ ^10 生成具有从零到九的整数分量的所有复数的网格。

  • 返回字符串列表,每个字符串占一行。


有趣的是,我不知道Perl使用非ASCII。怎么»办?如何编码?
DJMcMayhem

1
它只是Unicode的正确指向GUILLEMET,U + 00BB,以UTF-8编码。在Perl 6中,它也可以写成两个尖括号,>>但是,它与guillemet的字节数相同,因此对于高尔夫,我更喜欢后者,因为它看起来有点像IMHO。至于它的作用,它将周围的运算符转换成一个“超级运算符”,该运算符成对地应用于列表或任一侧的值。在此,它将范围0-9的每个元素乘以i,得到0, i, 2i, ..., 9i
肖恩(Sean)

1

Haskell,96个字节

r=[0..9]
x#y=['|':(r>>=(\i->[last$'_':['*'|elem(i-x,j-y)$zip[1,2,0,1,2][0,1,2,2,2]],'|']))|j<-r]

接受两个整数(xy),并返回Strings 的列表,即type的2D列表[[Char]]


测试套件:

import System.Environment

main :: IO ()
main = do
    args <- getArgs
    let (x, y) = (read $ args !! 0, read $ args !! 1)
    mapM_ putStrLn (x#y)


1

数学,115个 113字节

x(a="|_"~Table~10~Table~10;(a[[##]]="|*")&@@(#+x)&/@({{0,1,2,2,2},{1,2,0,1,2}});""<>Riffle[#<>"|"&/@a,"\n"])

哪里

这采用{row, col}格式输入,并且是1索引的,但是可以在不增加字节的情况下变成0索引。

一些注意事项:

  1. \n 是换行符,占1个字节。
  2. \[Function],占用3个字节。
  3. \[Transpose],占用3个字节。

请注意,允许使用“字符串数组”,因此我可以删除Riffle

Mathematica,98 97字节

x(a="|_"~Table~10~Table~10;(a[[##]]="|*")&@@(#+x)&/@({{0,1,2,2,2},{1,2,0,1,2}});#<>"|"&/@a)

1

Java的8,165个 144字节

x->y->{String r="";for(int i=0,j;++i<11;r+="\n")for(r+="|",j=0;++j<11;)r+=(i==x&j==y+1)|(i==x+1&j==y+2)|(i==x+2&j>=y&j<y+3)?"*|":"_|";return r;}

说明:

在这里尝试。

x->y->{                  // Method with two integer parameters and String return-type
  String r="";           //  Result-String
  for(int i=0,j;++i<11;  //  Loop (1) over the rows
     r+="\n|")           //    And after each iteration add a new-line to the result-String
    for(r+="|",          //   Start by appending "|" at the start of the line
      j=0;++j<11;        //   Loop (2) over the columns
      r+=(i==x&j==y+1)|(i==x+1&j==y+2)|(i==x+2&j>=y&j<y+3)?
                         //    If this coordinate should contain a '*'
        "*|"             //     Append "*|"
       :                 //    Else:
        "_|"             //     Append "_|"
    );                   //   End of loop (2)
                         //  End of loop (1) (implicit / single-line body)
  return r;              //  Return the result-String
}                        // End of method

1
说明的代码与您的答案不同?查看对r的第一次分配。
Computronium

@Computronium糟糕,感谢您的修复。再见数是正确的,解释是正确的,TIO-链接是正确的,但实际的答案仍然是老不正确的..
凯文Cruijssen

1

JavaScript(ES6),99个字节

x=>y=>eval('for(i=0,o="";i<101;o+=((d=i-x-y*10)==1|d==12|d>19&d<23?"|*":"|_")+(++i%10?"":`|\n`))o')

通过currying获取输入:f(5)(2)对于x = 5,y = 2。坐标为零索引。

测试片段

f=
x=>y=>eval('for(i=0,o="";i<101;o+=((d=i-x-y*10)==1|d==12|d>19&d<23?"|*":"|_")+(++i%10?"":`|\n`))o')

xi.oninput=yi.oninput=_=>O.innerHTML=f(xi.value)(yi.value)
O.innerHTML=f(xi.value=5)(yi.value=2)
<style>*{font-family:Consolas;}input{width:2.5em;}</style>
x: <input id="xi" type="number" min="0" max="7">,
y: <input id="yi" type="number" min="0" max="7">
<pre id="O">


0

SOGL,23 个字节

LIΖ|_ΟL∙.«."¾'┼ΞΧ⌠²‘5nž

注意:这期望输入为1索引

说明:

LI                       push 11
  Ζ|_                    push "|" and "_"
     Ο                   make an altrenates string [with 11 separators, which are "|" and parts "_"]
      L∙                 get an array of 10 of those
        .«               take input and multiply by 2 (x pos)
          .              take input (y pos)
           "¾'┼ΞΧ⌠²‘     push "_|*|__|_|**|*|*" - the glider in the map
                    5n   split into an array with items of length 5
                      ž  replace in the 1st [grid] array at positions [inp1*2, inp2] to 2nd array [glider]


0

木炭,28字节

UO²¹χ|_J×N²N“ "}IyE%%mLBMφ/”

在线尝试!链接到详细模式以进行描述。


我很失望木炭不是,好吧……仅ASCII;)
Beta Decay

您可以删除|_之前的\n以保存压缩字节。(我尝试了几种打印滑翔机的方法,但是没有保存任何字节。)
Neil
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.