Zainspirowany tym CMC
Biorąc pod uwagę dodatnią liczbę całkowitą większą niż 0, wykonaj na niej następującą operację:
- Jeśli wszystkie dziesięć pojedynczych cyfr (
1234567890
) jest co najmniej raz w liczbie, wypisz licznik i wyjdź z programu - W przeciwnym razie należy podwoić liczbę i powtórzyć, zwiększając liczbę.
Liczenie zaczyna się od 0 i jest liczbą podwojonych danych wejściowych. Na przykład, jeśli dane wejściowe to 617283945, należałoby je podwoić raz, ponieważ 1234567890 zawiera wszystkie 10 cyfr.
To jest golf golfowy, więc wygrywa najkrótszy kod. Dane wejściowe mogą być traktowane jako ciąg, jeśli chcesz.
Przypadki testowe
input => output
617283945 => 1
2 => 67
66833 => 44
1234567890 => 0
100 => 51
42 => 55
n
pewne, że dla niektórych istnieje cośk
takiego jaknk
pandigital? Chciałbym zobaczyć dowód.Odpowiedzi:
Python 3 , 39 bajtów
Wypróbuj online!
Wyjścia
False
dla0
.źródło
J ,
2423 bajtyWypróbuj online!
Wyjaśnienie
źródło
05AB1E ,
1110 bajtów-1 bajt dzięki scottinet
Wypróbuj online! lub jako pakiet testowy
źródło
use x
ale to też 10 ... Ładna odpowiedź. Myślx
mogłaby się pozbyćD
, ale to ten sam pomysł.Perl 6 ,
3128 bajtów (27 znaków)-3 bajty dzięki @Joshua
Wypróbuj online!
Objaśnienie: Nadal ten sam konstrukt do rekurencyjnego generowania list. Pierwszym elementem jest dany numer (
$_
), każdy następny element to 2 razy poprzedniego (2×*
- używamy x, ponieważ, chociaż 2 bajtów charakter, to jeszcze 1 bajt tańsze niż2 * *
), i robimy to do stanu koniec*.comb.unique>9
jest zadowolony , tzn. gdy liczba zawiera więcej niż 9 unikalnych znaków. (Technicznie dzielimy ciąg na listę znaków za pomocą.comb
, wymuszamy na zestawie za pomocą.Set
(oczywiście, Zestawy zawierają każdy element tylko raz) i porównujemy z 9, co wymusza zestaw w kontekście numerycznym, co z kolei daje jego liczba elementów).Na koniec odejmujemy 1 z tej listy. Ponownie lista jest wymuszana na kontekst numeryczny, więc zwracamy o 1 mniej niż długość tej listy.
źródło
.Set
zamiast.unique
zapisać 3 bajty.JavaScript (ES6) + big.js ,
84747370 bajtówDzięki @ ConorO'Brien za uratowanie 10 bajtów, sugerując big.js zamiast bignumber.js.
Dzięki @Rick Hitchcock za -1 bajt.
Dzięki @Shaggy za -3 bajty.
Pobiera dane wejściowe jako ciąg; obsługuje do około 2 69 ze względu na automatyczną konwersję notacji naukowej występującą poza tym punktem.
Test Snippet
Zakres nieskończony,
106888784 bajtówUżywając opcji config, aby skutecznie wyłączyć notację naukową podczas konwersji liczb na ciągi, możemy mieć prawie nieskończony zasięg.
Pokaż fragment kodu
źródło
BigNumber
trochę skrócić , używając big.js ?new
jest w tym opcjonalne. Zaktualizuje się, dzięki!f=n=>[..."0123456789"].every(d=>RegExp(d).test(c=Big(n)))?0:1+f(c.mul(2))
."4"+2**29
: tio.run/##BcGxDkAwEADQb2GQO41LNBZDbX7AKgbhKkSu0jZSX1/...Galaretka ,
12, 11 bajtówWypróbuj online!
Wyjaśnienie:
źródło
Haskell , 46 bajtów
Wypróbuj online!
źródło
J , 43 bajty
Wypróbuj online!
Definiuje anonimową funkcję. Zbiera wyniki dość suboptymalnie. Sprawdź doskonałą odpowiedź mil tutaj!
źródło
^:a:
:1#@}.+:^:(10>#@~.@":)^:a:
Haskell, 44 bajty
źródło
Clojure,
1158982 bajtów-26 bajtów, po prostu używając ciągu znaków do reprezentowania listy znaków (duh, z perspektywy czasu) i zmieniając z używania rekurencji na
loop
, co pozwoliło mi dokonać kilku optymalizacji.-7 bajtów poprzez pozbycie się połączenia z
bigint
. Najwyraźniej musimy tylko obsługiwać dane wejściowe, które nie spowodują przepełnienia.Pregolfed:
źródło
every?
zamiastempty? (remove …
:#(loop[n % c 0](if(every?(set(str n))"1234567890")c(recur(* 2 n)(inc c)))))
Siatkówka , 85 bajtów
Wypróbuj online! Link zawiera przypadki testowe. Nieznacznie zoptymalizowany pod kątem czasu działania. Wyjaśnienie:
Zduplikuj numer wejściowy.
Deduplikuj cyfry w pierwszej kopii.
Jeśli pozostało 10 cyfr, usuń oba numery, w przeciwnym razie po prostu usuń pierwszą kopię. Pamiętaj, że usunięcie obu liczb powoduje, że reszta pętli przestaje działać.
Umieść
#
przed dużymi cyframi.Podwój każdą cyfrę.
Dodaj w bagażnikach.
Radzić sobie z wiodącym carry.
Dodaj
@
pętlę i do momentu znalezienia wszystkich 10 cyfr.Wydrukuj liczbę
@
dodanych s.źródło
APL (Dyalog Unicode) , 19 + 2 = 21 bajtów
Wypróbuj online!
To dwójkowym
Dfn
( d Skierować F unctio n ), przy 0 jako lewego argumentu, i całkowitą, po prawej stronie. Ponieważ wejście ma być tylko liczbą całkowitą, dodałem 2 bajty dla argumentu0∘
do liczby bajtów.f←
nie jest uwzględniony w liczbie bajtów, ponieważ nie jest to konieczne . To po prostu ułatwia budowanie przypadków testowych.Jak to działa:
Nagłówki: Usunąłem je z liczby bajtów po pewnym czacie w pokoju APL, ponieważ funkcja robi to, co powinna, a wyniki są nieprawidłowe tylko z powodu domyślnych ustawień REPL APL.
⎕FR←1287
Ustawia prezentację F loat R na 128-bitową dziesiętną (7 to kod dziesiętny w REPL APL-a).⎕PP←34
Ustawia resekcję P rint P na 34 cyfry. Oba są potrzebne, ponieważ domyślna reprezentacja APL dla dużych liczb przekształca je w notację naukową (np. 3.14159265359E15), co znacznie psuje kod.źródło
Java 8,
1321108774 bajty-57 bajtów dzięki @ OlivierGrégoire .
Wyjaśnienie:
Wypróbuj tutaj. (Uwaga: przypadek testowy dla
2
jest wyłączony, ponieważ powinien zatrzymać się na 2 68 , ale rozmiarlong
jest ograniczony do 2 63 -1.)Stare 132 bajty odpowiadają za pomocą
String
danych wejściowych i wyrażeń regularnych:Wypróbuj tutaj. (Uwaga: przypadek testowy dla
2
jest wyłączony, ponieważ powoduje wyjątek StackOverflowException z powodu nieco zbyt dużej rekurencji).Wyrażenie całkowite, aby sprawdzić, czy Łańcuch zawiera wszystkie 9 cyfr, staje
^(?=.*0)(?=.*1)(?=.*2)(?=.*3)(?=.*4)(?=.*5)(?=.*6)(?=.*7)(?=.*8)(?=.*9).*$
się pozytywnym spojrzeniem w przyszłość dla całego Łańcucha.źródło
2^68
pierwszej liczby pandigitalnej, ale długi w Javie są ograniczone do2^63-1
.reduce
\ o /(?:.*?(\d)(?!.*\1)){10}
Łuska , 10 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Mathematica,
5948474638 bajtów-9 bajtów dzięki Jenny_mathy.
Wypróbuj online za pomocą matematyki!
źródło
a
będzie działać, ale „a” nie.Print/@f/@{617283945,2,66833,1234567890,100,42}
R , 74 bajty
Wypróbuj online! Zauważ, że R da złą odpowiedź z
f(2)
powodu ograniczeń, w jaki język przechowuje duże liczby całkowite.Objaśnienie: W celu przetestowania pandigitalności dane wejściowe są wymuszane na wektorze znaków przez połączenie pustym łańcuchem, a następnie podzielone na poszczególne cyfry. Następnie sprawdzamy, czy wszystkie 0: 9 są obecne w powstałym wektorze; jeśli nie, zwiększamy licznik, podwajamy dane wejściowe i powtarzamy.
Licznik używa F, który inicjuje się jako FAŁSZ. Aby upewnić się, że jest on wymuszony na liczbę, mnożymy przez jeden przed powrotem.
źródło
c(x,"")
jest fajną sztuczką dlael(strsplit(...))
PowerShell ,
7069 bajtówWypróbuj online!
(Prawie dwa razy dłużej niż odpowiedź Pythona: - \)
Pobiera dane wejściowe
$args[0]
, przesyła je jako a[bigint]
, zapisuje je$n
. Wchodzi wfor
pętlę. Przy każdej iteracji sprawdzamy, czy$n
umber przekształcony na ciąg znaków, a następnie nachar
tablicę, gdy sąGroup-Object
razem, ma wartość.count
-l
ese lube
jakość9
. Oznacza to, że jedynym sposobem, w jaki wynosi ona 10,1234567890
jest obecność co najmniej jednej cyfry każdej liczby . Jeśli tak, wychodzimy z pętli. Jeśli nie, my$n*=2
i kontynuujemy. Każdą iterację w pętli zwiększamy$i
. Kiedy wychodzimy z pętli, po prostu generujemy dane wyjściowe$i
.Zauważ, że dla danych wejściowych, takich jak
1234567890
tam, gdzie każda cyfra jest już uwzględniona, nie wyświetli to nic, co jest wartością falsey w PowerShell i równoważną0
po rzuceniu jako[int]
. Jeśli to nie jest OK, możemy po prostu umieścić+
przed wyjściem,$i
aby jawnie rzucić go jako liczbę całkowitą.Oszczędność bajtu dzięki Rolandowi Heathowi.
źródło
Pyth , 11 bajtów
Zestaw testowy .
Pierwsza liczba naturalna, w
T
którejinput << T
spełnia wymagania.źródło
Perl 5 , 52 + 1 (-p) = 53 bajty
Wypróbuj online!
źródło
Perl, 43 + 1 bajtów
Korzystanie z
-p
flagi. Opiera się to na rozwiązaniu dostarczonym przez Xcali powyżej.źródło
Swift 4 , 111 bajtów
Uwaga: Nie działa dla x = 2 z powodu przepełnienia.
Objaśnienie - Wejście x jest najpierw typowane do łańcucha. Następnie Set () usuwa powtarzające się znaki. Następnie jest sortowany zgodnie z wynikiem. Jeśli nie pasuje, x podwaja się, a licznik jest zwiększany.
źródło
Rubin,
46453938 bajtówWypróbuj online!
Aktualizacje:
def f n;
zamiastdef f(n);
.…[9]
zamiast….size==10
źródło
Japt , 15 bajtów
Spróbuj
Wyjaśnienie
Domniemane wprowadzenie liczby całkowitej
U
.Utwórz tablicę liczb całkowitych od
0
do99
i przekaż każdą z nich przez funkcję, w którejX
jest bieżący element.U
pomnożone przez 2 podniesione do potęgiX
.Uzyskaj indeks pierwszego elementu, który zwraca wartość true po przejściu przez następującą funkcję.
Podziel na tablicę cyfr i usuń duplikaty.
Uzyskaj długość tablicy i sprawdź równość z
10
.Alternatywnie, 15 bajtów
Spróbuj
Wyjaśnienie
Domniemane wprowadzenie liczby całkowitej
U
.Zaczynając od
0
, zwróć pierwszą liczbę, która zwraca true po przejściu przez następującą funkcję, przyX
czym jest to bieżąca liczba.Jak wyżej, pomnóż
U
przez 2 do potęgiX
.Podziel na tablicę cyfr, usuń duplikaty i ponownie dołącz do liczby całkowitej.
Konwertuj na ciąg, uzyskaj długość i przekonwertuj z powrotem na liczbę całkowitą.
Sprawdź równość z
10
.źródło
QBIC , 48 bajtów, nc
Teoretycznie powinno to działać. Jednak w praktyce to się nie udaje, ponieważ QBasic rzuca dziesięciocyfrowe liczby (przynajmniej potrzebne, aby uzyskać wszystkie cyfry) do notacji naukowej ... Z tego powodu oznaczyłem ją jako niekonkurującą.
Wyjaśnienie
źródło
GNU dc, 61 bajtów
Dane wejściowe są kopiowane z góry stosu (który w przeciwnym razie musi być pusty); wyjście jest wypychane na szczyt stosu.
Wyjaśnienie
Używamy zmiennej tablicowej
a
, przechowując 1 w,a[d]
jeśli cyfrad
jest obecna, w przeciwnym razie wracając do 0. Używamy rozszerzenia GNU,~
aby uzyskać iloraz i resztę w jednym poleceniu.Jako bonus, będzie to działać w dowolnych bazach liczb (nie tylko dziesiętnych): po prostu ustaw podstawę wejściową zgodnie z wymaganiami (stała
11
w definicjif
będzie odczytywana przy użyciu tej podstawy liczb, więc jest automatycznie poprawna).Test
źródło
REXX, 57 bajtów
źródło
q / kdb + , 33 bajty
Rozwiązanie:
Przykłady:
Wyjaśnienie:
Wszystkie bajty są równe, może być w stanie zagrać w ten nieco dalej. Wykorzystuje
scan
przysłówek q :Uwagi:
Jeśli przejdziemy do
k
monitu, możemy uzyskać rozwiązanie 25-bajtowe. Konwertuje liczbę na listę znaków:źródło