ตีกลับในอาร์เรย์


25

บทนำ

อาร์เรย์ยังสามารถมองเห็นเป็นสนามสำหรับลูกบอลกระดอน แน่นอนว่ามันฟังดูคลุมเครือดังนั้นนี่คือตัวอย่างของอินพุต:

[1, 2, 3, 4, 5, 6, 7, 8, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

ความท้าทายคือการส่งออกอาร์เรย์เด้ง สิ่งเหล่านี้ทำจากลวดลายเส้นทแยงมุมที่กระดอนที่ขอบสนาม เส้นทางนี้เป็นแหลมขึ้น เส้นทางสำหรับอาร์เรย์ที่เด้งแรก (ซึ่งเส้นทางนั้นถูกเด้งออกโดยตรงจาก egde) คือ:

[1, -, -, -, 5, -, -, -, 9]
[-, 8, -, 6, -, 4, -, 2, -]
[-, -, 3, -, -, -, 7, -, -]

[1, 8, 3, 6, 5, 4, 7, 2, 9]จากซ้ายไปขวานี้จะส่งผลให้ นี่คืออาร์เรย์ที่เด้งแรกของเรา เส้นทางสำหรับอาร์เรย์ที่เด้งที่สอง:

[-, 2, -, -, -, 6, -, -, -]
[9, -, 7, -, 5, -, 3, -, 1]
[-, -, -, 4, -, -, -, 8, -]

[9, 2, 7, 4, 5, 6, 3, 8, 1]ผลนี้ใน เส้นทางสำหรับอาร์เรย์ที่ตีกลับที่สามคือ:

[-, -, 3, -, -, -, 7, -, -]
[-, 8, -, 6, -, 4, -, 2, -]
[1, -, -, -, 5, -, -, -, 9]

[1, 8, 3, 6, 5, 4, 7, 2, 9]ผลนี้ใน ดังนั้นสามอาร์เรย์ที่เด้งคือ:

[1, 8, 3, 6, 5, 4, 7, 2, 9]
[9, 2, 7, 4, 5, 6, 3, 8, 1]
[1, 8, 3, 6, 5, 4, 7, 2, 9]

งาน

กำหนดอย่างน้อย 1 อาร์เรย์ที่มีจำนวนเต็มไม่เป็นลบเท่านั้นโดยมีอาร์เรย์ทั้งหมดที่มีความยาวเท่ากันเอาท์พุทอาร์เรย์เด้งทั้งหมด

กรณีทดสอบ

กรณีทดสอบ 1:

Input:                       Output:
[1, 2, 3, 4, 5]              [1, 7, 3, 9, 5]
[6, 7, 8, 9, 0]              [6, 2, 8, 4, 0]


Input:                       Output:
[1, 2, 3, 4, 5]              [1, 2, 3, 4, 5]


Input:                       Output:
[0, 0, 0, 0, 0, 0, 0, 0]     [0, 9, 0, 9, 0, 9, 0, 100]
[9, 9, 9, 9, 9, 9, 9, 100]   [9, 0, 9, 0, 9, 0, 9, 0]
[0, 0, 0, 0, 0, 0, 0, 0]     [0, 9, 0, 9, 0, 9, 0, 100]


Input:                       Output:
[0, 1, 2, 3, 4, 5]           [0, 7, 14, 9, 4, 11]
[6, 7, 8, 9, 10, 11]         [6, 1, 8, 15, 10, 5]
[12, 13, 14, 15, 16, 17]     [12, 7, 2, 9, 16, 11]


Input:                       Output:
[0, 0, 0, 0, 0, 0]           [0, 2, 2, 6, 2, 6]
[1, 2, 3, 4, 5, 6]           [1, 0, 3, 2, 5, 2]
[2, 2, 2, 2, 2, 2]           [2, 2, 0, 4, 2, 4]
[9, 8, 7, 6, 5, 4]           [9, 2, 3, 0, 5, 2]

นี่คือดังนั้นการส่งที่มีจำนวนไบต์น้อยที่สุดจะชนะ!


2
เยลลี่ชนะรางวัลนี้
lirtosiast

คุณช่วยเพิ่ม testcase สามอาเรย์ที่ array สุดท้ายแตกต่างจาก testcase แรกและสี่ array ได้หรือไม่?
ETHproductions

1
ฉันหาคำอธิบายปัญหาไม่พบ มีใครบอกฉันได้ไหมว่าอยู่ที่ไหน
feersum

ใช่. ฉันไม่พบคำอธิบายของงาน
feersum

1
@ LuisMendo เป็นวิธีเดียวที่จะตีกลับที่บรรทัด 0 ไม่สามารถขึ้นได้อีก
edc65

คำตอบ:


7

Pyth, 17 ไบต์

>lQC.e.>bkC+_PtQQ

คำอธิบาย:

                      implicit: Q=input
>                     First
  l Q                   len(Q) elements of the
  C .e                  Transpose of enumerated map lambda b,k:
       .>                 Rotate the kth element rightwards by
          b
          k               k.
       C +              Transpose of: Q concatenated to
           _ P t Q        itself reversed without first and last elements.
           Q

ลองมันนี่


7

JavaScript (ES6), 70

a=>a.map((r,k)=>r.map((e,j)=>(a[k-=d]||a[d=-d,k-=d+d]||r)[j],d=1,++k))

ทดสอบ

F = a=>a.map((r,k)=>r.map((e,j)=>(a[k-=d]||a[d=-d,k-=d+d]||r)[j],d=1,++k))

test = [{
  I: [
    [1, 2, 3, 4, 5],
    [6, 7, 8, 9, 0]
  ],
  O: [
    [1, 7, 3, 9, 5],
    [6, 2, 8, 4, 0]
  ]
}, {
  I: [
    [1, 2, 3, 4, 5]
  ],
  O: [
    [1, 2, 3, 4, 5]
  ]
}, {
  I: [
    [0, 0, 0, 0, 0, 0, 0, 0],
    [9, 9, 9, 9, 9, 9, 9, 100],
    [0, 0, 0, 0, 0, 0, 0, 0]
  ],
  O: [
    [0, 9, 0, 9, 0, 9, 0, 100],
    [9, 0, 9, 0, 9, 0, 9, 0],
    [0, 9, 0, 9, 0, 9, 0, 100]
  ]
}, {
  I: [
    [0, 1, 2, 3, 4, 5],
    [6, 7, 8, 9, 10, 11],
    [12, 13, 14, 15, 16, 17]
  ],
  O: [
    [0, 7, 14, 9, 4, 11],
    [6, 1, 8, 15, 10, 5],
    [12, 7, 2, 9, 16, 11]
  ]
}, {
  I: [
    [0, 0, 0, 0, 0, 0],
    [1, 2, 3, 4, 5, 6],
    [2, 2, 2, 2, 2, 2],
    [9, 8, 7, 6, 5, 4]
  ],
  O: [
    [0, 2, 2, 6, 2, 6],
    [1, 0, 3, 2, 5, 2],
    [2, 2, 0, 4, 2, 4],
    [9, 2, 3, 0, 5, 2]
  ]
}];

console.log = x => O.textContent += x + '\n';

test.forEach(t => {
  var r = F(t.I),
    ok = r.join `\n` == t.O.join `\n`
  console.log((ok ? 'OK' : 'KO') + '\nInput\n' + t.I.join `\n` + '\nOutput\n' + r.join `\n` + '\n')
})
<pre id=O></pre>




2

ทับทิม (2.2.2p95), 124 ไบต์

->*a{b=a.length;b<2?a:b.times.map{|i|d=i>0?-1:1;c=i;a[0].length.times.map{|j|r=a[c][j];c+=d;d*=-1if c==0||c==a.length-1;r}}}

นี่น่าจะดีกว่าเยอะ ฉันจะหาวิธีในภายหลัง!


2

Japt, 55 49 41 39 ไบต์

ว้าวนั่นมันทั้งยากและสนุกจริงๆ

C=2*Nl -2Nw £YoY+Ul)£NgLmX%CC-X%C)gY} ·

