Quellpermutation

14

Eine Permutation eines Satzes ist eine bijektive Funktion . Wenn beispielsweise dann ist die Funktion \ pi: x \ mapsto 1 + (x + 1 \ mod 4) eine Permutation:S={s1,s2,,sn}π:SSS={1,2,3,4}π:x1+(x+1mod4)

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

Wir können auch Permutationen für unendliche Mengen haben, nehmen wir als Beispiel N : Die Funktion π:xx1+2(xmod2) ist eine Permutation, bei der die ungeraden und geraden Zahlen vertauscht werden ganze Zahlen in Zweierblöcken. Die ersten Elemente sind wie folgt:

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

Herausforderung

Ihre Aufgabe für diese Herausforderung ist es, eine Funktion / ein Programm zu schreiben, das 1 beliebige Permutation auf die positiven natürlichen Zahlen implementiert . Die Punktzahl Ihrer Lösung ist die Summe der Codepunkte, nachdem sie mit der implementierten Permutation zugeordnet wurden.

Beispiel

Angenommen, wir nehmen die oben mit Python implementierte Permutation:

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

Probieren Sie es online!

Das Zeichen dhat den Codepunkt , . Wenn wir das für jeden Charakter machen, bekommen wir: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

Die Summe aller dieser zugeordneten Zeichen ist 2463 Dies wäre die Punktzahl für diese Funktion.

Regeln

Sie implementieren eine Permutation entweder als Funktion oder als Programmπ

  • eine natürliche Zahl gegeben x , return / outputπ(x)
  • zum Zweck dieser HerausforderungN ist nicht enthalten0
  • Die Permutation muss eine unendliche Teilmenge von nicht trivial permutieren.N
  • Ihre Funktion / Ihr Programm darf keinen eigenen Quellcode lesen

Wertung

Die Punktzahl ergibt sich aus der Summe aller Codepunkte (Null Bytes sind möglicherweise nicht Teil des Quellcodes) unter dieser Permutation (die Codepunkte hängen von Ihrer Sprache 2 ab . Sie können SBCS, UTF-8 usw. so lange verwenden, wie Sie möchten) Ihre Sprache unterstützt es).

Die Einsendung mit der niedrigsten Punktzahl gewinnt, Unentschieden werden durch die früheste Einsendung unterbrochen.


  1. Mit Ausnahme von Permutationen, die nur eine endliche Teilmenge von permutieren , was bedeutet, dass die Menge muss unendlich sein.N{x|π(x)x}

  2. Wenn es Ihre Punktzahl verbessert, können Sie zum Beispiel eine UTF-8-codierte Jelly-Einreichung anstelle des üblichen SBCS verwenden.

ბიმო
quelle
1
@JoKing "Null Bytes dürfen nicht Teil des Quellcodes sein" bzgl. Der zweiten Frage
ASCII
Verwandte .
Peter Taylor

Antworten:

6

Jelly , Punktzahl  288 250 212  199

-38 danke an Erik den Outgolfer!

C-*+

Tauscht auch mit ungeraden.

Die Punktzahl beträgt 67+45+44+43=199 - siehe Selbstwertung hier .

Probieren Sie es online!

Jonathan Allan
quelle
Anscheinend hat Leaky Nun's -*ạeine Punktzahl von 300 ... jedoch -*_@eine Punktzahl von 250. Vielleicht sollte ich das als meine eigene posten, obwohl es die gleiche Permutation ist.
Erik der Outgolfer
Ah schöne Beobachtung von Leaky Nun, so -*N+punktet 212
Jonathan Allan
Es war keine Beobachtung, es war eine Selbstantwort auf seine (inzwischen ziemlich alte) Herausforderung . ;-)
Erik der Outgolfer
3
C-*+klingt wie eine zukünftige Variation von C++.
Val sagt Reinstate Monica
5

JavaScript (ES6), Score =  276  268

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

Probieren Sie es online!

Arnauld
quelle
aber 54^54ist0
Jonathan Allan
@ JonathanAllan Vielen Dank für die Benachrichtigung. Ich habe diesen Teil irgendwie verpasst. Sollte jetzt korrekt sein.
Arnauld
4

Perl 6 , Ergebnis: 201

*-!0+^40+!0

Probieren Sie es online!

Antwort von Port of Arnauld . Dies hat den Vorteil, +^dass xor ( ) dieselbe Priorität hat wie -und +und dass ein Whatever-Lambda verwendet wird, um die Gesamtzeichen zu reduzieren. Davon abgesehen konnte ich keinen Weg finden, es anders darzustellen, der eine bessere Punktzahl erzielte.

Perl 6 , Score 804 702

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

Probieren Sie es online!

Die erste Antwort hier, und ich denke, dass sie ziemlich gut abschneidet.

Dies erzeugt die Sequenz 23,22,25,24... aus dem Fragekörper mit dem Bereich 1,2,3,4...21 , der an den Indizes der eindeutigen sortierten Codepunkte des Codes eingefügt ist. Zum Beispiel sind das 30. bis 35. Element der Sequenz 50,53,52,1,55,54 da der 33. Codepunkt !der niedrigste Codepunkt in meinem Code ist.

