Leer un libro es fácil, pero imprimir un libro puede ser un poco complicado. Al imprimir un folleto, la impresora necesita tener las páginas ordenadas de cierta manera para poder leerlas de izquierda a derecha. La forma en que se hace esto es usando un patrón como el siguiente
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…
Casos de prueba
Folleto de 4 páginas: 4, 1, 2, 3
Folleto de 8 páginas: 8,1,2,7,6,3,4,5
Folleto de 12 páginas: 12,1,2,11,10,3,4,9,8,5,6,7
Folleto de 16 páginas: 16,1,2,15,14,3,4,13,12,5,6,11,10,7,8,9
Folleto de 20 páginas: 20,1,2,19,18,3,4,17,16,5,6,15,14,7,8,13,12,9,10,11
Tarea
Su tarea es, dado un número entero n
que es múltiplo de 4, mostrar una serie de números que podrían usarse para imprimir un libro den
páginas.
Nota: siempre que la salida genere los números correctos, ya sea delimitados por espacios, comas, guiones o paréntesis, se puede utilizar cualquier método para llegar a una solución
Esta es una pregunta de código de golf , por lo que las respuestas se puntuarán en bytes, ganando la menor cantidad de bytes.
Respuestas:
05AB1E ,
987 bytesPruébalo en línea!
Explicación
fuente
JavaScript (ES6),
4945 bytesGuardado 4 bytes con ayuda de @RickHitchcock
Manifestación
Mostrar fragmento de código
No recursivo, 51 bytes
Manifestación
Mostrar fragmento de código
fuente
f=(n,a=1)=>n<a+3?[]:[n,a,a+1,n-1,...f(n-2,a+2)]
n<a
es realmente suficiente, por lo que se guardan 4 bytes. ¡Gracias!Python 2,
999388585655 bytesPruébalo en línea!
-6 bytes eliminando sangría innecesaria, gracias Oliver Ni
-5 bytes cambiando el condicional, gracias Luis Mendo
-30 bytes mediante la optimización de las declaraciones de impresión, gracias Arnold Palmer
-2 bytes poniendo el bucle en una línea, gracias nedla2004
-1 byte haciendo algo de magia, gracias Sr. Xcoder
fuente
lambda
(aunque esto podría ser lo suficientemente diferente como para garantizar una respuesta por separado).f-i+1,i,i+1,f-i
en cada bucle en lugar de imprimir condicionalmente el último valor. Esto también permitió eliminar la inicialprint f,
.Python 2 , 46 bytes
Pruébalo en línea!
Genera el rango
[1..n]
y aparece desde el frente y hacia atrás en el patrón repetitivoback, front, front, back, ...
Python 2 , 49 bytes
Pruébalo en línea!
Genera los primeros 4 elementos, luego continúa recursivamente con el valor superior
n
disminuido en 2 y el valor inferiork
aumentado en 2.Python 2 , 49 bytes
Pruébalo en línea!
Genera directamente el
i
valor 'th de la lista, utilizando-i%4/2
como un valor booleano para tomar el valor más bajo o más alto.fuente
Pitón 3 ,
686362 bytes−5 bytes gracias a @notjagan (eliminando espacios y utilizando en
[*...]
lugar delist()
).-1 byte gracias a @ovs (en
*1
lugar de[:]
) .Pruébalo en línea!
fuente
r*1
lugar der[:]
-1 byte`MATL ,
191710 bytesPruébalo en línea!
Explicación
fuente
Gelatina ,
1211 bytesMejorado a 11 bytes, "Métodos combinatorios":
Pruébalo en línea!
¿Cómo?
Utiliza los cálculos de permutación y el sistema de números factoriales:
12 bytes sin mejorar, "Patrones de tejer":
Pruébalo en línea!
¿Cómo?
Este es el enfoque simple, crea dos hilos, los intercala y luego recorta los cabos sueltos:
fuente
Octava ,
4336 bytesUn puerto de esta respuesta en C (gcc) se puede encontrar aquí .
Explicación
k=1:2:n/2
: Genera una secuencia lineal de 1 an/2
en pasos de 2. Tenga en cuenta que esto se usa inmediatamente en el siguiente paso.[n-k+1;k;k+1;n-k]
: Crea una matriz de 4 filas de modo que la primera fila crea la secuencian, n-2, n-4...
hacia abajon-(n/2)+2
, la segunda fila es1, 3, 5...
hastan/2 - 1
, la tercera fila es la segunda fila agregada por 1 y la cuarta fila es la primera fila agregada por 1.[n-k+1;k;k+1;n-k](:)'
: Esto apila todas las columnas de esta matriz juntas de izquierda a derecha para hacer un solo vector de columna, y lo transponemos a un vector de fila para una fácil visualización. Apilar las columnas juntas de esta manera crea con precisión la secuencia deseada.Tenga en cuenta que esta es una función anónima, por lo que puede asignarla a una variable antes de usarla, o puede usar la
ans
variable incorporada que se crea después de crear la función.Pruébalo en línea!
fuente
input
y abusé un poco más de la sintaxis almacenando el vector incremental base mientras estaba creando la primera fila y tomando la entrada de la entradan
de la función anónima real para que ahora pueda encajarla Una declaración. ¡Gracias!R , 48 bytes (mejorado)
¡Gracias a @Giuseppe por -7 bytes!
El truco es que
x=1:n;x[order(x%%2)]
es equivalente aorder(1:n%%2)
.Pruébalo en línea!
R , 55 bytes (original)
Golfed
Ungolfed con comentarios
Leer
n
de stdin.Definir
x
como secuencia de páginas de 1 an
.Ordene las páginas para que incluso las páginas estén antes de las páginas desiguales.
Ordene las páginas en orden descendente con respecto al centro del libro calculado por
n/2+.5
.Ejemplo con 8 páginas:
Pruébalo en línea!
fuente
(1:n)[order(1:n%%2)]
es lo mismo queorder(1:n%%2)
Mathematica,
545345 bytesExplicación
fuente
Python 2 ,
6463 bytes-1 byte gracias a los ovs!
Pruébalo en línea!
fuente
n-i-1
puede sern+~i
Haskell, 42 bytes
Pruébalo en línea!
Un byte más largo:
Haskell, 43 bytes
fuente
Java 8,
8472 byteso
-12 bytes gracias al comentario de @TheLethalCoder sobre la respuesta de C #.
Respuesta anterior (84 bytes):
Explicación:
Pruébalo aquí
fuente
Perl 5 , 47 + 1 (-n) = 48 bytes
Pruébalo en línea!
fuente
Swift 3 , 74 bytes
Pruébalo en línea!
Swift 3 , 60 bytes
Por alguna razón, esto no funciona en ningún entorno en línea que he probado hasta ahora. Si quieres probarlo, ponlo
var g=
delante y llámalo conprint(g(12))
en Xcode (Campos de juego) .Aquí hay una imagen después de que la ejecuté en un patio de juegos Xcode, versión 8.3.1 (Running Swift 3.1):
fuente
QBIC , 25 bytes
Aunque la entrada es% 4, el ritmo real se basa en 2.
Explicación
fuente
C (gcc) , 66 bytes
Un puerto de mi Octave responde a C (gcc):
Pruébalo en línea!
fuente
cQuents , 21 bytes
Pruébalo en línea!
Explicación
fuente
R ,
6460 bytesDevastadoramente superado por djhurio ! Su respuesta es bastante elegante, vótala.
Un puerto de respuesta de octava de rayryeng .
Pruébalo en línea!
solución original (64 bytes):
Función recursiva.
Pruébalo en línea!
fuente
Bash + Perl + Groff + Psutils, 48 bytes
Muestra salida en
stderr
. La salida contiene algo de basura final.Ejemplo de uso:
fuente
Pyth ,
2120 bytesBanco de pruebas.
Si se permite la salida como una lista anidada:
Pyth ,
2019 bytesBanco de pruebas.
Explicación
fuente
Rubí , 40 bytes.
Pruébalo en línea!
fuente
C #, 107 bytes
Mantenga dos contadores, uno comenzando en 1, uno en p. En cada iteración del ciclo, escriba cuatro elementos y solo incremente o disminuya los contadores después de cada entrada. Cuando los contadores se encuentren en el medio, deténgase.
fuente
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;};
con elSystem.Func<int, int[]> f =
no tener los incluidos en el ByteCount. ¡También puede agregar un enlace a TIO, que es muy útil cuando se trata de permitir que las personas prueben su código por sí mismas!q
a0
e incremento en el preq<p
->++q<p
y luego retire el segundo incremento posterior para guardar un byte. Mueva las dos declaraciones de bucle final a la última etapa del bucle for para que pueda eliminar las llaves.p=>{for(int q=0;++q<p;)System.Console.Write(p--+$",{q++},{q},{p--},");}
. TIOHaskell , 58 bytes
Pruébalo en línea!
fuente
Pyth ,
272423 bytes-3 bytes imprimiendo en lugar de al final.
-1 Gracias al Sr. Xcoder
Pruébalo en línea!
O en el compilador / ejecutor en línea
Este es mi primer programa real en Pyth, por lo que probablemente haya mejores métodos que no conozco.
Explicación
fuente
FN
conV
de -1 bytesC ++ (gcc) ,
898468 bytesComo lambda genérico sin nombre.
n
es #pages (% 4 == 0) yC
es un parámetro de referencia para el resultado, un contenedor vacío comovector<int>
(solopush_back
es necesario).solución previa:
Pruébalo en línea!
Ligeramente incólume:
solución anterior ungolfed :
Fue desarrollado de forma bastante directa y hay algunas optimizaciones menores en la aritmética.
Uso:
Variante de impresión, 77 bytes desactualizados
Si insiste en imprimir los valores, existe esta solución:
¿Dónde
o
está tu deseadostd::ostream
, comostd::cout
Uso (si se asignó la 2da lambda
g
):fuente
Lisp común, 79 bytes
Pruébalo en línea!
fuente
Lua, 94 bytes
Para este desafío, en realidad se me ocurrieron 2 métodos diferentes que tienen 94 bytes.
Método 1:
Código comentado:
Método 2:
Este método es similar al primer método, sin embargo, en cambio estoy devolviendo una cadena concatenada en lugar de string.format ()
En ambos métodos, he usado el concepto de n y me estoy acercando
fuente
PHP, 51 + 1 bytes
imprime números de página separados por guiones bajos con un delimitador final.
Ejecutar como tubería con
-nR
o probarlo en línea .fuente
J , 22 bytes
Pruébalo en línea!
Explicación
fuente