ทดสอบออนไลน์!

เอาต์พุตในลำดับย้อนกลับไปยังตัวอย่าง สิ่งนี้จะแตกเล็กน้อยในอินพุตมากกว่า 100 อาร์เรย์ หวังว่านี่จะไม่สร้างความแตกต่างมากนัก

           // Implicit: N = array of input arrays, U = first input array, J = -1, L = 100
           // Let's use the first example. 3 input arrays, each of length 9.
C=2*Nl -2  // Set variable C to 2*N.length - 2. In the example, C is 4.
Nw      }  // Reverse N and map each index Y to:
YoY+Ul)    //  Create the range [Y...U.length+Y).
           //  The first time through (Y=0), we have   [0, 1, 2, 3, 4, 5, 6, 7, 8]
£       }  //  Map each item X and index Y to:
X%C        //   Take X mod C.                          [0, 1, 2, 3, 0, 1, 2, 3, 0]
C-X%C      //   Take C - (X mod C).                    [4, 3, 2, 1, 4, 3, 2, 1, 4]
Lm         //   Take the minimum of these and 100.     [0, 1, 2, 1, 0, 1, 2, 1, 0]
Ng         //   Get the array at the resulting index.
gY         //   Get the item at index Y in this array. [1, 8, 3, 6, 5, 4, 2, 7, 9]
·          // Join the result with newlines. I guess this isn't necessary, but it helps with readability.

