Otrzymasz dodatnią liczbę całkowitą (która nigdy nie będzie zawierać 0) jako dane wejściowe. Twoim zadaniem jest sprawdzenie, czy jest to numer Lynch-Bell, czy nie.
Liczba jest liczbą Lynch-Bell, jeśli wszystkie jej cyfry są unikalne, a liczba jest podzielna przez każdą z jej cyfr.
W rzeczywistości istnieje tylko 548 numerów Lynch-Bell, więc kodowanie na stałe jest możliwe, ale prawie na pewno będzie dłuższe.
126 jest liczbą Lynch-Bell, ponieważ wszystkie jego cyfry są unikalne, a 126 można podzielić przez 1, 2 i 6.
Możesz wygenerować dowolną wartość prawdy i fałszu.
Przykłady:
7 -> truthy
126 -> truthy
54 -> falsy
55 -> falsy
3915 -> truthy
To jest OEIS A115569 .
Odpowiedzi:
Mathematica, 42 bajty
Myślę, że
0!=##&@@d&&##&@@
jest nowy niski poziom czytelności dla Mathematica ...Wyjaśnienie
Niektóre z podstawowych stosowanych tutaj cukru syntaktycznego:
&
ma bardzo niski priorytet i zamienia wszystko, co z niego zostało, w funkcję bez nazwy.&&
jest tylkoAnd
operatorem.#
jest argumentem najbliższej obejmującej nienazwaną funkcję.##
jest sekwencją wszystkich argumentów funkcji.@
jest notacją przedrostkową dla wywołań funkcji, tjf@x == f[x]
.@@
toApply
, który przekazuje elementy listy jako pojedyncze argumenty do funkcji, tjf@@{a,b,c} == f[a,b,c]
.Z tym na uboczu ...
Powinno to być dość oczywiste: daje nam to listę cyfr dziesiętnych wejścia i zapisuje wynik
d
.Testuje to dane wejściowe pod kątem podzielności według każdej z jego cyfr (ponieważ jest to operator podzielności
Listable
). To daje nam listęTrue
s iFalse
s.Stosujemy funkcję po lewej stronie do listy wartości logicznych, tak że każda wartość logiczna jest osobnym argumentem.
Stosujemy inną funkcję
d
, aby poszczególne cyfry podano jako osobne argumenty. Funkcja jest0!=##&
, tj . Sprawdza, czy wszystkie cyfry są odrębne (i że różnią się od nich, ale wynika to z wyzwania, a jeśli nie, to i tak nie byłby dzielnikiem). jest tak naprawdę tylko 1-bajtowym wygaszaczem przy korzystaniu z niego samego i działa, ponieważ istnieje 1-bajtowy element ( ), o którym wiemy, że nie jest obecny. Więc ta pierwsza rzecz sprawdza, czy cyfry są unikalne. Nazwijmy ten wynikUnequal[0, d1, d2, ...]
0
0!=##&
Unequal
0
U
Ponownie, jest to naprawdę po prostu skrót
And[U, ##]
. Przy##
czym sekwencje Poszczególne wartości logiczne od wstępnego sprawdzianu podzielnosci są rozszerzył się naAnd
, więc mamy , która sprawdza, że obie cyfry są wyjątkowe i każda cyfra dzieli wejście.And[U, d1∣n, d2∣n, ...]
źródło
##&@@d&&##&@@
? Co to w ogóle robi?0!=
przez0<
?Python 3 , 56 bajtów
Wypróbuj online!
Dane wyjściowe,
False
jeśli jest to numer Lynch-Bell, wTrue
przeciwnym razie.źródło
0
wejściaBrachylog , 10 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
C #,
8783 bajtówNapisałem to w notatniku przed testem w Visual Studio, gdzie działało dobrze, więc właśnie zdałem sobie sprawę, że jestem teraz na takim poziomie nerd ...
Pełna / sformatowana wersja:
źródło
JavaScript (ES6),
4241 bajtówPobiera dane wejściowe jako ciąg znaków i zwraca
true
lubfalse
odpowiednio. Edycja: Zapisano 1 bajt dzięki @RickHitchcock. Inne wersje:Pobiera dane wejściowe jako ciąg i zwraca
0
lub1
(tj. Logiczną odwrotność) dla 40 bajtów:Pobiera dane wejściowe jako liczbę i zwraca
0
lub1
dla 43 bajtów:Pobiera dane wejściowe jako liczbę i zwraca
1
lub0
dla 45 bajtów:źródło
s=>![...s].some((e,i)=>s%e|s.search(e)<i)
[...new Array(9999999)].map((_,n)=>n+1+"").filter(s=>![...s].some((e,i)=>s%e|s.search(e)<i)).length
, dostałem5081
zamiast oczekiwanego548
, więc nie jest to poprawne, jak napisano. Jednak naprawdę napięty kod..filter(x => x.indexOf('0')===-1)
zwraca 548 zgodnie z obietnicą.Galaretka ,
64 bajtówWypróbuj online!
Jak to działa
źródło
gQV=
jeśli wolisz rozwiązanie tylko ASCII.Python 3 , 54 bajty
Zwraca,
False
gdy liczba jest liczbą Lynch-Bell. Pobiera ciągi jako dane wejściowe. Sam sobie wymyśliłem, ale bardzo podobny do Rod. Skomentowałbym pod jego postem, ale nie mam jeszcze reputacji.Wypróbuj online!
źródło
Galaretka , 8 bajtów
Wypróbuj online!
źródło
PHP,
6248 bajtówUruchom jako potok
-nR
lub przetestuj go online . Puste wyjście dla fałszu,1
dla prawdy.awaria
źródło
Haskell , 61 bajtów
Wypróbuj online!
Definiuje anonimową funkcję,
(#)=<<show
która po podaniu liczby zwracaTrue
lubFalse
.źródło
05AB1E , 4 bajty
Wypróbuj online!
Ten sam algorytm jak ta odpowiedź na powiązane pytanie .
źródło
05AB1E , 8 bajtów
Wykorzystuje kodowanie 05AB1E . Wypróbuj online!
źródło
Mathematica, 57 bajtów
źródło
IsLynchBellNumber
LynchBellNumberQ
. ;)Python 2 , 66 bajtów
Jest to rozwiązanie w Pythonie 2, którego
True
jedynym celem jest wyjście w prawdę iFalse
fałsz:Wypróbuj online!
źródło
Haskell,
260241201162 bajtówWyjaśnienie
Znacząco skróciłem dzięki do Laikoni
źródło
Japt ,
151411109 bajtówSpróbuj
źródło
©!
->«
dla -1 bajtówNeim , 9 bajtów
Wypróbuj online!
-2 dzięki Okx .
Hmm, jest ładna symetria ...
oO.O.O.Oo
źródło
𝐂D𝐮𝔼
do𝐮ℚ
(uniquify, sprawdź równości ignorując typów)Perl 6 , 27 bajtów
Wypróbuj online!
.comb
jest metodą, która bez podania argumentów dzieli łańcuch na poszczególne znaki. Liczba jest domyślnie konwertowana na ciąg, a zatem.comb
zwraca jej cyfry..comb.all
jest połączeniem wszystkich cyfr.$_ %% .comb.all
jest łącznikiem podzielności argumentu wejściowego$_
przez wszystkie jego cyfry. Na przykład, jeśli$_
jest123
, skrzyżowanie toall(True, False, True)
, które zapada sięFalse
w prawdziwym kontekście.[!=] .comb
redukuje cyfry argumentu wejściowego z!=
operatorem, który ocenia,True
czy wszystkie cyfry są różne.źródło
Siatkówka , 37 bajtów
Wypróbuj online! Link zawiera przypadki testowe. Objaśnienie: Pierwszy etap zastępuje każdą zduplikowaną cyfrę cyfrą zero. Drugi etap zastępuje każdą cyfrę jej jednoznaczną reprezentacją, po której następuje jednoznaczna reprezentacja oryginalnego numeru. Trzeci etap oblicza następnie pozostałą część pierwotnej liczby przez każdą niezerową cyfrę. Jeśli numer jest numerem Lynch-Bell, spowoduje to usunięcie wszystkiego i zostanie to przetestowane na ostatnim etapie.
źródło
Ruby 2.4, 42 bajty
(Jeszcze nie ma TIO, przepraszam)
źródło
CJam, 17 bajtów
CJam to Java języków golfowych. Jest nawet interpretowany w Javie!
Wyjaśnienie:
źródło
VBScript, 177 bajtów
Cześć wszystkim, to mój pierwszy post w CG i pierwsza próba, więc mam nadzieję, że przestrzegałem wszystkich zasad ...
Można to uruchomić z Notatnika, dodając wiersz na końcu
A następnie zapisujesz go jako .vbs, a następnie kliknij dwukrotnie.
Wyjaśnienie:
VBScript jest trochę tępym narzędziem do gry w golfa, ale hej, jeszcze się nie nauczyłem Ruby ...
źródło
PHP , 51 bajtów
wypisuje zero dla true i jeden dla false
Wypróbuj online!
PHP , 62 bajty
wypisuje zero dla true i jeden dla false
Wypróbuj online!
źródło
Pyth , 10 bajtów
Sprawdź wszystkie przypadki testowe.
W jaki sposób?
Pyth , 11 bajtów
Sprawdź wszystkie przypadki testowe.
W jaki sposób?
źródło
Perl 5 , 34 bajtów
33 bajty kodu + 1 dla
-p
flagiWypróbuj online!
Wyjścia
0
dla prawdy, każda inna liczba dla fałszuźródło
Kotlin 1.1,
986659 bajtówUpiększony
Test
źródło
APL (Dyalog Unicode) , 24 bajty
Wypróbuj online!
Prosty Dfn, prawdopodobnie można go nieco pograć w golfa. Wydaj standardowe boolany APL 1 dla prawdy, 0 dla fałszu.
Warto wspomnieć, że funkcja przyjmuje argumenty raczej jako ciągi niż ints.
W jaki sposób:
źródło
Julia 1.0 , 39 bajtów
rem.(x,d)
to wektor zawierający resztę po podzieleniu x przez każdą cyfręx
.0*unique(d)
jest wektorem o długości równej liczbie unikalnych cyfr ze wszystkimi wartościami zerowymi. Sprawdź, czy są równe.Wypróbuj online!
źródło
ruby -n , 40 bajtów
Wypróbuj online!
Wczytaj liczbę jako ciąg. Zastąp każdy znak (cyfrę) kolejnym wystąpieniem tego znaku, jeśli występuje, lub liczbą całkowitą modulo tej cyfry. Spowoduje to ciąg znaków tylko
0
wtedy i tylko wtedy, gdy jest to numer Lynch-Bell. Czemu? Jeśli występuje powtarzająca się cyfra, każde wystąpienie ostatniej pozostaje takie samo, a ponieważ dane wejściowe nie zawierają zer, oznacza to niezerową cyfrę. W przeciwnym razie sprawdzamy tylko, czy każda cyfra równomiernie dzieli liczbę.Ponieważ nie ma 8-lub więcej cyfr liczb Lynch-Bell (dowód formalny: OEIS tak mówi), sprawdzenie, czy wynikowy ciąg znaków jest leksykograficznie wcześniejszy niż ciąg znaków,
'00000000'
jest równoważny sprawdzeniu, czy wszystkie zera.źródło
R , 86 bajtów
Pobiera dane wejściowe jako ciąg. Z pewnością czuję, że można grać w golfa.
Wypróbuj online!
źródło