Ursprünglich die multiplikative digitale Wurzel
Herausforderung
Grundsätzlich tun, was der Titel sagt
Methode
Bei einer positiven Ganzzahl von 1 <= N <= 100000000 mit einer unserer Standardeingabemethoden multiplizieren Sie jede Ziffer miteinander und ignorieren Sie dabei Nullen.
Bsp .: Nehmen Sie eine Zahl, sagen Sie 361218402
:
3
*6
=18
18
*1
=18
18
*2
=36
36
*1
=36
36
*8
=288
288
*4
=1152
1152
*1
(Nullen ignorieren oder in Einsen verwandeln) =1152
1152
*2
=2304
Die Ausgabe für 361218402
ist2304
Testfälle
1 => 1 jede zweite Ziffer> 0 => sich selbst 10 => 1 20 => 2 100 => 1 999 => 729 21333 => 54 17801 => 56 4969279 => 244944 100000000 => 1
Standard-Schlupflöcher sind nicht zulässig, und dies ist Codegolf , so dass die kürzeste Anzahl an Bytes gewinnt!
Herzlichen Glückwunsch an Jo King , der mit seiner 70-Byte-Brain-Flak-Antwort das Kopfgeld erhalten hat !
code-golf
math
arithmetic
integer
FantaC
quelle
quelle
100000000000
schlage ich den Testfall vor99999999999 => 31381059609
, da er nicht in eine standardmäßige 32-Bit-Ganzzahl passt. Vielleicht ist es besser, die maximale Ausgabe auf ein 32-Bit-Maximum (2147483647) zu senken.Antworten:
Pyt , 3 Bytes
Erläuterung:
Probieren Sie es online!
quelle
Haskell , 27 Bytes
Probieren Sie es online!
Ungolfed mit UniHaskell und
-XUnicodeSyntax
Erläuterung
Ich beginne mit dem, was ich anfangs hatte:
Hierbei handelt es sich um einen punktfreien Ausdruck, der zu einer Funktion ausgewertet wird, die einen String (oder eine Liste von Zeichen) s (
"301"
) als Argument verwendet. Es bildetmax 1.read.pure
über s , im Wesentlichen jedes Zeichen unter i , es in eine Liste Injektion ((was ein String macht)["3", "0", "1"]
), dann ist es zu lesen, die die Zeichenfolge auswertet ([3, 0, 1]
) und schließlich die größere der Einnahme i und 1 ([3, 1, 1]
). Dann nimmt es dieproduct
aus der resultierenden Liste der ganzen Zahlen (3
).Ich habe es dann byteweise golfen mit:
Das funktioniert, weil
product
es äquivalent zu istfoldr (*) 1
. Anstatt zu mappen und zu falten, habe ich die beiden durch Falten kombiniert, wobei(*).max 1.read.pure
jede Ziffer ungleich Null genommen und mit dem Akkumulator multipliziert wird.quelle
Python 2 , 34 Bytes
Probieren Sie es online!
quelle
Gelee , 4 Bytes
Probieren Sie es online! oder sehen Sie sich die Testsuite an
Wie es funktioniert
quelle
R , 40 Bytes
Probieren Sie es online!
Da die Eingabe garantiert nicht mehr als 12 Stellen hat, sollte dies gut funktionieren. Berechnet die Ziffern als
x
(einschließlich führender Nullen), ersetzt dann die Nullen durch1
und berechnet das Produkt.quelle
C (gcc) , 39 Bytes
Muss ohne Optimierungen kompiliert werden (was ohnehin die Standardeinstellung für gcc ist).
Probieren Sie es online!
quelle
k=k;
Einfügenk
in das Rücksenderegister ist schlichtweg böse. Sie sollten wahrscheinlich hinzufügen, dass dies nur ohne Optimierungen auf möglicherweise nur x86 / x64 funktioniert. +1.O0
) ist die Standardeinstellung für gcc, sodass dieses Flag nicht explizit verwendet werden muss. Ich schätze, ich werde dem Post trotzdem eine Erwähnung hinzufügen.Brain-Flak ,
74,7270 Bytes-2 Dank an Nitrodon für den Vorschlag, die Negation der Zahl zu erhalten, damit Sie später nur noch inkrementieren und nicht dekrementieren müssen
Probieren Sie es online!
Es gibt möglicherweise einige Möglichkeiten, dies weiter zu
verbessern, z. B. dasWiederherstellen der Multiplikation, um zu vermeiden, dass die Summe mit 1 initialisiert werden muss.(-2 Bytes)Wie es funktioniert:
quelle
05AB1E , 4 Bytes
Probieren Sie es online!
Erläuterung
quelle
J ,
171413 Bytes-4 Bytes mit freundlicher Genehmigung von @GalenIvanov
Probieren Sie es online!
Wahrscheinlich kann man einiges verbessern. Edit: und so war es.
Erläuterung
&.
-under ist ein geschicktes Adverb, das das Verb auf der rechten Seite, dann das Verb auf der linken Seite und dann die Umkehrung des Verbs auf der rechten Seite anwendet . Auch das Zurückkonvertieren in Zahlen erfolgt technisch mit eval (".
-do).quelle
+0=]
um*#]
Online ausprobieren[:*/0-.~,.&.":
für 14 Bytes. Versuchen Sie es online(+-.@*)
, denke ich bin geneigt, hinzuzufügen. Ich hatte versucht,'0'-.~
die Eingabe eines Strings anzunehmen, nicht sicher, warum es mir nicht in den Sinn kam, dies mit den aufgeteilten Ziffern zu tun. Vielen Dank!1>.
erledigt die Aufgabe0-.~
für ein Byte weniger.[:*/1>.,.&.":
Versuch es!Python 2 , 43 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6), 28 Byte
Entwickelt für 32-Bit-Ganzzahlen.
Testfälle
Code-Snippet anzeigen
quelle
Bash + Coreutils + Sed + BC,
272423 BytesProbieren Sie es online!
quelle
Brachylog , 5 Bytes
Probieren Sie es online!
Erläuterung
Dies funktioniert, weil
⊇
von großen Teilmengen zu kleinen Teilmengen vereinheitlicht wird. Das erste, was zu einem Produkt ungleich Null führt, ist, wenn alle Nullen ausgeschlossen sind und sonst nichts.quelle
Perl 5 , 23 + 1 (
-p
) = 24 BytesProbieren Sie es online!
quelle
Java 8,
55545351 BytesPort von @Dennis 'Python 2 Antwort .
-1 Byte dank @RiaD .
Probieren Sie es hier aus.
5554 Bytes Version:Probieren Sie es online aus.
quelle
long f(long n){return n>0?(n%10>0?n%10:1)*f(n/10):1;}
Julia 0,6, 26 Bytes
Anwendungsbeispiel:
Probieren Sie es online!
quelle
JavaScript (Node.js) , 30 Byte
Probieren Sie es online!
Nimmt einen String als Eingabe, behandelt ihn als Array und trennt durch Array-Destrukturierung das erste Element
[a,...b]
.+a||1
Gibt die dema
Zeichen entsprechende Ziffer zurück . Ich denke, dass der Rest selbsterklärend ist ..quelle
Oktave , 21 Bytes
Danke an @Luis Mendo für das Speichern eines Bytes und danke an @alephalpha für das Speichern eines weiteren Bytes!
Übernimmt die Eingabe als Ziffernfolge.
Probieren Sie es online!
30 Bytes:
Nimmt die Eingabe als Zahl an.
Probieren Sie es online!
quelle
@(n)prod((k=n-48)+~k)
Gehirn-Flak , 88 Bytes
Lesbare Version:
Probieren Sie es online!
quelle
Clojure , 56 Bytes
Ziemlich einfach. Wandelt die Zahl in eine Zeichenfolge um und subtrahiert dann 48 von jedem Zeichen, um sie wieder in Zahlen umzuwandeln. Es ersetzt dann jede 0 durch eine 1 und gilt
*
für die sich ergebende Liste von Zahlen (die sich verringert)*
über der Liste ). Kann eine Zahl oder eine fortlaufende Zahl akzeptieren.Probieren Sie es online!
quelle
MATL , 5 Bytes
Die Eingabe wird als Zeichenfolge verwendet
Probieren Sie es bei MATL Online! Oder verifizieren Sie Testfälle in Try It Online!
Erläuterung
quelle
Befunge,
2322 BytesProbieren Sie es online!
Erläuterung
quelle
JavaScript (Node.js) ,
3633 BytesEinfache Javascript (ES6) -Methode, die Eingaben als Zahlenzeichenfolge verwendet, sie in ein Array aufteilt und dann durch Multiplikation reduziert oder den Wert zurückgibt, wenn das Ergebnis 0 ist.
3 Bytes gespart dank Shaggy
Probieren Sie es online!
quelle
Ruby,
4240353227 BytesSetzt keine Zeilenumbrüche in der Eingabe voraus Einfluss
-2 Bytes dank @GolfWolf
-5 Bytes dank @Conor O'Brien
quelle
tr
: 32 Bytes*
mitmachen?p eval (gets.chars-[?0])*?*
?Java (OpenJDK 8) , 45 Byte
Probieren Sie es online!
quelle
C # , 97 Bytes (erster Code Golf)
Ich bin mir nicht sicher, ob ich es in eine Methode einwickeln musste oder nicht, nur um sicher zu gehen.
Nimmt ein Int auf, konvertiert es in einen String und gibt das Vielfache jedes Zeichens zurück, wobei die Nullen ignoriert werden. Musste minus 48, weil das Programm den ASCII-Wert als Zeichen liest.
quelle
var z=y.ToString();
und direkt in das platzierenforeach
, wie soforeach(var q in y.ToString())
:; und um das Ergebnis zu erhalten , können Sie mehr Bytes sparen durch Ersetzen{if(q!=48){r*=q-48;}}
mitr*=(q>48?q:1);
, Rasieren aus den Halterungen und demif
.C # (Visual C # Interactive Compiler) , 46 Byte
Probieren Sie es online!
quelle
Haskell , 36 Bytes
Gleiche Byteanzahl:
Probieren Sie es online!
quelle
Jelly ,
6, 5 BytesProbieren Sie es online!
quelle
DTịDP
würde ein Byte speichern, aber es gibt bessere Möglichkeiten, Nullen zu entfernen oder durch etwas anderes zu ersetzen.> <> , 19 Bytes
Probieren Sie es online!
quelle