글라이더를 설치하십시오!


17

이:

여기에 이미지 설명을 입력하십시오

A는 글라이더 .

Conway의 Game of Life에서 글라이더 는 보드 전체를 빠르게 가로 지르는 유명한 패턴입니다. 오늘의 도전을 위해 ASCII 아트 Game of Life Board를 그리고 글라이더를 배치 할 것입니다.

우리가 시작하는 보드는 다음과 같습니다.

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

이 보드는 완전히 파이프 |와 밑줄 _로 구성되며 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의 순서를 선택할 수도 있습니다 .

이것은 이므로 표준 허점은 금지되어 있으며 가능한 한 가장 짧은 코드를 만드십시오!


글라이더의 위치를 ​​식별하는 코너를 변경할 수 있습니까?
Stephen

@StephenS 아니오, 좌표는 글라이더의 왼쪽 상단 모서리가 시작되는 위치를 식별해야합니다.
DJMcMayhem


2
the glider is a famous pattern that slowly traverses across the boar.. 천천히? GoL에서 가장 빠른 대각선 이동 물체입니다. 빛의 1/4 속도에 도달합니다.
Christoph

1
@Christoph, 좋은 지적, 우리는 길이가 여행 방향으로 수축되는 것으로 보이지 않지만 상대 속도로 질량을 측정하는 방법을 모르겠습니다.
Wossname 2016 년

답변:



5

V , 31 , 30 바이트

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

온라인으로 사용해보십시오!

16 진 덤프 :

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 2012 년

1
@RobotCaleb : 일반적으로 Jelly 코드 페이지 에서 복사하여 붙여 넣기 . 기본 컴퓨터가 아닌 경우 TIO nexus 에서 실행하고 기본 컴퓨터에서 Jelly 저장소 의 복제본을 실행 합니다.
fireflame241241


2

펄 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까지의 정수 구성 요소로 모든 복소수의 그리드를 생성합니다.

  • 각 줄을 하나씩 보유한 문자열 목록을 반환합니다.


흥미롭게도, Perl이 비 ASCII를 사용한다는 것을 몰랐습니다. 무엇을 »합니까? 어떻게 인코딩됩니까?
DJMcMayhem

1
UTF-8로 인코딩 된 유니 코드의 RIGHT POINTING GUILLEMET, U + 00BB입니다. Perl 6에서는 두 개의 꺾쇠 괄호로도 쓸 수 >>있지만, guillemet과 동일한 바이트 수이므로 골프의 경우 후자를 선호합니다. 그것이하는 일에 대해서, 그것은 주변의 연산자를 양쪽의 목록이나 값에 쌍으로 적용되는 "하이퍼 오퍼레이터"로 변환합니다. 여기서, 상기 범위의 각 요소를 승산 0-9하여를 i준다 0, i, 2i, ..., 9i.
Sean

1

하스켈 , 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 의 목록 , 즉 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, 제공

매스 매 티카, 98 97 바이트

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

1

자바 8, 165144 바이트

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

자바 스크립트 (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를 제거 할 수 있습니다 . (글라이더를 인쇄하는 여러 가지 방법을 시도했지만 아무 바이트도 저장하지 않았습니다.)
Neil
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.