Eine Permutation eines Satzes ist eine bijektive Funktion . Wenn beispielsweise dann ist die Funktion \ pi: x \ mapsto 1 + (x + 1 \ mod 4) eine Permutation:
Wir können auch Permutationen für unendliche Mengen haben, nehmen wir als Beispiel : Die Funktion ist eine Permutation, bei der die ungeraden und geraden Zahlen vertauscht werden ganze Zahlen in Zweierblöcken. Die ersten Elemente sind wie folgt:
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)
Das Zeichen d
hat den Codepunkt , . Wenn wir das für jeden Charakter machen, bekommen wir:
Die Summe aller dieser zugeordneten Zeichen ist 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 , return / output
- zum Zweck dieser Herausforderung ist nicht enthalten
- Die Permutation muss eine unendliche Teilmenge von nicht trivial permutieren.
- 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.
Mit Ausnahme von Permutationen, die nur eine endliche Teilmenge von permutieren , was bedeutet, dass die Menge muss unendlich sein.
Wenn es Ihre Punktzahl verbessert, können Sie zum Beispiel eine UTF-8-codierte Jelly-Einreichung anstelle des üblichen SBCS verwenden.
Antworten:
Jelly , Punktzahl
288 250 212199-38 danke an Erik den Outgolfer!
Tauscht auch mit ungeraden.
Die Punktzahl beträgt67+45+44+43=199 - siehe Selbstwertung hier .
Probieren Sie es online!
quelle
-*ạ
eine Punktzahl von 300 ... jedoch-*_@
eine Punktzahl von 250. Vielleicht sollte ich das als meine eigene posten, obwohl es die gleiche Permutation ist.-*N+
punktet 212C-*+
klingt wie eine zukünftige Variation vonC++
.JavaScript (ES6), Score =
276268Probieren Sie es online!
quelle
54^54
ist0
Perl 6 , Ergebnis: 201
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
804702Probieren Sie es online!
Die erste Antwort hier, und ich denke, dass sie ziemlich gut abschneidet.
Dies erzeugt die Sequenz23,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.quelle
Python 2 Punktzahl:
742698694 PunkteProbieren Sie es online!
-44 Punkte dank Ørjan Johansen; -4 Punkte thx bis xnor.
quelle
96
durch zu ersetzen~~
.Retina 0.8.2 , 6 Bytes, 260 Punkte
Probieren Sie es online! Link enthält eine selbstbewertende Fußzeile. Tauscht einfach die Ziffern
1
und9
und3
und7
in den Dezimalstellen aus, sodass Zahlen, die keine zu koprimierenden Ziffern enthalten, nicht10
betroffen sind.quelle
C # (Visual C # Interactive Compiler) , 22 Byte, Score
247245Probieren 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.
quelle
A=>A<66?66-A:A
?TI-BASIC, 9 Bytes, Punktzahl
108810511000Tauscht auch mit ungeraden. Gerade Karten zu
Ans-1
und ungerade Karten zuAns+1
.TI-BASIC ist tokenisiert, daher hat dieses Programm die folgenden Hex-Werte:
Somit lautet die Punktzahl:113 + 114 + 195 + 171 + 49 + 185 + 49 + 11 + 113 = 1000
Ausgangstestprogramm:
Welche Ausgänge:
Anmerkungen:
Die Token-Werte von TI-BASIC finden Sie hier .
Pause
wird 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.quelle
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:
quelle
Haskell, Punktzahl 985
Probieren Sie es online!
quelle
a*200
Modulo 200 keinen Effekt hat,a
also keine Rolle spielt.sum[1|...]
overif..then..else
sollte helfen.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:
quelle
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[+]
.quelle