Źródło permutacji

14

Permutacji w zbiorze S.={s1,s2),,sn} jest bijective funkcja π:S.S. . Na przykład, jeśli S.={1,2),3),4} to funkcja jest permutacją:π:x1+(x+1mod4)

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

Możemy również mieć permutacje na zestawach nieskończonych, weźmy na przykład : Funkcja jest permutacją, zamieniając nieparzyste i parzyste liczby całkowite w blokach po dwa. Pierwsze elementy są następujące:N.π:xx-1+2)(xmod2))

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

Wyzwanie

Twoim zadaniem w tym wyzwaniu jest napisanie funkcji / programu implementującego dowolną 1 permutację na dodatnich liczbach naturalnych. Wynik twojego rozwiązania to suma współrzędnych kodowych po zmapowaniu ich za pomocą zaimplementowanej permutacji.

Przykład

Załóżmy, że bierzemy powyższą permutację zaimplementowaną w Pythonie:

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

Wypróbuj online!

Znak dma punkt kodowy , . Jeśli zrobimy to dla każdej postaci, otrzymamy:100Liczba Pi(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

Suma wszystkich tych odwzorowanych znaków wynosi , byłby to wynik dla tej funkcji.2463

Zasady

Zaimplementujesz permutację jako funkcję lub programπ

  • podana liczba naturalna , return / outputxπ(x)
  • do celów niniejszego prowokacji jest nie zawierająN0
  • permutacja musi nietrywialnie permutować nieskończony podzbiórN
  • twoja funkcja / program nie może czytać własnego źródła

Punktacja

Wynik jest sumą wszystkich punktów kodowych (zero bajtów może nie być częścią kodu źródłowego) w ramach tej permutacji (punkty kodowe zależą od Twojego języka 2 , możesz swobodnie korzystać z SBCS, UTF-8 itp., O ile Twój język to obsługuje).

Zgłoszenie z najniższą liczbą punktów wygrywa, remisy są przerywane przez najwcześniejsze zgłoszenie.


  1. Z wyjątkiem permutacji, które dopuszczają tylko skończony podzbiór , co oznacza, że ​​zestaw musi być nieskończony.N{x|π(x)x}

  2. Jeśli poprawi to twój wynik, możesz na przykład użyć przesyłania galaretki zakodowanego w UTF-8 zamiast zwykłego SBCS.

ბიმო
źródło
1
@JoKing „zero bajtów może nie być częścią kodu źródłowego” odp .: drugie pytanie
tylko ASCII
Związane .
Peter Taylor

Odpowiedzi:

6

Galaretka , wynik  288 250 212  199

-38 dzięki Erikowi Outgolferowi!

C-*+

Zamiana nawet z nieparzystymi.

Wynik to 67+45+44+43=199 - patrz punktacja tutaj .

Wypróbuj online!

Jonathan Allan
źródło
Najwyraźniej Dziurawa Zakonnica -*ạma wynik 300 ... -*_@ma jednak wynik 250. Może powinienem opublikować to jako własne, chociaż to ta sama permutacja.
Erik the Outgolfer
Ah ładna obserwacja Leaky Nun, więc -*N+zdobył 212
Jonathan Allan
To nie była obserwacja, to była odpowiedź na jego (teraz dość stare) wyzwanie . ;-)
Erik the Outgolfer
3
C-*+brzmi jak jakiś przyszły wariant C++.
val mówi Przywróć Monikę
5

JavaScript (ES6), wynik =  276  268

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

Wypróbuj online!

Arnauld
źródło
ale 54^54jest0
Jonathan Allan
@JonathanAllan Dzięki za powiadomienie. Jakoś tęskniłem za tą częścią. Powinno być teraz poprawne.
Arnauld,
4

Perl 6 , wynik: 201

*-!0+^40+!0

Wypróbuj online!

Odpowiedź Portu Arnaulda . Korzysta z tego, że xor ( +^) ma takie samo pierwszeństwo jak -i +oraz użycie lambda typu cokolwiek, aby zmniejszyć ogólną liczbę znaków. Poza tym nie mogłem znaleźć innego sposobu na przedstawienie go inaczej, który uzyskałby lepszy wynik.

Perl 6 , wynik 804 702

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

Wypróbuj online!

Pierwsza odpowiedź typu quine-y tutaj i myślę, że wyniki są całkiem dobre.

23,22,25,24...1,2,3,4...2150,53,52,1,55,54!

Jo King
źródło
O, to ogromna poprawa
tylko ASCII,
4

Wynik w Pythonie 2 : 742 698 694 punktów

lambda a:a^96or~~96

Wypróbuj online!

-44 punkty dzięki Ørjanowi Johansenowi; -4 punkty thx na xnor.

