Ostatnio znalazłem bijectywne mapowanie f od dodatnich liczb całkowitych do skończonych, zagnieżdżonych sekwencji. Celem tego wyzwania jest wdrożenie go w wybranym języku.
Mapowanie
Rozważ liczbę n z czynnikami, w których . Następnie:
Na przykład:
Zasady
- Możesz napisać pełny program lub funkcję do wykonania tego zadania.
- Dane wyjściowe mogą być w dowolnym formacie rozpoznawalnym jako sekwencja.
- Dozwolone są wbudowane czynniki pierwsze, testowanie pierwszeństwa itp .
- Standardowe luki są niedozwolone.
- Twój program musi ukończyć ostatni test w ciągu 10 minut na moim komputerze.
- To jest golf golfowy, więc wygrywa najkrótszy kod!
Przypadki testowe
10
:{{},{{}},{}}
21
:{{{}},{},{{}}}
42
:{{{}},{},{{}},{}}
30030
:{{{}},{{}},{{}},{{}},{{}},{}}
44100
:{{{{}}},{{{}}},{{{}}},{},{}}
16777215
:{{{{}}},{{}},{{}},{},{{}},{{}},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{{}}}
16777213
: pastebin
Odpowiedzi:
Pyth, 29 bajtów
Demonstracja
Definiuje to funkcję
'
, która wykonuje pożądane mapowanie.Funkcja pomocnicza
y
wykonuje mapowanie rekurencyjnie, biorąc pod uwagę rozkład pierwotny. Przypadek podstawowy i rozkład główny są wykonywane w'
.źródło
CJam,
514844424139343331 bajtówWypróbuj online w interpretatorze CJam .
Dzięki @ MartinBüttner za grę w golfa z 3 bajtów!
Dzięki @PeterTaylor za grę w golfa z 3 bajtów i torowanie drogi dla jeszcze 1!
Przynajmniej na moim komputerze pobranie pliku trwa dłużej niż uruchomienie programu ...
I / O
Jest to nazwana funkcja, która wyskakuje i jest liczbą całkowitą ze STDIN i wypycha tablicę w zamian.
Ponieważ CJam nie rozróżnia pustych tablic od pustych ciągów - ciąg jest po prostu listą zawierającą tylko znaki - reprezentacja ciągu będzie wyglądać następująco:
odnosząc się do następującej, zagnieżdżonej tablicy
Weryfikacja
Jak to działa
źródło
mf e=
jest znacznie lepszy niż to, co znalazłem, gdy podrzuciłem test poczytalności, gdy pytanie było w piaskownicy, ale jednym z ulepszeń, którego nie znalazłem, jest wykonanie mapowania dla dwójki jako(0a*+
- tjri{}sa2*{mf_W=){mp},\fe=(0a*+0j\{)j}%*}j
. I jest też znacznie większa poprawa, którą dam wam kilka godzin przewagi nad ...{mf_W=)1|{mp},\fe=(0a*+{)J}%}:J
1|
. Dzięki jeszcze raz!Mathematica, 88 bajtów
źródło