Pierwotnie multiplikatywny cyfrowy root
Wyzwanie
Zasadniczo rób to, co mówi tytuł
metoda
Biorąc pod uwagę dodatnią liczbę całkowitą 1 <= N <= 100000000 jedną z naszych standardowych metod wprowadzania , pomnóż każdą cyfrę razem, ignorując zera.
Np .: Weź numer, powiedz 361218402
:
3
*6
=18
18
*1
=18
18
*2
=36
36
*1
=36
36
*8
=288
288
*4
=1152
1152
*1
(zignoruj zera lub zamień je na jedynki) =1152
1152
*2
=2304
Dane wyjściowe dla 361218402
to2304
Przypadki testowe
1 => 1 każda inna cyfra> 0 => sama 10 => 1 20 => 2 100 => 1 999 => 729 21333 => 54 17801 => 56 4969279 => 244944 100000000 => 1
Standardowe luki są niedozwolone, a to jest golf golfowy , więc wygrywa najkrótsza liczba bajtów!
Gratulacje dla Jo Kinga, który otrzymał nagrodę za swoją 70-bajtową odpowiedź na atak mózgu!
code-golf
math
arithmetic
integer
FantaC
źródło
źródło
100000000000
, sugeruję przypadek testowy99999999999 => 31381059609
, ponieważ nie mieści się on w domyślnej 32-bitowej liczbie całkowitej. Być może lepiej byłoby obniżyć maksymalną moc wyjściową do 32-bitowej wartości maksymalnej (2147483647).Odpowiedzi:
Pyt , 3 bajty
Wyjaśnienie:
Wypróbuj online!
źródło
Haskell , 27 bajtów
Wypróbuj online!
Niegolfowany z UniHaskell i
-XUnicodeSyntax
Wyjaśnienie
Zacznę od tego, co początkowo miałem:
Jest to wyrażenie bez punktów, które zwraca wartość do funkcji, która przyjmuje argument (lub listę znaków) s (
"301"
) jako argument. Mapujemax 1.read.pure
na s zasadniczo przy każdej postaci I , wstrzykując go do listy (co sprawia, że łańcuch) (["3", "0", "1"]
), a następnie czyta je, który ocenia ciąg ([3, 0, 1]
) i wreszcie przy większej z I i 1 ([3, 1, 1]
). Następnie pobieraproduct
wynikową listę liczb całkowitych (3
).Następnie grałem w golfa bajtem z:
Działa
product
to, ponieważ jest równoważne zfoldr (*) 1
. Zamiast mapować i składać, połączyłem te dwa, składając, z(*).max 1.read.pure
którymi każda niezerowa cyfra pobiera i mnoży ją przez akumulator.źródło
Python 2 , 34 bajty
Wypróbuj online!
źródło
Galaretka , 4 bajty
Wypróbuj online! lub zobacz pakiet testowy
Jak to działa
źródło
R , 40 bajtów
Wypróbuj online!
Ponieważ dane wejściowe mają nie więcej niż 12 cyfr, powinno to działać dobrze. Oblicza cyfry jako
x
(łącznie z zerami wiodącymi), a następnie zastępuje zera1
i oblicza produkt.źródło
C (gcc) , 39 bajtów
Musi zostać skompilowany bez optymalizacji (co zresztą jest domyślnym ustawieniem gcc).
Wypróbuj online!
źródło
k=k;
umieszczeniek
w rejestrze powrotnej przypadkowo jest po prostu zła. Powinieneś chyba dodać, że działa to tylko bez optymalizacji na prawdopodobnie tylko x86 / x64. +1.O0
) jest domyślną opcją gcc, więc nie ma potrzeby jawnego używania tej flagi. W każdym razie dodam wzmiankę o tym w poście.Brain-Flak ,
747270 bajtów-2 dzięki Nitrodonowi za zasugerowanie uzyskania negacji liczby, abyś musiał tylko zwiększać, a nie zmniejszać później
Wypróbuj online!
Może istnieć kilka sposobów gry w golfa, takich jak
powtórzenie mnożenia, aby uniknąć konieczności inicjalizacji sumy z wartością 1.(-2 bajty)Jak to działa:
źródło
05AB1E , 4 bajty
Wypróbuj online!
Wyjaśnienie
źródło
J ,
171413 bajtów-4 bajty dzięki uprzejmości @GalenIvanov
Wypróbuj online!
Prawdopodobnie można to poprawić. Edycja: i tak było.
Wyjaśnienie
&.
-under to fajny przysłówek, który stosuje czasownik po prawej stronie, następnie czasownik po lewej stronie, a następnie odwrotność czasownika po prawej stronie. Również konwersja z powrotem na liczby jest technicznie za pomocą eval (".
-do).źródło
+0=]
aby*#]
Spróbuj go w Internecie[:*/0-.~,.&.":
przez 14 bajtów. Wypróbuj online(+-.@*)
, myślę, że jestem skłonny dodać. Próbowałem użyć'0'-.~
założenia ciąg znaków, nie jestem pewien, dlaczego nie przyszło mi do głowy, aby zrobić to na podzielonych cyfrach. Dzięki!1>.
wykonuje0-.~
mniej bajtów.[:*/1>.,.&.":
Spróbuj!Python 2 , 43 bajty
Wypróbuj online!
źródło
JavaScript (ES6), 28 bajtów
Zaprojektowany dla 32-bitowych liczb całkowitych.
Przypadki testowe
Pokaż fragment kodu
źródło
Bash + coreutils + sed + bc,
272423 bajtówWypróbuj online!
źródło
Brachylog , 5 bajtów
Wypróbuj online!
Wyjaśnienie
Działa to, ponieważ
⊇
łączy duże podzbiory z małymi podzbiorami, więc pierwszym, który spowoduje powstanie niezerowego produktu, jest wykluczenie wszystkich zer i nic więcej.źródło
Perl 5 , 23 + 1 (
-p
) = 24 bajtyWypróbuj online!
źródło
Java 8,
55545351 bajtówPort odpowiedzi @Dennis na Python 2 .
-1 bajt dzięki @RiaD .
Wypróbuj tutaj.
5554 bajtów wersja:Wypróbuj online.
źródło
long f(long n){return n>0?(n%10>0?n%10:1)*f(n/10):1;}
Julia 0.6, 26 bajtów
Przykład zastosowania:
Wypróbuj online!
źródło
JavaScript (Node.js) , 30 bajtów
Wypróbuj online!
Pobiera ciąg znaków jako dane wejściowe, traktuje go jako tablicę, a poprzez destrukcję tablicy oddziela pierwszy element
[a,...b]
.+a||1
zwraca cyfrę odpowiadającąa
znakowi. Wydaje mi się, że odpoczynek wyjaśnia się sam…źródło
Oktawa , 21 bajtów
Dzięki @Luis Mendo za uratowanie bajtu i dzięki @alephalpha za uratowanie kolejnego bajtu!
Pobiera dane wejściowe jako ciąg cyfr.
Wypróbuj online!
30 bajtów:
Pobiera dane wejściowe jako liczbę.
Wypróbuj online!
źródło
@(n)prod((k=n-48)+~k)
Brain-Flak , 88 bajtów
Wersja do odczytu:
Wypróbuj online!
źródło
Clojure , 56 bajtów
Całkiem proste. Zamienia liczbę na ciąg znaków, a następnie odejmuje 48 od każdego znaku, aby przekształcić je z powrotem w liczby. Następnie zamienia każde 0 na 1 i stosuje
*
się do wynikowej listy liczb (która zmniejsza się*
nad listą). Może zaakceptować numer lub numer strunowy.Wypróbuj online!
źródło
MATL , 5 bajtów
Dane wejściowe są traktowane jako ciąg
Wypróbuj w MATL Online! Lub sprawdź przypadki testowe w Try It Online!
Wyjaśnienie
źródło
Befunge,
2322 bajtówWypróbuj online!
Wyjaśnienie
źródło
JavaScript (Node.js) ,
3633 bajtówProsta metoda Javascript (ES6), która pobiera dane wejściowe jako ciąg liczbowy, rozkłada je na tablicę, a następnie zmniejsza przez mnożenie lub zwraca wartość, jeśli wynikiem jest 0.
3 bajty zapisane dzięki Shaggy
Wypróbuj online!
źródło
Rubinowy,
4240353227 bajtówZakłada brak wprowadzania nowych linii Znaczący wpływ
-2 bajty dzięki @GolfWolf
-5 bajtów dzięki @Conor O'Brien
źródło
tr
: 32 bajty*
aby dołączyć?p eval (gets.chars-[?0])*?*
?Java (OpenJDK 8) , 45 bajtów
Wypróbuj online!
źródło
C # , 97 bajtów (pierwszy kod golfa)
Nie jestem pewien, czy musiałem zawinąć to w metodę, czy nie, więc po prostu umieściłem ją dla bezpieczeństwa.
Pobiera Int, konwertuje go na ciąg znaków i zwraca wielokrotność każdego z znaków ignorując 0. Musiał minus 48 ze względu na to, że program używa wartości ascii, ponieważ odczytuje ją jako znak.
źródło
var z=y.ToString();
i umieścić go bezpośrednio wforeach
, tak:foreach(var q in y.ToString())
; i aby uzyskać wynik, możesz zaoszczędzić więcej bajtów, zastępując{if(q!=48){r*=q-48;}}
jer*=(q>48?q:1);
, goląc nawiasy iif
.C # (interaktywny kompilator Visual C #) , 46 bajtów
Wypróbuj online!
źródło
Haskell , 36 bajtów
Ta sama liczba bajtów:
Wypróbuj online!
źródło
Galaretka ,
6, 5 bajtówWypróbuj online!
źródło
DTịDP
zaoszczędziłby bajt, ale są lepsze sposoby na usunięcie zer lub zastąpienie ich czymś innym.> <> , 19 bajtów
Wypróbuj online!
źródło