グライダーを配置します!


17

この:

ここに画像の説明を入力してください

グライダーです。

ConwayのGame of Lifeでは、グライダーは有名なパターンであり、ボード全体を素早く横断します。今日の課題では、ASCIIアートゲームオブライフボードを描画し、その上にグライダーを配置します。

開始するボードは次のとおりです。

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

このボードは、すべてパイプ|とアンダースコア_で構成されており、10x10です。2つの整数「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に達します。
クリストフ

1
@Christoph、良い点、長さは進行方向に収縮していないように見えることがわかりますが、相対論的な速度で質量を測定する方法はわかりません。
Wossname

回答:



5

V31、30のバイト

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

オンラインでお試しください!

Hexdump:

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

2つの質問:何ですか?そしてどうやって?
Pureferret

1
@Pureferret 2つの答え:ゴルフ言語、科学(または彼はV XDを書いた)
クリストファー

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 nexusで実行し、メインコンピューターで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 0から9までの整数成分を持つすべての複素数のグリッドを生成します。

  • それぞれが1行を保持する文字列のリストを返します。


興味深いことに、Perlが非ASCIIを利用していることを知りませんでした。何を»するの?どのようにエンコードされますか?
DJMcMayhem

1
UTF-8でエンコードされたUnicodeのRIGHT POINTING GUILLEMET、U + 00BBです。Perl 6では、2つの山括弧として書くこともできますが>>、それはギメットと同じバイト数ですので、ゴルフでは少し上品に見えるので後者を好みます。それが何をするかについては、それが囲む演算子を、どちらかの側のリストまたは値にペアワイズで適用する「ハイパー演算子」に変換します。ここでは、範囲の各要素にを乗算0-9i、を与え0, i, 2i, ..., 9iます。
ショーン

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]

2つの整数(xおよびy)を取り込んで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

Mathematica、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おっと、気づいてくれてありがとう、修正。BYE-countは説明が正しかった、正しい正しい、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')

カリー化によって入力を受け取ります: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のみ;)
ベータ崩壊

圧縮バイトを保存する|_前に削除でき\nます。(グライダーを印刷するいくつかの異なる方法を試しましたが、どのバイトも保存されませんでした。)
ニール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.