Bước chính thống


26

Đây là một vấn đề phổ biến để điều hướng trong ma trận 2D. Chúng tôi đã nhìn thấy nó nhiều lần và sẽ thấy một lần nữa. Vì vậy, hãy giúp chúng tôi trong tương lai và phát triển các giải pháp ngắn nhất để tạo tất cả tám bước có thể trong ma trận 2D.

Thử thách

Mã của bạn phải xuất 8 cặp -1,0,1 sau đây theo bất kỳ thứ tự nào:

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

Quy tắc

  1. Không có đầu vào.
  2. Thứ tự đầu ra không liên quan
  3. Đầu ra là linh hoạt. Các cặp số chỉ cần phân biệt
  4. Đây là , vì vậy câu trả lời ngắn nhất bằng byte thắng

2
@MartinEnder Tôi cũng chắc chắn 99% về điều đó, nhưng cũng không tìm thấy. Vì vậy, tôi đã đặt nó trong hộp cát trong vài ngày, nhưng không ai nhận xét về bản sao.
Xác chết

4
Bởi vì đầu ra linh hoạt, hóa ra có một hương vị phức tạp Kolmogorov thú vị cho loại này. Một số ngôn ngữ sẽ thấy khó hơn là làm tốt hơn là chỉ mã hóa cứng đầu ra. Có nên thêm thẻ này?
ngm

1
@ Adám Có, sử dụng bất cứ thứ gì trong khi các cặp số có thể phân biệt được
Dead Possum

1
@ Adám Nhưng còn gì (1 + 0i)?
Xác chết

8
Đây là một bản sao chính xác của 8 ô vuông liền kề , một trong những golf mã đầu tiên tôi từng làm.
isaacg

Câu trả lời:


19

Octave , 24 byte

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

Hãy thử trực tuyến!

Tôi chưa thấy cách tiếp cận này.

Tạo một danh sách các số nguyên [0, 1, 2, 3, 5, 6, 7, 8]và chuyển đổi nó thành ternary, trả về một mảng ký tự:

00
01
02
10
12
20
21
22

Trừ 49(giá trị ASCII cho 1) từ tất cả các ký tự cho một mảng số:

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

9

T-SQL, 80 78 byte

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

Tạo một bảng (vĩnh viễn) t chứa (-1,0,1), và thực hiện một tự tham gia với một WHEREđiều khoản đó không bao gồm các 0,0hàng. Bảng t không được dọn sạch bởi mã của tôi, bạn phải tự bỏ nó.

Đáng buồn là gần gấp đôi giải pháp nhàm chán ( 44 byte ), vì SQL cho phép trả về theo chuỗi:

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

Tôi không biết rõ về T-SQL: bạn có thể sử dụng WHERE t.n OR z.nkhông? (Bạn có thể trong một số nhưng không phải tất cả các phương ngữ SQL.)
msh210

@ msh210 Ý kiến ​​hay, tôi đã thử nhưng có vẻ như nó không hoạt động trên MS SQL Server. Tôi nhận được lỗi:An expression of non-boolean type specified in a context where a condition is expected
BradC

1
Bạn có thể xóa các khoảng trống xung quanh *
Razvan Socol



7

Thạch , 8 7 6 byte

3p_2ẸƇ

Hãy thử trực tuyến!

Câu trả lời đầu tiên của tôi về Jelly! Rất cám ơn Dennis cho mảnh ghép cuối cùng.

Bây giờ, hãy xem liệu tôi có thể giải thích nó ... 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

-1 byte nhờ Erik; -1 byte nhờ Mr Xcoder và Dennis


1
Thay đổi câu trả lời dựa trên phương pháp này:3p3_2ẸƇ
Ông Xcoder

@ Mr.Xcoder Bạn có thể thả thứ hai 3.
Dennis

@Dennis Oh, thực sự. Trong trường hợp này, adm có thể cập nhật với 6-byter :)
Ông Xcoder

7

R , 26 24 byte

