Étant donné un entier n ≥ 1, produire une représentation 2D † d'un signe de pourcentage de largeur n . La construction se déroule comme suit:
- Créez une matrice n par n (ou une liste de listes) remplie de zéros.
- Insérez-les dans les coins supérieur gauche et inférieur droit.
- Placez-les sur la diagonale du coin inférieur gauche au coin supérieur droit.
Pour l'entrée n = 4, cette construction ressemblerait à:
1. 4x4 matrix of 0s
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
2. 1s in TL and BR corners
1 0 0 0
0 0 0 0
0 0 0 0
0 0 0 1
3. 1s across BL-TR diagonal
1 0 0 1
0 0 1 0
0 1 0 0
1 0 0 1
Il s'agit d'un code-golf , donc le programme le plus court en octets l'emporte.
† J'utilise une matrice de 1 et de 0, mais il est également acceptable d'utiliser une chaîne de caractères et d'espaces non blancs. Ainsi, l'exemple ci-dessus pourrait ressembler à:
# #
#
#
# #
ou
# #
#
#
# #
Cas de test
n
output
1
1
2
1 1
1 1
3
1 0 1
0 1 0
1 0 1
4
1 0 0 1
0 0 1 0
0 1 0 0
1 0 0 1
10
1 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 1
Note finale
L'ajout d'une explication serait grandement apprécié.
'1'+'0'*(n-2)
avec un espace inséréRéponses:
Gelée , 6 octets
Essayez-le en ligne!
Comment ça marche
la source
²Ḷ%’¬s
ou+þ%’=2
²Ḷọ’s
est si proche ...ḍ@
mais c'est deux octets.⁼þµ+1¦Ṫṁ³UG
... jusqu'à ce qu'une²
solution de Dennis soit apparue.JavaScript (ES6), 52 octets
la source
V , 15 octets
Essayez-le en ligne!
Explication
la source
Python 2 ,
5857 octetsEssayez-le en ligne!
la source
GNU APL,
1715 octetsC'est un jour étrange ... GNU a en fait battu Dyalog APL ... woah.
TIO ne prend pas en charge GNU APL ...
Explication (l'entrée est
⍵
):la source
1=⍵∨
et l'implémenter dans ma solutionPython 2 , 46 octets
Essayez-le en ligne!
Sorties comme
Python 2 , 48 octets
Essayez-le en ligne!
Sorties comme
Python 3 , 48 octets
Essayez-le en ligne!
Une approche de substitution de chaîne assez différente dans Python 3. Des sorties comme:
la source
10L
10
?L
à la fin pour que je puisse couper le même nombre de caractères à la fin des grands et des petits.10
et j'étais10L
différent.Gelée , 9 octets
Essayez-le en ligne!
Comment ça marche
la source
APL (Dyalog) , 18 octets
Essayez-le en ligne!
Faire cela pour l'entrée 1 a ajouté 6 octets.
En regardant le testcase 4, nous voyons que la sortie est
Il s'agit essentiellement de 1 0 0 répété dans toute la matrice. En d'autres termes, 1 0 0 façonné dans une matrice 4 x 4. Donc, dans cette solution, nous générons d'abord ce vecteur avec 1 et les 0 de fin en utilisant
1=⍳⍵-1
, puis le formons en utilisant⍵ ⍵⍴
. Mais cela fonctionne pour l'entrée 1, nous devons donc créer un conditionnel et gagner 6 octets ...la source
Haskell , 55 octets
Au début, mon approche consistait à générer de manière récursive la matrice d'identité transposée, mais la correction de la première et de la dernière ligne nécessitait des distinctions de cas laides / longues. J'ai donc cherché une autre façon de générer la matrice d'identité et c'est ainsi que j'ai trouvé cette idée.
Essayez-le en ligne!
Explication
génère cette matrice (pour
n=4
):Comme vous pouvez le voir, l'élément supérieur gauche est
2
(en général), tous les éléments diagonaux sont5
(en généraln+1
) et l'élément inférieur droit est8
(en général2*n
). Donc, tout ce que nous devons faire est de vérifier six+y
est un élément de[2,n+1,2*n]
.la source
R ,
5442 octets-12 octets grâce à Jarko Dubbeldam
renvoie une matrice; lit de stdin. crée une matrice d'identité
diag(n)
, la retourne de haut en bas[,n:1]
, définit le haut à gauche et le bas à droite1
, puis écrit dans console (''
) avec widthn
.Essayez-le en ligne!
la source
pryr::f
).R+pryr
que je considère que c'est une langue distincte; vous êtes libre de soumettre cela! Ensuite, vous pourriez utiliser l'idée de la réponse de Cows Quack qui, je pense, serait encore plus courte que celle-ci dans ce contexte (une ligne).function(n)
serait probablement encore plus courtefunction(n)matrix(rep(c(1,rep(0,n-2)),n+1),n,n)
MATL , 7 octets
Essayez-le sur MATL Online!
Explication
Créez une matrice d'identité (
Xy
), retournez verticalement (P
), écrivez ((
) la valeur 1 (l
) aux première et dernière entrées (5L
), qui sont en haut à gauche et en bas à droite.la source
Dyalog APL,
121110 octetsEssayez-le en ligne
-1 octet grâce à lstefano.
Comment?
la source
,⍨⍴×,2↓⊢↑×
(10 octets). Je suis tenté d'ajouter: n'utilisez pas trop de déplacements ... :-PC # (.NET Core) ,
121 9188 octets-30 octets parce que l'ancienne façon était stupide.
-3 octets en se déplaçant autour de l'initialisation variable
Essayez-le en ligne!
Les boucles parcourent le tableau pour remplir les 1. Renvoie un tableau de 1 et de 0.
la source
b
quevar
vous économisez quelques octets.05AB1E ,
14117 octetsEssayez-le en ligne!
Explication
la source
Fusain ,
14127 octets-5 octets grâce à Neil !
Essayez-le en ligne!
la source
Nν◨/ν←↙ν‖O↘
, mais ensuite je suis venu avec↗N⸿/‖O↘
!⸿
faire. Remet-il à sa position d'origine?⸿
c'est comme¶
s'il descend d'une ligne, mais il va toujours à la colonne zéro (telle que mesurée parJ
) plutôt qu'à la colonne au début de la chaîne, c'est donc par exempleJ⁵¦⁵⸿
la même chose queJ⁰¦⁶
.C ++, 144 octets
Il tire parti de la différence d'un octet entre '#' et 35
la source
'#'
et35
?Mathematica, 72 octets
contribution
sortie
la source
Grid@s
pars
pour économiser 5 octets.Python 2 ,
8662 octetsEssayez-le en ligne!
-24 octets: Merci à une idée de Rod!
la source
PowerShell , 67 octets
Essayez-le en ligne!
Prend l'entrée
$n
et les boucles de0
à--$n
(c'est$n
-à- dire pré-décrémentées). À chaque itération, nous construisons une chaîne de s1
suivie de$n-1
0
s, puis multiplions celle-ci3
(par exemple,100010001000
pour l'entrée de5
). Ensuite, nous l'indexons sur une base rotative à partir de0
à0 + $n
. Ces caractères sont-join
édités dans une chaîne, qui est laissée sur le pipeline. La sortie est implicite.(NB - Cela nécessite 9 octets supplémentaires pour gérer le cas spécial de
n=1
. Ci-dessous, le code de 58 octets si nous sommes garantisn>1
)la source
Dyalog APL v16, 23 octets
Essayez-le en ligne!
Explication:
la source
Lua, 117 octets
Essayez-le
Le code est assez simple. Il définit m au premier argument, puis y ajoute 0 pour le convertir en nombre, puis itère en arrière pour la coordonnée Y, en avant à travers la coordonnée X et mettra un # si x == y ou si ce sont les autres coins.
Ce programme n'utilise jamais le mot-clé "si".
la source
Octave, 37 octets
Essayez-le en ligne!
Génère une matrice clairsemée représentant le signe de pourcentage.
la source
Japt , 12 octets
Renvoie un tableau / matrice 2D.
Essayez-le en ligne! en utilisant l'
-Q
indicateur pour afficher la sortie au format tableau.Explication
Implicite:
U
= entier en entréeCarré
U
(²
), créez le tableau[0, U*U)
(o
) et mappez chaque élément en ...1
s'il est divisible (v
) parU-1
(UÉ
), sinon0
.Définissez l'élément (
h
) à l'index 0 (T
) sur1
.Divisez le tableau en tranches (
ò
) de longueurU
.la source
hT1
, comme0
c'est déjà techniquement divisible parU
pour tousU
. A part ça, excellent travail :-)1
. Sans elle, elle revient[[0]]
car apparemment zéro n'est pas divisible par zéro.PHP, 53 octets
La longueur du côté de la matrice est
$l
. Ce code a un avis PHP et même un avertissement PHP pour la division par 0 quand$l=0
, mais fait le travail!la source
$l
). Malheureusement, ce n'est pas l'une de nos façons acceptées de recueillir des commentaires . Dans le méta post lié, vous trouverez des alternatives, par exemple en utilisant des arguments de ligne de commande comme vu dans la réponse de ricdesi .while($i**.5<$n=$argn)echo$i++%~-$n?0:1,"\n"[$i%$n];
ouwhile($i**.5<$n=$argn)echo+!($i++%~-$n),"\n"[$i%$n];
(52 octets chacun)<?
au début.Python 2 , 93 octets
Essayez-le en ligne!
la source
Rubis, 47 octets
Il renvoie un tableau de tableaux.
Le code est assez simple.
n-1
tableau avec1
comme premier élément et le reste rempli de0
s (par exemple[1, 0, 0, 0]
)n
tranches d'n
élémentsEssayez-le en ligne!
la source
J, 14 octets
Non golfé:
Essayez-le en ligne!
la source
0=<:|i.@,~
?Python 3, 97 octets
Explication
m=[[0+(j==n-i-1)for j in range(n)]for i in range(n)]
Ceci est une compréhension de liste, le
0+(j==n-i-1)
est un moyen plus court de se convertirj==n-i-1
en un int (par opposition à uneint
fonction), puism[-1]=m[0]
est plus court que de faire en bas à droite 1, car les lignes du haut et du bas sont identiques.la source
Forth,
273 (sans commentaires)170 (golf-ish)(Version 273 pour clarifier la version commentée:)
(Notez que, comme l'espace est le principal délimiteur dans Forth, la suppression de chaque retour chariot ne ferait aucune différence. L'indentation, bien sûr, le fait.)
(Commenté:)
(Exemples d'exécution:)
(Remarque finale: fonctionne à un de moins que la largeur de bits de l'interpréteur Forth. J'ai exécuté ce qui précède sur gforth, AMD64. Un ancien Forth 16 bits n'irait qu'à 15 bits de large et aurait besoin d'un peu de modification.)
la source
C # (.NET Core) , 65 octets
Essayez-le en ligne!
L'algorithme est nettement distinct de l'autre réponse C #, j'ai donc décidé de le publier séparément plutôt que comme une amélioration. Inspiré par la réponse Jelly la mieux notée, je faisais quelque chose d'un peu moins compact avant. La sortie est un tableau linéaire, il faudrait donc une certaine logique pour l'envelopper dans un 2D en dehors de la méthode telle quelle. Une version alternative nécessite 6 octets supplémentaires pour sortir en tant que véritable tableau 2D:
J'ai également une version non concurrente intéressante.
Cela se termine avec presque la bonne sortie, résultant en un
IEnumerable<bool>
avec vrai / faux au lieu de 1/0, et c'est une structure linéaire plutôt que 2D, et bien qu'elle ne soit pas nécessaire pour cette ligne de code exacte, elleusing System.Collections.Generic
est nécessaire pour faire quelque chose d'utile avec le sortie. Comme je l'ai dit, c'est très proche d'être valide mais pas tout à fait.la source
?1:0
œuvres et je crois qu'un tableau du résultat devrait être bien. Les collections utilisant également ne sont pas nécessaires pour ce code.w*w
d'une variable et le déplacement de laint
déclaration hors de la boucle vous sauveraient-ils quelque chose?w*w
avec une seule variable de caractère permet d'économiser 4 octets, le déplacement enint i=0
dehors de la boucle nécessite un point-virgule qui coûte 1 octet, puis l'ajout,s=w*w
à la déclaration coûte 6 octets, de sorte qu'il rétablit en réalité +3 octets.