Bienvenido al molinillo.
Su tarea es convertir rocas grandes en rocas pequeñas moliéndolas.
Tome una entrada de una gran roca de tamaño n > 3
y muélala.
Continúe moliendo las rocas vertiéndolas en el molino hasta que tengan el tamaño de todas las rocas 2
.
las rocas siempre se muelen en mitades iguales iguales. Si el resultado de una molienda es impar, tome el resultado - 1.
Imprima el resultado de cada rectificado a medida que avanza.
Ejemplos
entrada: 5
salida: 22
El resultado son dos rocas de tamaño 2.
entrada: 50
salida:
2424 //two rocks of size 24
12121212 //four rocks of size 12
66666666 //8 rocks of size 6
2222222222222222
el resultado son 16 rocas de tamaño 2
entrada: 30
salida:
1414
6666
22222222
el resultado son 8 rocas de tamaño 2
Este es el código de golf, por lo que gana el código más corto. ¡Diviértete y buena suerte!
code-golf
math
arithmetic
jacksonecac
fuente
fuente
Respuestas:
TSQL,
6159 bytesPruébalo
fuente
VACA,
297291 bytesPruébalo en línea!
El código imprime cada número en su propia línea y separa las iteraciones con una nueva línea adicional. También imprime la primera iteración por sí misma, seguida de una nueva línea. Por lo tanto, una entrada de 5 daría una salida que se parece
5 2 2
excepto con líneas nuevas en lugar de espacios. La salida de muestra para50
se da a continuación.Árbol de explicaciones:
Salida de muestra para la entrada 50:
fuente
05AB1E ,
1211 bytesPruébalo en línea!
Explicación
fuente
Python 2,
5553 bytesDivide entre 4 y desplaza a la izquierda por 1 para obtener la división especial
fuente
Haskell,
75 71 60 5047 bytesPruébalo en línea! Editar: como la salida ahora puede ser una lista que incluye la entrada,
10se pueden guardar 13 bytes.Uso:
Versión original de 60 bytes:
Pruébalo en línea!Gracias a Christian Sievers por señalar la fórmula más corta.
Uso:
fuente
z<-2*div n 4
.JavaScript (ES6)
645957 Bytesfuente
f=
pero es solo para la demoPython 2,
4847 bytesfuente
s=s/4*2
funcionará para guardar 1 byte.Java, 85 bytes
Prueba y sin golf
Nota: No sé por qué, Ideone sigue dando errores internos, por lo que probarlo es un problema. Para probar, simplemente copie / pegue y ejecute en su Java IDE estándar. (Funciona allí, me aseguré de eso;))
fuente
n=n/4*2
truco. :)C #,
888683 bytesGuardado 3 bytes gracias a Skorm
Se guardó otro byte cambiando el
while
a unfor
bucle que incluye declaraciones de variablesGuardado 1 bytes gracias a Yodle
Función anónima que devuelve una cadena compuesta por el resultado de cada molienda.
Programa completo con método no protegido y casos de prueba [¡antes de la última edición!]:
fuente
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 bytes
Pruébalo en línea!(Como un conjunto de pruebas).
Explicación
fuente
Pyth,
181613 bytes*
\n
es una nueva líneaExplicación:
Intenta aquí
fuente
MATL , 13 bytes
Pruébalo en línea!
fuente
PHP,
726764 bytesToma el argumento de la línea de comando. Corre con
-r
.fuente
Jalea ,
13 1211 bytesTryItOnline!
Nota: el OP indicó que la entrada también puede estar en la salida.
¿Cómo?
Versión sin la entrada mostrada para 12 bytes:
:4Ḥḟ0x2µÐĿḊG
fuente
Perl,
403530 + 1 = 31 bytesCorre con la
-n
bandera-4 bytes gracias a @Dada
Pruébalo en línea!
Perl lee automáticamente la entrada en la variable
$_
cuando-n
se establece.$.
es una variable especial establecida al1
principio del programa por el intérprete, por lo que puedo usarla como base para duplicar. Cada iteración delwhile
bucle, se desplaza$_
hacia abajo y realiza un AND lógico contra el negativo de sí mismo menos uno para cancelar el bit unos.fuente
perl -nE 'say$_ x($.*=2)while$_=$_>>1&~1'
(tal vez esto se pueda jugar aún más, no pasé mucho tiempo en él).PowerShell 3+,
5854 bytesGracias TimmyD por salvarme 4 bytes!
Ligeramente sin golf (formateo)
Explicación
Estoy usando el mismo truco dividir por 4 multiplicar por 2 como muchas de las otras respuestas, pero me encontré con un problema. PowerShell convierte los números en coma flotante si es necesario durante la división, y para jugar al golf es molesto porque se
$v/4*2
convierte en algo desagradable[int]($v/4)*2
. Lo solucioné usando el desplazamiento de bits para la división con-shr
.Para calcular cuántas veces imprimir una iteración, simplemente tomo lo
(2^$i)-1
que funciona bien y tiene el efecto agregado de omitir el valor de entrada. Intentar multiplicar por 2 fue problemático porque comenzar desde 0 hace que sea difícil aumentar el valor con solo$i*=2
y comenzar desde 1 requiere demasiada corrección para obtener el número correcto.Como PowerShell no tiene un operador para ello, y quería evitarlo
[Math]::Pow()
, volví a confiar en el cambio de bits para mis poderes de 2.fuente
Python 2, 47 bytes
Dado que el OP dijo que una matriz 1D que incluía la entrada estaba bien, se me ocurrió esta función recursiva, que desafortunadamente solo se vincula con el ganador actual de Python.
fuente
f=lambda r,n=1:[r]*n+(r>3and f(r/4*2,n*2)or[])
para 46Perl, 47 bytes
No hay opciones de línea de comandos, esta vez (inusualmente para Perl). La idea básica es que, como todas las rocas en cualquier paso dado tienen el mismo tamaño, solo registramos el tamaño (en
$a
) y el número (en$_
), en lugar de registrar la lista completa. No pude encontrar una manera de deshacerme del espacio (o+
) despuéssay
; puedes mover el2*
pero no se analizará correctamente si va seguido de un paréntesis de apertura.No puedo evitar sacudir la sensación de que esto es mejorable, pero no puedo ver cómo.
fuente
die
claramente se siente subóptimo. Pero todavía tenemos una manera de comprobar si tenemos que dejar o no -> una solución es utilizar un tiempo en lugar de lafor
:while$a>1
. Pero necesitamos encontrar un reemplazo para$_
: cualquier variable unitaria puede hacerlo: reemplazar1<<$_
por1<<++$x
. Así que ahora$_
es libre de usar, luego podemos usar-n
y reemplazar cada uno$a
con a$_
, y la primera instrucción se convierte$_>>=1
. Como tenemos-n
,$.
está configurado, por lo que podemos reemplazar1<<++$l
con$.*=2
.perl -nE '$_>>=1;say 2*($_>>=1)x($.*=2)while$_>1'
(39 bytes). Luego observe que$_>>=1
se hace dos veces, para que podamos tratar de deshacernos de uno (el primero). Intentando deshacerme de él, lo conseguísay$_ x($.*=2)while($_>>=1)/2>1
(los puse a ambos dentro de lawhile
condición). Pero el resultado es incorrecto ($_
puede ser extraño), y al tratar de asegurarme de que sea uniforme, termino conwhile$_=$_>>1&~1
. Entonces el código es ahorasay$_ x($.*=2)while($_=$_>>1&~1)
.Vim
6154 bytesTryItOnline!
No imprimibles
Afortunadamente, vim se trunca automáticamente en x / 2.
fuente
JavaScript,
71635958 BytesBueno, se me ocurrió esta solución de JavaScript. Totalmente nuevo en el golf, pero creo que es un desafío divertido
Guardado 4 bytes gracias a la sugerencia de Titus usando un bucle for.
base sin golf:
Versión de golf
Estoy abierto a sugerencias sobre cómo mejorarlo / aprender golf
probador de entrada
Mostrar fragmento de código
fuente
for
bucle:for(o=i=30;i>2;console.log(...)){...}
. Y al combinar las dos asignaciones de molienda en una, puede quitar las llaves:i=i/4<<1;
(-5). No estoy seguro sii=i/4*2;
hará lo mismo.BASH, 81 bytes
fuente
Rápido, 84 bytes
Sin golf
fuente
Befunge, 45 bytes
Pruébalo en línea!
Explicación
fuente
Javascript, 106 bytes
Primer código de golf, pensé que tendría una oportunidad. (No es muy bueno).
No minificado:
fuente