Sfida:
Data una matrice NxN in cui e una delle otto distinte "opzioni di piegatura", un array / elenco 2D con i valori sottratti.
Le otto opzioni di piegatura sono: da sinistra a destra; da destra a sinistra; dall'alto al basso; dal basso verso l'alto; topleft-to-bottomright; topright-to-bottomleft; bottomleft-to-topright; bottomright-to-topleft.
Esempi passo passo:
Matrice di input:
[[ 1, 3, 5, 7],
[ 0, 8, 6, 4],
[ 1, 1, 1, 1], (a'th row in the explanation below)
[ 1,25, 0,75]]
Con l'opzione di piegatura dall'alto verso il basso, produciamo il seguente risultato:
[[ 1,-7,-5,-3],
[ 0,22,-5,68]]
Perché? Pieghiamo dall'alto verso il basso. Poiché le dimensioni della matrice sono pari, non abbiamo uno strato intermedio da conservare così com'è. La riga "th" verrà sottratta dalla "th row (sarebbe stata " th row per matrici di dimensioni dispari); così diventa . La riga sarà quindi sottratta dalla riga (sarebbe stata la riga per le matrici di dimensioni dispari); così diventa .[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]
Con l'opzione di piegatura dal basso verso l'alto-sinistra invece (con la stessa matrice di input sopra) produciamo il risultato seguente:
[[-74, 2, 1, 7],
[ 0, 7, 6],
[-24, 1],
[ 1]]
Con le seguenti sottrazioni pieghevoli:
[[1-75, 3-1, 5-4, 7],
[ 0-0, 8-1, 6],
[1-25, 1],
[ 1]]
Regole della sfida:
- È possibile utilizzare otto lettere
[A-Za-z]
o numeri distinti nell'intervallo per le opzioni di piegatura. I numeri o sono probabilmente le opzioni più comuni, ma se si desidera utilizzare numeri diversi nell'intervallo per alcuni calcoli intelligenti, non esitate a farlo. Indica quali opzioni di piegatura hai utilizzato nella tua risposta. - La matrice di input sarà sempre una matrice NxN quadrata, quindi non è necessario gestire matrici NxM rettangolari. sarà sempre almeno 2, poiché una matrice vuota o 1x1 non può essere piegata.
- L'input della matrice conterrà sempre numeri non negativi nell'intervallo (i numeri nell'output saranno quindi nell'intervallo ).
- Con la piegatura (anti) diagonale o la piegatura verticale / orizzontale di dimensioni dispari, lo 'strato' centrale rimarrà invariato.
- L'I / O è flessibile. Può essere un array / elenco 2D di numeri interi; può essere restituito o stampato come stringa delimitata da spazio e newline; puoi modificare la matrice di input e sostituire i numeri che dovrebbero essere andati con
null
o un numero al di fuori[-999, 999]
dell'intervallo per indicare che non ci sono più; ecc ecc.
Regole generali:
- Questo è code-golf , quindi vince la risposta più breve in byte.
Non lasciare che le lingue di code-golf ti scoraggino dal pubblicare risposte con lingue non codegolfing. Prova a trovare una risposta il più breve possibile per "qualsiasi" linguaggio di programmazione. - Per la tua risposta valgono regole standard con regole I / O predefinite , quindi puoi usare STDIN / STDOUT, funzioni / metodo con i parametri corretti e tipo di ritorno, programmi completi. La tua chiamata.
- Sono vietate le scappatoie predefinite .
- Se possibile, aggiungi un link con un test per il tuo codice (ad es. TIO ).
- Inoltre, si consiglia vivamente di aggiungere una spiegazione per la risposta.
Casi test:
Input-matrix 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]]
Input-matrix 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
o numero intero nell'intervallo [-999,999]
, quindi l'ordine non ha importanza. E mi dispiace, ma è necessario produrre la piega corretta in base all'input, quindi non è consentito produrre tutti e otto.