Rebondir dans un tableau

25

introduction

Les tableaux peuvent également être considérés comme un champ pour une balle rebondissante. Bien sûr, cela semble très vague, voici donc un exemple d'entrée:

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

Le défi est de sortir les tableaux rebondis . Ceux-ci sont fabriqués à partir de motifs diagonaux qui rebondissent sur les bords du champ. Ce chemin est pointé vers le haut . Le chemin du premier tableau rebondi (dans lequel le chemin est directement rebondi sur l'egde) est:

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

De gauche à droite, cela se traduirait par [1, 8, 3, 6, 5, 4, 7, 2, 9]. Ceci est notre premier tableau rebondi. Le chemin pour le deuxième tableau rebondi:

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

Cela se traduit par [9, 2, 7, 4, 5, 6, 3, 8, 1]. Le chemin pour le troisième tableau rebondi est:

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

Cela se traduit par [1, 8, 3, 6, 5, 4, 7, 2, 9]. Les trois tableaux rebondis sont donc:

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

Tâche

Étant donné au moins 1 tableau contenant uniquement des entiers non négatifs, tous les tableaux ayant la même longueur, sortez tous les tableaux rebondis.

Cas de test

Cas de test 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]

C'est du , donc la soumission avec le moins d'octets gagne!

Adnan
la source
2
Jelly gagne cela.
lirtosiast
Pouvez-vous s'il vous plaît ajouter un testcase à trois baies où le dernier array est différent du premier et un testcase à quatre baies?
ETHproductions
1
Je ne trouve pas la description du problème. Quelqu'un peut-il me dire où il se trouve?
feersum
Oui. Je ne trouve pas de description de la tâche.
feersum
1
@LuisMendo c'est le seul moyen de rebondir, à la ligne 0 ça ne peut plus monter
edc65

Réponses:

7

Pyth, 17 octets

>lQC.e.>bkC+_PtQQ

Explication:

                      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

Essayez-le ici .

lirtosiast
la source
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))

TESTER

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>

edc65
la source
3

CJam, 31 30 octets

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

Entrée et sortie sous forme de liste de tableaux de style CJam.

Testez-le ici.

Très certainement golfable ...

Martin Ender
la source
3

Gelée, 29 25 24 octets

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

Merci pour @ Sp3000 de m'avoir aidé à jouer au golf sur 5 octets!

Essayez-le en ligne!

Dennis
la source
2

Ruby (2.2.2p95), 124 octets

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

Cela pourrait probablement être beaucoup mieux. Je vais comprendre comment plus tard!

Connor Clark
la source
2

Japt, 55 49 41 39 octets

Wow, c'était à la fois très délicat et incroyablement amusant.

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

Testez-le en ligne!

Sorties dans l'ordre inverse des exemples. Cela cassera légèrement sur les entrées de plus de 100 tableaux; j'espère que cela ne fait pas trop de différence.

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

Version non concurrente, 36 octets

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

J'avais implémenté ces deux fonctions numériques avant le défi:

  • ò- identique à o, mais retourne [X..Y]au lieu de[X..Y)
  • ó- identique à o, mais retourne [X..X+Y)au lieu de[X..Y)

Mais en raison d'un mauvais emplacement 0, ils étaient buggés et retournaient toujours des tableaux vides. Cela a maintenant été corrigé.

Testez-le en ligne!

ETHproductions
la source
2

Python 2, 107 106 108 105 104 octets

(Suppression de quelques parens supplémentaires) (Emplacement de départ incorrect (ب_ب)) (avait déjà une liste de cette longueur)

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

Il est légal d'avoir l'entrée comme argument d'une fonction, non? C'est la première fois que je soumets ma réponse de code de golf.

Orez
la source
Oui c'est légal :)
Adnan
1

APL, 33 caractères

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

Supposons que ⎕IO ← 0. L'idée est que le mouvement de rebond peut être obtenu par simple déplacement vers le haut d'une matrice, si la matrice d'origine est augmentée le long de la première dimension avec la matrice inversée avec sa première et sa dernière rangée rasées. Graphiquement:

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

de

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

Dans APL reverse et upward rotatesont le même symbole: .

lstefano
la source
UTILISEZ LE PREMIER STEFANO. au lieu de 0⌷.
Zacharý
J'ai peur que "first" et "0⌷" donnent deux résultats très différents lorsqu'ils sont appliqués à un tableau imbriqué. Essayez-le par vous-même. Premier vs 0⌷
lstefano
1

Clojure, 125 octets

Wow, cela a accumulé des personnages assez rapidement.

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

J'essaie simplement de sauvegarder des octets en letdéfinissant les valeurs fréquemment utilisées.

NikoNyrh
la source
0

Gelée *, 15 octets

JṚŒḄṖṙ’Ʋị⁸Jị"$€

Essayez-le en ligne!

* Version plus récente

Erik le Outgolfer
la source