Permutazione della fonte


14

Una permutazione di un insieme S={s1,s2,,sn} è una biunivoca funzione di . Ad esempio, se la funzione è una permutazione:π:SSS={1,2,3,4}π:x1+(x+1mod4)

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

Possiamo anche avere permutazioni su insiemi infiniti, prendiamo ad esempio N : La funzione π:xx1+2(xmod2) è una permutazione, scambiando il pari e dispari numeri interi in blocchi di due. I primi elementi sono i seguenti:

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

Sfida

Il tuo compito per questa sfida è quello di scrivere una funzione / programma implementando 1 permutazione sui numeri naturali positivi. Il punteggio della tua soluzione è la somma dei punti di codice dopo averli mappati con la permutazione implementata.

Esempio

Supponiamo di prendere la permutazione sopra implementata con Python:

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

Provalo online!

Il carattere dha un punto di codice , . Se lo facciamo per ogni personaggio, otteniamo: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 somma di tutti questi caratteri mappati è , questo sarebbe il punteggio per quella funzione.2463

Regole

Implementerai una permutazione come funzione o programmaπ

  • dato un numero naturale , return / outputxπ(x)
  • per lo scopo di questa sfida non non contieneN0
  • la permutazione deve permutare in modo non banale un sottoinsieme infinito diN
  • la tua funzione / programma non è autorizzato a leggere la propria fonte

punteggio

Il punteggio è dato dalla somma di tutti i punti di codice (zero byte potrebbero non far parte del codice sorgente) in base a tale permutazione (i punti di codice dipendono dalla tua lingua 2 , sei libero di usare SBCS, UTF-8 ecc. Purché la tua lingua lo supporta).

La presentazione con il punteggio più basso vince, i legami vengono interrotti dalla prima presentazione.


  1. Ad eccezione delle permutazioni che consentono solo un sottoinsieme finito di , il che significa che l'insieme deve essere infinito.N{x|π(x)x}

  2. Se migliora il tuo punteggio, puoi ad esempio utilizzare un invio Jelly codificato UTF-8 invece del solito SBCS.


1
@JoKing "zero byte potrebbero non far parte del codice sorgente" ri: la seconda domanda
solo ASCII

Risposte:


6

Jelly , segna  288 250 212  199

-38 grazie a Erik the Outgolfer!

C-*+

Scambia anche con dispari.

Il punteggio è 67+45+44+43=199 - vedi il punteggio di auto qui .

Provalo online!


Apparentemente, Leaky Nun -*ạha un punteggio di 300 ... tuttavia, -*_@ha un punteggio di 250. Forse dovrei postarlo come mio, sebbene sia la stessa permutazione.
Erik the Outgolfer

Ah bella osservazione di Leaky Nun, quindi -*N+segna 212
Jonathan Allan il


3
C-*+sembra una variazione futura di C++.
dice Reinstate Monica l'


4

Perl 6 , Punteggio: 201

*-!0+^40+!0

Provalo online!

La risposta di Port of Arnauld . Questo beneficia xor ( +^) avente la stessa precedenza -e +, e l'uso di un lambda Qualsiasi ridurre caratteri globali. A parte questo, non sono riuscito a trovare un modo di rappresentarlo diversamente che abbia ottenuto un punteggio migliore.

Perl 6 , punteggio 804 702

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

Provalo online!

Il primo tipo di quine-y risponde qui, e penso che segna abbastanza bene.

Questo produce la sequenza 23,22,25,24... dal corpo della domanda con l'intervallo 1,2,3,4...21 inserito negli indici dei punti di codice univoci ordinati del codice. Ad esempio, il 30 ° al 35 ° elemento della sequenza sono 50,53,52,1,55,54 poiché il 33 ° punto di !codice è e quello è il punto di codice più basso nel mio codice.


O_o questo è un enorme miglioramento
solo ASCII l'


2

Retina 0.8.2 , 6 byte, punteggio 260

T`O`RO

Provalo online! Il collegamento include il piè di pagina con punteggio automatico. Semplicemente swap cifre 1e 9ed 3e 7nelle rappresentazioni decimali, in modo che i numeri che non contengono cifre coprimi di 10sono inalterati.


2

C # (compilatore interattivo Visual C #) , 22 byte, punteggio 247 245

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

Provalo online!

Semplice, se inferiore a 66, restituisce 66 meno input, altrimenti usa la formula nella domanda che scambia numeri pari e dispari.


Cosa c'è che non va nella versione precedente A=>A<66?66-A:A?
Jo King

2
@JoKing Ad eccezione delle permutazioni che consentono solo un sottoinsieme finito diN, nel senso che il set {X|π(X)X}deve essere infinito. L'insieme non è infinito, poiché gli unici valori nell'insieme sono 1-65, poiché sopra 65, tutti i valori di Una mappa su A
Incarnazione dell'ignoranza

Oh dannazione, non me ne sono accorto. Ciò significa che anche la mia risposta non è valida :(
Jo King

2

TI-BASIC, 9 byte, punteggio 1088 1051 1000

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

Scambia anche con dispari. Mappe Ans-1pari e mappe dispari a Ans+1.

TI-BASIC è tokenizzato, quindi questo programma avrà i seguenti valori esadecimali:

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

Quindi il punteggio è: 113+114+195+171+49+185+49+11+113=1000

Programma test di uscita:

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

Quali uscite:

2
1
4
3
6
5
8
7
10
9

Appunti:

  • I valori dei token di TI-BASIC sono disponibili qui .

  • Pauseviene utilizzato nel programma di output per visualizzare meglio la permutazione, poiché la calcolatrice ha solo 8 righe. Premere [INVIO] per visualizzare la permutazione successiva.


1

Carbone , 13 byte, punteggio 681

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

Provalo online! Il collegamento è alla versione con punteggio automatico con intestazione per mappare su una matrice di codici byte. (Il carbone ha una tabella codici personalizzata, quindi ho inserito manualmente i codici byte corretti nell'input.) Funziona invertendo gli intervalli di 233 numeri, in modo che 117, 350, 583 ... siano invariati. Spiegazione:

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

1

Haskell, punteggio 985

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

Provalo online!


Non penso che questa sia una permutazione, poiché l'aggiunta a*200non ha alcun effetto modulo 200, quindi a non importa.
xnor

@xnor Buona cattura. Questo dovrebbe essere al di fuori della mod. Ad un certo punto, mentre giocavo a golf, devo aver sbagliato l'ordine delle operazioni. Risolto ora, grazie!
Joseph Sible-Ripristina Monica

Penso che ci sia un altro problema che 40 si associa a 0 ma la sfida richiede numeri interi positivi, il che rende difficili approcci come questo.
xnor

1
L'uso di sum[1|...]over if..then..elsedovrebbe aiutare.
ბიმო


1

05AB1E , punteggio: 488 nella tabella codici 05AB1E

È·<-

Scambia dispari e persino come la funzione di esempio.

Proverò a migliorare il punteggio da qui.

Provalo online con input nell'intervallo[1, 100] o Provalo online con i punti di codice.

Spiegazione:

È     # 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 byte, punteggio 2988

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

Provalo online!

Ho usato la permutazione data nell'introduzione. Dato che si tratta di bijection, puoi usarlo come semplice cifra simmetrica simile a ROT13 o Atbash. La mia soluzione funziona su celle illimitate. Tuttavia, limitandoti alle celle a 8 bit, potresti risparmiare 2 punti sostituendoli [-]con [+].

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.