Necesito dejar de pensar en nombres punny
Su tarea es crear tantos fragmentos (programas que tengan entradas y salidas incorporadas), funciones o programas completos como sea posible que clasifiquen la versión de su matriz de enteros en orden ascendente, pero para cada programa, solo se le permite para usar los caracteres en ASCII (o la página de códigos de su idioma, si se especifica directamente como no ASCII) que no se han utilizado en los programas anteriores.
Este es un ejemplo de respuesta (programas separados separados por nuevas líneas):
Derp
ASdFGHJKLAAA
qwEEERtyRty
En este (lengua ficticia), mi primera respuesta es Derp
, que agotado D
, e
, r
y p
. En el segundo programa, no se me permite usar esos caracteres nuevamente, pero puedo reutilizar tantos caracteres como quiera. Lo mismo con el tercer programa, y así sucesivamente.
Cada programa debe tomar una matriz de enteros, por lo que algo como esto (ver ejemplos de entrada / salida para estilos de entrada / salida válidos):
[3 4 -2 5 7 196 -44 -2]
Y debe mostrar los elementos de la matriz como una matriz, en orden ascendente:
[-44 -2 -2 3 4 5 7 196]
Su puntaje será la cantidad total de envíos. Si hay un empate, ¡el bytecount más bajo (la menor cantidad de bytes en su código) gana!
Reglas para programas:
- Todos los envíos deben ejecutarse correctamente en una versión de idioma (así
Python 2 != Python 3
). - Sus envíos pueden ser fragmentos, funciones o programas completos. Incluso puede mezclarlos y combinarlos; sin embargo, debe decir cuál es cuál y proporcionar enlaces a envíos que funcionen.
- Proporcione enlaces en línea a todas las soluciones, si es posible.
- Todos los envíos deben tomar una matriz (o una cadena delimitada con cualquier carácter) como entrada y generar la matriz ordenada (en la forma de matriz de su idioma o como una
{any character}
cadena delimitada). - No está permitido usar ningún carácter fuera de ASCII (o la página de códigos de su idioma).
Por ejemplo, estas son entradas / salidas válidas:
[1 2 3 4] (Clojure style arrays)
[1, 2, 3, 4] (Python style arrays)
1 2 3 4 5 (Space-delimited - separated by spaces)
1#2#3#4#5 ("#"-delimited - separated by "#" characters)
1\n2\n3\n4\n (newline-delimited)
Especificaciones para la entrada:
- Se garantiza que la matriz contiene solo enteros. Sin embargo, puede haber números negativos, y los números pueden repetirse indefinidamente.
fuente
Respuestas:
Jelly , 10 programas, 65 bytes
Hay una superposición inevitable con la respuesta de @ Lynn's Jelly . Los créditos para la idea de bogosort van a ella.
Pruébalo en línea! o verificar la unicidad .
Cómo trabajan ellos
fuente
Jelly, 8 programas
El último programa es realmente molesto ...
Si puedo quitar la
œṡ
de<;0œṡ0⁸ṁjµ/
, también hay esta extraña uno:²SNr²ZFœ&
. La ayuda es apreciada.fuente
Roots → polynomial, polynomial → roots
es genio!U
es gratis05AB1E , puntuación = 6
05AB1E utiliza la codificación CP-1252 .
Gracias a Kevin Cruijssen por el programa 4.
Gracias a Riley. por la inspiración para el programa 6.
Programa 1
Pruébalo en línea!
Programa 2
Pruébalo en línea!
Programa 3
Pruébalo en línea!
Programa 4
Pruébalo en línea!
Programa 5
Pruébalo en línea!
Programa 6
Pruébalo en línea!
fuente
ϧ
Se puede usar para un puntaje adicional. Pruébalo aquí.œ
solución, pero ni siquiera sabía sobreß
:)€Ý逤
funcionaría si¤
apareciera el valor en su lugar si solo lo obtuviera.Brachylog , puntaje =
45Programa 1 - Clasificación aleatoria
Barajamos y verificamos que el reverso de la lista no aumenta. Si no, reintentamos recursivamente.
Programa 2 - Tipo de permutación
Salida de la primera permutación que no es decreciente.
Programa 3 - Incorporado
Orden.
Programa 4 - Incorporado
Ordenar por etiquetado. Como los enteros en la lista ya están fijos, esto hace lo mismo que
o
.Programa 5 - Impresión mínima
Aquí hay una explicación para esta monstruosidad de la naturaleza:
fuente
RecursionError: maximum call stack size exceeded
JavaScript, puntaje
12Duplicó el puntaje gracias a @ETHproductions que me recordó los escapes de cadena
Fragmento 1 (21 bytes, caracteres
\ ,-.=>289`Facehilnorstux
)Fragmento 2 (9117 bytes, caracteres
(+)[!]
)Puede probar ambas versiones en la consola de su navegador. La primera versión es solo una función, la segunda versión es un fragmento que necesita los paréntesis y el argumento agregado.
Ejemplos
¿Cómo?
El primer fragmento llama al método de clasificación en la matriz que le pasa. De manera predeterminada, el método de clasificación ordena lexicográfico, lo cual es malo para los enteros (especialmente números negativos de varios dígitos). Como tal, tenemos que pasarle una devolución de llamada en forma de una función de flecha que toma dos elementos y resta el último del primero. Dependiendo del valor resultante, los dos elementos se reorganizan: si es menor que 0,
a
aparecerá antesb
, si es mayor que 0,a
aparecerá despuésb
y si es 0, ambos elementos terminarán uno al lado del otro.El segundo fragmento no es más que una versión codificada del primer fragmento y aprovecha el hecho de que en JavaScript,
object.function()
es igualobject["function"]()
. También utiliza matrices vacías,!
operadores y conversión de números para generar todo tipo de cadenas, en las que se pueden encontrar los caracteres necesarios para el nombre de la función. Luego, los corchetes se usan una vez más para obtener el carácter en un cierto índice en la cadena, y todos esos caracteres se concatenan, lo que da como resultado el siguiente código JavaScript:[]["fill"]
igual[].fill
, de quién["constructor"]
es elFunction
objeto. Luego lo llamamos con una cadena (que se evaluará cuando se llama a la función), que es la primera función, pero observe que el argumento ha sido reemplazado porthis
. Para establecer el valor dethis
al argumento, necesitamos llamar a una función en esta función, a saber["call"]
. En JavaScript convencional, escribirías esto como:fuente
Function`return a=>a.sort\x28\x28a,b\x29=>a-b\x29`
por ejemplo, pero sin usar los caracteres que ya usó'
y haciendo, por ejemplo, en'('
lugar de lo que JSF genere ese carácter. (también, usef
yt
como vars en lugar dea
yb
,b
literalmente cuesta alrededor de 3000 caracteres)V , puntaje
3, 4¡Este fue un desafío muy divertido! Afortunadamente, vim tiene una función de "clasificación" incorporada, de lo contrario, esto sería básicamente imposible. Desafortunadamente, dado que V / vim se basa en cadenas, necesita un argumento para ordenar por valores numéricos. Entonces estoy llamando
Ordenar por valor numérico
n
,Ordenar por valor hexadecimal
x
, yOrdenar por valor de coma flotante
f
Pequeña nota al margen: cuando escribo algo como
<esc>
o<C-r>
, esto es en realidad un solo byte. Representa caracteres no imprimibles, y dado que V desafortunadamente depende en gran medida de caracteres no imprimibles, este método hace que todo sea más fácil. Los enlaces TIO tienen la-v
bandera, lo que hace que el intérprete de V los lea como si fueran los caracteres que representan.Programa 1, 2 bytes
Pruébalo en línea!
Esto llama a la función de clasificación específica V.
Programa 2, 10 bytes
Esto solo llama 'ordenar' directamente. Lo único interesante de esto es que lo hacemos desde el
ex
modo, que es un modo extraño que emula el editor de texto 'ex', el tatarabuelo de V.vi
es un acceso directo paravisual
, el comando utilizado para salir del modo ex. Esto requiere una nueva línea final.Pruébalo en línea!
Programa 3, 14 bytes
Pruébalo en línea!
Muy bien, aquí es donde las explicaciones comienzan a ponerse un poco raras. Si podemos construir el texto
sor x
, podemos eliminarlo e insertarlo en el comando actual con<C-r><register-name>
. Entonces lo ingresaremos en mayúscula.Programa 4, 19 bytes
Pruébalo en línea!
Y aquí es donde las explicaciones comienzan a ponerse muy raras. Similar a la última vez, crearemos el comando en modo normal para que podamos usar diferentes teclas.
fuente
CJam, puntaje 4
Programa 1: incorporado
Programa 2: Evaluado incorporado
36 es el valor ASCII de
$
.Programa 3: ordenación de permutación
Programa 4: valores mínimos
Explicación de esta monstruosidad sobrenatural:
fuente
(+
lugar de1m<
si lo desea.<
ese fragmento, así que probablemente sea mejor seguir1m<
Japt , puntuación = 4
Programa 1
Pruébalo en línea!
Programa 2
Pruébalo en línea!
Programa 3
Pruébalo en línea!
Programa 4
Pruébalo en línea!
fuente
s)$.sort(...
, aunque no estoy seguro de si eso es útil.O
y$
se han utilizado. ¡Estoy abierto a sugerencias si puede pensar en otras formas de ordenar! :)Octava, 2 puntos
Es difícil competir con esolangs, pero aquí va:
Estoy impresionado si alguien supera esto.
unique
puede usarse para ordenar valores, pero eliminará los duplicados. Para insertar los duplicados, necesitarías paréntesis, y se usan mucho en el ordenamiento de burbujas. También necesitarías@
, que también se usa.Numero 1:
Este es bastante simple: crear una función anónima, asignada a la variable
ans
.Llamar de esta manera:
ans([-5, 3, 0, -2, 100])
. No funciona en tio, pero funciona en octave-online .Número 2:
Esto es simplemente una implementación de ordenamiento de burbujas, sin usar los caracteres
@sort
. No podemos hacer que esto sea una funcióno
, y no podemos usarloinput
debido at
. Por lo tanto, estamos atrapados coneval
.eval(['a=inpu',116,'("");']);
se evalúa como:,a=input("");
que podemos usar para ingresar nuestro vector de entrada. El resto es la clasificación de burbujas sin usarfor
omod
. Tenga en cuenta que esto debe guardarse en un script y llamarse desde la GUI / CLI. No puede copiarlo y pegarlo debido ainput("")
(usará el resto del código como entrada, por lo tanto fallará miserablemente).fuente
Haskell (lambdabot), 3 funciones
Estoy usando el entorno lambdabot para evitar muchas
import
declaraciones. Inclusosort
necesitaimport Data.List
. lambdabot importa un montón de módulos por defecto. Además de lo que faltaimports
, es el código estándar de Haskell de acuerdo con nuestras reglas.Pruébalo en línea! .
Función 1
La función de biblioteca de
Data.List
. No hay mucho que decir aquí.Función 2
La función
v
implementa una ordenación por inserción.Utilizo guardias de patrones para evitar los
()
parámetros. Compararvv v|vvv:vvvv<-v=...
avv(vvv:vvvv)=...
.La primera línea, función
vv
es una función auxiliar para crear la lista vacía. Con él no tengo que usar[]
para escribir listas vacías literales. Más legible:(==:)
es insert, que inserta un elemento en una lista ordenada, de modo que la lista resultante todavía está ordenada. Más legible:(=:)
es reducir Más legible:Y finalmente, lo
v
que reduce la lista de entrada mirando con[]
:Función 3
sort
Función de 1 hace que la mayoría de las funciones de la lista-para caminar (fold
,scan
,until
) no están disponibles. Necesidades de recursión=
que se usan en la Función 2. La única opción que queda es usar el combinador de punto fijofix
. He empezado conque es un tipo de selección. Al convertirlo en punto libre (no puedo usar lambdas
\f x ->...
, debido a lo-
que usan los gurads de patrón en la Función 2) da:return
Está prohibido hacer listas singleton de un valor con (lo mismo parapure
), así que tengo que construir mi propia función:\x -> map (\y -> x+0*y) [1]
o sin puntosflip map[1].(.(0*)).(+)
. Sustitución dereturn
rendimientosfuente
MATL , 3 programas
Programa 1
Esto solo usa la función incorporada, con entrada y visualización implícitas.
Pruébelo en MATL en línea .
Programa 2
Esto sigue generando permutaciones aleatorias de las entradas hasta que todas las diferencias consecutivas del resultado no sean negativas (esto es bogosort , como lo señala @cz ). El tiempo de ejecución no es determinista y su promedio aumenta muy rápido con el tamaño de entrada (es decir, 𝒪 ( n! ) Para un tamaño- n matriz con todas las entradas diferentes).
Pruébalo en MATL Online .
Programa 3
Este es un bucle que calcula el mínimo de la matriz, elimina todos los elementos iguales a ese valor y procesa con el resto. Esto se hace tantas veces como el tamaño de entrada. Si no todas las entradas en la entrada son diferentes, algunas de las iteraciones serán inútiles (pero inofensivas), porque la matriz ya se habrá vaciado.
Pruébelo en MATL en línea .
fuente
Pip , 4 programas
Programa 1 - incorporado
Retazo; asume la lista en
x
.(
SN
para Ordenar numérico)Programa 2 - permutaciones de filtro
Retazo; asume la lista en
y
. Muy lento para entradas de más de 7 elementos.Programa 3 - eval
Retazo; asume la lista en
z
.Programa 4 - MergeSort
Función anónima; llamar con la lista como argumento (como
({...} [1 2])
of:{...} (f [1 2])
.Sin golf:
fuente
PowerShell , 2
Pruébalo en línea!
Este es un fragmento que se ejecuta en (por ejemplo) el equivalente de PowerShell de un REPL. El enlace TIO muestra el uso. El
sort
es un alias para elSort-Object
cmdlet.Pruébalo en línea!
Los comandos de PowerShell no distinguen entre mayúsculas y minúsculas, por lo que podemos usarlos
sort
para uno ySORT
para el otro. Esto toma una matriz de entrada, la ordena in situ y luego la genera.fuente
Ruby, 2 programas
Primero, lo sencillo:
Segundo, la parte difícil:
fuente
J
Programa uno: 3 bytes
como en
/:~ 3,1,2,1
salidas1 1 2 3
Pruébalo en línea!
NOTA en J, los números negativos están precedidos por _ no, por lo que puede probar 4, _10,56, _333, etc.
Programa dos: 5 bytes
fuente
Try it online
cosa se vincula a una página web en TIO, para enlazar una página en una respuesta que puede hacer esto:[displayed text](link)
.:
y~
ocurren en ambos.PHP 7, 2 programas
Ambos programas se pueden jugar más al golf.
Programa 1, 254 bytes, caracteres
! "$&+.01:;=>?[]adeginoprtv
Ordenamiento de burbuja. Se utiliza
goto
para crear un bucle según lo requieran los bucles integrados()
.Programa 2, 155 bytes, caracteres
#%'(),-67ACEFINORTUYZ^_{|}~
IF(...){}
evita el uso de;
. El código principal está codificado con XOR, porque$
ya se usó en el programa anterior. El código:fuente