Este desafío ya describe dropsort. Sin embargo, soy un poco vago y realmente solo necesito que mi matriz esté un poco más ordenada que antes, no necesita ser ordenada por completo .
En Drop Sort, soltamos cada elemento menos que cualquier elemento anterior. En Lazy Drop Sort, descartamos cada elemento menos que el estrictamente anterior .
Aquí hay un ejemplo. Considere la siguiente matriz:
8 6 9 9 7 2 3 8 1 3
Marquemos cada elemento menos que el anterior.
8 6 9 9 7 2 3 8 1 3
^ ^ ^ ^
Observe cómo ni 3
se marcó, ni el último 8
. Todos son más grandes que el elemento individual a la izquierda de ellos.
Completando el algoritmo, eliminando los elementos marcados, obtenemos:
8 9 9 3 8 3
Eso básicamente se ve más ordenado. Un poco Soy perezoso.
Su tarea, como ya habrá deducido, es implementar este algoritmo.
La entrada es una matriz de al menos 1 entero positivo entre 1 y 9, por lo que también puede tomar una cadena de dígitos.
Este es el código de golf , ¡la menor cantidad de bytes gana!
Casos de prueba adicionales:
1
1
1 2 3
1 2 3
5 3 1
5
1 2 3 2 1
1 2 3
1 1 1 9 9 9 1 1 1 9 9 9 1 1 1
1 1 1 9 9 9 1 1 9 9 9 1 1
9 9
9 9
5 2 4 2 3
5 4 3
Respuestas:
Casco , 4 bytes
Pruébalo en línea!
Explicación
fuente
JavaScript (ES6),
2825 bytesGuardado 3 bytes gracias a @Shaggy
Pruébalo en línea!
fuente
n=>p<=n
se habría visto increíble ;-)(n=p)=>p<=(p=n)
funciona bien;)p
por primera vez, cuando aún no está definido?a
se establece inicialmente en la matriz de entrada ya-1
daría como resultadoNaN
(a menos que contenga un solo entero, en cuyo caso se coacciona a este entero).R , 27 bytes
Pruébalo en línea!
fuente
MATL ,
98 bytesGuardado un byte gracias a Giuseppe.
Pruébalo en línea!
Explicación:
fuente
Perl 5 .10.0 +
-nl
, 16 bytesPruébalo en línea!
fuente
perl6 -ne '$/>$_||.say;$/=$_'
Haskell, 29 bytes
solo una simple lista de comprensión.
fuente
Japt ,
87 bytesGuardado 1 byte gracias a @Oliver
¡Pruébalo en línea!
Alternativas:
fuente
Stax , 5 bytes
Ejecute y depure esto en línea
Desempacando, desempañando y comentando el código, obtenemos esto.
Ejecute este
El orden de las instrucciones es incómodo, pero hay una razón para ello. El empaquetado del código fuente Stax no siempre produce el mismo tamaño de salida para el mismo tamaño de entrada. Básicamente, tiene la posibilidad de guardar un byte si el último carácter de origen tiene un código de caracteres más bajo. Bueno,
!
tiene uno de los códigos más bajos que puede obtener para un personaje imprimible. (33 específicamente) Muchos programas ASCII stax de 6 bytes no pueden empacar más pequeños. Pero si terminan con un!
, entonces pueden. Entonces, la razón de este orden particular de instrucciones es asegurar que lo lógico no termine al final del programa.fuente
J, 12 bytes
Explicación:
Ejemplos:
Pruébalo en línea!
fuente
Jalea , 6 bytes
I / O está en cadenas.
Pruébalo en línea!
fuente
×
no debería funcionar para la repetición de personajes, pero lo hace.Java 8,
665548 bytes-11 bytes después de un consejo de @ OlivierGrégoire .
-7 bytes más gracias a @ OlivierGrégoire .
Explicación:
Pruébalo en línea.
fuente
~0
cuando es básicamente-1
? Personalmente, elegiría la solución más intuitiva si el conteo de bytes es de la misma longitud (excepto parawhile(...)
vsfor(;...;)
, en cuyo caso prefiero elfor
. Gracias por otros -7 bytes, sin embargo. :)Integer.MIN_VALUE
(que es entonces1<<31
, supongo ...) ;-)Octava , 21 bytes
Pruébalo en línea!
Explicación:
Tome un vector
x
como entrada y cree un vector[0, diff(x)<0]
, dondediff(x)
es un vector con la diferencia entre todos los elementos adyacentes. Mantenga solo aquellos que son negativos al compararlo con cero, dándonos una lista de todos los elementos que queremos eliminar.Luego seleccionamos los elementos del vector de entrada que queremos mantener.
fuente
V , 25 bytes
Pruébalo en línea!
Hexdump:
El peor idioma para el trabajo. Pero lo hice por un desafío .
fuente
k$yl+@"òç-/d
español?k$yl+@"òç-/d
podría traducirse libremente como Ouch, ¿quién demonios dejó esa puerta del armario abierta?Triangularidad , 71 bytes
Pruébalo en línea!
¿Cómo funciona?
fuente
)IEL)rFD)2+)IE)w+h)2_stDO={M)IEm}
que se expandiría a su respuesta actual?)IEL)rFD)2+)IE)w+h)2_stDO={M)IEm}
sería su código, se expandiría a su plantilla actual y luego haría los comandos 2D en esa plantilla expandida. EDIT:.....).....\n....IEL....\n...)rFD)...\n..2+)IE)w..\n.+h)2_stDO.\n={M)IEm}...
y.....).........IEL.......)rFD).....2+)IE)w...+h)2_stDO.={M)IEm}...
y)IEL)rFD)2+)IE)w+h)2_stDO={M)IEm}
habría los tres ser el mismo programa.Python , 40 bytes
Pruébalo en línea!
Entrada como tupla de caracteres.
Python 3 , 41 bytes
Pruébalo en línea!
Cadena de entrada.
Python 2 , 41 bytes
Pruébalo en línea!
Entrada de cadena, solo porque las cadenas son mayores que
id
pero los números son más pequeños.fuente
Wolfram Language (Mathematica) , 33 bytes
Pruébalo en línea!
Cómo funciona
El código
# - {0}~Join~Most@#
convierte una matriz{a,b,c,d,e,f}
en{a,b-a,c-b,d-c,e-d,f-e}
. Al aplicarArg
esto, se establecen números negativosPi
y números no negativos0
.Pick[#, ..., 0]&
selecciona las entradas de#
where...
tiene a0
: en nuestro caso, exactamente los elementos que producen un número no negativo cuando resta el elemento anterior. En otras palabras, estas son exactamente las entradas que queremos mantener cuando lazydropsorting.fuente
Maravilla , 27 bytes
Ejemplo de uso:
Explicación
Versión sin golf:
Anteponer
0
, obtener una lista de pares consecutivos, mantener elementos de la lista donde el primer número <= segundo número, obtener el segundo número de cada par.fuente
Wolfram Language (Mathematica) , 20 bytes
Pruébalo en línea!
Explicación
Input = {8, 6, 9, 9, 7, 2, 3, 8, 1, 3}
Agrupe elementos consecutivos que disminuyan estrictamente:
{{8, 6}, {9}, {9, 7, 2}, {3}, {8, 1}, {3}}
Tome el primer elemento de cada uno:
{8, 9, 9, 3, 8, 3}
fuente
##>0
es elegante y todo, pero en realidad no guarda nada por#>#2
aquí;) (lo que haría que su programa funcione con enteros arbitrarios, aunque eso no es necesario).Python 2 ,
52464542 bytesPruébalo en línea!
Salvado:
fuente
SWI-Prolog, 44 bytes
Uso: Llame a " Lista -X" donde Lista es una lista separada por comas, separada por comas, p. Ej. [1,4,5,1,11,6,7].
fuente
APL + WIN, 14 bytes
Solicita la entrada de pantalla de un vector de enteros.
fuente
05AB1E , 6 bytes
Pruébalo en línea!
Explicación
fuente
Kotlin , 39 bytes
Pruébalo en línea!
Filtre los elementos que son el primer elemento (índice == 0, o incluso un índice más corto <1) O el valor actual es mayor o igual que el elemento anterior (a [i-1]).
fuente
APL (Dyalog Unicode) , 11 bytes
Pruébalo en línea!
En realidad, esto es bastante similar a la respuesta de Graham, pero en Dyalog, y desarrollado de forma independiente. Además, más simétrico.
fuente
K4 , 10 bytes
Solución:
Ejemplo:
Explicación:
Encuentre índices donde el elemento sea menor que el anterior, elimine estos índices de la entrada
fuente
Adjunto , 24 bytes
Pruébalo en línea!
Explicación
Mask
selecciona todos los elementos de su segundo argumento que corresponden a elementos de verdad en su primer argumento.1'(Delta!_>=0)
calcula los índices que corresponden a elementos que se supone que están en la matriz final.Otros intentos
28 bytes (sin puntos):
~Mask#(1&`'##Delta#`>=#C[0])
32 bytes:
{Mask[1'(&`<= =>Slices[_,2]),_]}
fuente
C # (.NET Core) , 33 + 18 = 51bytes
Pruébalo en línea!
básicamente la declaración es donde x es el primer int en la matriz, o es mayor o igual que el número anterior, guárdelo. De lo contrario, déjalo caer.
fuente
IEnumerable
. NoToArray()
necesarioSystem.Collections
, y eso negaría todos los bytes guardados para eliminar elToArray()
.IEnumerable
en la respuesta, solo la usará como tipo de retorno.Swift 4 ,
5655 bytesPruébalo en línea!
Explicación
fuente
Jalea , 9 bytes
Pruébalo en línea!
Esto se siente bastante voluminoso, no estaría tan sorprendido si hay una mejor manera.
fuente
Brain-Flak ,
136, 120 bytesAquí está formateado y "legible" .
Pruébalo en línea!
fuente