Debería escribir un programa o función que, dada una lista de enteros positivos, multiplique cada elemento con el entero positivo más pequeño posible para crear una lista estrictamente creciente.
Por ejemplo si la entrada es
5 4 12 1 3
las multiplicaciones serán
5*1=5 4*2=8 12*1=12 1*13=13 3*5=15
y la salida será la lista creciente
5 8 12 13 15
Entrada
- Una lista de enteros positivos que contiene al menos 1 elemento
Salida
- Una lista de enteros positivos
Ejemplos
9 => 9
1 2 => 1 2
2 1 => 2 3
7 3 => 7 9
1 1 1 1 => 1 2 3 4
5 4 12 1 3 => 5 8 12 13 15
3 3 3 8 16 => 3 6 9 16 32
6 5 4 3 2 1 => 6 10 12 15 16 17
9 4 6 6 5 78 12 88 => 9 12 18 24 25 78 84 88
8 9 41 5 12 3 5 6 => 8 9 41 45 48 51 55 60
15 8 12 47 22 15 4 66 72 15 3 4 => 15 16 24 47 66 75 76 132 144 150 153 156
Este es el código de golf, por lo que gana el programa o función más corto.
Dato curioso: el último elemento de la salida para la entrada N, N-1, ... ,1
parece ser el (N+1)th
elemento de la secuencia A007952 . Si encuentra una prueba, puede incluirla en su respuesta de golf o publicarla como comentario.
code-golf
math
number
arithmetic
randomra
fuente
fuente
Respuestas:
Jalea ,
65 bytesPrimera respuesta de Jelly
antes de que @Dennis se despierte y me golpee.Pruébalo en línea!Explicación
Gracias a @Dennis por -1 byte.
fuente
:‘×µ\
Guarda un byte.JavaScript (ES6), 28
Editar Según lo sugerido por @Patrick Roberts,
p
puede ser un parámetro no inicializado. Mismo recuento de bytes pero evite usar una variable globalPRUEBA
fuente
f=a=>a.map(n=>a+=n-a%n,a=0)
. Pero no es mi algoritmo (tonto), así que me quedaré con el mío tal como está y votaré arossPython 2,
6764 bytesPrimero intente jugar golf con código, por lo que se agradecen los consejos.
fuente
print l
lugar dereturn l
guardar otro byte. ¡Buen trabajo!PHP,
55464241 bytesUtiliza la codificación ISO 8859-1.
Ejecutar así (
-d
agregado solo por estética):~ß
para producir un espacio.fuente
$a+0
con+$a
. Además, puede suponer que la entrada nunca tendrá un0
, por lo tanto, puede reemplazar su$a+0&&print
con simplemente+$a&print
. De hecho, incluso podrías hacerlo$a&print
, ya que en PHP"0" == 0 == 0.0 == false
. Pero puede que no sea necesario si solo usa unecho
, creo.and
no funcionará (a diferencia de lo lógico), ni el eco funcionará de esta manera. Como estoy tomando datos de CLI, el primer argumento es-
, que quiero atrapar en lugar de imprimir un cero. Tratarphp -r 'print_r($argv);' foo
. Sin embargo, guardé 1 byte con su primera sugerencia, gracias.for(;$a=$argv[++$i];)echo$l+=$a-$l%$a,' ';
? Tiene 42 bytes de longitud y omite el primer elemento.a^A
, pero eso derramaría demasiadas advertencias (las advertencias son ignorables). No cambiará el bytecount de ninguna manera, pero definitivamente se ve diferente.Haskell (
302825 bytes)Versión ampliada
Explicación
scanl1
le permite plegar una lista y acumular todos los valores intermedios en otra lista. Es una especialización descanl
, que tiene el siguiente tipo:Por lo tanto, todo lo que necesitamos es una función adecuada que tome dos, el último elemento de nuestra lista (
acc
en la versión expandida) y el que deseamos procesar (next
en la versión expandida) y devolver un número adecuado.Podemos derivar fácilmente este número dividiendo el acumulador entre el siguiente y colocando el resultado en el suelo.
div
se encarga de eso. Luego, simplemente tenemos que agregar1
para asegurarnos de que la lista realmente esté aumentando (y que no terminemos con0
).fuente
( ... )
con$ ...
y creo que ha contado una nueva línea final que se puede omitir:scanl1$\x y->y*div x y+y
24 bytes.(...)
vs$
, ya que$\
se analiza como operador y necesitaría un solo espacio después$
.scanl1(...)
es una función sin nombre. Con respecto a$
vs()
.: tienes razón, mi error.C ++,
6360 6057 bytesFunciona en el lugar dado un rango
[first, last)
. Originalmente escrito como variante de plantilla, pero eso fue más largo:Versión extendida
fuente
CJam, 13 bytes
Ingrese como una lista de estilo CJam. La salida está separada de salto de línea.
Pruébalo aquí.
Explicación
El valor final se deja en la pila y se imprime automáticamente al final.
fuente
Mathematica
3632 bytesPrueba
fuente
Perl, 17 + 3 = 20 bytes
Requiere
-p
y-l
banderas:Explicación:
fuente
Python (3.5),
6362 bytesPrueba
Solución previa
algunas soluciones recursivas pero más grandes
fuente
r+=[…]
, puedes usarr+=…,
r=[0]
parámetro predeterminado ser
convirtió en no localBrachylog , 12 bytes
Lo suficientemente extraño como tratar de multiplicar cada variable por un número comenzará a tratar de multiplicar por 2 y no por 0 o 1. Sin embargo, esto parece funcionar y supera las otras dos implementaciones de Brachylog
Explicación
Pruébalo en línea!
fuente
Brachylog , 54 bytes
Explicación
fuente
Pyth, 11
Banco de pruebas
Hace una reducción acumulativa, una reducción que devuelve todos los valores intermedios, comenzando por
0
. Como se garantiza que la entrada solo contiene enteros positivos, está bien. En cada paso, tomamos el valor anterior, lo dividimos por el nuevo valor y lo sumamos1
, luego lo multiplicamos por el nuevo valor.fuente
C, 79 bytes
Sin golf
fuente
p=p/x*x+x
funcionaria?PowerShell, 26 bytes
Toma la entrada como una matriz explícita, por ejemplo,
> .\sort-by-multiplying.ps1 @(6,5,4,3,2,1)
vía$args[0]
.Entonces for-loop sobre eso con
|%{...}
y cada iteración realiza magia . No, es broma, usamos el mismo truco de módulo que otras respuestas (accesorios para @aross porque lo vi allí primero).Los padres encapsulantes
(...)
aseguran que el resultado de la operación matemática se coloque en la tubería y, por lo tanto, se genere. Si los dejáramos, no se generaría nada ya que la$l
variable se recolecta basura después de que finaliza la ejecución.Ejemplo
fuente
Japt, 11 bytes
¡Pruébelo en línea!
Cómo funciona
fuente
05AB1E , 11 bytes
Código:
Pruébalo en línea!
Explicación:
Utiliza la codificación CP-1252.
fuente
Minkolang 0.15 , 17 bytes
Pruébalo aquí!
Explicación
Esencialmente, el registro mantiene el último miembro de la lista ascendente y esto se divide por la entrada y se incrementa para obtener el multiplicador para el siguiente miembro. La función de los medios de campo toroidal código de Minkolang que se realiza un bucle horizontalmente sin la necesidad de
()
o[]
bucles.fuente
Brachylog , 21 bytes
Pruébalo en línea!
Utiliza la suma de valores de entrada como límite superior para los coeficientes C. Bastante lento, agota el tiempo de espera en TIO para longitudes de lista de entrada más allá de 5 o 6 (también dependiendo de la suma de los valores). Pero no es tan lento como mi versión original, que requiere pequeñas listas de hasta 3 elementos, con pequeños valores, para no agotar el tiempo de espera:
21 bytes
Pruébalo en línea!
fuente
C (gcc) , 37 bytes
Pruébalo en línea!
fuente
Python 2 , 53 bytes
Pruébalo en línea!
k*x>y
implicak>y/x
; entonces el más pequeñok
puede ser esk=floor(y/x)+1
. Como en Python 2.7, la división de enteros ya se toma comofloor
, queremosk=y/x+1
, yk*x = (y/x+1)*x = y/x*x+x
.fuente
Oracle SQL 11.2, 210 bytes
Sin golf
fuente
Esquema Chez (140 bytes)
Versión de golf:
Versión sin golf:
Pruébalo en línea!
fuente
* m(car l)
puede ser*(car l)m
.K (oK) , 11 bytes
Pruébalo en línea!
fuente