Permutación de origen

14

Una permutación de un conjunto S={s1,s2,...,snorte} es un biyectiva función π:SS . Por ejemplo, si S={1,2,3,4 4} entonces la función es una permutación:π:X1+(X+1modificación4 4)

π(1)=3,π(2)=4 4,π(3)=1,π(4 4)=2

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:Nπ:xx1+2(xmod2)

2,1,4,3,6,5,8,7,10,9,12,11,14,13,16,15,

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)

Pruébalo en línea!

El carácter dtiene el punto de código , . Si hacemos esto para cada personaje, obtenemos:100pi(100)=99

99,102,101,31,111,106,39,119,42,57,9,31,31,31,31,113,102,115,118,113,109,31,119,31,46,31,50,31,44,31,49,41,39,119,31,38,31,49,42

La suma de todos estos caracteres mapeados es , este sería el puntaje para esa función.2463

Reglas

Implementará una permutación como función o programaπ

  • dado un número naturalxπ ( x ) , retorno / salidaπ(x)
  • con el propósito de este desafío haceN 0 no contiene0
  • la permutación debe permutar no trivialmente un subconjunto infinito deN
  • 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.


  1. Excepto por las permutaciones que solo permutan un subconjunto finito de , lo que significa que el conjunto debe ser infinito.N{x|π(x)x}

  2. Si mejora su puntaje, puede usar, por ejemplo, un envío Jelly codificado en UTF-8 en lugar del SBCS habitual.

ბიმო
fuente
1
@JoKing "cero bytes pueden no ser parte del código fuente" re: la segunda pregunta
solo ASCII
Relacionados .
Peter Taylor

Respuestas:

6

Gelatina , puntaje  288 250 212  199

-38 gracias a Erik the Outgolfer!

C-*+

Swaps incluso con impar.

El puntaje es 67+45+44+43=199 - vea la auto puntuación aquí .

Pruébalo en línea!

Jonathan Allan
fuente
Aparentemente, Leaky Nun's -*ạ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.
Erik the Outgolfer
Ah, buena observación de Leaky Nun, así que -*N+anota 212
Jonathan Allan
No fue una observación, fue una respuesta propia a su desafío (ahora bastante viejo) . ;-)
Erik the Outgolfer
3
C-*+suena como una variación futura de C++.
Val dice Reinstate Monica
5

JavaScript (ES6), Puntuación =  276  268

$=>(--$^40)+!0

Pruébalo en línea!

Arnauld
fuente
pero 54^54es0
Jonathan Allan
@ JonathanAllan Gracias por notificar. De alguna manera me perdí esa parte. Debería ser correcto ahora.
Arnauld
4

Perl 6 , Puntuación: 201

*-!0+^40+!0

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 804 702

{{(++$ords(q[!$%()+-2?[]_doqrsx{}∉])??++$+22-$++%2-$++%2!!++$)xx$_}()[-!$+$_]}

Pruébalo en línea!

La primera respuesta de tipo quine-y aquí, y creo que puntúa bastante bien.

Esto produce la secuencia 23,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.

Jo King
fuente
O_o eso es una mejora masiva
solo ASCII
4

Puntuación de Python 2 : 742 698 694 puntos

lambda a:a^96or~~96

Pruébalo en línea!

-44 puntos gracias a Ørjan Johansen; -4 puntos gracias a xnor.

Chas Brown
fuente
Ørjan Johansen: Corregido (¡y me salvó 44 bytes!)
Chas Brown
Buen ahorro (aunque eso no es bytes)
Ørjan Johansen
¡Eso es algo de crédito generoso!
Ørjan Johansen
No habría editado si no hubiera señalado la falla :)
Chas Brown
Es más barato reemplazar el espacio antes 96con ~~.
xnor
2

Retina 0.8.2 , 6 bytes, puntaje 260

T`O`RO

Pruébalo en línea! El enlace incluye un pie de página de autoevaluación. Simplemente intercambia dígitos 1y 9e 3y 7en las representaciones decimales, por lo que los números que no contienen dígitos primos entre sí a 10no se ven afectadas.

Neil
fuente
2

C # (compilador interactivo de Visual C #) , 22 bytes, puntaje 247 245

A=>A>65?A-1+A%2*2:66-A

Prué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.

Encarnación de la ignorancia
fuente
¿Qué hay de malo con la versión anterior A=>A<66?66-A:A?
Jo King
2
N{x|π(x)x}
Oh maldición, no me di cuenta de eso. Eso significa que mi propia respuesta también es inválida :(
Jo King
2

TI-BASIC, 9 bytes, puntaje 1088 1051 1000

Ans-cos(π2fPart(2⁻¹Ans

Swaps incluso con impar. Mapas Ans-1pares y mapas impares a Ans+1.

TI-BASIC está tokenizado, por lo que este programa tendrá los siguientes valores hexadecimales:

Ans   -    cos(  π    2    fPart(  2   ⁻¹  Ans
72    71   C4    AC   32   BA      32  0C  72

113+114+195+171+49+185+49+11+113=1000

Programa de prueba de salida:

For(I,1,10
I
Ans-cos(π2fPart(2⁻¹Ans
Disp Ans
Pause
End

Qué salidas:

2
1
4
3
6
5
8
7
10
9

Notas:

  • Los valores de token de TI-BASIC se pueden encontrar aquí .

  • Pausese 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.

Tau
fuente
1

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:

     ι          Value
 ⁺              Plus
  ²³²           Literal 232
⁻               Minus
         ι      Value
        ⊖       Decremented
       ﹪        Modulo
          ²³³   Literal 233
      ⊗         Doubled
Neil
fuente
1

Haskell, puntaje 985

(\((.),(-))->(.)*200+mod(-39+(-))200+1).(\(*)->divMod((*)-1)200)

Pruébalo en línea!

Joseph Sible-Reinstate a Monica
fuente
No creo que esto sea una permutación, ya que agregar a*200no tiene efecto en el módulo 200, por lo a que no importa.
xnor
@xnor Buena captura. Se supone que está fuera del mod. En algún momento mientras jugaba al golf, debo haber estropeado el orden de las operaciones. Solucionado ahora, gracias!
Joseph Sible-Reinstate Monica
Creo que hay otro problema que 40 asigna a 0, pero el desafío requiere enteros positivos, lo que hace que enfoques como este sean difíciles.
xnor
1
Usar sum[1|...]más if..then..elsedebería ayudar.
ბიმო
1
Continuemos esta discusión en el chat .
Solo ASCII
1

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:

È     # Check if the (implicit) input is even (1 if truthy; 0 if falsey)
 ·    # Double (2 if truthy; 0 if falsey)
  <   # Decrease by 1 (1 if truthy; -1 if falsey)
   -  # Subtract it from the (implicit) input (and output implicitly)
Kevin Cruijssen
fuente
0

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 [+].

orthoplex
fuente