Bienvenue dans le moulin.
Votre tâche consiste à transformer de gros rochers en petits rochers en les broyant.
Prenez une entrée d'un gros rocher de taille n > 3
et broyez-le.
Continuez à broyer les roches en les déversant dans le broyeur jusqu'à ce que la taille de toutes les roches soit 2
.
les roches sont toujours broyées en deux moitiés égales. Si le résultat d'un broyage est impair, prenez le résultat - 1.
Imprimez la sortie de chaque rectification au fur et à mesure.
Exemples
contribution: 5
sortie: 22
Le résultat est deux roches de taille 2
contribution: 50
sortie:
2424 //two rocks of size 24
12121212 //four rocks of size 12
66666666 //8 rocks of size 6
2222222222222222
le résultat est 16 roches de taille 2
contribution: 30
sortie:
1414
6666
22222222
le résultat est 8 roches de taille 2
C'est le code-golf donc le code le plus court gagne! Amuse-toi bien et bonne chance!
code-golf
math
arithmetic
jacksonecac
la source
la source
Réponses:
TSQL,
6159 octetsEssaye le
la source
COW,
297291 octetsEssayez-le en ligne!
Le code imprime chaque numéro sur sa propre ligne et sépare les itérations par une nouvelle ligne supplémentaire. Il imprime également la première itération par lui-même, suivi d'une nouvelle ligne. Ainsi, une entrée de 5 donnerait une sortie qui ressemble,
5 2 2
sauf avec des sauts de ligne au lieu d'espaces. Un exemple de sortie pour50
est donné ci-dessous.Arbre d'explication:
Exemple de sortie pour l'entrée 50:
la source
05AB1E ,
1211 octetsEssayez-le en ligne!
Explication
la source
Python 2,
5553 octetsDivisez par 4 et décalage à gauche par 1 pour obtenir la division spéciale
la source
Haskell,
75 71 60 5047 octetsEssayez-le en ligne! Modifier: Comme la sortie est désormais autorisée à être une liste comprenant l'entrée,
1013 octets peuvent être enregistrés.Usage:
Version originale de 60 octets:
Essayez-le en ligne! Merci à Christian Sievers d'avoir souligné la formule plus courte.
Usage:
la source
z<-2*div n 4
.JavaScript (ES6)
645957 octetsla source
f=
mais est juste pour la démoPython 2,
4847 octetsla source
s=s/4*2
fonctionnera pendant 1 octet de sauvegarde.Java, 85 octets
Test et non golfé
Remarque: je ne sais pas pourquoi, Ideone continue de donner des erreurs internes, donc les tester est un problème. Pour tester, copiez / collez et exécutez simplement dans votre IDE Java standard. (Ça marche là-bas, je m'en suis assuré;))
la source
n=n/4*2
truc. :)C #,
888683 octetsEnregistré 3 octets grâce à Skorm
Enregistré un autre octet en changeant le
while
en unefor
boucle qui inclut des déclarations de variables1 octets enregistrés grâce à Yodle
Fonction anonyme qui renvoie une chaîne composée du résultat de chaque broyage.
Programme complet avec méthode non golfée et cas de test [avant la dernière édition!]:
la source
for(i=0;i++<c;)
for (i = 0; i++ < c;)
n=>{var r="";for(int i,c=2;n>2;c*=2,r+="\n")for(i=0,n=n/4*2;i++<c;)r+=n;return r;}
CJam , 21 octets
Essayez-le en ligne! (En tant que suite de tests.)
Explication
la source
Pyth,
181613 octets*
\n
est une nouvelle ligneExplication:
Essayez ici
la source
MATL , 13 octets
Essayez-le en ligne!
la source
PHP,
726764 octetsPrend l'argument de la ligne de commande. Courez avec
-r
.la source
Gelée ,
13 1211 octetsTryItOnline!
Remarque: l'OP a indiqué que l'entrée peut également être dans la sortie.
Comment?
Version sans entrée affichée pour 12 octets:
:4Ḥḟ0x2µÐĿḊG
la source
Perl,
403530 + 1 = 31 octetsCourir avec le
-n
drapeau-4 octets grâce à @Dada
Essayez-le en ligne!
Perl lit automatiquement l'entrée dans la variable
$_
lorsqu'elle-n
est définie.$.
est une variable spéciale définie1
au début du programme par l'interpréteur, donc je peux l'utiliser comme base pour doubler. À chaque itération de lawhile
boucle, il$_
rétrograde et effectue un ET logique contre le négatif de lui-même moins un pour annuler le bit de l'un.la source
perl -nE 'say$_ x($.*=2)while$_=$_>>1&~1'
jouer au golf jusqu'à 31 octets: (peut-être que cela peut être joué encore plus loin, je n'y ai pas passé beaucoup de temps).PowerShell 3+,
5854 octetsMerci TimmyD de m'avoir sauvé 4 octets!
Légèrement non golfé (formatage)
Explication
J'utilise la même astuce diviser par 4 multiplier par 2 que beaucoup d'autres réponses, mais j'ai rencontré un problème. PowerShell convertit les nombres en virgule flottante si nécessaire pendant la division, et pour le golf, c'est ennuyeux parce que cela
$v/4*2
devient quelque chose d'inesthétique[int]($v/4)*2
. J'ai contourné cela en utilisant le décalage de bits pour la division avec-shr
.Pour calculer combien de fois imprimer une itération, je prends simplement
(2^$i)-1
ce qui fonctionne bien et a pour effet supplémentaire de laisser de côté la valeur d'entrée. Essayer de multiplier simplement par 2 était problématique, car à partir de 0, il est difficile d'augmenter la valeur avec juste$i*=2
et à partir de 1 nécessite trop de correction pour obtenir le bon nombre.Étant donné que PowerShell n'a pas d'opérateur pour cela, et je voulais éviter
[Math]::Pow()
, j'ai compté à nouveau sur le décalage de bits pour mes pouvoirs de 2.la source
Python 2, 47 octets
Depuis l'OP a dit qu'un tableau 1D qui comprenait l'entrée était bien, j'ai trouvé cette fonction récursive, qui malheureusement ne se lie qu'avec le gagnant actuel de Python.
la source
f=lambda r,n=1:[r]*n+(r>3and f(r/4*2,n*2)or[])
pour 46Perl, 47 octets
Aucune option de ligne de commande, cette fois (exceptionnellement pour Perl). L'idée de base est que, comme toutes les roches à une étape donnée ont la même taille, nous enregistrons simplement la taille (en
$a
) et le nombre (en$_
), plutôt que d'enregistrer toute la liste. Je n'ai pas pu trouver un moyen de me débarrasser de l'espace (ou+
) aprèssay
; vous pouvez déplacer le2*
mais il ne sera pas analysé correctement s'il est suivi d'une parenthèse ouvrante.Je ne peux pas m'empêcher de secouer le sentiment que cela peut être amélioré, mais je ne vois pas comment.
la source
die
sensation est clairement sous-optimale. Mais nous avons encore besoin d' un moyen de vérifier si nous devons arrêter ou non -> une solution est d'utiliser un certain temps au lieu defor
:while$a>1
. Mais nous devons trouver un remplaçant pour$_
: n'importe quelle variable unitialisée peut le faire: remplacer1<<$_
par1<<++$x
. Alors maintenant, il$_
est libre d'être utilisé, nous pouvons ensuite utiliser-n
et remplacer chaque$a
par un$_
, et la première instruction devient$_>>=1
. Puisque nous avons-n
,$.
est défini, nous pouvons donc le remplacer1<<++$l
par$.*=2
.perl -nE '$_>>=1;say 2*($_>>=1)x($.*=2)while$_>1'
(39 octets). Notez ensuite que cela$_>>=1
se fait deux fois, afin que nous puissions essayer de nous en débarrasser (le premier). En essayant de m'en débarrasser, j'ai réussisay$_ x($.*=2)while($_>>=1)/2>1
(mettez les deux à l'intérieur de lawhile
condition). Mais le résultat est faux ($_
peut être étrange), et en essayant de s'assurer qu'il est égal, je me retrouve avecwhile$_=$_>>1&~1
. Le code est donc maintenantsay$_ x($.*=2)while($_=$_>>1&~1)
.Vim
6154 octetsTryItOnline!
Non imprimables:
Heureusement, vim tronque automatiquement sur x / 2.
la source
JavaScript,
71635958 octetsEh bien, j'ai trouvé cette solution javascript. Totalement nouveau au golf, mais je trouve ça un défi amusant
Enregistré 4 octets grâce à la suggestion de Titus en utilisant une boucle for.
base non golfée:
Version golfée
Je suis ouvert aux suggestions pour l'améliorer / apprendre le golf
testeur d'entrée
Afficher l'extrait de code
la source
for
boucle:for(o=i=30;i>2;console.log(...)){...}
. Et en combinant les deux affectations de broyage en une seule, vous pouvez supprimer les accolades:i=i/4<<1;
(-5). Je ne sais pas sii=i/4*2;
cela fera de même.BASH, 81 octets
la source
Swift, 84 octets
Non golfé
la source
Befunge, 45 octets
Essayez-le en ligne!
Explication
la source
Javascript, 106 octets
Premier code de golf, pensais que j'aurais un essai. (Ce n'est pas très bon).
Non minifié:
la source