Contribution:
- Un nombre entier
n
- Deux matrices carrées de taille égale (avec leur largeur / hauteur étant un multiple de
n
)
Sortie:
L'une des deux valeurs distinctes de votre choix, l'une étant pour les résultats véridiques et l'autre pour les résultats falsey (donc oui, 1/0
au lieu de des true/false
sorties valides pour des langages comme Java, même si elles ne sont pas considérées comme des valeurs véridiques / falsey officielles ).
La sortie truey / falsey indique si nous pouvons réorganiser les blocs de taille n by n
dans une matrice pour la rendre égale à l'autre matrice.
Exemple:
Contribution:
Matrix 1:
1 2 3 4 5 6
7 8 9 0 1 2
3 4 5 6 7 8
9 8 7 6 5 4
3 2 1 0 9 8
1 1 1 1 1 1
Matrix 2:
3 2 9 8 7 8
1 1 1 1 5 4
3 4 5 6 1 0
9 0 7 6 1 1
5 6 1 2 3 4
1 2 7 8 9 8
Integer n:
2
Sortie: truthy
Pourquoi?
Si nous divisons les matrices en blocs de 2 by 2
, nous pouvons voir que tous les blocs sur une matrice peuvent également être trouvés dans l'autre matrice:
Matrix 1:
1 2 | 3 4 | 5 6
7 8 | 9 0 | 1 2
---------------
3 4 | 5 6 | 7 8
9 8 | 7 6 | 5 4
---------------
3 2 | 1 0 | 9 8
1 1 | 1 1 | 1 1
Matrix 2:
3 2 | 9 8 | 7 8
1 1 | 1 1 | 5 4
---------------
3 4 | 5 6 | 1 0
9 0 | 7 6 | 1 1
---------------
5 6 | 1 2 | 3 4
1 2 | 7 8 | 9 8
Règles du défi:
- Vous pouvez supposer que les matrices ne contiendront que des chiffres non négatifs (plage
[0,9]
) - Vous pouvez supposer que la largeur / hauteur des matrices sont égales, et un multiple de
n
- Vous pouvez supposer
n
qu'il sera dans la plage[1, 50]
et que la largeur / hauteur des matrices sont dans la plage[1,100]
. - Les blocs individuels de
n by n
ne peuvent être utilisés qu'une seule fois pour déterminer si les matrices sont des permutations les unes des autres lorsqu'elles sont divisées en blocs den by n
. - Il peut y avoir plusieurs
n by n
blocs identiques. - Les
n by n
blocs resteront dans la même orientation lors de la vérification si les deux matrices sont permutations l'une de l'autre lorsqu'elles sont divisées en blocs den by n
.
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:
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 5 6 3 2 9 8 7 8 2
7 8 9 0 1 2 1 1 1 1 5 4
3 4 5 6 7 8 3 4 5 6 1 0
9 8 7 6 5 4 9 0 7 6 1 1
3 2 1 0 9 8 5 6 1 2 3 4
1 1 1 1 1 1 1 2 7 8 9 8
Output:
truthy
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 5 6 3 2 9 8 7 8 1
7 8 9 0 1 2 1 1 1 1 5 4
3 4 5 6 7 8 3 4 5 6 1 0
9 8 7 6 5 4 9 0 7 6 1 1
3 2 1 0 9 8 5 6 1 2 3 4
1 1 1 1 1 1 1 2 7 8 9 8
Output:
truthy
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 5 6 3 2 9 8 7 8 3
7 8 9 0 1 2 1 1 1 1 5 4
3 4 5 6 7 8 3 4 5 6 1 0
9 8 7 6 5 4 9 0 7 6 1 1
3 2 1 0 9 8 5 6 1 2 3 4
1 1 1 1 1 1 1 2 7 8 9 8
Output:
falsey
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 1 2 3 4 4
2 3 4 5 2 3 4 5
3 4 5 6 3 4 5 6
4 5 6 7 4 5 6 7
Output:
truthy
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 3 4 3 4 2
2 3 4 5 4 5 4 5
3 4 5 6 1 2 5 6
4 5 6 7 2 3 6 6
Output:
falsey
Input:
Matrix 1: Matrix 2: Integer:
1 2 2 3 1
3 4 1 1
Output:
falsey
Input:
Matrix 1: Matrix 2: Integer:
0 8 1
Output:
falsey
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 1 2 1 2 2
5 6 7 8 5 6 5 6
9 0 0 9 0 9 9 0
4 3 2 1 2 1 4 3
Output:
falsey
Input:
Matrix 1: Matrix 2: Integer:
1 2 1 2 9 5 1 2 2
3 4 3 4 7 7 3 4
8 3 9 5 1 2 8 3
6 1 7 7 3 4 6 1
Output:
truthy
Input:
Matrix 1: Matrix 2: Integer:
1 0 2 0 0 3 1 1 1 0 0 3 2
1 1 1 1 1 1 2 0 1 1 1 1
2 2 2 2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4 4 4 4 4
5 5 5 5 5 5 5 5 5 5 5 5
Output:
falsey
[ [ 0 ] ], [ [ 25 ] ], 1
présent? J'ai compris avecYou can assume the matrices will only contain non-negative digits (range [0,9])
ça que les valeurs matricielles ne sont qu'entre 0 et 9?[0,9]
plus tard dans le bac à sable. J'ai changé le cas de test en[[0]],[[8]]
.Réponses:
Gelée ,
109 octetsEssayez-le en ligne! (ou avec prétraitement pour un copier-coller plus facile à partir des cas de test)
Un lien dyadique acceptant une liste de deux matrices (comme des listes de listes) sur la gauche et le nombre entier situé sur la droite qui produit
1
ou0
pour truthy ou Falsey respectivement.Comment?
la source
APL (Dyalog Extended) ,
191817 octets-2 grâce à ngn.
Fonction infixe tacite anonyme. Prend
n
comme argument de gauche et liste de deux matrices comme argument de droite. Nécessite une indexation nulle (⎕IO←0
). Par ailleurs, cette fonction fonctionne sur des tableaux de n'importe quel nombre de dimensions.Essayez-le en ligne!
≡.{
…}
Résultats identiques de la fonction suivante appliquée à chaque matrice⍵
avecn
as⍺
?≢⍵
taille de la matrice⍳
indices 0… taille – 1⍺|
reste de la division lorsqu'il est divisé parn
⊂
enfermer pour utiliser dans toutes les dimensions⍵⊂⍨
utiliser cela pour partitionner * la matrice en une matrice de sous-matrices* commence une nouvelle partition lorsque l'élément correspondant est inférieur au précédent; supprime les éléments marqués par zéro
,
défiler la matrice dans une liste de sous-matrices∧
Trier par ordre croissantla source
(≢⍵)⍴⍺↑1
->0=⍺|⍳≢⍵
(avec⎕io←0
)≡/{}¨
->≡.{}
Python 2 ,
108103 octetsEssayez-le en ligne!
la source
Perl 6 ,
94 6863 octetsEssayez-le en ligne!
Bloc de code anonyme qui accepte l'entrée
size, [matrix1, matrix2]
et renvoie un booléenTrue/False
. Il pourrait y avoir un moyen plus efficace de diviser la matrice en morceaux querotor
.Explication:
la source
05AB1E , 14 octets
Essayez-le en ligne!
la source
Java (JDK) , 221 octets
Essayez-le en ligne!
Explication
L'idée est de choisir chaque petite cellule sous forme de chaîne, ce qui est comparable, puis de trier ces chaînes et de les comparer dans l'ordre.
Crédits
la source
for(j=0;j<l;){c[z=i/n+j/n*x]+=a[i][j];d[z]+=b[i][j++];}
? .. Vous pouvez retirer les supports en mettant tout à l'intérieur de la boucle. De plus, lei=0
dans la boucle peut être supprimé, car votrei
est déjà 0 à la déclaration.var d=new String[x*x];
jouervar d=c.clone();
au golf: peut l'être à la place. 234 octets[
et]
par{
et}
et ajouter un interlignenew int[][]
, et cela aurait suffi. ;)i=0
était un reste quand je remplissais les tableaux par moi - même plutôt que d' utiliserArrays.fill
. Merci :-) Et pour leclone
j'ai pensé à l'utiliser, mais je pensais toujours qu'il aurait retourné unObject
et non le type réel. Je dois être plusieurs versions en retard sur ce point;)Japt , 18 octets
Essayez-le en ligne!
Explication:
L'étape "Transformez-la en chaîne" est nécessaire car Japt ne compare pas les tableaux par valeur et la fonction intégrée à contourner ne fonctionne pas pour les tableaux multidimensionnels .
la source
A.e()
travailler pour des tableaux multidimensionnels; toujours voulu y revenir. En attendantÕmòV
-> vousyòV
fera économiser un octet.TSQL, 164 octets
Remplir une variable de table afin d'avoir une entrée, cette création d'entrée et l'insertion de données n'a pas été incluse dans le nombre d'octets. Seule la requête réelle pour extraire les données.
Golfé (hors table de test - on peut le trouver dans la version non golfée):
Non golfé:
Essaye le
la source
JavaScript (ES6), 88 octets
Essayez-le en ligne!
Comment?
Ce code est:
Il profite des limites décrites dans le challenge:
Une matrice se compose de chiffres uniques, nous pouvons donc simplement concaténer toutes les cellules d'une sous-matrice sans séparateur et en obtenir une représentation unique (par exemple, elles
[[1,2],[3,4]]
peuvent être stockées sous"1234"
).ou comme code JS:
y / n << 7 | x << n
Commenté
la source
Fusain ,
5449 octetsEssayez-le en ligne!Le lien est vers la version détaillée du code. Prend l'entrée comme un tableau de tableaux bidimensionnels de taille égale. Sorties 1 en cas de succès, rien en cas d'échec. Explication:
Supposez le succès.
Boucle sur les tableaux.
Divisez le tableau en
n
morceaux de ligne de taille.Faites une boucle sur chaque bloc de colonne.
Extrayez le bloc de colonne pour chaque ligne du bloc de ligne et enregistrez la sous-matrice résultante dans une liste.
Bien que la liste ne soit pas vide, supprimez le dernier morceau de la liste, qui provient normalement du deuxième tableau.
Comptez le nombre d'occurrences de ce bloc dans la première moitié de la liste, qui dans des circonstances normales contient les morceaux restants du premier tableau.
Si différent de zéro, supprimez la première occurrence de ce morceau de la liste.
Si zéro, effacez la sortie, ce qui la rend fausse.
la source
J , 55 octets
Essayez-le en ligne!
Une solution horrible, je l'ai juste fait fonctionner - je n'ai pas le pouvoir de jouer au golf ...
la source
Haskell,
7473 octetsRemarque: TIO n'a pas été installé
Data.Lists
, j'utilise donc à laData.List
place une fonction manquantechunksOf
: essayez-la en ligne!la source
C # (Visual C # Interactive Compiler) , 186 octets
Essayez-le en ligne!
-1 merci à @KevinCruijssen!
Code moins golfé:
la source
j++
peut être retiré et peut être placé+=c[i][j++]+" ";
pour enregistrer un octet.PHP ,
186163162 octetsEssayez-le en ligne!
Comme tous les bons défis, j'ai commencé par penser que c'était assez facile et cela m'a lancé quelques courbes. Bien joué @Kevin Cruijssen!
Coupe la matrice en chaînes contenant les valeurs de chaque bloc. Les tableaux sont ensuite triés et comparés pour l'égalité.
Non golfé:
Sortie
la source
Rouge ,
148147142 octetsEssayez-le en ligne!
la source