Prenez une matrice A composée d'entiers positifs et un seul entier positif N en entrée, et déterminez s'il y a au moins N occurrences consécutives du même nombre dans une ligne ou une colonne de la matrice.
Vous avez seulement besoin de tester horizontalement et verticalement.
Cas de test
N = 1
A =
1
Result: True
----------------
N = 3
A =
1 1 1
2 2 3
Result: True
----------------
N = 4
A =
1 1 1
2 2 3
Result: False
----------------
N = 3
A =
3 2 3 4 2 1
4 1 4 2 4 2
4 2 3 3 4 1
1 1 2 2 3 4
3 2 3 1 3 1
1 1 2 2 3 4
Result: True
----------------
N = 1
A =
5 2 3 8
Result: True
----------------
N = 3
111 23 12 6
111 53 2 5
112 555 5 222
Result: False
----------------
N = 2
4 2 6 2 1 5
2 3 3 3 3 3
11 34 4 2 9 7
Result: True
Les explications sont toujours une bonne chose :)
code-golf
number
decision-problem
matrix
Stewie Griffin
la source
la source
Réponses:
Coque , 9 octets
Prend un tableau 2D et un nombre, renvoie
0
pour les instances fausses et un nombre positif pour les instances véridiques. Essayez-le en ligne!Explication
Husk est un langage fonctionnel, donc le programme n'est qu'une composition de plusieurs fonctions.
la source
Dyalog APL,
272523 octetsEssayez-le en ligne!
Merci à @MartinEnder et @Zgarb pour -2 octets chacun (la composition élimine le besoin d'utiliser
w
parens inutiles)Alertez-moi s'il y a des problèmes et / ou des octets au golf. L'argument de gauche est N , l'argument de droite est A .
Explication:
la source
Perl 6 , 60 octets
Essayez-le en ligne!
@^m
est la matrice d'entrée (premier argument) et$^n
le nombre d'occurrences consécutives à vérifier (deuxième argument).[Z,] @^m
est la transposition de la matrice d'entrée.(@^m | [Z,] @^m)
est une jonction en or de la matrice d'entrée et de sa transposition. Ce qui suitmap
évalue à une valeur véridique si$^n
des valeurs égales consécutives se produisent dans n'importe quelle ligne de l'invocant. Appliqué à la matrice d'entrée OU à sa transposition, il évalue à une valeur vraie si la matrice d'entrée ou sa transposition contiennent$^n
des valeurs égales consécutives dans n'importe quelle ligne; si la transposition remplit cette condition, cela signifie que la matrice d'entrée a$^n
des valeurs égales consécutives dans l'une de ses colonnes.*.rotor($^n => $^n - 1)
transforme chaque ligne en une séquence de$^n
tranches d'éléments. Par exemple, si$^n
est 3 et qu'une ligne l'est<1 2 2 2 3>
, cela correspond à(<1 2 2>, <2 2 2>, <2 2 3>)
..map({ [==] $_ })
transforme chaque tranche en un booléen qui indique si tous les éléments de la tranche sont égaux. Poursuivant l'exemple précédent, cela devient(False, True, False)
..any
transforme cette séquence de booléens en une jonction ou qui est vraie si l'un des booléens est vrai.La sortie est une valeur véridique ou de jonction qui est vraie si la matrice d'entrée OU sa transposition ont TOUTE ligne où
$^n
les valeurs consécutives sont égales.la source
MATL , 12 octets
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
Une matrice non carrée ne peut pas être correctement concaténée à sa transposition, ni verticalement ni horizontalement. Le code les concatène donc en diagonale , en créant une matrice bloc-diagonale.
La matrice résultante est linéarisée dans l'ordre des colonnes majeures et codée sur la durée. Les zéros résultant de la concaténation bloc-diagonale servent à isoler les séries de valeurs réelles.
Les résultats du codage de longueur d'exécution sont un tableau de valeurs et un tableau de longueurs d'exécution. Les longueurs d'exécution correspondant aux valeurs non nulles sont conservées. La sortie est
1
si certaines de ces longueurs sont supérieures ou égales au nombre d'entrée, et0
sinon.Voyons les résultats intermédiaires pour le rendre plus clair. Tenez compte des entrées
et
La matrice diagonale de bloc contenant la matrice d'entrée et sa transposition (code
t!Yd
) est:Cette matrice est implicitement linéarisée dans l'ordre des colonnes principales (vers le bas, puis à travers):
Encodage de longueur (code
Y'
) donne les deux vecteurs suivants (représentés ici comme des vecteurs de ligne; en fait, ce sont des vecteurs de colonne): vecteur avec des valeurset vecteur avec des longueurs de course
Ne conserver que les longueurs correspondant à des valeurs non nulles (code
wg)
) donneLa comparaison pour voir quelles longueurs sont supérieures ou égales au nombre d'entrée (code
>~
) produit le vecteurEnfin, la sortie doit être
true
(indiquée comme1
) si le vecteur ci-dessus contient au moins unetrue
entrée (codea
). Dans ce cas, le résultat estla source
Octave,
7770 octetsEssayez-le en ligne!
Explication: Étant donné que la matrice ne contient que des entiers non nuls, nous pouvons ajouter une bordure de 0 autour de la matrice et calculer le codage de la longueur d'exécution de la matrice (remodelé en un vecteur)
la source
runlength
... Apprenez quelque chose de nouveau tous les jours ...runlength
! Étant plus concentré sur Matlab, je ne me souvenais pas qu'il existait dans Octaverunlength
.Gelée ,
98 octetsPrend la matrice comme arguments et lit l'entier de STDIN.
Essayez-le en ligne!
Comment ça fonctionne
Exemple d'exécution
la source
;Z
, mais dans Japt plutôt que dans Jelly ...Ȧ
atome a cependant été inspiré par MATL.E
. Nice :)Python 2 ,
609291 octetsEssayez-le en ligne!
Au lieu de compter, une liste avec la taille
n
(pour chaque élément de la matrice) est générée et vérifiée si elle se trouve sur la matriceSans chaînes, 94 octets
Essayez-le en ligne!
la source
Octave , 59 octets
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Cela utilise la même approche que ma réponse MATL (voir l'explication ici).
la source
blkdiag(A,A')
. Très agréable!Japt ,
181514 octetsEssaye-le
Explication
la source
cUy)®ò¦ d_l ¨V\nd
et un autre aveccUy)d_ò¦ d_l ¨V
, puis vous avez pratiquement ma solution (supprimée).CJam , 16 octets
Essayez-le en ligne!
Explication
la source
runlength
fonction d'Octave donne également des sorties dans cet ordre. Mais en quelque sorte, je sens que l'ordre estvalue, length
plus naturelPython 3 ,
129128125 125120104101 octetsUn grand merci à @Zachary T, @Stewie Griffin, @Mr. Xcoder, @Rod, @totallyhuman pour avoir beaucoup amélioré cela.
Essayez-le en ligne!
la source
1
etif
.a=b;b=0;c=0
para=b=c=0
m+zip(*m)
placem
sur la 4ème ligne, et laisser tomber entièrement la 1ère ligne, en déplaçant lan<=max()
à la dernière ligne commen<=c
b=b+1
utiliserb+=1
... Ahh, Ninja'd par @StewieGriffin05AB1E ,
16 1412 octetsEssayez-le en ligne!
la source
0
s consécutifs dans la deuxième ligne, donc cela devrait être vrai.[3,3,3]
. J'ai mal lu le défi dans ce cas, donc je pense que je me trompe ici.Gelée , 18 octets
Essayez-le en ligne!
Renvoie
0
pour faux et un entier non nul pour véridique.Ew, c'est mauvais. Et très longtemps. Des conseils de golf seraient appréciés :)
la source
JavaScript (ES6), 99 octets
Prend la matrice
m
et le nombre d'occurrences attendun
dans la syntaxe de curry(m)(n)
. Renvoie un booléen.Comment?
Ce code n'est pas particulièrement court, mais je voulais essayer une approche purement basée sur des expressions régulières.
Conversion de la matrice en chaîne
Nous utilisons
m.join('|')
pour transformer le tableau 2D en une chaîne. Cela provoque d'abord une contrainte implicite des lignes de la matrice sur des chaînes séparées par des virgules.Par exemple, cette entrée:
sera transformé en:
Correspondance de lignes
Nous recherchons des occurrences consécutives d'affilée avec:
Cela correspond:
\b
une limite de mot\d+
suivi d'un nombre(){n-1}
suivi n-1 fois par:,
une virgule\1
suivi de notre référence: une limite de mot + le premier nombre\b
suivi d'une limite de motCorrespondance de colonnes
Nous recherchons des occurrences consécutives dans une colonne avec:
où
L
est la longueur d'une ligne.Cela correspond:
\b
une limite de mot\d+
suivi d'un nombre(){n-1}
suivi n-1 fois par:(){L-1}
L-1 fois:.
n'importe quel caractère (en effet: une virgule ou une pipe)\d+?
suivi d'un numéro (celui-ci doit être non gourmand).
suivi par n'importe quel caractère (encore une fois: une virgule ou une pipe)\1
suivi de notre référence: une limite de mot + le premier nombre\b
suivi d'une limite de motCas de test
Afficher l'extrait de code
la source
Python 2 , 64 octets
Essayez-le en ligne!
la source
Clojure, 77 octets
Crée toutes les partitions consécutives
p
de longueurN
(symbole%2
) et compte le nombre de valeurs distinctes qu'il possède. Ensuite, il forme l'ensemble de ces longueurs et retourne1
s'il est trouvé à partir de l'ensemble etnil
autrement.for
la construction était parfaitement adaptée à cela, ma tentative originale utiliséeflatten
,concat
ou quelque chose de ce court.la source