직각 단계


26

2D 매트릭스를 탐색하는 것은 일반적인 문제입니다. 우리는 여러 번 그것을 보았고 다시 볼 것입니다. 따라서 2D 매트릭스에서 8 단계를 모두 생성 할 수있는 가장 짧은 솔루션을 개발하고 미래에 도움을 드리겠습니다.

도전

코드는 순서대로 다음 8 쌍의 -1,0,1을 출력해야합니다.

(0,1)
(0,-1)
(1,0)
(-1,0)
(1,1)
(1,-1)
(-1,1)
(-1,-1)

규칙

  1. 입력이 없습니다.
  2. 출력 순서는 관련이 없습니다
  3. 출력이 유연합니다. 숫자 쌍은 구별 가능해야합니다.
  4. 이것은 이므로 바이트 단위의 최단 답변이 승리합니다.

2
@ MartinEnder 나도 99 % 확신했지만 아무것도 찾지 못했습니다. 그래서 며칠 동안 샌드 박스에 넣었지만 아무도 중복에 대해 언급하지 않았습니다.
죽은 Possum

4
유연한 출력으로 인해 흥미로운 Kolmogorov의 복잡한 맛이 있습니다. 일부 언어는 출력을 하드 코딩하는 것보다 더 나은 방법을 찾기가 어렵습니다. 이 태그를 추가해야합니까?
ngm

1
@ Adám 예, 숫자 쌍을 구별 할 수있는 동안 아무 것도 사용하십시오
Dead Possum

1
@ Adám 그러나 (1 + 0i)어떨까요?
Dead Possum

8
이것은 내가 지금까지 한 첫 번째 코드 골프 중 하나 인 8 개의 인접한 사각형 의 정확한 사본입니다 .
isaacg

답변:


19

옥타브 , 24 바이트

dec2base([0:3,5:8],3)-49

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

아직이 방법을 보지 못했습니다.

integers 목록을 작성 [0, 1, 2, 3, 5, 6, 7, 8]하고이를 3 진으로 변환하여 문자 배열을 리턴합니다.

00
01
02
10
12
20
21
22

모든 문자에서 49(ASCII- 값 1)을 빼면 숫자 형 배열이 나타납니다.

-1  -1
-1   0
-1   1
 0  -1
 0   1
 1  -1
 1   0
 1   1

9

T-SQL, 80 78 바이트

SELECT-1n INTO t;INSERT t VALUES(0),(1)SELECT*FROM t,t z WHERE t.n<>0OR z.n<>0

를 포함하는 (영구적) 테이블 t 를 작성 하고 행 을 제외 (-1,0,1)시키는 WHERE절로 자체 결합을 수행합니다 0,0. 테이블 t 는 내 코드로 정리되지 않으므로 직접 삭제해야합니다.

SQL이 문자열로 리턴을 허용하기 때문에 슬프게도 지루한 솔루션 ( 44 바이트 ) 의 두 배에 가까운 길이입니다 .

PRINT'0,1
0,-1
1,0
-1,0
1,1
1,-1
-1,1
-1,-1'

나는 T-SQL을 잘 모른다 : 당신은 단지 사용할 수 WHERE t.n OR z.n있습니까? (일부는 아니지만 일부 SQL 언어로 가능합니다.)
msh210

@ msh210 좋은 생각, 시도했지만 MS SQL Server에서 작동하지 않는 것 같습니다. 오류가 발생했습니다 :An expression of non-boolean type specified in a context where a condition is expected
BradC




7

젤리 , 8 7 6 바이트

3p_2ẸƇ

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

나의 첫번째 젤리 답변! 퍼즐의 마지막 조각에 대해 Dennis에게 감사드립니다.

자, 내가 설명 할 수 있는지 보자 ... lol.

3p_2ẸƇ   Main program, takes no input.
3p       Product with Range 3, yields [[1,1], [1,2], [1,3], [2,1], [2,2], ...]
  _2     Decrement twice, vectorizes, yields [[-1,-1], [-1,0], [-1,1], [0,-1], ...]
    ẸƇ   Comb, removes those that contain only falsey values, the [0,0]
         Implicit output

Erik 덕분에 -1 바이트; Xcoder와 Dennis 덕분에 -1 바이트


1
이 접근 방식에 따라 3p3_2ẸƇ
대체

@ Mr.Xcoder 두 번째를 삭제할 수 있습니다 3.
Dennis

@Dennis 아, 그래. 이 경우 Adm은 6 바이 터로 업데이트 할 수 있습니다.)
Mr. Xcoder

7

R , 26 24 바이트

직접 접근 방식으로 2 바이트를 더 절약 한 @JDoe의 크레딧

paste(-1:1,-3:5%/%3)[-5]

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

최초의 답변 :

outer(-1:1,-1:1,paste)[-5]

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

또는 27 바이트

sapply(-1:1,paste,-1:1)[-5]

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

또는 요인이있는 34 바이트의 경우 :

