Wprowadzenie
Ksenodrom w podstawie n jest liczbą całkowitą, w której wszystkie jego cyfry w podstawie n są różne. Oto niektóre sekwencje ksenodromów OEIS.
Na przykład, w bazie 16 FACE
, 42
i FEDCBA9876543210
są pewne xenodromes (które są 64206
, 66
a 18364758544493064720
w bazie 10), ale 11
i DEFACED
nie są.
Wyzwanie
Biorąc pod uwagę podstawę wejściową, n , wyprowadza wszystkie ksenodromy dla tej podstawy w podstawie 10 .
Wyjście powinno być w kolejności od najmniejszej do największej. Powinno być jasne, gdzie kończy się termin w sekwencji, a zaczyna nowy (np. [0, 1, 2]
Jest jasne, gdzie 012
nie ma).
n będzie liczbą całkowitą większą niż 0.
Wyjaśnienia
To wyzwanie wykonuje operacje wejścia / wyjścia szczególnie w bazie 10, aby uniknąć obsługi liczb całkowitych i ich bazy jako ciągów. Wyzwanie polega na abstrakcyjnym postępowaniu z każdą bazą. W związku z tym dodam tę dodatkową zasadę:
Liczby całkowite nie mogą być przechowywane jako ciągi znaków w bazie innej niż baza 10.
Twój program powinien być w stanie teoretycznie poradzić sobie z rozsądnie wysokim n, jeśli nie byłoby czasu, pamięci, precyzji lub innych technicznych ograniczeń we wdrażaniu języka.
To jest golf golfowy , więc wygrywa najkrótszy program w bajtach.
Przykład wejścia i wyjścia
1 # Input
0 # Output
2
0, 1, 2
3
0, 1, 2, 3, 5, 6, 7, 11, 15, 19, 21
4
0, 1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 18, 19, 24, 27, 28, 30, 33, 35, 36, 39, 44, 45, 49, 50, 52, 54, 56, 57, 75, 78, 99, 108, 114, 120, 135, 141, 147, 156, 177, 180, 198, 201, 210, 216, 225, 228
ssize_t
. Czy łamanie w ten sposób jest dopuszczalne?Odpowiedzi:
Pyth , 8 bajtów
Filtruje liczby w [0, n ^ n - 1], gdy nie ma zduplikowanych elementów w podstawie n . Podstawowa konwersja w Pyth będzie działać z dowolną bazą, ale ponieważ patrzy ona na bardzo szybko rosnącą listę liczb, ostatecznie nie będzie w stanie przechowywać wartości w pamięci.
Wypróbuj online!
Wyjaśnienie:
źródło
Python 2, 87 bajtów
Drukuje dodatkowe puste linie dla nie-ksenodromów:
źródło
Galaretka ,
98 bajtówDzięki @JonathanAllan za grę w golfa na 1 bajcie!
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
Galaretka , 12 bajtów
TryItOnline!
Będzie działać dla każdego
n
, biorąc pod uwagę wystarczającą ilość pamięci, podstawowa konwersja Jelly nie jest ograniczająca.W jaki sposób?
źródło
JavaScript (ES7), 86 bajtów
źródło
1
(Powinien wyjść[0]
, ale RangeErrors.)37
to nien
od1
do,13
zanim precyzja zmiennoprzecinkowa ją zabije.Perl 6 , 47 bajtów
Zwraca Seq . ( Seq to podstawowe owijalne opakowanie dla Iteratora )
Po jego wprowadzeniu
16
obliczenie 53905th elementu Seq (87887
) zajmuje 20 sekund .Rozszerzony:
źródło
Partia,
204200 bajtówNie będzie działać dla n> 9, ponieważ Batch ma tylko 32-bitową arytmetykę. Wygodnie, Batch ocenia
f &= b ^= f = 1 << j % n
jakof = 1 << j % n, b = b ^ f, f = f & b
raczej niżf = f & (b = b ^ (f = 1 << j % n))
.źródło
Mathematica,
5948 bajtówZawiera znak „Użycie prywatne” U + F4A1
Wyjaśnienie
Generują
{1, 2, ..., n^n}
. Odejmij 1. (wydajność{0, 1, ..., n^n - 1}
)Funkcja boolowska:
True
jeśli każda cyfra występuje co najwyżej raz w bazien
.Z listy
{0, 1, ..., n^n - 1}
wybierz te, które dają,True
gdy zastosowana zostanie powyższa funkcja boolowska.Wersja 59-bajtowa
źródło
Mathematica,
4855 bajtów(Potrójna spacja między
x
s musi zostać zastąpiona 3-bajtowym znakiem \ uF4A1, aby kod działał.)Nienazwana funkcja pojedynczego argumentu. Zamiast testować liczby całkowite pod kątem ksenodromowości, po prostu generuje wszystkie możliwe permutacje podzbiorów dozwolonych cyfr (co automatycznie unika powtórzeń) i konwertuje odpowiednie liczby całkowite na bazę 10. Każdy ksenodrom jest generowany dwukrotnie, zarówno z wiodącym 0, jak i bez wiodącego 0;
Union
usuwa duplikaty i sortuje listę do uruchomienia.źródło
2
. Funkcja daje{0, 1}
. Wierzę, że potrzebujeszPermutations[Range@#-1, #]
zamiastSubsets[Range@#-1]
.