Permutação de fonte


14

Uma permutao de um conjunto S={s1,s2,,sn} é um bijective função π:SS . Por exemplo, se S={1,2,3,4} , a função é uma permutação:π:x1+(x+1mod4)

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

Também podemos ter permutações em conjuntos infinitos, vamos N como exemplo: A função π:xx1+2(xmod2) é uma permutação, trocando o ímpar e o par inteiros em blocos de dois. Os primeiros elementos são os seguintes:

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

Desafio

Sua tarefa para esse desafio é escrever uma função / programa implementando qualquer permutação 1 nos números naturais positivos. A pontuação da sua solução é a soma dos pontos de código após o mapeamento com a permutação implementada.

Exemplo

Suponha que tomemos a permutação acima implementada com Python:

def pi(x):
    return x - 1 + 2*(x % 2)

Experimente online!

O caractere dpossui o ponto de código , . Se fizermos isso para cada personagem, obtemos: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

A soma de todos esses caracteres mapeados é 2463 , essa seria a pontuação dessa função.

Regras

Você implementará uma permutação π como uma função ou programa

  • dado um número natural x , retorno / saída π(x)
  • com a finalidade de este desafio N que não contêm 0
  • a permutação não deve permutar trivialmente um subconjunto infinito de N
  • sua função / programa não tem permissão para ler sua própria fonte

Pontuação

A pontuação é dada pela soma de todos os pontos de código (zero bytes pode não fazer parte do código-fonte) sob essa permutação (os pontos de código dependem do seu idioma 2 , você pode usar o SBCS, UTF-8 etc., desde que seu idioma suporta).

A finalização com a menor pontuação vence; os empates são interrompidos pela finalização mais antiga.


  1. Exceto as permutações que apenas permitem um subconjunto finito de N , significando que o conjunto deve ser infinito.{x|π(x)x}

  2. Se melhorar sua pontuação, você pode, por exemplo, usar um envio Jelly codificado em UTF-8 em vez do SBCS usual.


1
@JoKing "zero bytes pode não fazer parte do código fonte" re: the second question
ASCII-only

Respostas:


6

Geléia , pontuação  288 250 212  199

38 graças a Erik, o Outgolfer!

C-*+

Troca mesmo com ímpar.

A pontuação é 67+45+44+43=199 - veja a pontuação automática aqui .

Experimente online!


Aparentemente, a Leaky Nun's -*ạtem uma pontuação de 300 ... no entanto, -*_@uma pontuação de 250. Talvez eu deva postar isso como meu, embora seja a mesma permutação.
Erik the Outgolfer 10/03/19

Ah bom observação por Leaky Nun, assim -*N+pontuações 212
Jonathan Allan


3
C-*+soa como alguma variação futura de C++.
val diz Reintegrar Monica


4

Perl 6 , Pontuação: 201

*-!0+^40+!0

Experimente online!

Resposta do porto de Arnauld . Isso se beneficia de xor ( +^) ter a mesma precedência que -e+ , e o uso de um lambda Whatever para reduzir caracteres gerais. Fora isso, não consegui encontrar uma maneira de representá-lo de maneira diferente que tivesse uma pontuação melhor.

Perl 6 , pontuação 804 702

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

Experimente online!

A primeira resposta rápida do tipo quine-y aqui, e acho que é muito boa.

Isso produz a sequência 23,22,25,24 ... do corpo da pergunta com o intervalo 1,2,3,4 ... 21 inserido nos índices dos pontos de código classificados exclusivos do código. Por exemplo, os elementos 30 a 35 da sequência são ,50.,53,52,1,55,54 pois o 33º ponto de código é !e esse é o ponto de código mais baixo do meu código.


O_o isso é uma enorme melhoria
somente ASCII


2

Retina 0.8.2 , 6 bytes, pontuação 260

T`O`RO

Experimente online! O link inclui rodapé com pontuação automática. Simplesmente troca dígitos 1e 9e 3e 7nas representações decimais, de modo que os números que não contêm dígitos coprime para 10não são afetados.


2

C # (compilador interativo do Visual C #) , 22 bytes, pontuação 247 245

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

Experimente online!

Simples, se menor que 66, retorna 66 menos entrada, use a fórmula na pergunta que troca números pares e ímpares.


O que há de errado com a versão anterior A=>A<66?66-A:A?
Jo Rei

2
N{x|π(x)x}

Oh caramba, eu não percebi isso. Isso significa que minha própria resposta também é inválida :(
Jo King

2

TI-BASIC, 9 bytes, pontuação 1088 1051 1000

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

Troca mesmo com ímpar. Mapas Ans-1pares para e mapas ímpares para Ans+1.

O TI-BASIC é tokenizado, portanto, este programa terá os seguintes valores hexadecimais:

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 teste de saída:

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

Quais saídas:

2
1
4
3
6
5
8
7
10
9

Notas:

  • Os valores de token da TI-BASIC podem ser encontrados aqui .

  • Pauseé usado no programa de saída para ver melhor a permutação, pois a calculadora possui apenas 8 linhas. Pressione [ENTER] para visualizar a próxima permutação.


1

Carvão , 13 bytes, pontuação 681

⁻⁺²³²ι⊗﹪⊖ι²³³

Experimente online! O link é para a versão com pontuação automática com o cabeçalho para mapear sobre uma matriz de códigos de bytes. (O carvão vegetal tem uma página de código personalizada, portanto, eu inseri manualmente os códigos de bytes corretos na entrada.) Funciona revertendo intervalos de 233 números, para que 117, 350, 583 ... não sejam alterados. Explicação:

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

1

Haskell, pontuação 985

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

Experimente online!


Eu não acho que isso seja uma permutação, já que a adição a*200não tem efeito módulo 200, então a não importa.
Xnor

@xnor Boa captura. Isso deveria estar fora do mod. Em algum momento, enquanto jogava golfe, devo ter estragado a ordem das operações. Corrigido agora, obrigado!
Joseph Sible-Reinstate Monica

Eu acho que há outra questão que 40 mapeia para 0, mas o desafio requer números inteiros positivos, o que torna abordagens como essa complicadas.
Xnor

1
Usar sum[1|...]sobre if..then..elsedeve ajudar.
ბიმო


1

05AB1E , pontuação: 488 na página de código de 05AB1E

È·<-

Troca ímpares e pares, como a função de exemplo.

Tentará melhorar a pontuação daqui.

Experimente online com entrada no intervalo[1, 100] ou Experimente online com os pontos de código.

Explicação:

È     # 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)

0

Brainfuck, 47 bytes, pontuação 2988

,[-<+<+>>]<[->[>+<[-]]+>[<->-]<<]>[-<<++>>]<<-.

Experimente online!

Eu usei a permutação dada na introdução. Como essa é uma bijeção, você pode usá-la como uma cifra simétrica simples, semelhante ao ROT13 ou Atbash. Minha solução funciona em células ilimitadas. No entanto, restringindo-se a células de 8 bits, você pode economizar 2 pontos substituindo [-]por [+].

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.