Lire un livre est facile, mais l’impression peut être un peu délicate. Lors de l'impression d'un livret, l'imprimante doit disposer les pages d'une certaine manière pour pouvoir être lues de gauche à droite. La façon dont cela est fait utilise un motif comme ci-dessous
n, 1, 2, n-1, n-2, 3, 4, n-3, n-4, 5, 6, n-5, n-6, 7, 8, n-7, n-8, 9, 10, n-9, n-10, 11, 12, n-11…
Cas de test
Livret de 4 pages: 4, 1, 2, 3
Livret de 8 pages: 8,1,2,7,6,3,4,5
Livret de 12 pages: 12,1,2,11,10,3,4,9,8,5,6,7
Livret de 16 pages: 16,1,2,15,14,3,4,13,12,5,6,11,10,7,8,9
Livret de 20 pages: 20,1,2,19,18,3,4,17,16,5,6,15,14,7,8,13,12,9,10,11
Tâche
Votre tâche consiste à, pour un nombre entier n
multiple de 4, afficher un tableau de nombres pouvant être utilisés pour imprimer un livre de n
pages.
Remarque: tant que la sortie génère les nombres corrects, délimités par des espaces, des virgules, des traits d'union ou des parenthèses, vous pouvez utiliser n'importe quelle méthode pour obtenir une solution.
Ceci est une question code-golf , les réponses seront donc notées en octets, avec le moins d'octets gagnants.
Réponses:
05AB1E ,
987 octetsEssayez-le en ligne!
Explication
la source
JavaScript (ES6),
4945 octetsSauvegardé 4 octets avec l'aide de @RickHitchcock
Démo
Afficher l'extrait de code
Non récursif, 51 octets
Démo
Afficher l'extrait de code
la source
f=(n,a=1)=>n<a+3?[]:[n,a,a+1,n-1,...f(n-2,a+2)]
n<a
est en fait suffisant, c'est donc 4 octets enregistrés. Merci!Python 2,
999388585655 octetsEssayez-le en ligne!
-6 octets en supprimant les indentations inutiles, merci Oliver Ni
-5 octets en changeant le conditionnel, merci Luis Mendo
-30 octets en optimisant les instructions d'impression, merci Arnold Palmer
-2 octets en mettant la boucle sur une ligne, merci nedla2004
-1 octet en faisant un peu de magie, merci M. Xcoder
la source
lambda
(bien que cela puisse être suffisamment différent pour justifier une réponse séparée).f-i+1,i,i+1,f-i
dans chaque boucle au lieu d’imprimer conditionnellement la dernière valeur. Cela a également permis de supprimer l'initialeprint f,
.Python 2 , 46 octets
Essayez-le en ligne!
Génère la plage
[1..n]
et apparaît de l'avant et de l'arrière dans le motif répétéback, front, front, back, ...
Python 2 , 49 octets
Essayez-le en ligne!
Génère les 4 premiers éléments, puis continue récursivement avec la valeur supérieure
n
diminuée de 2 et la valeur inférieurek
augmentée de 2.Python 2 , 49 octets
Essayez-le en ligne!
Génère directement la
i
ième valeur de la liste, en utilisant-i%4/2
comme booléen la valeur inférieure ou supérieure.la source
Python 3 ,
686362 octets−5 octets grâce à @notjagan (supprimer des espaces et utiliser à la
[*...]
place delist()
).−1 octet grâce à @ovs (
*1
au lieu de[:]
) .Essayez-le en ligne!
la source
r*1
place der[:]
-1 octet`MATL ,
191710 octetsEssayez-le en ligne!
Explication
la source
Gelée ,
1211 octetsAmélioré à 11 octets, "Méthodes combinatoires":
Essayez-le en ligne!
Comment?
Ceci utilise des calculs de permutation et le système de nombres factoriels:
12 Améliorés, "Modèles de tricot":
Essayez-le en ligne!
Comment?
C'est l'approche simple, cela crée deux brins, les entrelace et coupe ensuite les extrémités:
la source
Octave ,
4336 octetsUn port de cette réponse en C (gcc) peut être trouvé ici .
Explication
k=1:2:n/2
: Génère une séquence linéaire de 1 àn/2
par étapes de 2. Notez qu'elle est immédiatement utilisée à l'étape suivante.[n-k+1;k;k+1;n-k]
: Crée une matrice de 4 lignes telle que la première ligne crée la séquencen, n-2, n-4...
jusqu'àn-(n/2)+2
, la deuxième ligne1, 3, 5...
jusqu’àn/2 - 1
, la troisième ligne est la deuxième ligne ajoutée par 1 et la quatrième ligne est la première ligne ajoutée par 1.[n-k+1;k;k+1;n-k](:)'
: Ceci empile toutes les colonnes de cette matrice de gauche à droite pour créer un seul vecteur de colonne, et nous le transposons en un vecteur de ligne pour un affichage facile. L'empilement des colonnes de cette manière crée avec précision la séquence souhaitée.Notez qu'il s'agit d'une fonction anonyme. Vous pouvez donc l'affecter à une variable avant de l'utiliser ou utiliser la
ans
variable intégrée créée après la création de la fonction.Essayez-le en ligne!
la source
input
et j’ai abusé un peu plus de la syntaxe en stockant le vecteur incrémental de base lors de la création de la première ligne et en prenant l’entréen
de la fonction anonyme elle-même pour pouvoir l’intégrer à présent. une déclaration. Merci!R , 48 octets (amélioré)
Merci à @ Giuseppe pour -7 octets!
Le truc est que cela
x=1:n;x[order(x%%2)]
équivaut àorder(1:n%%2)
.Essayez-le en ligne!
R , 55 octets (original)
Golfé
Ungolfed avec des commentaires
Lire
n
de stdin.Définir
x
comme séquence de pages de 1 àn
.Ordre des pages afin que même les pages soient avant les pages inégales.
Ordre des pages dans l'ordre décroissant par rapport au centre du livre calculé par
n/2+.5
.Exemple avec 8 pages:
Essayez-le en ligne!
la source
(1:n)[order(1:n%%2)]
la même chose queorder(1:n%%2)
Mathematica,
545345 octetsExplication
la source
Python 2 ,
6463 octets-1 octet grâce aux ovs!
Essayez-le en ligne!
la source
n-i-1
peut êtren+~i
Haskell, 42 octets
Essayez-le en ligne!
Un octet plus long:
Haskell, 43 octets
la source
Java 8,
8472 octetsou
-12 octets grâce au commentaire de @TheLethalCoder sur la réponse C #.
Ancienne réponse (84 octets):
Explication:
Essayez ici.
la source
Perl 5 , 47 + 1 (-n) = 48 octets
Essayez-le en ligne!
la source
Swift 3 , 74 octets
Essayez-le en ligne!
Rapide 3 , 60 octets
Pour une raison quelconque, cela ne fonctionne dans aucun environnement en ligne que j'ai essayé jusqu'à présent. Si vous voulez tester, mettre
var g=
en face de lui, et l' appeler avecprint(g(12))
dans Xcode (Playgrounds) .Voici une image après l'avoir vue dans une aire de jeu Xcode, version 8.3.1 (Running Swift 3.1):
la source
QBIC , 25 octets
Bien que l'entrée soit% 4, le rythme réel est basé sur 2.
Explication
la source
C (gcc) , 66 octets
Un portage de mon octave répond au C (gcc):
Essayez-le en ligne!
la source
cQuents , 21 octets
Essayez-le en ligne!
Explication
la source
R ,
6460 octetsDégradé de manière dévastatrice par Djhurio ! Sa réponse est assez élégante, allez-y.
Une réponse octave de Rayryeng .
Essayez-le en ligne!
solution originale (64 octets):
Fonction récursive.
Essayez-le en ligne!
la source
Bash + Perl + Groff + Psutils, 48 octets
Affiche la sortie sur
stderr
. La sortie contient des déchets de fin.Exemple d'utilisation:
la source
Pyth ,
21 à20 octetsSuite de tests.
Si la sortie sous forme de liste imbriquée est autorisée:
Pyth ,
2019 octetsSuite de tests.
Explication
la source
Ruby , 40 octets
Essayez-le en ligne!
la source
C #, 107 octets
Gardez deux jetons, l’un commençant à 1, l’autre à la p. Dans chaque itération de boucle, écrivez quatre éléments et incrémentez ou décrémentez simplement les compteurs après chaque entrée. Lorsque les pions se rencontrent au milieu, arrêtez-vous.
la source
p=>{var a=new int[p];for(int i=0,q=1;q<p;a[i++]=p--){a[i++]=p--;a[i++]=q++;a[i++]=q++;}return a;};
avec le fait deSystem.Func<int, int[]> f =
ne pas avoir inclus dans le décompte. Vous pouvez également ajouter un lien vers TIO, ce qui est très utile pour permettre aux utilisateurs d’essayer votre code par eux-mêmes!q
à0
et pré-incrémentation àq<p
->++q<p
, puis supprimez la seconde incrémentation pour enregistrer un octet. Déplacez les deux instructions de fin de boucle dans la dernière étape de la boucle for afin de pouvoir supprimer les accolades.p=>{for(int q=0;++q<p;)System.Console.Write(p--+$",{q++},{q},{p--},");}
. TIO.Haskell , 58 octets
Essayez-le en ligne!
la source
Pyth ,
272423 octets-3 octets en imprimant partout au lieu de à la fin.
-1 Merci à M. Xcoder
Essayez-le en ligne!
Ou sur le compilateur / exécuteur en ligne
Ceci est mon premier vrai programme en Pyth, donc il y a probablement de meilleures méthodes que je ne connais pas.
Explication
la source
FN
parV
de -1 octetC ++ (gcc) ,
898468 octetsEn tant que lambda générique non nommé.
n
est #pages (% 4 == 0) etC
est un paramètre de référence pour le résultat, un conteneur vide du typevector<int>
(uniquementpush_back
nécessaire).solution précédente:
Essayez-le en ligne!
Légèrement non-golfé:
solution précédente légèrement non golfée :
C'était assez simple à développer et il y a sûrement quelques optimisations mineures dans l'arithmétique.
Usage:
Version imprimable, 77 octets obsolètes
Si vous insistez pour imprimer les valeurs, voici la solution:
Où
o
est votre désiréstd::ostream
, commestd::cout
Utilisation (si 2ème lambda a été assigné à
g
):la source
Common Lisp, 79 octets
Essayez-le en ligne!
la source
Lua, 94 octets
Pour relever ce défi, j’ai en fait proposé deux méthodes différentes, soit 94 octets.
Méthode 1:
Code commenté:
Méthode 2:
Cette méthode est similaire à la première méthode, mais je retourne plutôt une chaîne concaténée au lieu de string.format ()
Dans les deux méthodes, j'ai utilisé le concept de n et i se rapprochant
la source
PHP, 51 + 1 octets
imprime les numéros de page séparés par un trait de soulignement avec un délimiteur de fin.
Exécuter en pipe
-nR
ou essayer en ligne .la source
J , 22 octets
Essayez-le en ligne!
Explication
la source