ขั้นตอนดั้งเดิม


26

มันเป็นปัญหาที่พบบ่อยในการนำทางในเมทริกซ์ 2D เราเคยเห็นหลายครั้งและจะเห็นอีกครั้ง ดังนั้นช่วยเราในอนาคตและพัฒนาโซลูชันที่สั้นที่สุดเพื่อสร้างแปดขั้นตอนที่เป็นไปได้ทั้งหมดในเมทริกซ์ 2D

ท้าทาย

รหัสของคุณจะต้องส่งออก 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
@ มาร์ตินฉันก็มั่นใจ 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

ลองออนไลน์!

ฉันยังไม่เห็นวิธีการนี้

สร้างรายการจำนวนเต็ม[0, 1, 2, 3, 5, 6, 7, 8]และแปลงเป็น ternary ส่งคืนอาร์เรย์อักขระ:

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ไม่ได้ถูกล้างข้อมูลด้วยรหัสของฉันคุณต้องทำมันเอง

น่าเศร้าเกือบสองเท่าตราบใดที่โซลูชันที่น่าเบื่อ ( 44 ไบต์ ) เนื่องจาก SQL อนุญาตให้ส่งคืนในสตริง:

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

1
คุณสามารถลบช่องว่างรอบ ๆ *
Razvan Socol

8

Pure Bash (ไม่มียูทิลิตี้ภายนอก), 36

a=({0,-1,1},{0,-1,1})
echo ${a[@]:1}

ลองออนไลน์!


Bash with Sed, 35

printf %s\\n {-1..1},{-1..1}|sed 5d

ลองออนไลน์!


หรือใช้cut36 ไบต์เช่นกัน
ბიმო

33 bytes สำหรับทุบตี + sed (แม้จะน่าเบื่อแค่ไหนก็ตาม),echo {-1..1},{-1..1}|sed s/0,0.//
Kritixi Lithos

printf %s\\n {-1..1},{-1..1}|grep 1ยัง 35.
Neil


7

เยลลี่ , 8 7 6 ไบต์

3p_2ẸƇ

ลองออนไลน์!

คำตอบเยลลี่ครั้งแรกของฉัน! ขอบคุณเดนนิสสำหรับชิ้นส่วนสุดท้ายของปริศนา

ทีนี้มาดูกันว่าฉันจะอธิบายได้ไหม ...

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 ไบต์ขอบคุณ Erik; -1 ไบต์ต้องขอบคุณ Mr Xcoder และ Dennis


1
เปลี่ยนแปลงคำตอบตามวิธีการนี้:3p3_2ẸƇ
Mr. Xcoder

@ Mr.Xcoder คุณสามารถดรอปวินาที3ได้
เดนนิส

@Dennis Oh จริง ๆ ในกรณีนี้ Adm สามารถอัพเดตด้วย 6-byter :)
Mr. Xcoder

7

R , 26 24 ไบต์

เครดิตไปที่ @JDoe สำหรับการบันทึกอีกสองไบต์ด้วยวิธีการโดยตรง:

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

ลองออนไลน์!

asnwer เดิม:

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]

ลองออนไลน์!

วิธีแก้ปัญหาสุดท้ายนี้อาจเป็น golfiest ถ้าผลลัพธ์อาจเป็น 1 ถึง 3 แทนที่จะเป็น -1 ถึง 1

ดูคำตอบที่ R อื่น ๆสำหรับการแก้ปัญหาสลับกับหรือexpand.gridcbind


ฮะใช้รูปแบบเอาต์พุตที่ยืดหยุ่นได้ดี!
Giuseppe

2
อันนี้ดีกว่าของฉันเพราะวิธีการที่ไร้ประโยชน์ในที่สุด :)
ngm

@Giuseppe เดิมผมพยายามcซึ่งไม่ได้ทำให้ความรู้สึกภายในเมทริกซ์ดังนั้นฉันเปลี่ยนไปpasteและรูปแบบการออกเดิม ...
Jayce

24 ไบต์ด้วยpaste
J.Doe

1
@ J.Doe คุณหิน!
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.

โกนสองไบต์ขอบคุณที่มีขนดก

ลองออนไลน์!


6

Haskell , 22 ไบต์

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

ลองออนไลน์!

Laikoni บันทึก 1 ไบต์


_:l=mapM(:[1,-1])[0,0]บันทึกเป็นไบต์ (นำมาจากคำตอบของ isaacgถึงความท้าทายก่อนหน้านี้)
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.

-1 ไบต์ต้องขอบคุณ Emigna!


