Inspirado por esta pregunta de desbordamiento de pila: ordenar una lista: números en forma ascendente, letras en forma descendente . Su tarea es resolver el siguiente problema y, como se trata de código de golf , debe hacerlo en el menor número de bytes posible.
Debe tomar una lista de objetos como de entrada que contiene las letras (en cualquier forma razonable: string
, char
, etc) y los números. Luego debe ordenar los números en orden ascendente y las letras en orden descendente. Sin embargo, debe mantener letras en posiciones de letras y números en posiciones de números. Por ejemplo, si la lista es:
[L, D, L, L, D, L]
La lista de salida debe tener la forma de:
[L, D, L, L, D, L]
Trabajar a través
Entrada: ['a', 2, 'b', 1, 'c', 3]
- Ordena los números en orden ascendente:
[1, 2, 3]
- Ordena las letras en orden descendente:
['c', 'b', 'a']
- Únete a ellos pero mantén el orden igual:
['c', 1', 'b', 2, 'a', 3]
Reglas
- La lista solo contendrá letras y dígitos.
- La lista puede estar vacía.
- La lista solo puede contener letras o solo dígitos.
- Si su idioma no admite matrices de tipo mixto, puede usar caracteres de dígitos en lugar de números. Tenga en cuenta que si su idioma lo admite, debe usar tipos mixtos.
- Las letras solo serán
[a-z]
o[A-Z]
, puede elegir cuál. - Las letras se ordenan como las
a
más bajas,z
es decir , las más altasa = 1, z = 26
. - Las lagunas estándar están prohibidas.
- La E / S puede ser por cualquier medio estándar, incluso como una cadena.
Casos de prueba
[5, 'a', 'x', 3, 6, 'b'] -> [3, 'x', 'b', 5, 6, 'a']
[ 3, 2, 1] -> [ 1, 2, 3 ]
[ 'a', 'b', 'c' ] -> [ 'c', 'b', 'a' ]
[] -> []
[ 2, 3, 2, 1 ] -> [1, 2, 2, 3]
Como se trata de código golf, ¡ la respuesta más corta en bytes gana!
fuente
Respuestas:
Retina , 10 bytes
Pruébalo en línea!
La
O
etapa en Retina puede realizar directamente el tipo de clasificación selectiva requerida por este desafío.Aquí la primera línea ordena los dígitos, mientras que la segunda línea ordena los no dígitos en reversa.
fuente
Python 2 ,
5352 bytes-2 bytes gracias a g.rocket
-1 byte gracias a Jonathan Frech
Pruébalo en línea!
La
sorted
lista tendrá primero los números y luego los caracteres como[3, 5, 6, 'a', 'b', 'x']
, luego se usaráe<x
para filtrar qué es número y qué es char, en python cualquier número es menor que una lista (entrada) y una lista es menor que una cadena.fuente
IndexError: pop index out of range
. La solución anterior funcionó.1-(e<'`')
debería ser(e<'`')-1
. Simplemente los colocaste en el orden incorrecto. Por cierto, me ninja: / Tuve estoe>x
APL (Dyalog) ,
2726 bytesEspera que los caracteres sean mayúsculas
Pruébalo en línea!
Estas son solo dos aplicaciones del formulario
f@g
, aplique la funciónf
en los elementos indicados porg
.Para el primer uso de la aplicación que:
f
:⍒⊃¨⊂
los grados descendentes (⍒
) cada selección (⊃¨
) de todo el argumento (⊂
).g
:(e←∊∘⎕A)
miembros (∊
) de (∘
) el Alfabeto A (⎕A
), y almacenar (←
) esta función comoe
.Para el segundo uso de la aplicación que:
f
:⍋⊃¨⊂
los grados ascendente (⍋
) cada selección (⊃¨
) de todo el argumento (⊂
).g
:(~e)
no (~
) miembros del alfabeto (e
; la función que almacenamos antes)fuente
83=⎕DR¨⍵
3=10|⎕DR
para enteros?⌊0.1×⎕DR
le da el número de bits utilizados para representar cada escalar, excepto los punteros, que dependen de la arquitectura pero siempre son 326. Por lo tanto, todos los números son2|⎕DR
.JavaScript (ES6),
715147 bytesAhorró 20 bytes simplemente usando
sort()
, como lo sugiere @JustinMariner. Ahorró4 bytes más gracias a @CraigAyre
Usando un enfoque similar a la respuesta de Rod Python :
Casos de prueba
Mostrar fragmento de código
fuente
sort
función y usarlasort()
sola? Parece ordenar de la misma manera sin una función (en Chrome / FF / Edge).sort()
fallaría. Pero dado que estamos limitados a dígitos, tienes razón: eso funciona. ¡Gracias!a.sort()
cada bucle en lugar de asignar ax
?:.map(n=>a.sort()[1/n?'shift':'pop']())
+n
se puede usar en lugar de1/n
R ,
8376 bytes-7 bytes gracias a Miff
Esto es lo mismo que a continuación, pero permite la entrada de tipo mixto en
list
lugar de unatomic
vector (que escribiría todo como caracteres con tipos mixtos).Pruébalo en línea!
R ,
6861 bytes-7 bytes gracias a Miff
Función anónima. Todos los dígitos se convierten a caracteres en este caso.
n[-d]
es la matriz sin los dígitos. DevuelveNULL
(lista vacía) en la entrada vacía.Pruébalo en línea!
fuente
d=n%in%0:9
Japt ,
1815 bytesGracias @Shaggy por -3 bytes y por ayudar a arreglar matrices con
0
s.La primera línea se deja en blanco intencionalmente.
Pruébalo en línea! usando
-Q
para ver la matriz formateada.Explicación
La primera línea está en blanco para evitar sobrescribir la matriz de entrada.
[5, 'a', 'x', 3, 6, 'b']
Haga una copia al acoplar (
c
) la matriz de entrada, luego ordenar (ñ
) con cadenas representadas por su código char (c
). Esto se almacena enV
.[3, 5, 6, 'a', 'b', 'x']
Luego mapee la matriz de entrada por la función ...
Convierta los números en cadenas binarias (verdad) o cadenas en
""
(falsedad) (¤
). Si es verdad, elimine desde el principio deV
(v
), de lo contrario, elimine desde el final (o
).fuente
Vo
yVv
alrededor. Estoy convencido de que tiene que haber un camino más corto, sin el ternario.o
pudiera eliminar desde el principio con valores negativos o algo así ...JavaScript,
164162158142 byteseditar 1: 2 bytes menos después de eliminar una asignación redundante de v.
editar 2: 4 bytes menos gracias a TheLethalCoder.
editar 3:16 bytes menos gracias a las brillantes sugerencias de Justin Mariner
Es mi primera vez en code-golf, por lo que seguramente se puede mejorar ... Pero aún así, vale la pena intentarlo.
El programa realiza una variante de selección, que solo tiene en cuenta los valores del mismo tipo que el actual (intercambiando solo un número y un número, o una letra y una letra)
Forma legible:
fuente
for(j=i+1;j<l;j++)
->for(j=i++;++j<l;)
y elimina el incremento en el bucle externo.j
como sugerí, no te vi usari
más abajo solo cambiarx[i]=x[m]
tambiénx[i++]=x[m]
x[i++]=x[m]
... Gracias!C ++ 17 (gcc) , 219 bytes
Pruébalo en línea!
Apenas competitivo. ¿Pero debo admitir matrices de tipo mixto? MULTA.
Acepta una variedad de variantes en el estilo de rango y lo modifica en su lugar. Copia la entrada en dos conjuntos ordenados y luego nuevamente en la matriz de entrada / salida.
fuente
void *
en C;) Pero, sí, es interesante ver una solución saltando a través de ese aro.#include
sMathematica, 203 bytes
Pruébalo en línea!
fuente
Jalea , 14 bytes
Pruébalo en línea!
Básicamente un puerto de la solución Python de Rod .
fuente
Pyth ,
1211 bytesPruébalo en línea! o Prueba el conjunto de pruebas.
Explicación
fuente
Python,
145139130 bytes6 bytes guardados gracias a @officialaimm
9 bytes guardados gracias a @Chris_Rands
Pruébalo en línea!
fuente
type(x)==str
ahorraría algunos bytes sobre el uso,isinstance(...)
creo05AB1E , 17 bytes
Pruébalo en línea!
Usar el cierre de clasificación en realidad fue peor:
Σ©Ç®ai0<*}}¹SaJsvyay.;
fuente
Python 3, 77 bytes
Esta respuesta se basa en el comentario que dice que puede usar '1', '2', etc., si los caracteres y los dígitos no son comparables en el idioma. 'a' y 1 no son comparables en Python 3.
fuente
q / kdb +,
5453 bytesSolución:
Ejemplos:
Explicación:
Encuentre los caracteres en la lista, ordene descendentemente, encuentre los largos en la lista, ordénelos ascendentes, únase para obtener una lista de, por ejemplo
("x";"b";"a";3;5;6)
, luego asigne los valores ordenados a sus posiciones originales en la lista, por ejemplo, en0 3 4 1 2 5
.El golf es simplemente cambiando las palabras clave (q
each
,where
ynot
) por suk
equivalente (en el que puedan ser envuelto entre paréntesis).Ediciones
desc
fuente
C (gcc) ,
125113110 bytesPruébalo en línea!
Explicado:
Se esperan letras en mayúsculas.
fuente
PHP, 66 bytes:
toma datos de los argumentos de la línea de comandos, imprime una cadena. Ejecutar
-nr
o probarlo en línea .Produce una advertencia en PHP 7.1; reemplazar
a&
con""<
para arreglar.fuente
Mathematica, 107 bytes
fuente
C # (.NET Core) , 171 bytes
El recuento de bytes también incluye:
Pruébalo en línea!
Explicación:
fuente
Perl 5 , 107 + 1 (-n) = 108 bytes
Pruébalo en línea!
fuente
Rubí , 265 bytes.
Pruébalo en línea!
Primer temporizador aquí, mi solución definitivamente no es la mejor. Pero como esta es mi primera respuesta, pensé en publicar solo por diversión.
Mirando hacia adelante para ver mejores respuestas de Ruby, para ver cuál es el mejor enfoque. Espero mejorar en futuras respuestas =)
Legible
fuente
Haskell, 108 bytes
Puede haber formas más cortas, pero solo tuve que probarlo con la
Lens
biblioteca.Podría definir
f
simplemente la composición de las dosi
invocaciones, pero todavía tendría que aplicarx
para evitar un error de tipo de la restricción de monomorfismo. Tenga en cuenta que el tipo def
esTraversable t => t Char -> t Char
para que pueda usarse conString
s, que son listas deChar
s, así como con matrices deChar
s.Aquí están los casos de prueba:
fuente
Python 3, 91 bytes
fuente
Clojure, 151 bytes
Ejemplo:
Esto calcula el recuento de
sumaacumulativa de enteros y caracteres, y lo utiliza para buscar el elemento correcto de una lista ordenada de los elementos del tipo correspondiente.fuente
APL (Dyalog) , 26 bytes
(usos
⎕IO=1
)Pruébalo en línea!
fuente