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.

ბიმო
fonte
1
@JoKing "zero bytes pode não fazer parte do código fonte" re: the second question
ASCII-only
Relacionado .
Peter Taylor

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!

Jonathan Allan
fonte
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
Não foi uma observação, foi uma resposta automática ao seu desafio (agora bastante antigo) . ;-)
Erik the Outgolfer 10/03/19
3
C-*+soa como alguma variação futura de C++.
val diz Reintegrar Monica
5

JavaScript (ES6), Classificação =  276  268

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

Experimente online!

Arnauld
fonte
mas 54^54é0
Jonathan Allan
@ JonathanAllan Obrigado por notificar. De alguma forma, eu perdi essa parte. Deve estar correto agora.
precisa
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.

Brincadeira
fonte
O_o isso é uma enorme melhoria
somente ASCII
4

Python 2 score: 742 698 694 pontos

lambda a:a^96or~~96

Experimente online!

-44 pontos graças a Ørjan Johansen; -4 pontos thx para xnor.

Chas Brown
fonte
Ørjan Johansen: Corrigido (e ele me salvou 44 bytes!) #
Chas Brown
Boa gravação (embora isso não seja bytes) #
Ørjan Johansen
Isso é um crédito generoso!
Ørjan Johansen
Não teria editado se você não tivesse apontado a falha :)
Chas Brown
É mais barato substituir o espaço antes 96por ~~.
Xnor
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.

Neil
fonte
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.

Modalidade de ignorância
fonte
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.

Tau
fonte
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
Neil
fonte
1

Haskell, pontuação 985

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

Experimente online!

Joseph Sible-Restabelecer Monica
fonte
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
Vamos continuar esta discussão no chat .
somente ASCII
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)
Kevin Cruijssen
fonte
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 [+].

orthoplex
fonte