Scherzen
quelle
O_o das ist eine massive Verbesserung
ASCII
4

Python 2 Punktzahl: 742 698 694 Punkte

lambda a:a^96or~~96

Probieren Sie es online!

-44 Punkte dank Ørjan Johansen; -4 Punkte thx bis xnor.

Chas Brown
quelle
Ørjan Johansen: Behoben (und es hat mir 44 Bytes
Chas Brown
Gut speichern (obwohl das keine Bytes sind)
Ørjan Johansen
Das ist eine großzügige Gutschrift!
Ørjan Johansen
Wäre nicht bearbeitet worden, wenn Sie nicht auf den Fehler hingewiesen hätten :)
Chas Brown
Es ist billiger, den Platz vorher 96durch zu ersetzen ~~.
Xnor
2

Retina 0.8.2 , 6 Bytes, 260 Punkte

T`O`RO

Probieren Sie es online! Link enthält eine selbstbewertende Fußzeile. Tauscht einfach die Ziffern 1und 9und 3und 7in den Dezimalstellen aus, sodass Zahlen, die keine zu koprimierenden Ziffern enthalten, nicht 10betroffen sind.

Neil
quelle
2

C # (Visual C # Interactive Compiler) , 22 Byte, Score 247 245

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

Probieren Sie es online!

Einfach, wenn weniger als 66, geben Sie 66 minus Eingabe zurück, sonst verwenden Sie die Formel in der Frage, die gerade und ungerade Zahlen vertauscht.

Verkörperung der Ignoranz
quelle
Was ist los mit der Vorgängerversion A=>A<66?66-A:A?
Jo King
2
N{x|π(x)x}
Oh verdammt, das habe ich nicht bemerkt. Das heißt, meine eigene Antwort ist auch ungültig :(
Jo King
2

TI-BASIC, 9 Bytes, Punktzahl 1088 1051 1000

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

Tauscht auch mit ungeraden. Gerade Karten zu Ans-1und ungerade Karten zuAns+1 .

TI-BASIC ist tokenisiert, daher hat dieses Programm die folgenden Hex-Werte:

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

Somit lautet die Punktzahl: 113+114+195+171+49+185+49+11+113=1000

Ausgangstestprogramm:

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

Welche Ausgänge:

2
1
4
3
6
5
8
7
10
9

Anmerkungen:

  • Die Token-Werte von TI-BASIC finden Sie hier .

  • Pausewird im Ausgabeprogramm verwendet, um die Permutation besser zu sehen, da der Rechner nur 8 Zeilen hat. Drücken Sie [ENTER] die nächste Permutation anzuzeigen.

Tau
quelle
1

Kohle , 13 Bytes, Ergebnis 681

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

Probieren Sie es online! Der Link ist eine selbstbewertende Version mit einem Header, der über ein Array von Bytecodes abgebildet werden kann. (Da Charcoal eine benutzerdefinierte Codepage hat, habe ich die richtigen Bytecodes manuell in die Eingabe eingefügt.) Ermöglicht das Umkehren der Bereiche von 233 Zahlen, sodass 117, 350, 583 ... unverändert bleiben. Erläuterung:

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

Haskell, Punktzahl 985

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

Probieren Sie es online!

Joseph Sible-Reinstate Monica
quelle
Ich denke nicht, dass dies eine Permutation ist, da das Hinzufügen von a*200Modulo 200 keinen Effekt hat, a also keine Rolle spielt.
Xnor
@ xnor Guter Fang. Das soll außerhalb des Mods sein. Irgendwann beim Golfen muss ich die Reihenfolge der Operationen durcheinander gebracht haben. Jetzt behoben, danke!
Joseph Sible-Reinstate Monica
Ich denke, es gibt ein anderes Problem, bei dem 40 auf 0 abgebildet werden, aber die Herausforderung erfordert positive ganze Zahlen, was Ansätze wie diesen schwierig macht.
xnor
1
Die Verwendung von sum[1|...]over if..then..elsesollte helfen.
ბიმო
1
Lassen Sie uns diese Diskussion im Chat fortsetzen .
Nur ASCII
1

05AB1E , Score: 488 in der Codepage von 05AB1E

È·<-

Tauscht ungerade und gerade wie in der Beispielfunktion.

Werde versuchen, die Punktzahl von hier aus zu verbessern.

Versuchen Sie es online mit Eingaben im Bereich[1, 100] oder versuchen Sie es online mit den Codepunkten.

Erläuterung:

È     # 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
quelle
0

Brainfuck, 47 Bytes, 2988 Punkte

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

Probieren Sie es online!

Ich habe die in der Einleitung angegebene Permutation verwendet. Da dies eine Bijektion ist, können Sie sie als einfache symmetrische Chiffre verwenden, ähnlich wie ROT13 oder Atbash. Meine Lösung funktioniert mit unbegrenzten Zellen. Jedoch selbst zu 8-Bit - Zellen zu beschränken, können Sie 2 Punkte sparen durch Ersetzen [-]mit [+].

Orthoplex
quelle