Ź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.


1
@JoKing „zero bajtów może nie być częścią kodu źródłowego” odp .: drugie pytanie
tylko ASCII

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!


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


3
C-*+brzmi jak jakiś przyszły wariant C++.
val mówi Przywróć Monikę


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!


O, to ogromna poprawa
tylko ASCII,


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.


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.


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ę.


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

1

Haskell, ocena 985

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

Wypróbuj online!


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

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)

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 [+].

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.