Chas Brown
źródło
Ørjan Johansen: Naprawiono (i zaoszczędziło mi 44 bajty!)
Chas Brown
Dobry zapis (choć to nie bajty)
Ørjan Johansen
To hojne kredytowanie!
Ørjan Johansen
Nie edytowałbym, gdybyś nie zauważył wady :)
Chas Brown
Jest to tańsze, aby zastąpić przestrzeń przed 96z ~~.
xnor
2

Siatkówka 0.8.2 , 6 bajtów, wynik 260

T`O`RO

Wypróbuj online! Link zawiera stopkę samooceny. Po prostu zamienia cyfry 1i 9i 3i 7w reprezentacji po przecinku, tak że numery, które nie zawierają względnie pierwsze cyfry do 10pozostają niezmienione.

Neil
źródło
2

C # (interaktywny kompilator Visual C #) , 22 bajty, wynik 247 245

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

Wypróbuj online!

Proste, jeśli mniej niż 66, zwraca 66 minus wejście, w przeciwnym razie użyj wzoru w pytaniu, który zamienia liczby parzyste i nieparzyste.

Wcielenie ignorancji
źródło
Co jest nie tak z poprzednią wersją A=>A<66?66-A:A?
Jo King
2
N{x|π(x)x}
O rany, nie zauważyłem tego. To znaczy, że moja własna odpowiedź też jest nieprawidłowa :(
Jo King,
2

TI-BASIC, 9 bajtów, wynik 1088 1051 1000

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

Zamiana nawet z nieparzystymi. Nawet mapy do Ans-1i nieparzyste mapy do Ans+1.

TI-BASIC jest tokenizowany, więc ten program będzie miał następujące wartości szesnastkowe:

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

Program testu wyjściowego:

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

Które wyjścia:

2
1
4
3
6
5
8
7
10
9

Uwagi:

  • Wartości tokena TI-BASICA można znaleźć tutaj .

  • Pausejest używany w programie wyjściowym, aby lepiej zobaczyć permutację, ponieważ kalkulator ma tylko 8 linii. Naciśnij [ENTER], aby wyświetlić następną permutację.

Tau
źródło
1

Węgiel drzewny , 13 bajtów, wynik 681

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

Wypróbuj online! Link jest do wersji samo-naliczającej z nagłówkiem do mapowania na tablicy kodów bajtów. (Węgiel drzewny ma niestandardową stronę kodową, więc ręcznie wprowadziłem poprawne kody bajtów na wejściu.) Działa poprzez odwrócenie zakresów 233 liczb, dzięki czemu 117, 350, 583 ... pozostają niezmienione. Wyjaśnienie:

     ι          Value
 ⁺              Plus
  ²³²           Literal 232
⁻               Minus
         ι      Value
        ⊖       Decremented
       ﹪        Modulo
          ²³³   Literal 233
      ⊗         Doubled
Neil
źródło
1

Haskell, ocena 985

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

Wypróbuj online!

Joseph Sible-Reinstate Monica
źródło
Nie sądzę, że jest to permutacja, ponieważ dodawanie a*200nie ma wpływu modulo 200, więc a nie ma znaczenia.
xnor
@xnor Dobry połów. To powinno być poza modem. W pewnym momencie gry w golfa musiałem zmienić porządek operacji. Naprawiono teraz, dzięki!
Joseph Sible-Reinstate Monica
Myślę, że jest jeszcze jeden problem, który 40 mapuje na 0, ale wyzwanie wymaga dodatnich liczb całkowitych, co sprawia, że ​​takie podejście jest trudne.
xnor
1
Używanie sum[1|...]ponad if..then..elsepowinno pomóc.
ბიმო
1
Daj nam kontynuować tę dyskusję w czacie .
Tylko ASCII,
1

05AB1E , wynik: 488 na stronie kodowej 05AB1E

È·<-

Zamienia nieparzyste, a nawet jak w przykładowej funkcji.

Spróbuję poprawić wynik tutaj.

Wypróbuj online z wejściem w zakresie[1, 100] lub Wypróbuj online za pomocą współrzędnych kodowych.

Wyjaśnienie:

È     # 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
źródło
0

Brainfuck, 47 bajtów, wynik 2988

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

Wypróbuj online!

Użyłem permutacji podanej we wstępie. Ponieważ jest to bijectcja, możesz go użyć jako prostego szyfru symetrycznego podobnego do ROT13 lub Atbash. Moje rozwiązanie działa na niezwiązanych komórkach. Jednak ograniczając się do 8-bitowych komórek, możesz zapisać 2 punkty, zastępując [-]je [+].

orthoplex
źródło