Bir dizide sıçrayan


25

Giriş

Diziler ayrıca zıplayan top için bir alan olarak görülebilir. Bu elbette çok belirsiz geliyor, bu yüzden bir girdi örneği:

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

Buradaki zorluk, sekilen dizilerin çıktısını almaktır . Bunlar, alanın kenarlarında zıplayan diyagonal kalıplardan yapılır. Bu yol yukarı dönük . Sıçrayan ilk dizinin yolu (yolun doğrudan egde dışına çıkarıldığı):

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

Soldan sağa, bu sonuçlanır [1, 8, 3, 6, 5, 4, 7, 2, 9]. Bu bizim ilk sıçrayan dizimiz. İkinci sekilen dizinin yolu:

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

Bu sonuçlanır [9, 2, 7, 4, 5, 6, 3, 8, 1]. Sıçrayan üçüncü dizinin yolu:

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

Bu sonuçlanır [1, 8, 3, 6, 5, 4, 7, 2, 9]. Yani üç sekmeli dizi :

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

Görev

Yalnızca negatif olmayan tamsayı içeren en az 1 dizi göz önüne alındığında, tüm diziler aynı uzunluğa sahipken, tüm zıplayan dizileri çıkarır.

Test durumları

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

Bu , bu yüzden en az sayıda bayt olan gönderim kazanıyor!


2
Jelly bunu kazanır.
lirtosiast

Lütfen son diziden birinciden farklı olan üç dizili bir test çantası ve dört dizili bir test çantası ekleyebilir misiniz?
ETHProductions,

1
Sorun tanımını bulamıyorum. Biri bana nerede olduğunu söyleyebilir mi?
feersum,

Evet. Görevin açıklamasını bulamıyorum.
feersum,

1
@LuisMendo, zıplamanın tek yolu, 0 satırında daha fazla
yükselemez

Yanıtlar:


7

Pyth, 17 bayt

>lQC.e.>bkC+_PtQQ

Açıklama:

                      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

Burada dene .


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

ÖLÇEK

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>


3

CJam, 31 30 bayt

q~__W%1>W<+_z,_@*<zee::m>z\,<p

CJam tarzı dizilerin bir listesi olarak giriş ve çıkış.

Burada test et.

Kesinlikle golf oynamak ...


3

Jöle, 29 25 24 bayt

ṖḊm-³;Z
,ZL€R_€/‘ż€Çị/€€

@ Sp3000'e 5 bayt golf atmam için yardım ettiğin için teşekkürler!

Çevrimiçi deneyin!


2

Yakut (2.2.2p95), 124 bayt

->*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}}}

Bu muhtemelen çok daha iyi olabilirdi. Ne zaman sonra çözeceğim!


2

Japt, 55 49 41 39 bayt

Vay, bu hem çok zor hem de delicesine eğlenceliydi.

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

Çevrimiçi test edin!

Örneklere göre ters sırada çıktılar. Bu, 100'den fazla dizinin girişlerinde biraz kırılır; umarım bu çok fazla fark yaratmaz.

           // 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.

Rekabet etmeyen sürüm, 36 bayt

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

Bu iki sayı fonksiyonunu görevden önce uyguladım:

  • ò- aynı o, ancak [X..Y]bunun yerine döner[X..Y)
  • ó- aynı o, ancak [X..X+Y)bunun yerine döner[X..Y)

Ancak yanlış yerleştirilmiş 0olduklarından dolayı, adamlar hatalı ve her zaman boş diziler döndürdüler. Bu şimdi düzeltildi.

Çevrimiçi test edin!


2

Python 2, 107 106 108 105 104 bayt

(Bazı ekstra parenler bıraktı) (Yanlış başlangıç ​​konumu (ب_ب))) (zaten bu uzunlukta bir liste vardı)

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

Girdiyi bir işlev için argüman olarak kullanmak yasal değil mi? Bu benim ilk kez golf golf yanıtımı gönderiyorum.


Evet yasaldır :)
Adnan

1

APL, 33 karakter

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

←IO ← 0 farz edin. Buradaki düşünce, eğer orijinal matris ilk boyutunda matrisin ilk ve son sırasının traş olmasıyla ters çevrilmiş matris ile yükseltilmişse, zıplatma hareketinin bir matrisin yukarı doğru kaydırılmasıyla elde edilebileceğidir. grafiksel:

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

itibaren

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

APL içinde reverseve upward rotateaynı sembol şunlardır: .


İLK STEFANO'yu kullanın. yerine 0⌷.
Zacharý,

"İlk" ve "0⌷" ifadelerinin iç içe geçmiş bir diziye uygulandığında iki farklı sonuç vermesinden korkuyorum. Kendin için dene. İlk - 0⌷
lstefano

1

Clojure, 125 bayt

Vay, bu birikmiş karakterler oldukça hızlı.

(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))))))))))

Sadece letsık kullanılan değerleri tanımlayarak baytları kurtarmaya çalışıyorum .


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.