รุ่นที่ไม่ใช่การแข่งขัน 36 ไบต์

C=J+Nl)òC±C ®óUl)£NgLmX%CC-X%C)gY} ·

ฉันได้ใช้ฟังก์ชั่นตัวเลขทั้งสองนี้ก่อนที่จะมีการท้าทาย:

  • ò- เหมือนoแต่ส่งคืน[X..Y]แทน[X..Y)
  • ó- เหมือนoแต่ส่งคืน[X..X+Y)แทน[X..Y)

แต่เนื่องจากวางผิดที่0พวกเขามีรถและกลับอาร์เรย์ที่ว่างเปล่าเสมอ สิ่งนี้ได้รับการแก้ไขแล้ว

ทดสอบออนไลน์!


2

Python 2, 107 106 108 105 104 ไบต์

(ดรอปเพิ่มเติมบางส่วน) (ตำแหน่งเริ่มต้นผิด (ب_ب)) (มีรายการความยาวนั้นอยู่แล้ว)

def b(a):
 r,e=len(a)-1,enumerate
 print[[a[abs((i-o-r)%(r*2or 1)-r)][i]for i,_ in e(q)]for o,q in e(a)]

เป็นเรื่องถูกกฎหมายที่จะมีอินพุตเป็นอาร์กิวเมนต์ของฟังก์ชันใช่ไหม นี่เป็นครั้งแรกที่ฉันส่งคำตอบกอล์ฟ


ใช่มันถูกกฎหมาย :)
Adnan

1

APL, 33 ตัวอักษร

{(⍳≢⍵){0⌷(⍺-⍳≢⍉⍵)⊖⍵⍪1↓¯1↓⊖⍵}¨⊂↑⍵}

สมมติ⎕IO← 0 แนวคิดก็คือว่าการเคลื่อนที่ที่กระเด้งสามารถทำได้โดยการเลื่อนขึ้นของเมทริกซ์อย่างง่ายถ้าเมทริกซ์ดั้งเดิมถูกเพิ่มตามมิติแรกโดยเมทริกซ์จะกลับด้านด้วยการโกนครั้งแรกและครั้งสุดท้าย กราฟิก:

1 - - - - - 1 - - - -
- 2 - - - 2 - 2 - - -
- - 3 - 3 - - - 3 - 3
- - - 4 - - - - - 4 -

จาก

1 - - - - - 1 - - - -
- 2 - - - - - 2 - - -
- - 3 - - - - - 3 - -
- - - 4 - - - - - 4 -
- - - - 3 - - - - - 3
- - - - - 2 - - - - -

ใน APL reverseและเป็นสัญลักษณ์เดียวกัน:upward rotate


ใช้สเตฟาโนครั้งแรก แทน 0⌷
Zacharý

ฉันกลัว "ครั้งแรก" และ "0⌷" ให้ผลลัพธ์ที่แตกต่างกันสองอย่างเมื่อนำไปใช้กับอาร์เรย์ที่ซ้อนกัน ลองด้วยตัวคุณเอง ครั้งแรกกับ0⌷
lstefano

1

Clojure, 125 ไบต์

ว้าวตัวละครที่สะสมนี้ค่อนข้างเร็ว

(fn[v](let[H(count v)r range R(r H)](for[i R](map #((v %2)%)(r(count(v 0)))(drop i(cycle(concat R(reverse(r 1(dec H))))))))))

เพียงแค่พยายามบันทึกไบต์โดยletกำหนดค่าที่ใช้บ่อย


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.