Tarea
Ejecuciones inversas de números impares en una lista dada de 2 a 2 15 enteros no negativos.
Ejemplos
0 1
→ 0 1
1 3
→ 3 1
1 2 3
→ 1 2 3
1 3 2
→ 3 1 2
10 7 9 6 8 9
→ 10 9 7 6 8 9
23 12 32 23 25 27
→ 23 12 32 27 25 23
123 123 345 0 1 9
→ 345 123 123 0 9 1
Respuestas:
Python 2,
756863 bytes5 bytes gracias a Dennis.
Y he superado a Dennis .
Créditos a Byeonggon Lee para el núcleo del algoritmo.
Ideone it!
Versión anterior: 75 bytes
fuente
print
No necesita parens. Además, solo se usaa
una vez, por lo que no hay necesidad de una variable.Pitón 2,
797573 bytesEsta es una función que modifica su argumento en su lugar. El segundo nivel de sangría es un tabulador.
Pruébalo en Ideone .
fuente
APL,
2120 bytesPruébalo ||Todos los casos de prueba
Explicación:
Editar: salvó un
~
agradecimiento a las leyes de De Morganfuente
Haskell,
4644 bytesGracias a @xnor por reconocer un pliegue y guardar dos bytes.
fuente
(h*)
! Puede guardar un byte en el caso base escribiendo elf x=x
segundo para que coincida con la lista vacía, aunque parece que afoldr
es aún más cortoh%p|(l,r)<-span(odd.(h*))p=l++h:r;foldr(%)[]
::foldr
después de todo! Gracias.Jalea , 10 bytes
Pruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
Python 2,
7875 bytesSúper hacky :)
fuente
k.i
?k.i=0
en la última línea. Es solo una variable.k
yk.i
relacionados?k.i
es una variable persistente entre llamadas dek
. Véalo como un improvisado global sin tener que usar laglobal
palabra clave.Python3, 96 bytes
¡Ahorré muchos bytes gracias a Leaky Nun!
fuente
C, 107 bytes
fuente
MATL , 20 bytes
La entrada es una matriz de columnas que se usa
;
como separador.Pruébalo en línea!
Explicación
Considere como ejemplo la matriz de entrada
[1;2;3;5;7;4;6;7;9]
. La primera parte del código,Tiodgv
convierte esta matriz en[1;1;1;0;0;1;0;1;0]
, donde1
indica un cambio de paridad . (Específicamente, el código obtiene la paridad de cada entrada de la matriz de entrada, calcula diferencias consecutivas, convierte valores distintos de cero1
y antepone un1
).Luego
Ys
calcula la suma acumulativa , dando[1;2;3;3;3;4;4;5;5]
. Cada uno de estos números se usará como una etiqueta , en función de la cual se agruparán los elementos de la entrada . Esto se realiza medianteG8XQ!
, que divide la matriz de entrada en una matriz de celdas que contiene los grupos. En este caso da{[1] [2] [3;5;7] [4;6] [7;9]}
.El resto del código itera (
"
) en la matriz de celdas. Cada matriz numérica constituyente se empuja con@g
.to
hace una copia y calcula su paridad . Si (?
) el resultado es verdadero, es decir, el contenido de la matriz es impar, la matriz se voltea (P
).La pila se muestra implícitamente al final. Se muestra cada matriz vertical numérica, que proporciona una lista de números separados por nuevas líneas.
fuente
Pyth, 14 bytes
Casos de prueba
fuente
J ,
333130 bytesUso
fuente
C #,
179178177 bytesYo uso un C # lambda. Puedes probarlo en .NETFiddle .
El código menos minify:
Felicitaciones a Byeonggon Lee por el algoritmo original.
fuente
foreach(var
y cambiarif(n%2==1)
aif(n%2>0)
para guardar 2 bytes (o en realidad 1, porque su respuesta actual es 179 bytes en lugar de 178).Pyth,
2928 bytesBanco de pruebas.
Traducción directa de mi respuesta de Python (¿cuándo se ha convertido en una buena idea traducir de Python a Pyth?)
fuente
TSQL 118 bytes
Violín
fuente
Clojure, 86 bytes
Aquí está la versión sin golf
Básicamente, pasa por la secuencia de entrada y si encuentra un número par, agrega el número y el vector vacío; de lo contrario, si es un número impar, reemplaza el último elemento con este número más lo que estaba en el último elemento.
Por ejemplo, para este seq
2 4 6 1 3 7 2
va así:[]<=2
[2 []]<=4
[2 [] 4 []]<=6
[2 [] 4 [] 6 []]<=1
[2 [] 4 [] 6 [1 []]]<=3
[2 [] 4 [] 6 [3 [1 []]]]<=7
[2 [] 4 [] 6 [7 [3 [1 []]]]]<=2
[2 [] 4 [] 6 [7 [3 [1 []]]] 2 []]
Y luego aplanar este vector da la salida correcta. Puede verlo en línea aquí: https://ideone.com/d2LLEC
fuente
JavaScript (ES6)
7066Editar 4 bytes guardados gracias a @Neil
fuente
:r=r.concat(o,x,o=[]),
te ahorra un par de bytes. Creo que a continuación, puede pasar a salvar a otros dos como esto:a=>[...a,[]].map(x=>x&1?o=[x,...o]:r=r.concat(o,x,o=[]),r=o=[])&&r
....o
?Stax ,
1510 bytes CP437Pruébalo en línea!
Gelatina atado! Tan triste que el embalaje solo salvó un byte.
Versión desempaquetada con 11 bytes:
Explicación
{|e_^*}
es un bloque que asigna todos los números paresn
an+1
, y todos los números imparesn
a0
.fuente
Casco , 7 bytes
Pruébalo en línea!
Explicación
fuente
Ruby , 51 bytes
Pruébalo en línea!
Algunas ligeras variaciones:
fuente
Perl 5 con
-p
42 bytesPruébalo en línea!
fuente