Una permutación de un conjunto es un biyectiva función . Por ejemplo, si entonces la función es una permutación:
También podemos tener permutaciones en conjuntos infinitos, tomemos como ejemplo: la función es una permutación, intercambiando lo impar y lo par enteros en bloques de dos. Los primeros elementos son los siguientes:
Desafío
Su tarea para este desafío es escribir una función / programa que implemente 1 permutación en los números naturales positivos. El puntaje de su solución es la suma de puntos de código después de mapearlos con la permutación implementada.
Ejemplo
Supongamos que tomamos la permutación anterior implementada con Python:
def pi(x):
return x - 1 + 2*(x % 2)
El carácter d
tiene el punto de código , . Si hacemos esto para cada personaje, obtenemos:
La suma de todos estos caracteres mapeados es , este sería el puntaje para esa función.
Reglas
Implementará una permutación como función o programa
- dado un número naturalπ ( x ) , retorno / salida
- con el propósito de este desafío hace 0 no contiene
- la permutación debe permutar no trivialmente un subconjunto infinito de
- su función / programa no puede leer su propia fuente
Puntuación
La puntuación viene dada por la suma de todos los puntos de código (cero bytes pueden no ser parte del código fuente) bajo esa permutación (los puntos de código dependen de su idioma 2 , puede usar SBCS, UTF-8, etc., siempre y cuando tu idioma lo admite).
La presentación con el puntaje más bajo gana, los lazos se rompen por la presentación más temprana.
Excepto por las permutaciones que solo permutan un subconjunto finito de , lo que significa que el conjunto debe ser infinito.
Si mejora su puntaje, puede usar, por ejemplo, un envío Jelly codificado en UTF-8 en lugar del SBCS habitual.
Respuestas:
Gelatina , puntaje
288 250 212199-38 gracias a Erik the Outgolfer!
Swaps incluso con impar.
El puntaje es67+45+44+43=199 - vea la auto puntuación aquí .
Pruébalo en línea!
fuente
-*ạ
tiene un puntaje de 300 ... sin embargo,-*_@
tiene un puntaje de 250. Tal vez debería publicar eso como propio, aunque es la misma permutación.-*N+
anota 212C-*+
suena como una variación futura deC++
.JavaScript (ES6), Puntuación =
276268Pruébalo en línea!
fuente
54^54
es0
Perl 6 , Puntuación: 201
Pruébalo en línea!
La respuesta del puerto de Arnauld . Esto se beneficia de que xor (
+^
) tenga la misma precedencia que-
y+
, y el uso de un Lambda Cualquiera para reducir los caracteres generales. Aparte de eso, no pude encontrar una manera de representarlo de manera diferente que obtuviera una mejor puntuación.Perl 6 , Score
804702Pruébalo en línea!
La primera respuesta de tipo quine-y aquí, y creo que puntúa bastante bien.
Esto produce la secuencia23,22,25,24... del cuerpo de la pregunta con el rango 1,2,3,4...21 insertado en los índices de los puntos de código ordenados únicos del código. Por ejemplo, los elementos 30 a 35 de la secuencia son 50,53,52,1,55,54 ya que el punto de código 33 es
!
y ese es el punto de código más bajo en mi código.fuente
Puntuación de Python 2 :
742698694 puntosPruébalo en línea!
-44 puntos gracias a Ørjan Johansen; -4 puntos gracias a xnor.
fuente
96
con~~
.Retina 0.8.2 , 6 bytes, puntaje 260
Pruébalo en línea! El enlace incluye un pie de página de autoevaluación. Simplemente intercambia dígitos
1
y9
e3
y7
en las representaciones decimales, por lo que los números que no contienen dígitos primos entre sí a10
no se ven afectadas.fuente
C # (compilador interactivo de Visual C #) , 22 bytes, puntaje
247245Pruébalo en línea!
Simple, si es menor que 66, devuelve 66 menos entrada, de lo contrario use la fórmula en la pregunta que intercambia números pares e impares.
fuente
A=>A<66?66-A:A
?TI-BASIC, 9 bytes, puntaje
108810511000Swaps incluso con impar. Mapas
Ans-1
pares y mapas impares aAns+1
.TI-BASIC está tokenizado, por lo que este programa tendrá los siguientes valores hexadecimales:
Programa de prueba de salida:
Qué salidas:
Notas:
Los valores de token de TI-BASIC se pueden encontrar aquí .
Pause
se usa en el programa de salida para ver mejor la permutación, ya que la calculadora solo tiene 8 líneas. Presione [ENTER] para ver la próxima permutación.fuente
Carbón , 13 bytes, puntaje 681
Pruébalo en línea! El enlace es a la versión de autoevaluación con encabezado para asignar sobre una matriz de códigos de bytes. (El carbón tiene una página de códigos personalizada, por lo que he insertado manualmente los códigos de bytes correctos en la entrada). Funciona invirtiendo los rangos de 233 números, de modo que 117, 350, 583 ... no cambien. Explicación:
fuente
Haskell, puntaje 985
Pruébalo en línea!
fuente
a*200
no tiene efecto en el módulo 200, por loa
que no importa.sum[1|...]
másif..then..else
debería ayudar.05AB1E , puntuación: 488 en la página de códigos de 05AB1E
Intercambia pares e impares como la función de ejemplo.
Trataré de mejorar la puntuación desde aquí.
Pruébelo en línea con la entrada en el rango
[1, 100]
o Pruébelo en línea con los puntos de código.Explicación:
fuente
Brainfuck, 47 bytes, puntuación 2988
Pruébalo en línea!
Usé la permutación dada en la introducción. Como se trata de biyección, puede usarlo como un cifrado simétrico simple similar a ROT13 o Atbash. Mi solución funciona en celdas ilimitadas. Sin embargo, al restringirse a las celdas de 8 bits, puede ahorrar 2 puntos al reemplazar
[-]
con[+]
.fuente