(gl(3,3,,-1:1):gl(3,1,9,-1:1))[-5]

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

출력이 -1에서 1이 아니라 1에서 3이 될 수 있으면이 마지막 솔루션이 가장 골치 거리가 될 수 있습니다.

와 함께 또는로 대체 솔루션에 대한 다른 R 답변 을 참조하십시오 .expand.gridcbind


응, 유연한 출력 형식을 잘 사용합니다!
주세페

2
이것은 궁극적으로 쓸모가 없기 때문에 내 것보다 낫습니다 :)
ngm

@Giuseppe 원래 나는 c매트릭스 내부에서 이해가 안되는 것을 시도 했으므로 paste원래 출력 형식으로 전환했습니다 ...
JayCe


1
@ J.Doe you rock!
JayCe

6

Japt , 13 12 11 바이트

@Shaggy 덕분에 바이트를 절약했습니다.

9ó8_ìJõ é)Å

온라인으로 사용해보십시오! -R플래그를 사용 하여 각 항목을 자체 행에 놓습니다.

설명

9ó8_ìJõ é)Å
9ó8             Create the range [9, 9+8). [9, 10, ..., 16]
   _            Map each item in this range through this function:
     Jõ é)        Generate the range [-1...1] and rotate to get [1, -1, 0].
    ì             Convert the item to an array of base-3 digits,
                  mapping [0,1,2] to [1,-1,0]. [[-1, 1, 1], [-1, 1,-1], [-1, 1, 0],
                                                [-1,-1, 1], [-1,-1,-1], [-1,-1, 0],
                                                [-1, 0, 1], [-1, 0,-1]]
          Å       Remove the first item (gets rid of the leading -1).

6

Japt -Q , 15 13 바이트

더 짧은 방법이 있다고 확신하지만이 방법을 좋아했습니다.

##ü80ì3 mÉ ò
##ü80        // Take 14425280
     ì3      // and turn it into an array of base-3 numbers.
        mÉ   // Subtract one from each digit
           ò // and then split them pairwise.

Shaggy 덕분에 2 바이트를 줄 였습니다.

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


6

하스켈 , 22 바이트

_:l=mapM(:[1,-1])[0,0]

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

Laikoni는 1 바이트를 절약했습니다.


_:l=mapM(:[1,-1])[0,0]바이트를 저장합니다. ( 이삭의 초기 도전에 대한 답변 에서 발췌 ).
Laikoni

@Laikoni 그래서 나는 그것을 고려했고 그것이 이전의 도전에 대한 많은 답변이 있었기 때문에 그것을 발췌 문장으로 만들 것이라고 생각했습니다. 그러나이 메타 포스트 를 함수를 간접적으로 정의 할 수 있다는 규칙과 결합 하면 괜찮습니다. 제안 해 주셔서 감사합니다.
xnor


5

05AB1E , 8 7 바이트

2Ý<ãʒĀZ

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

설명

2Ý<     # Range of 2 decremented, yields [-1, 0, 1]
   ã    # Cartesian product of the list with itself
    ʒ   # Filter by ...
     ĀZ # Maximum of the truthified values, yields 0 only if both values are 0.

Emigna 덕분에 -1 바이트!


댕, 당신이 날 이겼어 같은 시작 ( 2Ý<ã)을 가졌지 만 쌍 목록의 중간 요소를 제거하는 방법을 알아 내고있었습니다. 절대 값으로 정렬하고 첫 번째 +.를 제거하는 것에 대해 생각하지 않았습니다.
케빈 크루이 센

2
ʒĀZ1을 저장하는 데 사용
Emigna

@Emigna 정식 명령의 일반 버전과 05AB1IE 버전의 차이점을 이해해 주셔서 감사합니다 :-)
Kaldo


5

자바 8, 83 42 바이트

v->"1,1 1,0 1,-1 0,1 0,-1 -1,1 -1,0 -1,-1"

하드 코딩 으로 @AdmBorkBork 덕분에 -41 바이트

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


참조로 하드 코딩되지 않은 버전 ( 83 72 70 68 바이트 ) :

v->{for(int i=9;i-->1;)System.out.println(~i%3+1+","+(~(i/3)%3+1));}

@ OlivierGrégoire 덕분에 -11 바이트 . @ETHproductions 의 JavaScript (ES6) 응답
포트를 작성하는 -2 바이트 .

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


72 바이트의 비 하드 코딩 답변 : v->{for(int i=9;i-->0;)if(i!=4)System.out.println((i/3-1)+","+(i%3-1));}.
Olivier Grégoire

@ OlivierGrégoire 고마워, 추가 (2 바이트 더 골프).
Kevin Cruijssen 12





4

껍질 , 7 6 바이트

많은 다른 방법이 있습니다 (까다 롭고 값 비싼 부분은 제거됩니다 [0,0]), 7 바이트는 필터로 십진수 변환 ( ) 을 사용하도록 지적한 덕분에 Leo 덕분에 가장 짧습니다d .

fdπ2ṡ1

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

