Tâche:
Votre tâche consiste à créer un programme qui, lorsqu'il recevra un certain nombre de brins et le nombre d'itérations d'une tresse, indiquera où va chaque brin. Les règles sont les suivantes:
- Le nombre de brins sera toujours impair, et entre 3 et 6000 (inclus)
- Lorsque vous commencez, les brins seront divisés en 2 grappes (presque) égales, le
left
et leright
. Ilsleft
auront un brin de plus lorsque vous commencerez.
Pour une entrée de 7:
/ / / / \ \ \
1 2 3 4 5 6 7
- À chaque itération, le brin le plus externe du côté avec plus de brins sera placé au centre face à la direction opposée. Le centre est défini comme étant entre des brins opposés face à :
////middle\\\
.
1 itération de l'entrée 7 (le volet 1 a été déplacé vers le centre):
/ / / \ \ \ \
2 3 4 1 5 6 7
Exemple:
Contribution:
3 4
Calculs:
1 2 3
\
2 1 3
/
2 3 1
\
3 2 1
/
3 1 2
Production:
3 1 2
Règles:
- Vous n'avez pas besoin d'afficher les barres obliques pour la direction du brin, uniquement les nombres.
- Il vous suffit d'afficher les chiffres après la dernière itération.
- Votre sortie sera des identifiants à espace réduit des brins
- L'entrée se fera sous la forme:
strands [space] iterations
- Le nombre de brins sera toujours impair et 3 <= x <= 6000
- C'est le code-golf , donc le code le plus court gagne!
11 2
serait2345611178910
?123 -> 213 -> 231 -> 321 -> 312
.Réponses:
GolfScript, 33 caractères
L'entrée doit être fournie sur stdin.
Exemples (vous pouvez tester en ligne ):
la source
Python: 179
240, 152 caractèresTout d'abord, le 179
Pour les
N
brins et lesi
itérations, cette réponse utilise l'O(1)
espace et leO(N)
temps. Je calcule simplement la position finale de chaque brin, sans jamais répéter les positions intermédiaires!Big Edit : joué cette réponse en changeant les conditions en algèbre booléenne. J'ai également écrit une longue explication de son fonctionnement. TL; DR: modèles de formule, division modulo.
Maintenant le 152
Il s'agit de python plus raisonnablement golfé. (edit: merci à Alex Thornton pour l'édition de 165 à 152)
la source
l
et lesv
variables et changer lainsert
à une affectation de tranche.Python 2 (109) / Python 3 (121)
Python 2
Python 3
Le code doit avoir été soudoyé par Python 2 pour présenter ses avantages de golf sur Python 3: les plages étant des listes, la division arrondie à un int, l'impression ne commençant pas une nouvelle ligne. L'étrange
0-i%2
est parce que-i%2
évalue comme(-i)%2
.Il existe probablement une approche plus efficace que l'itération, à savoir le calcul direct de chaque résultat final. L'opération de tressage a une période de 2 *, donc ça ne peut pas être si compliqué.
la source
Rubis, 105
Juste beaucoup de manipulation de décors. Poussez, éclatez, inversez et déplacez! J'ai essayé de ne pas convertir les entrées en nombres entiers, mais il a ajouté environ 20 caractères.
l
etr
(left
etright
) sont les files d'attente "thread".right
est inversé donc nous commençons à tirer de l'extérieur.t
etf
(to
etfrom
) commencent respectivement parright
etleft
, mais au fur et à mesure , nous continuons à les échanger afin de toujours pouvoir déplacer le dernier "thread" defrom
et le pousser versto
(f,t=t<<f.shift,f
). Cela économise BEAUCOUP d'espace.Ensuite, nous revenons juste
right
à la fin.Journal des modifications:
2.2 105 oh ouais, la carte peut prendre un proc
2.1 108 Et en fait, inversez simplement les choses dans le cadre de la manipulation.
2.0 116 n'utilise pas ce tableau temporaire. Utilisez plutôt deux variables de pointeur que nous pouvons manipuler et continuer à rediriger. N'affiche ensuite que la fin
1.0 123 idée initiale
la source
Java, 270 caractères
golfé:
non golfé:
Exécuter en ligne
la source