Défi:
Étant donné une matrice NxN où et l'une des huit «options de pliage» distinctes, un tableau / liste 2D avec les valeurs soustraites.
Les huit options de pliage sont: de gauche à droite; de droite à gauche; de haut en bas; de bas en haut; de haut en bas à droite; de droite à gauche; de gauche à droite; de bas en haut à gauche.
Exemples étape par étape:
Matrice d'entrée:
[[ 1, 3, 5, 7],
[ 0, 8, 6, 4],
[ 1, 1, 1, 1], (a'th row in the explanation below)
[ 1,25, 0,75]]
Avec l'option de pliage de haut en bas, nous produisons les résultats suivants:
[[ 1,-7,-5,-3],
[ 0,22,-5,68]]
Pourquoi? Nous plions de haut en bas. Étant donné que les dimensions de la matrice sont uniformes, nous n'avons pas de couche intermédiaire à conserver en l'état. La 'e ligne sera soustraite de la ' e ligne (aurait été 'e ligne pour les matrices de dimension impaire); devient ainsi . La 'ème ligne sera alors soustraite par la ' ème ligne (aurait été 'ème ligne pour les matrices de dimension impaire); devient ainsi .[1, 1, 1, 1]
[1-0, 1-8, 1-6, 1-4]
[1, -7, -5, -3]
[1, 25, 0, 75]
[1-1, 25-3, 0-5, 75-7]
[0, 22, -5, 68]
Avec l'option de pliage de droite à droite à la place (avec la même matrice d'entrée ci-dessus), nous produisons les résultats suivants:
[[-74, 2, 1, 7],
[ 0, 7, 6],
[-24, 1],
[ 1]]
Avec les soustractions de pliage suivantes:
[[1-75, 3-1, 5-4, 7],
[ 0-0, 8-1, 6],
[1-25, 1],
[ 1]]
Règles du défi:
- Vous pouvez utiliser huit lettres
[A-Za-z]
ou nombres distincts dans la plage pour les options de pliage. Les nombres ou sont probablement les options les plus courantes, mais si vous souhaitez utiliser des nombres différents dans la plage pour certains calculs intelligents, n'hésitez pas à le faire. Veuillez indiquer les options de pliage que vous avez utilisées dans votre réponse. - La matrice d'entrée sera toujours une matrice NxN carrée, vous n'avez donc pas à gérer de matrices NxM rectangulaires. sera également toujours au moins 2, car une matrice vide ou 1x1 ne peut pas être pliée.
- L'entrée de la matrice contiendra toujours des nombres non négatifs dans la plage (les nombres dans la sortie seront donc dans la plage ).
- Avec le pliage (anti) diagonal ou le pliage vertical / horizontal de dimensions impaires, la «couche» centrale restera inchangée.
- Les E / S sont flexibles. Peut être un tableau 2D / liste d'entiers; peut être retourné ou imprimé sous forme de chaîne délimitée par des espaces et des sauts de ligne; vous pouvez modifier la matrice d'entrée et remplacer les nombres qui devraient disparaître
null
ou un nombre en dehors de la[-999, 999]
plage pour indiquer qu'ils sont partis; etc.
Règles générales:
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues autres que le golf de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation. - Des règles standard s'appliquent à votre réponse avec des règles d'E / S par défaut , vous êtes donc autorisé à utiliser STDIN / STDOUT, des fonctions / méthodes avec les paramètres appropriés et des programmes complets de type retour. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code (par exemple TIO ).
- De plus, l'ajout d'une explication à votre réponse est fortement recommandé.
Cas de test:
Matrice d'entrée 1:
Input-matrix (for the following eight test cases):
[[ 1, 3, 5, 7],
[ 0, 8, 6, 4],
[ 1, 1, 1, 1],
[ 1,25, 0,75]]
Input-folding option: left-to-right
Output: [[2,6],[-2,4],[0,0],[-25,74]]
Input-folding option: right-to-left
Output: [[-6,-2],[-4,2],[0,0],[-74,25]]
Input-folding option: top-to-bottom
Output: [[1,-7,-5,-3],[0,22,-5,68]]
Input-folding option: bottom-to-top
Output: [[0,-22,5,-68],[-1,7,5,3]]
Input-folding option: topleft-to-bottomright
Output: [[7],[6,-1],[1,-7,-2],[1,24,0,74]]
Input-folding option: topright-to-bottomleft
Output: [[1],[-3,8],[-4,-5,1],[-6,21,-1,75]]
Input-folding option: bottomleft-to-topright
Output: [[1,3,4,6],[8,5,-21],[1,1],[75]]
Input-folding option: bottomright-to-topleft
Output: [[-74,2,1,7],[0,7,6],[-24,1],[1]]
Matrice d'entrée 2:
Input-matrix (for the following eight test cases):
[[17, 4, 3],
[ 8, 1,11],
[11, 9, 7]]
Input-folding option: left-to-right
Output: [[4,-14],[1,3],[9,-4]]
Input-folding option: right-to-left
Output: [[14,4],[-3,1],[4,9]]
Input-folding option: top-to-bottom
Output: [[8,1,11],[-6,5,4]]
Input-folding option: bottom-to-top
Output: [[6,-5,-4],[8,1,11]]
Input-folding option: topleft-to-bottomright
Output: [[3],[1,7],[11,1,-10]]
Input-folding option: topright-to-bottomleft
Output: [[17],[4,1],[8,-2,7]]
Input-folding option: bottomleft-to-topright
Output: [[17,-4,-8],[1,2],[7]]
Input-folding option: bottomright-to-topleft
Output: [[10,-7,3],[-1,1],[11]]
A-Za-z
ou n'importe quel entier de la plage[-999,999]
, donc l'ordre n'a pas d'importance. Et désolé, mais vous devez sortir le bon pli en fonction de l'entrée, donc la sortie des huit n'est pas autorisée.Réponses:
Octave ,
256248244248 octetsEssayez-le en ligne!
-2 octets (et un peu de rangement) grâce à Luis Mendo
+2 octets en raison de la correction pour TB
Opérations 1-indexées pour les valeurs de b de 1-8:
Cela m'a donné mal à la tête, je le jouerai correctement plus tard
la source
rows(a)
place desize(a,2)
Gelée ,
3934 octetsIl est possible de jouer au golf en combinant certaines des deux "fonctions".
... oui: -5 grâce à NickKennedy!
Essayez-le en ligne!
Un lien dyadique acceptant un entier (l'instruction) et une liste de listes de nombres (la matrice).
Comment?
Le lien crée du code Jelly qui est ensuite évalué en utilisant M comme entrée ...
Chacune des huit options est alors:
Celles-ci (sauf
0
et4
) appliquent chacune une transformation à l'M
utilisation deZ
(transposer),Ṛ
(inverser) etU
(inverser chacune); puis l'une des deux fonctions (voir ci-dessous), puis l'inverse de la transformation de configuration (s'il y en avait une) implémentée avec l'inverse du code.Les deux fonctions internes sont:
la source
JavaScript (ES6),
149 ... 133128 octets(matrix)(d)
NaN
Essayez-le en ligne!
Commenté
la source
Gelée ,
7134 octetsEssayez-le en ligne!
Suite de tests
Un programme complet. Le bon argument est la matrice. L'argument de gauche est le type de pli:
Réécrit pour utiliser le binaire bijectif 5 bits en entrée. Notez que le programme ci-dessus ne fonctionnera pas de manière répétée pour plusieurs plis.
la source
Octave ,
482 octets, 459 octetsLes entrées pour décider des directions de pliage sont:
1) de gauche à droite
2) de bas en haut
3) de droite à gauche
4) de haut en bas
5) tr à bl
6) br à tl
7) bl à tr
8) tl à br
Chaque appel génère uniquement le pli spécifié, plutôt que tous (ce qui prendrait probablement moins d'octets). Le plus gros problème est que dans ce cas, je ne peux pas comprendre comment mettre les plis 1-4 et 5-8 dans la même boucle. Mais au moins l'octave a de belles matrices.
Essayez-le en ligne!
La suppression de sortie coûte des octets, donc ignorez tout ce qui n'est pas l'instruction de retour (ans =).
la source
Fusain ,
7877 octetsEssayez-le en ligne! Le lien est vers la version détaillée du code. Utilise les options de pliage suivantes:
Les valeurs pliées sont remplacées par des chaînes vides. Explication:
Faites pivoter le tableau quatre fois.
Pliez le tableau horizontalement, le cas échéant.
Pliez le tableau en diagonale, le cas échéant.
Sortez la matrice une fois qu'elle est retournée dans son orientation d'origine.
la source