var QUESTION_ID=151130,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/151130/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
Antworten:
Gelee , 7 Bytes
Probieren Sie es online!
Verwendet Faltung (die ich zu Jelly beigetragen habe: D)
Wie es funktioniert
quelle
<⁵Ạ
für die Ausgabe ersetzen, ohne dass ein Boolescher Wert für NOT ausgeführt wird.JavaScript (ES6), 67 Byte
Nimmt Eingaben als 2 Zeichenfolgen in der Currying-Syntax an
(a)(b)
. Rückgabefalse
einfach odertrue
nicht einfach.Testfälle
Code-Snippet anzeigen
Alt. version (fehlerhaft),
645552 bytesDurch die Verwendung von Zeichenfolgen wurden 3 Bytes gespart, wie von @Shaggy vorgeschlagen.
Wie von @LeakyNun hervorgehoben, schlägt diese Methode bei einigen großen spezifischen Ganzzahlen fehl
Nimmt Eingaben als 2 Zeichenfolgen in der Currying-Syntax an
(a)(b)
. Rückgabetrue
einfach oderfalse
nicht einfach.Testfälle
Code-Snippet anzeigen
Wie?
Die Idee hier ist, Überträge durch Einfügen von Nullen vor jeder Ziffer jedes Faktors explizit freizulegen.
Beispiele:
331 x 1021 wird zu 30301 x 1000201 , was 30307090501 anstelle von 337951 ergibt . Durch Hinzufügen einer führenden Null zum Ergebnis und Gruppieren aller Ziffern nach 2 kann dies als 03 03 07 09 05 01 geschrieben werden . Alle Gruppen sind kleiner als 10 , was bedeutet, dass die Standardmultiplikation keinen Übertrag enthält.
431 x 1021 wird zu 40301 x 1000201 , was 40309100501 ergibt und als 04 03 09 10 05 01 geschrieben werden kann . Diesmal haben wir eine 10, die einen Übertrag in der Standardmultiplikation aufdeckt.
quelle
108
in der Mitte Ihren Algorithmus durcheinanderbringt )Alice , 30 Bytes
Probieren Sie es online!
Ausgänge
1
für einfach und0
für schwer.Die Zahlen lassen sich nur dann leicht multiplizieren, wenn die Ziffernsumme des Produkts mit dem Produkt der Ziffernsummen übereinstimmt.
quelle
MATL , 10 Bytes
Ausgänge
0
für leicht,1
für schwer.Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
quelle
R ,
13511010986 BytesProbieren Sie es online!
Übernimmt die Eingabe als Zeichenfolge.Es ist hässlich, aber es funktioniert ™.Dies verwendet nun einen Faltungsansatz, wie in der Antwort von Leaky Nun , also werden Eingaben als ganze Zahlen verwendet und es werden
TRUE
hart zu multiplizierende undFALSE
leicht zu multiplizierende Zahlen zurückgegeben .Ich hatte in der Vergangenheit immer Probleme, Faltungsansätze zu portieren, aber heute habe ich endlich die Dokumentation gelesen :
Welches ist nur albern. Daher wird die Ziffernextraktion für umgekehrt
n
und in eine Portierung von Leaky Nuns Antwort aufgelöst.quelle
Python 2 , 88 Bytes
Nimmt zwei Ganzzahlen als Eingabe und gibt
False
(einfach zu multiplizieren) oderTrue
(nicht) zurück.Probieren Sie es online! (zu langsam für einen der Testfälle)
quelle
len(`n+m`)
würde eigentlich für 40, 30 scheitern .len(`n+m`)+1
?len(`n`+`m`)
sollte aber tun.JavaScript (Node.js) ,
43413736 ByteVielen Dank an @ Dennis für die Idee, in dieser Antwort String-Interpolation zu verwenden und 4 Bytes zu sparen!
Danke @ ØrjanJohansen für -1!
Probieren Sie es online!
Wenn die Zielbasis kleiner als die ursprüngliche Basis ist (wie in meiner Gelee-Antwort, die Basis ist 2),
<
muss natürlich gewendet werden.quelle
Wolfram Language (Mathematica) ,
75666556 BytesProbieren Sie es online!
Empfangen von 2 String-Eingaben
Erläuterung:
-9 zum Ändern der Zeichenfolge als Eingabe
-1 für die Verwendung des Infix-Operators
-9 Danke @MartinEnder für die
Max
Funktionquelle
Python 2 ,
158135123113 Bytes-12 Bytes dank Leaky Nun -10 Bytes dank Ovs
Probieren Sie es online! oder Probieren Sie alle Testfälle aus
quelle
all(d[k]<10for k in d)
oder ist es nur Python 3?Julia 0,6 , 30 Bytes
Probieren Sie es online!
Die Eingabe ist ein Tupel von Zahlen, die Ausgabe ist
true
für schwer zu multiplizierende undfalse
für einfache Zahlen ..
ist eine elementweise Funktionsanwendung....
Erweitert das Tupel (von Listen mit ganzzahligen Ziffern) auf zwei separate Eingänge derconv
Funktion.quelle
Python 3 ,
5835 134039 BytesSieht so aus, als hätte ich diese Idee zwei Stunden zu spät gehabt .
Vielen Dank an @ ØrjanJohansen für das Golfen ab 1 Byte!
Probieren Sie es online!
quelle
SNOBOL4 (CSNOBOL4) ,
268264247246243131 BytesProbieren Sie es online!
Portiert den Ansatz von Nitrodon . Ich denke, dies ist das erste Mal, dass ich in SNOBOL eine Funktion
D
für die Ziffernsumme definiert habe .alte Version, 243 Bytes:
Probieren Sie es online!
Eingabe in STDIN, durch Zeilenumbrüche getrennt, Ausgabe in STDOUT: eine einzelne Zeile zum einfachen Multiplizieren und keine Ausgabe zum nicht einfachen Multiplizieren.
Dies wird keine Preise gewinnen, aber es präsentiert einen anderen Ansatz (nun, das ist wirklich der naive Ansatz). Ich glaube nicht, dass ich das in Cubix schreiben könnte, aber SNOBOL ist hart genug, um damit zu arbeiten.
Da die Eingabe als Zeichenfolge verwendet wird, funktioniert dies für jede Eingabe mit jeweils weniger als 512 Stellen. Ich bin mir nicht 100% sicher, wie großARRAY
s in SNOBOL sein kann.INPUT wird in dieser Version von SNOBOL mit einer maximalen Breite von 1024 Zeichen gepuffert. Alle anderen Zeichen gehen dann verloren. Es scheint, dass ein ARRAY ziemlich groß sein kann; weit über die 2048 Zellen notwendig.
quelle
Kohle , 38 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Gibt ein aus,
-
wenn die Zahlen leicht zu multiplizieren sind. Erläuterung:Initialisieren Sie
z
auf ein ausreichend großes Array (Summe der Längen der Eingaben) von Nullen.Durchlaufen Sie die Indizes der Eingänge
q
undh
.Führen Sie einen Schritt der langen Multiplikation durch.
Auf Tragekomfort prüfen.
quelle
Pari / GP , 52 Bytes
Probieren Sie es online!
quelle
Haskell,
8281 BytesDie Zahlen werden als Zeichenfolgen verwendet. Gibt zurück,
False
ob die Zahlen leicht zu multiplizieren sind oderTrue
nicht.Probieren Sie es online!
Ich denke, es unterscheidet sich genug von der Antwort von @ Laikoni . Wie es funktioniert:
quelle
Haskell ,
4544 BytesBearbeiten:
==
zu<
.Ich dachte darüber nach, bevor ich mir die anderen Antworten ansah, und stellte dann fest, dass die Alice dieselbe Grundidee verwendete. Poste trotzdem, da es kürzer ist als die anderen Antworten von Haskell.
?
Nimmt zwei ganze Zahlen und gibt a zurückBool
. Verwenden Sie als331?1021
.False
bedeutet, dass die Multiplikation einfach ist.Probieren Sie es online!
s
ist eine Funktion, die die Summe der Ziffern einer ganzen Zahl berechnet. (read.pure
Konvertiert ein einstelliges Zeichen in eine Ganzzahl.)quelle
Ruby , 69 Bytes
Probieren Sie es online!
quelle
Haskell , 123 Bytes
Probieren Sie es online! Anwendungsbeispiel:
"331" % "1021"
ErträgeTrue
.quelle
Perl 5 , 100 + 2 (
-F
) = 102 BytesProbieren Sie es online!
Ausgaben falsch für leicht, wahr für nicht leicht.
quelle
Gelee , 8 Bytes
Probieren Sie es online!
Ein Port meiner Javascript- Antwort . Nicht kürzer als die bestehende Gelee- Antwort da Jelly eine leistungsstarke Faltung enthält.
Nehmen Sie die Eingabe als Liste mit zwei Zahlen. Rückgabe
1
einfach,0
nicht einfach.Erläuterung:
quelle
C (gcc) , 104 Bytes
Im Grunde genommen multiplizieren Sie "von Hand" r [] und setzen Sie den Rückgabewert, wenn eine Spalte höher als 9 wird, da dies bedeuten würde, dass ein Übertrag stattgefunden hat.
Überraschenderweise war dies kürzer als mein erster Versuch, bei dem Zeichenfolgen als Argumente herangezogen wurden.
Probieren Sie es online!
quelle