Vous recevrez un tableau à deux dimensions et un nombre et vous devrez déterminer si la matrice donnée est Toeplitz ou non.
Format d'entrée:
Vous recevrez une fonction qui prendra la two-dimensional
matrice comme argument.
Format de sortie:
Retour 1
de la fonction si la matrice est Toeplitz , sinon retour -1
.
Contraintes:
3 < n,m < 10,000,000
où n
est le nombre de lignes tandis que m
sera le nombre de colonnes.
Exemple de scénario de test:
Sample Input :
4
5
6 7 8 9 2
4 6 7 8 9
1 4 6 7 8
0 1 4 6 7
Sample Output :
1
Notation
Il s'agit de code-golf , donc la réponse la plus courte en octets l'emporte.
code-golf
grid
decision-problem
matrix
Martin Ender
la source
la source
Réponses:
Mathematica, 42 octets
Mathematica n'a pas de fonction intégrée pour vérifier si quelque chose est une matrice Toeplitz, mais il en possède une pour en générer une. Nous en générons donc une à partir de la première colonne (
#&@@@#
) et de la première ligne (#&@@#
) de l'entrée et vérifions si elle est égale à l'entrée. Pour convertir leTrue
/False
résultat en1
/-1
nous utilisonsBoole
(pour donner1
ou0
), puis transformons simplement le résultat avec2x-1
.la source
Octave , 30 octets
Je suppose que je n'ai pas à gérer des matrices de 1 000 000 x 1 000 000 comme il est dit dans le défi. Cela fonctionne pour les matrices qui ne dépassent pas la mémoire disponible (moins de 1 To dans mon cas).
Essayez-le en ligne!
Cela prend une matrice
x
en entrée et crée une matrice Toeplitz basée sur les valeurs de la première colonne et de la première ligne. Il vérifiera ensuite l'égalité de chaque élément des matrices. SI tous les éléments sont égaux, l'entrée est une matrice de Toeplitz.La sortie sera une matrice des mêmes dimensions que l'entrée. S'il y a des zéros dans la sortie, cela est considéré comme un octave.
Éditer:
Je viens de remarquer le format de sortie strict:
Cela fonctionne pour 41 octets. Il pourrait être possible de jouer un ou deux octets à partir de cette version, mais j'espère que les règles de sortie seront un peu assouplies.
la source
Gelée , 5 octets
Essayez-le en ligne!
En suivant la définition ici .
la source
05AB1E , 11 octets
Essayez-le en ligne!
Explication
la source
Haskell , 43 octets
Essayez-le en ligne!
la source
False
était autorisé, j'aurais pu le battre d'un octet.Mathematica, 94 octets
contribution
un autre basé sur l' algorithme de Stewie Griffin
Mathematica, 44 octets
la source
s
? Ne pouvez-vous pas simplement utiliser à la#
place?Java 7,
239233220113 octets-107 octets après une astuce d'utilisation d'un algorithme plus efficace grâce à @Neil .
Explication:
Essayez-le ici.
la source
r
=n
etc
=m
si vous les comparez au défi).-->
opérateur!Haskell , 51 octets
t
prend une liste de listes d'entiers et retourne un entier.Essayez-le en ligne!
Cela aurait pu être de 39 ou 38 octets avec une sortie vérité / fausse.
L'idée à utiliser
init
est inspirée de la réponse 05AB1E d'Emigna, qui utilise une méthode très similaire; avant cela, j'ai utilisé un zip imbriqué.Comment ça fonctionne
zipWith((.init).(/=).tail)=<<tail
est une forme sans point de\m->zipWith(\x y->tail x/=init y)(tail m)m
.m
, vérifiant si le premier avec le premier élément supprimé est différent du second avec le deuxième élément supprimé.or
combine ensuite les contrôles pour toutes les paires de lignes.1-sum[2|...]
convertit le format de sortie.la source
JavaScript (ES6),
6554 octetsla source
a=>a.some(b=>b.some((v,i)=>d[i]-(d[i]=v),d=[,...d]),d=[])?-1:1
(62 octets)Rubis , 54 octets
Exactement comme spécifié, peut être joué plus si une entrée / sortie flexible est acceptée.
Explication:
Itérer sur la matrice et comparer chaque ligne avec la ligne ci-dessus, décalée de un vers la droite. S'ils sont différents, utilisez un tableau vide pour la prochaine itération. À la fin, retournez -1 si le tableau final est vide, ou 1 si c'est au moins 2 éléments (puisque la plus petite matrice possible est 3x3, cela est vrai si toutes les comparaisons retournent vrai)
Essayez-le en ligne!
la source
<=>
pour calculer le résultat!|(*x,_),y|
si vous ne avez pas besoin de tranchex
?PHP, 70 octets
la source
Python, 108
Pas efficace du tout car il touche tous les
n+m
temps des éléments lors du filtrage des diagonales. Vérifie ensuite s'il y a plus d'un élément unique par diagonale.la source
Axiome, 121 octets
m doit être une matrice d'un élément qui permet ~ =; le défouler
la source
Rétine , 148 octets
Essayez-le en ligne!
Une matrice d'entrée N × M
est d'abord converti en une matrice N × (N + M-1) en alignant les diagonales de cette façon:
puis la première colonne est vérifiée à plusieurs reprises pour contenir un seul numéro unique et supprimée si tel est le cas. La matrice est Toeplitz si la sortie est vierge.
la source
MATL , 11 octets
Essayez-le en ligne!
La méthode simple «construire une matrice de Toeplitz et vérifier par rapport à elle», que les premières réponses utilisent, me semblait en quelque sorte ennuyeuse (et il semble que ce serait de 1 octet de plus de toute façon). J'ai donc opté pour la méthode "vérifier que chaque diagonale ne contient qu'une seule valeur".
T&Xd
- Extraire les diagonales de l'entrée et créer une nouvelle matrice avec elles sous forme de colonnes (remplissage avec des zéros au besoin)"
- parcourir les colonnes de ce@Xz
- poussez la variable d'itération (la colonne courante), et supprimez-y (remplissage) les zéros&=
- vérification de l'égalité de diffusion - cela crée une matrice avec tous les 1 (véridique) si toutes les valeurs restantes sont égales les unes aux autres, sinon la matrice contient quelques 0, ce qui est fauxv
- concaténer les valeurs de résultat ensemble, pour créer un vecteur de résultat final qui soit véridique (tous les 1) ou falsey (certains 0)la source
R , 48 octets
Essayez-le en ligne!
la source
Clojure, 94 octets
la source