Buenas noches golfistas!
Su desafío es ordenar completamente una serie de números.
Entrada
Exactamente 100 enteros serán alimentados a su programa. Su programa puede aceptar la entrada como un archivo o vía stdin. Cada entero estará separado por un carácter de nueva línea.
Esos 100 enteros van desde los valores mínimos hasta los máximos de un entero con signo en el idioma elegido.
No habrá valores duplicados. Los valores pueden ser ordenados, desordenados o parcialmente ordenados; su programa debe poder manejar cada caso.
Salida
La salida debe ser cada uno de los 100 enteros, completamente sin clasificar, cada uno separado por un carácter de nueva línea. La salida puede ser a través de stdout o a un archivo.
Completamente sin clasificar significa que ningún valor es adyacente a ningún valor al que sería adyacente si la lista se ordenara completamente en una secuencia ordenada.
Puntuación
1 punto por personaje, y gana la puntuación más baja. Hay una bonificación de -100 para cualquier solución que no utilice funciones de clasificación incorporadas o de biblioteca. Hay una bonificación de -20 para cualquier solución que no utilice funciones integradas de números aleatorios.
He tratado de definir esta pregunta lo más completamente posible. Si tiene alguna pregunta, por favor pregunte. Si tiene algún comentario sobre cómo podría mejorar la próxima vez, hágamelo saber.
¡Delantero!
fuente
Respuestas:
GolfScript (puntaje 27-120 = -93)
Nota:
$
es hacer referencia a un elemento en la pila. Hay una clasificación, pero se realiza con una clasificación de burbuja codificada manualmente.Gracias a Howard, por -90 => -92; e Ilmari, quien inspiró -92 => -93.
fuente
$
- por eso mencioné que$
en el programa no hay ordenamientos (depende del contexto). La mayoría del programa (28 de los 42 caracteres) define la función^
; La primera versión, que utiliza el tipo incorporado, tenía solo 14 caracteres.2/{~p}%n*
.2/zip~+n*
y.);\+2%n*
también hace el truco para la misma cantidad de caracteres que la versión de @ Howard. Por desgracia, no he logrado encontrar nada más corto todavía.Python -26
(94-120): enfoque nuevo y crudo. Sigue apareciendo los elementos más bajos en una nueva lista para ordenar los elementos, luego itera:
Python -13
(107-120): primer enfoque: elimina los cuatro elementos más bajos a la vez, luego imprime estos cuatro en otro orden:
fuente
t=l=[]
yexec't+=[input()];'*100
te ahorraría algunos caracteresexec
declaración para más de un bucle.t=l=[]
t y l apuntan al mismo objeto y no funciona. Sinexec
embargo, omitir paréntesis es bueno.t=t+[input()];
, esto crea un nuevo objeto cada vez. E incluso se puede hacer el bucle de impresión en la sentencia exec:';i+=1;print l[i*3%100]'*100
.%3
juegos de golf, como eliminar y evitar la repetición de100
.C: 11 (131-120)
El programa lee de stdin y realiza una ordenación de inserción simple, luego imprime el enésimo junto con el número n + 50, como muchas de las otras soluciones.
fuente
Mathematica
-56 44 4(95-120) = -25Editar :
Esta versión no se basa en funciones integradas para ordenar listas ni en funciones de aleatorización.
fuente
Sort
No es una función de ordenamiento incorporada?J, -63 (57-120) caracteres
Como todos los demás están siguiendo la ruta de clasificación autoescrita ...
No utiliza ninguna función de número aleatorio, ni ningún tipo incorporado.
Utiliza una ordenación de selección recursiva simple para ordenar la entrada.
fuente
Ruby 1.9, -59
(61-120)
Recursión! De hecho, a diferencia de mis intentos anteriores de Ruby, este ordena la lista independientemente de su orden original.
Intentos anteriores
Un solo trazo, ahora usando una ordenación integrada para funcionar correctamente:
Primero: no necesariamente clasificó los últimos 4 valores:
fuente
Python 2: 90 char
intento flojo pero solo para empezar
fuente
Python 48 = (148-100)
No lo he probado porque no está garantizado (o no es probable) que se ejecute en un período de tiempo razonable, pero debería funcionar en teoría dado un tiempo infinito.
fuente
x=map(input,['']*100)
[]
s adicionales , solo cualquier cadena de caracteres.Python 27 (147-100-20)
Nota: los espacios anteriores
if L[i]>...
deben ser una pestaña, pero aparentemente se muestran como espacios en un bloque de código.fuente
R=range
usted podría guardar 5 caracteres.a=map(input,['']*100)
Perl 5: 95-120 = -25 caracteres
Contando la siguiente línea de comando:
fuente
Rubí: -50 (70 caracteres - 120)
Hice lo mismo que muchas otras respuestas: elimine iterativamente el máximo y el mínimo de la lista de entrada y añádalos a la salida. Sin embargo, me di cuenta de que si los 2 números a cada lado de la mediana son consecutivos, la salida será incorrecta (porque esos 2 números consecutivos aparecerán juntos al final de la salida). Para solucionar esto, giro la lista "sin clasificar" por 1 elemento:
O, para trabajar con muchas entradas arbitrarias (usando solo 4 caracteres más):
Nota: Ya se han publicado algunas respuestas de Ruby con menos caracteres, pero esas soluciones no abordaron el problema medio (y / o asumieron una lista de entrada ordenada).
fuente
J 37-100 = -63
No utiliza ningún tipo de clasificación (aunque sí utiliza el rango) Usa números aleatorios.
Explicación:
fuente
Brachylog , 22 bytes - 120 = -98
Pruébalo en línea!
El enlace TIO solo tiene una entrada de ocho enteros, en lugar de cien, porque esto es tan terriblemente lento que no puede manejar más en 60 segundos. La razón de esto es que, entre otras cosas, en lugar de implementar un algoritmo de clasificación simple pero normal para la bonificación obligatoria, en aras de la brevedad utilicé lo que equivale a un bogosort determinista:
p≤₁
retrocede a través de cada permutación de la entrada hasta que encuentra uno que no es decreciente Aunque una razón más grande probablemente sea que emplea un grado similar de fuerza bruta para encontrar la salida, y que vuelve a calcular la versión ordenada cada vez ... Intenté probarlo en una entrada real de tamaño 100, pero estoy No estoy seguro de cuántos días llevará.Una mejor versión general:
Brachylog , 14 bytes - 20 = -6
Pruébalo en línea!
Esto ignora los requisitos anticuados de E / S por brevedad, y no toma la bonificación de -100 para que pueda probarse sin una supercomputadora (aunque al momento de escribir esto, he tenido que ejecutar solo 20 elementos durante varios minutos y Todavía no me ha dado nada).
fuente
Adelante (gforth) , 79-120 = -21 bytes
Pruébalo en línea!
Ignora los requisitos de entrada anticuados y toma la entrada como una dirección en la memoria donde se almacenan los números.
Explicación
Recorre todos los números del 0 al 99. Para cada número (n):
De lo contrario (n es par):
Salida de una nueva línea
Explicación del código
fuente