แดงคุณชนะฉันไปแล้ว มีจุดเริ่มต้นเหมือนกัน ( 2Ý<ã) แต่ได้หาวิธีที่จะลบองค์ประกอบกลางของรายการคู่ .. ไม่ได้คิดเกี่ยวกับการจัดเรียงตามค่าสัมบูรณ์และลบแรก .. +1 จากฉัน
Kevin Cruijssen

2
ใช้ʒĀZเพื่อประหยัด 1
Emigna

@Emigna ขอบคุณที่ทำให้ฉันเข้าใจความแตกต่างระหว่างรุ่นปกติและรุ่น 05AB1IE ของคำสั่งที่ถูกต้อง :-)
Kaldo

5

MATLขนาด 12 ไบต์

9:q4X-3YA49-

ลองออนไลน์!

เพราะเป็นเดือนของ MATL นี่คือพอร์ต MATL ของคำตอบ Octave ของ @ Stewie ลำดับ [0 1 2 3 5 6 7 8] ถูกสร้างขึ้นเนื่องจากความแตกต่างระหว่าง [0 ... 8] และ 4


5

Java 8, 83 42 ไบต์

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

-41 ไบต์ขอบคุณ@AdmBorkBorkโดยการเข้ารหัสอย่างหนัก ..

ลองออนไลน์


รุ่นที่ไม่ได้เขียนโค้ดยากเป็นข้อมูลอ้างอิง ( 83 72 70 68 ไบต์ )

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

-11 ไบต์ขอบคุณที่@ OlivierGrégoire
-2 ไบต์สร้างพอร์ตของคำตอบ JavaScript (ES6) @ETHproductionsคำตอบ

ลองออนไลน์


คำตอบที่ไม่ใช่ hardcoded ใน 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





4

Husk , 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
tπ2↑3İZอีกทางเลือก 7 ไบต์
Laikoni

2
คุณสามารถบันทึกหนึ่งไบต์โดยการกรองรายการตามการแปลงทศนิยมลองออนไลน์!
Leo

3

PowerShell , 41 ไบต์

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

ลองออนไลน์!

สองครั้งสำหรับลูปในช่วง1..-1โดยมี-not equals ที่ส่วนท้ายเพื่อดึง0,0รายการที่ไม่เกี่ยวข้อง พวกเขาแต่ละคนถูกทิ้งไว้บนท่อและโดยปริยายWrite-outputเมื่อเสร็จสิ้นการโปรแกรมทำให้เราขึ้นบรรทัดใหม่ได้ฟรี


น่าเศร้าที่เพียงแค่เอาท์พุทสตริงแบร์โบนสั้นลงสองไบต์:

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

แต่นั่นน่าเบื่อ



3

J , 18 16 ไบต์

echo}.,{;~0 1 _1

ลองออนไลน์!


เหตุใดเครื่องหมายลบจึงแสดงเป็นขีดล่างใน TIO
Possum ที่ตาย

ทางเลือกที่ 18 ไบต์: echo }.>,{;~0 1 _1 TIO
Galen Ivanov

@Dead Possum ตัวเลขลบจะแสดงด้วยเครื่องหมายขีดล่างใน J
Galen Ivanov

1
ใช่ 17 :) echo}.>,{;~0 1 _1
Galen Ivanov

2
เป็นที่echoจำเป็น?
โคล

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 bytes

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

ลองออนไลน์!

ฉันรู้สึกว่าการท้าทายนี้ไม่มีคำตอบจากภาษา 2D แม้ว่าคนส่วนใหญ่จะไม่เคลื่อนไหวในแนวทแยงมุม จำนวนเอาต์พุตที่คั่นด้วยช่องว่างแต่ละคู่คั่นด้วยแท็บ




3

MATLขนาด 12 ไบต์

3:qq2Z^[]5Y(

ลองที่ MATL Online!

คำตอบ MATL ที่จริงจังครั้งแรกของฉัน! ขอบคุณมากสำหรับLuis Mendo , SanchisesและDJMcMayhemสำหรับความช่วยเหลือ

มันทำงานอย่างไร

3: qq2Z ^ [] 5Y (- โปรแกรมเต็มเอาต์พุตไปที่ STDOUT
3: - พิสัย 3 กด [1 2 3] ไปยังสแต็ก
  qq - ลดลง 2 อัตราผลตอบแทน [-1 0 1]
    2Z ^ - พลังคาร์ทีเซียน 2
         5Y (- แทนที่แถวที่ดัชนี 5 ด้วย ...
       [] - เวกเตอร์เปล่า


3

Bashขนาด 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.