설명

fdπ2ṡ1  -- constant function (expects no arguments)
    ṡ1  -- symmetric range [-n..n]: [-1,0,1]
  π2    -- cartesian power of 2: [[-1,-1],[-1,0],[0,-1],[-1,1],[0,0],[1,-1],[0,1],[1,0],[1,1]]
f       -- filter only elements that are truthy when
 d      -- | decimal conversion (interpret as polynomial and evaluate at x=10)
        -- : [[-1,-1],[-1,0],[0,-1],[-1,1],[1,-1],[0,1],[1,0],[1,1]]

대체, 7 바이트

tπ2ṙ1ṡ1

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

설명

tπ2ṙ1ṡ1  -- constant function (expects no arguments)
     ṡ1  -- symmetric range [-n..n]: [-1,0,1]
   ṙ1    -- rotate by 1: [0,1,-1]
 π2      -- cartesian power of 2: [[0,0],[0,1],[1,0],[0,-1],[1,1],[-1,0],[1,-1],[-1,1],[-1,-1]]
t        -- tail: [[0,1],[1,0],[0,-1],[1,1],[-1,0],[1,-1],[-1,1],[-1,-1]]

1
또 다른 7 바이트 대안 tπ2↑3İZ.
Laikoni

2
10 진수 변환을 기준으로 목록을 필터링하여 1 바이트를 절약 할 수 있습니다 . 온라인에서 사용해보십시오!
Leo

3

PowerShell , 41 바이트

(1..-1|%{$i=$_;1..-1|%{"$i,$_"}})-ne'0,0'

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

두 번에 대한 범위 루프 1..-1, A를 -n해주 e끝에 quals는 외부 꺼내 0,0항목을. 그것들은 각각 개별적으로 파이프 라인에 남겨져 Write-output있으며 프로그램 완료시 암시 적 으로 줄 바꿈을 무료로 제공합니다.


안타깝게도 베어 본 문자열 출력은 2 바이트 더 짧습니다.

'1,1
1,0
1,-1
0,1
0,-1
-1,1
-1,0
-1,-1'

그러나 그것은 지루합니다.




3

CJam , 13 바이트

3,:(2m*{2b},`

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

설명

3,    e# Range [0,3):       [0 1 2]
:(    e# Decrement each:    [-1 0 1]
2m*   e# Cartesian square:  [[-1 -1] [-1 0] [-1 1] [0 -1] [0 0] [0 1] [1 -1] [1 0] [1 1]]
{     e# Filter by
 2b   e#   conversion to binary:
},    e#                    [[-1 -1] [-1 0] [-1 1] [0 -1] [0 1] [1 -1] [1 0] [1 1]]
`     e# Stringify:         "[[-1 -1] [-1 0] [-1 1] [0 -1] [0 1] [1 -1] [1 0] [1 1]]"

3

Befunge-93 , 24 바이트

11#v91090~9~19~<
9.._@#,

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

이 문제는 대부분 대각선으로 움직이지 않더라도 2D 언어의 답변이 누락 된 것 같습니다. 이렇게하면 공백으로 구분 된 숫자가 출력되고 각 쌍은 탭으로 구분됩니다.




3

MATL , 12 바이트

3:qq2Z^[]5Y(

MATL Online에서 사용해보십시오!

나의 첫번째 심각한 MATL 답변! Luis Mendo , SanchisesDJMcMayhem 에게 감사합니다도움을 .

작동 원리

3 : qq2Z ^ [] 5Y (– 전체 프로그램. STDOUT으로 출력합니다.
3 : – 범위 3. [1 2 3]을 스택으로 밉니다.
  qq – 2만큼 감소. 수율 [-1 0 1].
    2Z ^ – 2의 데카르트 힘.
         5Y (– 색인 5의 행을 다음으로 대체하십시오.
       [] – 빈 벡터입니다.


3

배쉬 , 30 바이트

echo "
"{-1..1},{-1..1}|grep 1

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

각 행에 후행 공백을 인쇄합니다. ( @Neil 에게 감사합니다 -원래 선행 공간을 인쇄했지만 주석 공간에 따라 후행 공간이 더 좋습니다)


마지막 줄을 제외한 모든 줄에 대안으로 후행 공백을 인쇄 할 수 있다고 생각합니다.
Neil

2

배치, 77 바이트

@for %%x in (-1 0 1)do @for %%y in (-1 0 1)do @if not %%x%%y==00 echo %%x %%y

비표준 구분 기호가 허용되는 경우 63 바이트 :

@for %%x in (-1/-1 -1/0 -1/1 0/-1 0/1 1/-1 1/0 1/1)do @echo %%x

2

Pyth, 11 9 바이트

t^+U2_1 2

여기 사용해보십시오

설명

t^+U2_1 2
  +U2_1     [0, 1, -1]
 ^      2   Product with itself.
t           Exclude the first.

마찬가지로 우리는 사용할 수 t*J+U2_1J있지만 더 짧지는 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.