To jest moje pierwsze wyzwanie!
tło
Liczba idealna to dodatnia liczba całkowita, która jest równa sumie wszystkich jej dzielników, z wyjątkiem siebie.
Od tego czasu 6
jest to idealna liczba 1 + 2 + 3 = 6
.
Z drugiej strony 12
nie jest, ponieważ 1 + 2 + 3 + 4 + 6 = 16 != 12
.
Zadanie
Twoje zadanie jest proste: napisz program, który n
wydrukuje jeden z następujących komunikatów:
Jestem idealną liczbą, ponieważ
d1 + d2 + ... + dm = s == n
nie jestem idealną liczbą, ponieważd1 + d2 + ... + dm = s [<>] n
Gdzie
d1, ... dm
są wszystkie dzielniki z n
wyjątkiem n
.
s
jest sumą wszystkich dzielników d1, ..., dm
(znowu bez n
).
[<>]
jest albo <
(jeśli s < n
) albo >
(jeśli s > n
).
Przykłady
Za n
bycie 6
: „Jestem liczbą idealną, ponieważ 1 + 2 + 3 = 6 == 6”
Za n
bycie 12
: „Nie jestem liczbą idealną, ponieważ 1 + 2 + 3 + 4 + 6 = 16> 12”
Za n
bycie 13
: „Nie jestem liczbą idealną, ponieważ 1 = 1 <13”
Zasady
n
nie jest większy niż standard twojego językaint
.- Możesz czytać
n
ze standardowego wejścia, z argumentów wiersza poleceń lub z pliku. - Komunikat wyjściowy musi być wydrukowany na standardowym wyjściu i na wydruku nie mogą pojawiać się żadne dodatkowe znaki (może mieć końcowe białe znaki lub nowy wiersz)
- Nie możesz używać żadnych wbudowanych funkcji bibliotecznych, które rozwiązałyby zadanie (lub jego główną część). Nie
GetDivisors()
lub coś takiego. - Obowiązują wszystkie inne standardowe luki .
Zwycięzca
To jest golf golfowy, więc wygrywa najkrótszy kod w bajtach !
źródło
=
i==
w tym samym równaniu? To nie ma sensu. Powinien to byćd1 + d2 + ... + dm = s = n
IMO.Odpowiedzi:
Pyth, 81 bajtów
Wypróbuj online: pakiet demonstracyjny lub testowy
Wyjaśnienie:
źródło
Java,
255270 bajtów (nadal FF w bazie 17)I bardziej czytelna wersja:
Wcześniej nie działałem dla liczb nieparzystych, więc musiałem poprawić kilka rzeczy. Przynajmniej znów miałem szczęście z liczbą bajtów. :)
źródło
R,
158163157153143141 141 bajtówMyślę, że wciąż jest miejsce na golfa.
Edit: Wymieniłem
if(b<n)'<'else if(b>n)'>'else'=='
zc('<'[b<n],'>'[b>n],'=='[b==n])
.paste(...)
Jest zastąpionyrbind(...)[-1]
. Dzięki @plannapus za jeszcze kilka bajtów.Nie golfił
Testowe uruchomienie
źródło
+
Pomiędzy dzielnikami powinno być logowanie.rbind
sztuczkę! Możesz zapisać 2 dodatkowe bajty, jeśli przypiszesz2:n-1
do zmiennej, powiedza
: wwhich(!n%%1:(n-1))
ten sposób staje sięa[!n%%a]
. (Pełny kod jest wtedyn=scan();a=2:n-1;b=sum(w<-a[!n%%a]);cat('I am','not'[b!=n],'a perfect number, because',rbind('+',w)[-1],'=',b,c('<'[b<n],'>'[b>n],'==')[1],n)
)Python 2,
183173170 bajtówPrzykłady:
Dzięki xnor za zaoszczędzenie 13 bajtów!
źródło
'=<>'[cmp(b,d)]
- Dołącz do rewolucji!b%i<1
nab%i==0
. Na['not ',''][int(d==b)]
, nie potrzebneint
, ponieważ Python będzie automatycznie konwertować. Co więcej, możesz użyć mulitplication ciągów"not "*(d!=b)
."=<>="[cmp(b,d)%3::3]
.Julia,
161157 bajtówNie golfowany:
źródło
CJam, 90 bajtów
Dla porównania wydruk pojedynczego dokumentu
=
można osiągnąć w 83 bajtach.Wypróbuj online w interpretatorze CJam .
Jak to działa
źródło
Perl, 148 bajtów
Z podziałami linii:
źródło
'not '
i'==','>','<'
sprawozdania i przełączania z.
do,
(ponieważ nic nie jest dodawane podczasprint
ing listę). Przeniesienie zadań na pareny za pierwszym razem pozwala zaoszczędzić parę, a jeśli zmienisz nieco logikę nagrep$a%_<1,1..($a=<>)-1
i$a!=($s=eval)&&'not '
powinieneś ogolić jeszcze kilka! Mam nadzieję, że to wszystko ma sens!Lua,
244231 bajtówGra w golfa:
Nie golfowany:
źródło
JavaScript (ES6), 146
Korzystając z ciągów szablonów, działa w przeglądarce Firefox i najnowszym Chrome.
źródło
Rubinowy,
174160155136134128122 bajtówZapisano kolejne 6 bajtów :)
Dzięki Wskazówki dotyczące gry w golfa w Ruby
źródło
C #, 252 bajtów
źródło
Wapń , 285 bajtów
Oświadczenie: Działa tylko z najnowszą wersją Hcium z powodu problemów z argumentami wiersza poleceń.
Bardziej czytelna wersja:
}
źródło
mono src/Hassium/bin/Debug/Hassium.exe t.hs 6
, to mówiSystem.ArgumentException: The file 6 does not exist.
. 2. To nie działa z tą wersją , która jest ostatnim zatwierdzeniem przed opublikowaniem tego wyzwania. Dodaj do swojego oświadczenia, że oświadczenie jest niezgodne z prawdą.@Dennis
do swojego komentarza. W przeciwnym razie nie otrzymam powiadomienia o twojej odpowiedzi.)MATLAB, 238
Nigdy nie będę najkrótszym ze wszystkich języków, ale oto moja próba z MATLAB:
A to w nieco bardziej czytelnej formie:
Udało mi się zaoszczędzić jeszcze 2 bajty, nie używając funkcji. Zamiast tego uruchamiasz wiersz kodu i żąda on liczby jako danych wejściowych. Po uruchomieniu wyświetla wynik na końcu.
źródło
Perl 6 , 138 bajtów
(Liczba ignoruje nowe wiersze i wcięcia, ponieważ nie są potrzebne)
@d
to tablica zawierająca dzielniki.$s
zawiera sumę dzielników.$c
jest wartością porównania między danymi wejściowymi i sumą dzielników.(W praktyce
$c
jest jednym z-1
,0
,1
, ale jest naprawdę jedenOrder::Less
,Order::Same
lubOrder::More
)W
'not 'x?$c
,?$c
w tym przypadku faktycznie jest taka sama, jakabs $c
ix
jest operatorem ciąg powtórzenie.«> == <»
jest skrótem od( '>', '==', '<' )
.Ponieważ
$c
ma jeden z nich-1,0,1
, musimy go przesunąć w górę o jeden, aby móc go użyć do indeksowania listy.Technicznie będzie to działać dla liczb znacznie powyżej 2⁶⁴, ale zajmuje nadmiernie dużo czasu dla liczb powyżej 2¹⁶.
źródło
Pyth, 84 bajtów
Niepoprawna odpowiedź, ponieważ odmawiam implementacji
=
i==
w tym samym równaniu.źródło
Ruby, 164 bajtów
Test
źródło
Emacs Lisp, 302 bajtów
Wersja bez golfa:
źródło
PowerShell, 164 bajty
Kilka popularnych i nie tak powszechnych sztuczek PoSh;
źródło
awk, 150
Zmarnowałem trochę bajtów, czyniąc to poprawnym do wprowadzania
1
. Nie jestem pewien, czy jest to oczekiwane.źródło
05AB1E , 58 bajtów
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
Zobacz moją wskazówkę 05AB1E (rozdział Jak korzystać ze słownika? ), Aby zrozumieć, dlaczego
„I€Ü
jest"I am"
,'€–
jest"not"
i“€…íÀ‚³,ƒ«“
jest"a perfect number, because"
.źródło