Vamos a doblar una lista de enteros. El procedimiento para hacerlo es el siguiente: si la lista tiene una longitud par, haga una lista de la mitad de su longitud donde el enésimo elemento de la nueva lista es la suma del enésimo elemento de la lista anterior y el enésimo Último elemento de la lista anterior. Por ejemplo si tuviéramos la lista
[1 2 3 4 5 6 7 8]
Lo doblaríamos así
[8 7 6 5]
+[1 2 3 4]
__________
[9 9 9 9]
Si la lista tiene una longitud impar , para doblarla primero eliminamos el elemento del medio, doblarlo como si fuera par y agregar el elemento del medio al resultado.
Por ejemplo si tuviéramos la lista
[1 2 3 4 5 6 7]
Lo doblaríamos así
[7 6 5]
+[1 2 3]
__________
[8 8 8]
++ [4]
__________
[8 8 8 4]
Tarea
Escriba un programa o función que tome una lista de enteros como entradas y salidas que se pliegan.
Esta es una pregunta de código de golf , por lo que las respuestas se puntuarán en bytes, con menos bytes mejor.
Implementación de muestra
Aquí hay una implementación en Haskell que define una función f
que realiza un pliegue.
f(a:b@(_:_))=a+last b:f(init b)
f x=x
fuente
Respuestas:
Python , 46 bytes
Pruébalo en línea!
Mismo largo:
Una solución mucho más corta funciona para listas de longitud par (30 bytes)
Pruébalo en línea!
Todavía estoy tratando de encontrar una forma corta de corregirlo para una longitud impar.
fuente
f=lambda l:l[1:]and[l[0]+l.pop()]+f(l[1:])or l
también tiene la misma longitud ...05AB1E , 5 bytes
Código
Utiliza la codificación 05AB1E . Pruébalo en línea!
Explicación
fuente
Emojicode , 203 bytes
Esta fue la respuesta más dolorosa de Emojicode al código para mí. La longitud innecesaria: /
Pruébalo en línea!
fuente
Japt ,
211816 bytes¡Pruébalo en línea!
Completamente horribleLigeramente menos horrible gracias a @Oliver . BRB después de implementar más funciones integradas y corregir algunos errores ...fuente
Gaia , 7 bytes
Explicación
fuente
Mathematica, 88 bytes
fuente
Mathematica 57 Bytes
Inserta un cero en el punto medio, agrega la lista a su reverso y toma la longitud adecuada.
fuente
Japt , 12 bytes
Pruébalo en línea! con la
-Q
bandera para ver la matriz formateada.Solución alternativa, 14 bytes.
Pruébalo en línea!
fuente
Jalea , 7 bytes
Pruébalo en línea!
-2 gracias a ETHproductions ... y me di cuenta antes.
fuente
JavaScript (Node.js) , 53 bytes
Pruébalo en línea!
Otra sugerencia:
JavaScript (Node.js) , 43 bytes
Pruébalo en línea!
fuente
R ,
81706857 bytesPruébalo en línea!
función anónima; Devuelve el resultado.
fuente
Python 3 , 101 bytes
Pruébalo en línea!
fuente
Python 3 , 70 bytes
Pruébalo en línea!
fuente
JavaScript,
7571 bytesPruébalo en línea
Ahorró 2 bytes gracias a ETHproductions
fuente
JavaScript (ES6), 41 bytes
Mostrar fragmento de código
fuente
MATL , 9 bytes
Pruébalo en línea!
Cómo funciona
Dado un conjunto
[a b c ... x y z]
,[a z]
se llamará el subconjunto "corteza"[b c ... y z]
el "núcleo".El código consiste en un bucle que elimina la corteza, calcula su suma y mueve el núcleo a la parte superior de la pila, listo para la próxima iteración. La condición del bucle es el número de elementos en el subconjunto central
fuente
WendyScript , 72 bytes
Pruébalo en línea!
fuente
C # (.NET Core) ,
118111bytesEl recuento de bytes también incluye
Pruébalo en línea!
Como entrada, utilice números separados por comas (
,
) o espacios. Explicación:fuente
Perl,
4238 caracteressub f {@ a = mapa {$ + pop} empalme @ , 0, @ / 2; @ a, @ }Intenta, por ejemplo, así:
fuente
Pyth,
181713 bytesMi enfoque original fue
-1 byte gracias al Sr. Xcoder
-4 bytes gracias a FryAmTheEggman
fuente
c2<list>
para dividir una lista a la mitad. Otro comando que podría ser útil es.T
.WtQ aY+.)Q.(Q0;+Y
C ++ 17,
757371 bytesComo lambda sin nombre, aceptar un contenedor como
vector
olist
, regresa modificando la entrada:Usando el conocido operador 'go-to'
<--
y el triple plus+++
Ungolfed y ejemplo:
fuente
J , 22 bytes
Pruébalo en línea!
fuente
APL (Dyalog Unicode) , SBCS de 21 bytes
-3 bytes gracias a @ Adám.
Pruébalo en línea!
Explicación:
fuente
+⌿(⌊2÷⍨≢)(↑↑⍮⌽⍤↓)⊢
(⌊2÷⍨≢)(↑{+⌿↑⍺⍵}∘⌽↓)⊢
`Lisp común, 106 bytes
Pruébalo en línea!
fuente
JavaScript (Node.js) , 62 bytes
Pruébalo en línea!
fuente
-i-1
con+~i
para guardar un byte.c!=i
conc>i
por un byte.Scala, 91 bytes
fuente
Mathematica , 52
fuente
JavaScript (ES6),
4643 bytesMostrar fragmento de código
Guardado 3 bytes con la inspiración de Asaf .
fuente
c+c
funciona para el tercer byte.Java 8, 93 bytes
¡Doble dígitos! Esta es una lambda que toma un
int[]
y devuelve unint[]
.Lambda sin golf
Bastante sencillo. Dobla la segunda mitad en su lugar en la primera mitad de la entrada y devuelve una copia de solo la primera mitad.
Sorprendentemente, la copia de la matriz en la declaración de devolución parece ser la forma más barata de manejar la peculiaridad del elemento final para entradas de longitud impar.
fuente
PHP , 67 bytes
Pruébalo en línea!
fuente