Étant donné deux nombres positifs N >= 2
et N <= 100
créer une matrice qui suit les règles suivantes:
- Le premier numéro commence à la position
[0,0]
- Le deuxième numéro commence à la position
[0,1]
- Le troisième chiffre descend sous le premier chiffre (position
[1,0]
) - Les nombres suivants vont dans le sens d'une "barre oblique"
- La plage de nombres utilisée est
[1, N1 * N2]
. Ainsi, les nombres vont du début 1 au résultat de la multiplication des deux entrées.
Contribution
- Deux chiffres
N >= 2
etN <= 100
. Le premier nombre est le nombre de lignes, le deuxième nombre le nombre de colonnes.
Sortie
- Matrice. (Peut être sorti comme un tableau multidimensionnel ou une chaîne avec des sauts de ligne)
Exemple:
Nombre de 3 and 5
sortie donné :
1 2 4 7 10
3 5 8 11 13
6 9 12 14 15
Chiffres donnés 2 and 2
1 2
3 4
Des nombres donnés 5 and 5
1 2 4 7 11
3 5 8 12 16
6 9 13 17 20
10 14 18 21 23
15 19 22 24 25
Le code le plus court en octets gagne.
Réponses:
Gelée ,
65 octetsEssayez-le en ligne!
Comment ça marche
la source
<atom><atom>¥þ
mais je ne trouve pas la bonne combinaison.oþ++þ
est proche mais n'y arrive pas tout à fait[1, 2, 3, 4, 5, 6]
.Ụ
trie ce tableau, en utilisant la clé qui correspond1
à[1, 1]
,2
à[1, 2]
,3
à[2, 1]
, etc. Essentiellement, cela trouve l'index de chaque paire à partir du tableau trié par somme dans le tableau trié lexicographiquementPython 3 , 91 octets
Essayez-le en ligne!
la source
R ,
1016054 octetsEssayez-le en ligne!
Merci à @nwellnhof pour la suggestion de
rank
Répond Jelly de Ports Dennis .
Ancienne réponse, 101 octets:
Essayez-le en ligne!
split
fait la plupart du travail ici; il y a peut-être un algorithme de golfeur, mais cela fonctionne certainement.Explication:
Essayez-le en ligne! - vous pouvez utiliser un enroulement
print
autour de n'importe quel côté droit des affectations<-
pour voir les résultats intermédiaires sans changer le résultat final, comme leprint
renvoie son entrée.la source
rank(x,1,"f")
est 2 octets plus court queorder(order(x))
.rank(x,,"l")
, vous vous en débarrasserezt
également.Java 10,
121120109105 octets-11 octets grâce à @ OlivierGrégoire .
-4 octets grâce à @ceilingcat .
Essayez-le en ligne.
Explication:
la source
x,y
/width,height
J , 15 octets
-4 octets de plus pour cette solution par miles. Merci!
Essayez-le en ligne!
J ,
2219 octets-3 octets grâce à FrownyFrog!
Essayez-le en ligne!
Une implémentation de la fantastique solution Jelly de Dennis en J.
Explication:
Verbe dyadique, prend l'argument gauche et droit (mfn)
+/&i.
crée des listes 0..m-1 et 0..n-1 et leur crée un tableau d'addition:[:>:@/:@/:@,
aplatit le tableau et note la liste deux fois et y ajoute 1:,$
remodèle la liste dans la table mxn:la source
-@],\
→,$
pour −3 octets.$1(+/:@;)</.@i.
avec entrée en tant que tableau[r, c]
/.
mais je n'ai pas pu obtenir votre résultat :)APL + WIN, 38 ou 22 octets
Demande la colonne d'entrée entière puis la ligne:
ou:
basé sur la double application de Dennis de grade up. Manqué que :(
la source
Wolfram Language (Mathematica) ,
7367 octetsComptez les éléments dans les rangées ci-dessus:
Min[j+k,#2]~Sum~{k,i-1}
Compter les éléments sur la ligne actuelle et en dessous:
Max[j-k+i-1,0]~Sum~{k,i,#}
Mettez dans un tableau et ajoutez 1. Voila:
Mise à jour: j'ai réalisé qu'il existe un moyen plus court de compter toutes les positions avant une position normalement spécifiée dans la matrice avec une seule somme sur deux dimensions:
Essayez-le en ligne!
Essayez-le en ligne!
la source
APL (Dyalog Unicode) ,
1412 octetsEssayez-le en ligne!
-2 grâce à ngn , grâce à son utilisation intelligente de
↑⍳
.Basé sur la solution Jelly de 5 octets de Dennis.
la source
∘.+⌿⍳¨⍵
->+/↑⍳⍵
⍳
combiné avec↑
.05AB1E , 23 octets
Essayez-le en ligne!
la source
Python 3 , 164 octets
Essayez-le en ligne!
Ce n'est certainement pas la solution la plus courte, mais je pensais que c'était une solution amusante.
la source
from numpy import*
et laisser tomber les deuxn.
est légèrement plus court. En outre, vous pouvez déposer l'espace à) for
. Et passer à Python 2 vous permet de passerreturn a
àprint a
(en Python 3, ce serait le même nombre d'octetsprint(a)
).import*
. Je nePython 2 , 93 octets
Essayez-le en ligne!
Version semi-non golfée:
la source
Japt ,
2524 octetsÀ peine élégant, mais fait le travail. Travailler avec des données 2D dans Japt est délicat.
J'ai ajouté le
-Q
drapeau dans TIO pour une visualisation plus facile des résultats, cela n'affecte pas la solution.Mordu un octet grâce à Oliver .
Essayez-le en ligne!
la source
×
ça, vous pouvez remplacer*V
parN×
.JavaScript (Node.js) , 103 octets
Essayez-le en ligne!
la source
TI-Basic, 76 octets
Demande l'entrée utilisateur, renvoie la matrice
Ans
et l'imprime.TI-Basic est un langage à jetons ; tous les jetons utilisés ici sont d'un octet, autre que
[A]
2 octets.Remarque: TI-Basic (au moins sur la TI-84 Plus CE) ne prend en charge que les matrices jusqu'à 99x99, tout comme ce programme.
Explication:
la source
Perl 6 ,
6159 octetsEssayez-le en ligne!
Un autre port de la solution Jelly de Dennis.
la source
Java (JDK 10) ,
142131 octetsEssayez-le en ligne!
Explication:
Un grand merci à Kevin Cruijssen car je ne savais pas comment exécuter mon code sur tio .
Certains codes comme l'en-tête et le pied de page lui sont volés. -> Sa réponse
la source
PHP, 115 octets
une approche assez paresseuse; probablement pas le plus court possible.
fonction anonyme, prend la largeur et la hauteur comme paramètres, retourne la matrice 2d
essayez-le en ligne
la source
JavaScript (Node.js) ,
108105101100 octetsEssayez-le en ligne!
la source
Attaché , 45 octets
Essayez-le en ligne!
Lambda anonyme, où les paramètres sont commutés. Cela peut être corrigé pour +1 octet, en ajoutant
~
au programme. La suite de tests le fait déjà.Explication
Cette approche est similaire à la réponse J et à la réponse Jelly .
La première idée est de générer une table de valeurs:
Cela génère un tableau d'addition utilisant des plages des deux paramètres d'entrée. Pour l'entrée
[5, 3]
, cela donne:Ensuite, nous aplatissons cela avec
Flat!
:En utilisant l'approche de la réponse J, nous pouvons classer le tableau (c'est-à-dire renvoyer les indices des valeurs triées) deux fois, avec
Grade//2
:Ensuite, nous devons hacher les valeurs correctement, comme dans la réponse Jelly. Nous pouvons couper tous les
_
éléments pour ce faire:Ensuite, il suffit de compenser l'indexation 0 d'Attache avec
+1
:Et donc nous avons le résultat.
la source
Python 3 , 259 octets
J'ai donc fait ça de façon bizarre. J'ai remarqué qu'il y avait deux modèles dans la forme du tableau.
La première est la façon dont le motif des rangées supérieures a la différence entre chaque terme passant de 1 -> h où h est la hauteur et l est la longueur. Je construis donc la rangée du haut en fonction de ce modèle
Pour une matrice de dim (3,4) donnant un
max RoC = 3
On verra la ligne du haut du formulaireSupposons plutôt que le dim (3,9) donnant un
max RoC = 3
nous verrons plutôt une rangée supérieure deLe deuxième modèle est la façon dont les lignes changent les unes des autres. Si nous considérons la matrice:
et soustrayez chaque ligne de la ligne ci-dessous (en ignorant la ligne supplémentaire), nous obtenons
En voyant cette matrice, nous pouvons remarquer que cette matrice est la séquence
2 3 4 5 5 4 3 2
où, par chaque ligne, 5 termes de ce modèle sont décalés de 1 pour chaque ligne. Voir ci-dessous pour le visuel.Donc, pour obtenir la matrice finale, nous prenons notre première ligne que nous avons créée et sortie cette ligne ajoutée avec les 5 termes nécessaires de ce modèle.
Ce modèle aura toujours les caractéristiques de début
2-> max value
et de finmax value -> 2
où lemax value = min(h+1, l)
et le nombre de fois que la valeur maximale apparaîtra estappearances of max = h + l -2*c -2
oùc = min(h+1, l) - 2
Donc, dans l'ensemble, ma méthode de création de nouvelles lignes ressemble
Code pertinent ci-dessous. Ça n'a pas été court mais j'aime toujours la méthode.
Essayez-le en ligne!
la source
Japt, 20 octets
Essayez-le
la source