Tín dụng cho @JDoe để lưu thêm hai byte bằng cách tiếp cận trực tiếp:

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

Hãy thử trực tuyến!

Các asnwer ban đầu:

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

Hãy thử trực tuyến!

Hoặc cho 27 byte

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

Hãy thử trực tuyến!

Hoặc cho 34 byte với các yếu tố:

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

Hãy thử trực tuyến!

Giải pháp cuối cùng này có thể là tốt nhất nếu đầu ra có thể từ 1 đến 3 thay vì từ -1 đến 1.

Xem câu trả lời R khác cho các giải pháp thay thế có expand.gridhoặc với cbind.


huh, sử dụng tốt các định dạng đầu ra linh hoạt!
Giuseppe

2
Cái này tốt hơn của tôi vì cuối cùng nó vô dụng như thế nào :)
ngm

@Giuseppe Ban đầu tôi đã thử cmà không có ý nghĩa gì trong một ma trận nên tôi đã chuyển sang pastevà định dạng đầu ra ban đầu ...
JayCe

24 byte vớipaste
J.Doe

1
@ J.Doe bạn đá!
JayCe

6

Japt , 13 12 11 byte

Đã lưu một byte nhờ @Shaggy

9ó8_ìJõ é)Å

Hãy thử trực tuyến! Công dụng-R cờ để đặt từng mục trên dòng riêng của mình.

Giải trình

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 byte

Tôi chắc chắn có một cách ngắn hơn, nhưng tôi thích cách tiếp cận này.

##ü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.

Cạo sạch hai byte nhờ Shaggy .

Hãy thử trực tuyến!


6

Haskell , 22 byte

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

Hãy thử trực tuyến!

Laikoni lưu 1 byte.


_:l=mapM(:[1,-1])[0,0]tiết kiệm một byte. (Lấy từ câu trả lời của isaacg cho thử thách trước đó).
Laikoni

@Laikoni Vì vậy, tôi đã xem xét điều đó và nghĩ rằng điều đó sẽ biến nó thành một đoạn trích (như nhiều câu trả lời cho thử thách cũ). Nhưng kết hợp bài meta này với quy tắc rằng các chức năng có thể được xác định một cách gián tiếp, vì vậy điều này có vẻ ổn. Cám ơn vì sự gợi ý.
xnor


5

05AB1E , 8 7 byte

2Ý<ãʒĀZ

Hãy thử trực tuyến!

Giải trình

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.

-1 byte nhờ Emigna!


Dang, bạn đánh tôi với nó. Có cùng một khởi đầu ( 2Ý<ã), nhưng đã tìm ra cách loại bỏ phần tử ở giữa của danh sách các cặp .. Tôi đã không nghĩ đến việc sắp xếp theo giá trị tuyệt đối và xóa phần đầu tiên .. +1 khỏi tôi.
Kevin Cruijssen

2
Sử dụng ʒĀZđể lưu 1
Emigna

@Emigna Cảm ơn vì đã khiến tôi hiểu sự khác biệt giữa phiên bản thường và phiên bản 05AB1IE của lệnh được xác thực :-)
Kaldo

5

MATL , 12 byte

9:q4X-3YA49-

Hãy thử trực tuyến!

Bởi vì đó là tháng MATL, đây là cổng MATL của câu trả lời Octave của @ Stewie. Chuỗi [0 1 2 3 5 6 7 8] được tạo dưới dạng chênh lệch đã đặt giữa [0 ... 8] và 4.


5

Java 8, 83 42 byte

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

-41 byte nhờ @AdmBorkBork bằng cách mã hóa cứng ..

Hãy thử trực tuyến.


Phiên bản không mã hóa làm tài liệu tham khảo ( 83 72 70 68 byte ):

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

-11 byte nhờ @ OlivierGrégoire .
-2 byte tạo ra một cổng của @ETHproductions JavaScript (ES6) câu trả lời 's .

Hãy thử trực tuyến.


