Contexte
Dans la plupart des langages de programmation raisonnables, il est très facile de faire pivoter les lignes ou les colonnes d'un tableau 2D. Dans ce défi, votre tâche consiste à faire pivoter les anti-diagonales à la place. Rappelons que les anti-diagonales d'un réseau 2D sont ses tranches 1D prises dans la direction nord-est ↗.
Contribution
Un tableau 2D rectangulaire non vide de nombres à un chiffre dans n'importe quel format raisonnable. Notez que le tableau peut ne pas être un carré.
Sortie
Le même tableau, mais avec chaque anti-diagonale tournée d'un pas vers la droite.
Exemple
Considérez le 3x4
tableau d'entrée
0 1 2 3
4 5 6 7
8 9 0 1
Les anti-diagonales de ce tableau sont
0
4 1
8 5 2
9 6 3
0 7
1
Leurs versions tournées sont
0
1 4
2 8 5
3 9 6
7 0
1
Ainsi, la sortie correcte est
0 4 5 6
1 8 9 0
2 3 7 1
Règles et notation
Vous pouvez écrire un programme complet ou une fonction. Il est également acceptable d'écrire une fonction qui modifie le tableau d'entrée en place, si votre langue le permet. Le nombre d'octets le plus bas l'emporte et les failles standard sont interdites.
Classement
Voici un extrait de pile permettant de générer à la fois un classement régulier et un aperçu des gagnants par langue.
Pour vous assurer que votre réponse apparaît, commencez votre réponse par un titre, en utilisant le modèle Markdown suivant:
## Language Name, N bytes
où N
est la taille de votre soumission. Si vous souhaitez inclure plusieurs nombres dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers, ou si vous souhaitez répertorier les sanctions d'indicateur d'interprétation séparément, ou si vous souhaitez afficher les anciens scores que vous avez améliorés), assurez-vous que le score réel est le dernier chiffre de l'en-tête.
Cas de test supplémentaires
Input:
4
Output:
4
Input:
5 6 1
Output:
5 6 1
Input:
0 1
6 2
Output:
0 6
1 2
Input:
6 3 0 8
4 6 1 4
6 2 3 3
9 3 0 3
Output:
6 4 6 1
3 6 2 3
0 9 3 0
8 4 3 3
Input:
5 8 2
6 7 3
2 6 1
6 0 6
6 4 1
Output:
5 6 7
8 2 6
2 6 0
3 6 4
1 6 1
Input:
9 9 4 0 6 2
2 3 2 6 4 7
1 5 9 3 1 5
0 2 6 0 4 7
Output:
9 2 3 2 6 4
9 1 5 9 3 1
4 0 2 6 0 4
0 6 2 7 5 7
CJam,
44434240 octetsTestez-le ici.
Hmm, bien mieux que ma première tentative, mais j'ai le sentiment que Dennis résoudra cela beaucoup moins de toute façon ...
L'entrée et la sortie sont des grilles ASCII:
donne
la source
J, 24 caractères
Fonction prenant un argument.
J a un opérateur
/.
appelé Oblique . Il ne peut pas l'inverser, donc la reconstruction n'est pas anodine, mais vous pouvez envisager de "lister les obliques" comme une permutation des éléments du tableau. Nous inversons donc cette permutation avec/:
( Tri dyadique ), en plaçant la permutation "listant les obliques" pour cette taille (</.@i.@$
) à droite et nos nouvelles valeurs obliques, correctement tournées, à gauche. Ensuite, nous remodelons cette liste dans l'ancien tableau rectangulaire en utilisant du bon vieux$$
.Essayez-le en ligne.
la source
J,
3830 octets8 octets enregistrés grâce à @algorithmshark.
La fonction rassemble les bords supérieur et gauche dans une liste, coupe la liste en deux morceaux de tailles suffisantes et les coud à droite et en bas de la partie centrale.
Usage:
Essayez-le en ligne ici.
la source
{./.
remplace}:@{.,{:"1
, et vous pouvez économiser deux tildes en retournant le train autour de :{./.((}.~#),~({.~#),.])}:"1@}.
.Julia,
153149139 octetsCela crée une fonction sans nom qui accepte un tableau et renvoie le tableau d'entrée modifié sur place.
Ungolfed:
Merci à Martin Büttner pour ses conseils algorithmiques et pour avoir économisé 4 octets!
la source
ES6, 75 octets
Cela accepte un tableau de tableaux comme paramètre et le modifie en place.
Ungolfed:
Voir le diagramme de @ aditsu pour plus de précisions.
la source
{t.push(r.pop());r.unshift(t.shift())}
àt.push(r.pop())+r.unshift(t.shift())
Pyth, 20 octets
Utilise l'approche d'Adistu qui consiste à supprimer la ligne du haut et la colonne de droite, puis à les coller à gauche et en bas. Mais avec des structures de données mutables, pas des transpositions.
la source
Octave, 85 octets
J'espère que je pourrais me débarrasser de l'
end
art.la source
Python 2 ,
11310494 bytesEssayez-le en ligne!
Il s'agit d'une interprétation assez littérale de la méthode de @ aditsu. La syntaxe de Python pour traiter les listes vides comme False a permis d'économiser 10 octets supplémentaires.
la source
0
in[0:1]