Écrivez un programme ou une fonction qui prend un entier positif N et sort les premiers N nombres de ce motif en zigzag amplificateur, en utilisant uniquement les lignes nécessaires:
26
25 27 .
10 24 28 .
9 11 23 29 .
2 8 12 22 30 44
1 3 7 13 21 31 43
4 6 14 20 32 42
5 15 19 33 41
16 18 34 40
17 35 39
36 38
37
Donc, si N est 1
la sortie est
1
Si N est 2
, la sortie est
2
1
Si N est 3
la sortie est
2
1 3
Si N est 4
la sortie est
2
1 3
4
Si N est 10
la sortie est
10
9
2 8
1 3 7
4 6
5
Si N est 19
la sortie est
10
9 11
2 8 12
1 3 7 13
4 6 14
5 15 19
16 18
17
etc.
Remarques
Chaque pic ou creux du zigzag atteint son point à une ligne de plus de la ligne avec
1
le dessus que le pic ou le creux précédent.N n'est pas limité à
44
. Le zigzag croît dans le même schéma et un N plus grand doit être pris en charge.Les chiffres à plusieurs chiffres ne doivent "toucher" que dans leurs coins, comme illustré. Assurez-vous que cela fonctionne lorsque N est
100
supérieur ou égal à.Il ne doit pas y avoir de lignes vides (ou d'espace uniquement) dans la sortie, sauf une nouvelle ligne de fin facultative.
Toute ligne peut avoir n'importe quelle quantité d'espaces de fin.
Notation
Le code le plus court en octets gagne. Tiebreaker est une réponse antérieure.
Réponses:
Gelée ,
413729 octetsEssayez-le en ligne!
Comment ça marche
la source
PHP,
211177164163 octetsPrédisez les pics avec
$n
et augmentez le tableau dynamiquement dans les deux sens, en utilisant le($x, $y)
curseur de sortie.Les nombres sont alignés avec
str_pad()
et la sortie finale est celleimplode()
de ce tableau de chaînes ($g
).Testez-le en ligne!
Mise à jour: supprimé 34 octets en supprimant le array_pad () inutile. Update2: suivi les conseils de @ insertusernamehere pour le raccourcir un peu plus. Update3: suivi les conseils de @ Lynn pour enregistrer un octet de plus avec ~ õ qui impose l'utilisation du jeu de caractères LATIN-1. (non disponible dans l'émulateur PHP en ligne, donc non inclus)
la source
$arr = [];
, vous pouvez vous y référer$arr[anything]
. Certains cas afficheront des avis, mais ceux-ci sont ignorés ici. Notez que lire des trucs comme ça ne vous aidera probablement pas beaucoup à apprendre une langue. Votre commentaire m'a fait réaliser que je pouvais le raccourcir, car j'ai d'abord pensé que je devrais remplir mon tableau, mais je ne le fais pas. :)for($x=0,$d=-1,$h=$n=2,$y=$a=1;$a<=$argv[1];$y+=$d){$g[$y]=str_pad($g[$y],$x).$a;$x+=strlen($a);if($a++==$n){$h+=2;$n+=$h-1;$d*=-1;}}ksort($g);echo implode("⏎",$g);
(Remplacez ⏎ par une nouvelle ligne réelle.)~õ
est une alternative à deux octets"⏎"
.Pyth,
6053524642393836343231 octets39: C'est maintenant à égalité avec la version corrigée de bug de Jelly , et j'ai surpassé la version concurrente de Dennis!
38: J'ai hors-golf Dennis!
36: J'ai de nouveau joué à Dennis!
34: Encore plus bas que sa version corrigée!
31: 32 -> 31 grâce à Dennis.
Essayez-le en ligne!
Comment ça marche
la source
MATLAB, 148 octets
Notez que les espaces manquent dans Octave, car MATLAB imprime le caractère indexé avec
0
comme un espace, tandis que l'octave ne fait qu'omettre ce caractère.Explication:
la source
Haskell,
144142 octetsExemple d'utilisation:
Comment ça marche:
Edit: Merci @Lynn pour deux octets!
la source
JavaScript (ES6), 213 octets
Où
\n
représente un caractère de nouvelle ligne littéral. Explication:Pour raccourcir,
pow(-1,ceil(sqrt(i)))
je le réécris carsqrt(i-1)&1||-1
cela ne fonctionne pas,i=0
donc pour corriger cela, j'ajoute 1 mais cela retourne ensuite le signe du résultat, c'est pourquoi je me retrouve avecn-=
.la source
Python 2, 137 octets
Voir la sortie sur ideone .
la source