Câu trả lời không mã hóa trong 72 byte : v->{for(int i=9;i-->0;)if(i!=4)System.out.println((i/3-1)+","+(i%3-1));}.
Olivier Grégoire

@ OlivierGrégoire Cảm ơn, đã thêm (và được thêm 2 byte nữa).
Kevin Cruijssen

4

R , 27 byte

expand.grid(-1:1,-1:1)[-5,]

Hãy thử trực tuyến!

30 và 35 byte:

cbind(-1:1,rep(-1:1,e=3))[-5,]
expand.grid(rep(list(-1:1),2))[-5,]

Một số kết quả tìm kiếm thú vị, tôi thích nó: D Công việc tốt
Dead Possum

expand.grid(-1:1,-1:1)[-5,]là 27 byte.
Giuseppe




4

Chồng , 7 6 byte

Có rất nhiều cách khác nhau (phần khó khăn / tốn kém đang bị loại bỏ [0,0]), 7 byte là cách ngắn nhất tôi có thể nghĩ ra nhờ Leo đã chỉ ra sử dụng chuyển đổi thập phân ( d) làm bộ lọc:

fdπ2ṡ1

Hãy thử trực tuyến!

Giải trình

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]]

Thay thế, 7 byte

tπ2ṙ1ṡ1

Hãy thử trực tuyến!

Giải trình

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
Một thay thế 7 byte khác tπ2↑3İZ.
Laikoni

2
Bạn có thể lưu một byte bằng cách lọc các danh sách dựa trên chuyển đổi thập phân của chúng Hãy thử trực tuyến!
Leo

3

PowerShell , 41 byte

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

Hãy thử trực tuyến!

Vòng lặp đôi cho phạm vi 1..-1, với một quals -not eở cuối để kéo ra 0,0mục nhập bên ngoài . Mỗi người đều rời khỏi đường ống và ẩnWrite-output khi hoàn thành chương trình cung cấp cho chúng tôi các dòng mới miễn phí.


Đáng buồn thay, chỉ đầu ra chuỗi barebones ngắn hơn hai byte:

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

Nhưng điều đó thật nhàm chán.




3

CJam , 13 byte

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

Hãy thử trực tuyến!

Giải trình

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 byte

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

Hãy thử trực tuyến!

Tôi cảm thấy như thử thách này thiếu câu trả lời từ các ngôn ngữ 2D, ngay cả khi hầu hết không di chuyển theo đường chéo. Điều này xuất ra không gian số tách biệt, mỗi cặp được phân tách bằng các tab.




3

MATL , 12 byte

3:qq2Z^[]5Y(

Hãy thử nó tại MATL Online!

Câu trả lời MATL nghiêm túc đầu tiên của tôi! Cảm ơn rất nhiều để Luis Mendo , SanchisesDJMcMayhem cho sự giúp đỡ.

Làm thế nào nó hoạt động

3: qq2Z ^ [] 5Y (- Chương trình đầy đủ. Đầu ra cho STDOUT.
3: - Phạm vi 3. Đẩy [1 2 3] vào ngăn xếp.
  qq - Giảm theo 2. Năng suất [-1 0 1].
    2Z ^ - Sức mạnh của Cartesian là 2.
         5Y (- Thay thế hàng tại chỉ số 5 bằng ...
       [] - Một vector trống.


3

Bash , 30 byte

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

Hãy thử trực tuyến!

In một dấu cách trên mỗi dòng nhưng cuối cùng. (Cảm ơn @Neil - điều này ban đầu được in một không gian hàng đầu, nhưng một không gian kéo dài sẽ tốt hơn theo nhận xét của họ)


Tôi đoán bạn có thể in một dấu cách trên tất cả trừ dòng cuối cùng thay thế.
Neil

2

Mẻ, 77 byte

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

63 byte nếu phân tách không chuẩn được cho phép:

@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 byte

t^+U2_1 2

Hãy thử nó ở đây

Giải trình

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

Tương tự, chúng ta có thể sử dụng t*J+U2_1J, nhưng không ngắn hơn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.