Opis wyzwania
Liczba Smitha jest liczbą złożoną, której suma cyfr jest równa sumie liczb jego czynników pierwszych. Biorąc pod uwagę liczbę całkowitą N
, określ, czy jest to liczba Smitha, czy nie.
Pierwszych kilka numerów Smith są 4
, 22
, 27
, 58
, 85
, 94
, 121
, 166
, 202
, 265
, 274
, 319
, 346
, 355
, 378
, 382
, 391
, 438
(sekwencja A006753 w OEIS).
Przykładowe wejście / wyjście
18: False (sum of digits: 1 + 8 = 9; factors: 2, 3, 3; sum of digits of factors: 2 + 3 + 3 = 8)
22: True
13: False (meets the digit requirement, but is prime)
666: True (sum of digits: 6 + 6 + 6 = 18; factors: 2, 3, 3, 37; sum of digits of factors: 2 + 3 + 3 + 3 + 7 = 18)
-265: False (negative numbers can't be composite)
0: False (not composite)
1: False (not composite)
4937775: True
Uwagi
- Twój kod może być funkcją (metodą) lub pełnym działającym programem,
- Zamiast słów takich jak
True
iFalse
możesz używać dowolnych wartości prawdziwości i fałszowania, o ile są jasne, jakie one są, - Jest to wyzwanie dla golfistów , dlatego ustaw swój kod tak krótko, jak to możliwe!
code-golf
math
number-theory
decision-problem
shooqie
źródło
źródło
Odpowiedzi:
Galaretka ,
1211 bajtówZwraca 1 dla liczb Smitha i 0 w przeciwnym razie. Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
tło
Æf
(rozkład na czynniki pierwsze) iD
(liczba całkowita na dziesiętną) są implementowane w taki sposób, żeP
(iloczyn) iḌ
(liczba dziesiętna na liczbę całkowitą) stanowią lewe odwrotności.Dla liczb -4 do 4 ,
Æf
zwraca następujący.Numery -10, -1, -0,5, 0, 0,5, 1, 10 ,
D
zwraca następującą.Jak to działa
źródło
Python 2,
122115110106 bajtówZaoszczędzono 4 bajty dzięki Dennisowi
Wypróbuj na ideone.com
Wyjaśnienie
Odczytuje liczbę na stdin i wypisuje,
True
czy liczba jest liczbą Smitha, czyFalse
nie.źródło
print n<m>s==sum(map(int,`m`))
.Brachylog , 19 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
_
(tak zwany niski minus ).05AB1E ,
1117 bajtówWyjaśnienie
Wypróbuj online!
źródło
PowerShell v3 +, 183 bajty
Brak wbudowanego sprawdzania liczby pierwszych. Brak wbudowanego faktoringu. Brak wbudowanej sumy cyfrowej. Wszystko wykonane ręcznie. :RE
Pobiera dane wejściowe
$n
jako liczbę całkowitą, ustawia wartość$b
równą pustej tablicy. Oto$b
nasza kolekcja czynników głównych.Dalej jest
for
pętla. Najpierw ustawiamy wartość$a
równą naszej liczbie wejściowej, a warunek jest do momentu, gdy$a
będzie mniejsza lub równa 1. Ta pętla znajdzie nasze czynniki pierwsze.Pętlujemy od
2
do$a
, usesWhere-Object
(|?{...}
), aby wyciągać liczby pierwsze, które są również czynnikami!($a%$_)
. Są one wprowadzane do wewnętrznej pętli,|%{...}
która umieszcza czynnik$b
i dzieli$a
(w ten sposób ostatecznie dojdziemy1
).Więc teraz mamy wszystkie nasze czynniki pierwsze
$b
. Czas sformułować naszą wartość logiczną. Musimy upewnić się, że$n
jest-notin
$b
, bo jeśli jest to znaczy, że$n
jest pierwsza, a więc nie jest liczbą Smith. Dodatkowo (-and
) musimy upewnić się, że nasze dwa zestawy cyfr są-eq
ual. Wynikowy boolean pozostaje w potoku, a dane wyjściowe są niejawne.NB - Wymaga od
-notin
operatora wersji 3 lub nowszej .Wciąż uruchamiam dane wejściowe dlaPo ponad 3 godzinach mam błąd przepełnienia stosu. Więc jest gdzieś górna granica. No cóż.4937775
(jest to powolne do obliczenia), więc zaktualizuję to, kiedy to się skończy.Działa to dla wejścia ujemnego, zera lub jednego, ponieważ prawa ręka
-and
eliminuje błąd, gdy próbuje obliczyć sumy cyfr (pokazane poniżej), co spowoduje, że ta połowa przejdzie do$false
oceny. Ponieważ STDERR jest domyślnie ignorowany , a prawidłowe dane wyjściowe są nadal wyświetlane, jest w porządku.Przypadki testowe
źródło
MATL, 17 bajtów
Wyjścia truthy lub falsey tablice gdzie wyjście truthy wymaga, aby wszystkie elementy są niezerowe.
Wypróbuj online
źródło
Galaretka ,
27 2523 bajtów(dalsza gra w golfa
prawdopodobniezdecydowanie możliwa)Zwraca wartość
0
False lub1
TrueWszystkie przypadki testowe w TryItOnline
W jaki sposób?
źródło
Właściwie 18 bajtów
Niestety, tak naprawdę nie ma wbudowanej faktoryzacji, która daje mnogość liczb pierwszych, więc musiałem zhakować jeden z nich razem. Sugestie dotyczące gry w golfa mile widziane. Wypróbuj online!
Ungolfing
źródło
Haskell,
120105 bajtówźródło
Oktawa,
8078 bajtówWyjaśnienie:
Wypróbuj online .
źródło
any(t<0)
dla nie-prymatu jest bardzo sprytnePyth, 21 bajtów
Program, który pobiera dane z liczby całkowitej i wypisuje je
True
lubFalse
odpowiednio.Wypróbuj online
Jak to działa
źródło
Perl 6 ,
928887 bajtówAnonimowa funkcja zwracająca Bool.
( spróbuj online )
EDYCJA: -1 bajt dzięki b2gills
źródło
2..i-1
jest lepiej napisany jako2..^i
.Java 7,
509506435426419230 bajtówPowinienem był wysłuchać komentarza @BasicallyAlanTuring .
Ach cóż ... Niektóre języki programowania używają jednego bajtu dla czynników pierwszych lub sprawdzania liczby pierwszych, ale Java z pewnością nie jest jednym z nich.
EDYCJA: Zmniejszono o połowę liczbę bajtów, kiedy miałem trochę czasu, aby o tym pomyśleć.
Niegolfowane (sortowanie ...) i przypadki testowe:
Wypróbuj tutaj.
Wydajność:
źródło
Brachylog (nowszy) , 11 bajtów
Wypróbuj online!
Predykat kończy się powodzeniem, jeśli dane wejściowe są liczbą Smitha, a porażki, jeśli nie są.
źródło
Japt ,
1411 bajtów-3 bajty dzięki @Shaggy
Wypróbuj online!
źródło
JavaScript (ES6),
87 8684 bajtówWypróbuj online!
źródło
Pyke, 16 bajtów
Wypróbuj tutaj!
źródło
2
Perl 6 , 80 bajtów
Wypróbuj online!
Anonimowy blok kodu, który przyjmuje liczbę całkowitą i zwraca wartość logiczną.
źródło
APL (Dyalog Extended) ,
3629 bajtów SBCSTa odpowiedź zawdzięcza swoją golfową monadę Extended
⍭
za zwracanie liczb pierwszych liczb, a to⊤
jest lepsze w konwersji bazowej niż w Unicode Dyalog.Edycja: -7 bajtów dzięki dzaima.
Wypróbuj online!
Wyjaśnienie
źródło
{2>⍵:0⋄(⊃=+/-⊃×2<≢)+⌿10⊤⍵,⍭⍵}
J ,
3130 bajtówWypróbuj online!
źródło
C (gcc) ,
139136 bajtówWypróbuj online!
-3 bajty dzięki pułapce cat
Wyjaśnienie:
źródło
t-h&&i==_
zamiastt-h?i==_:0
Rakieta 176 bajtów
Zwraca 1, jeśli prawda, i 0, jeśli fałsz:
Wersja szczegółowa:
źródło
Rdza - 143 bajty
pożyczone rozwiązanie Pythona przez @levitatinglion ... przynajmniej jest to krótsze niż Java ...
degolfed na play.rust-lang.org
źródło
APL (NARS), 33 znaki, 66 bajtów
„π⍵” zwraca współczynniki listy ⍵, zakładając, że wejście jest jedną dodatnią liczbą całkowitą> = 1; test:
źródło
C (gcc), 177 bajtów
Definiuje funkcję,
Q
która zwraca 0 dla liczb Smitha i niezerową dla liczb SmithaWypróbuj online!
Wyjaśnienie:
źródło
C # (interaktywny kompilator Visual C #) , 122 bajty
Wypróbuj online!
źródło