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>
Odpowiedzi:
Galaretka , 7 bajtów
Wypróbuj online!
Wykorzystuje splot (który przyczyniłem się do Jelly: D)
Jak to działa
źródło
<⁵Ạ
na dane wyjściowe bez wartości boolowskiej NIE na nim wykonanej.JavaScript (ES6), 67 bajtów
Pobiera dane wejściowe jako 2 ciągi w składni curry
(a)(b)
. Zwracafalse
na łatwe lubtrue
niełatwe.Przypadki testowe
Pokaż fragment kodu
Alt. wersja (wadliwa),
645552 bajtówZapisano 3 bajty, biorąc ciągi znaków, jak sugeruje @Shaggy
Jak wskazał @LeakyNun, ta metoda zawiodłaby na niektórych dużych liczbach całkowitych
Pobiera dane wejściowe jako 2 ciągi w składni curry
(a)(b)
. Zwracatrue
na łatwe lubfalse
niełatwe.Przypadki testowe
Pokaż fragment kodu
W jaki sposób?
Chodzi tutaj o jawne ujawnienie przeniesień poprzez wstawienie zer przed każdą cyfrą każdego czynnika.
Przykłady:
331 x 1021 staje się 30301 x 1000201 , co daje 30307090501 zamiast 337951 . Dodając wiodące zero do wyniku i grupując wszystkie cyfry według 2, można to zapisać jako 03 03 07 09 05 01 . Wszystkie grupy mają mniej niż 10 , co oznacza, że nie byłoby żadnego przeniesienia w standardowym pomnożeniu.
431 x 1021 staje się 40301 x 1000201 , co daje 40309100501 i może być zapisane jako 04 03 09 10 05 01 . Tym razem mamy 10, która ujawnia przeniesienie w standardowym pomnożeniu.
źródło
108
twój algorytm)Alice , 30 bajtów
Wypróbuj online!
Wyjścia są
1
łatwe i0
trudne.Liczby można łatwo pomnożyć tylko wtedy, gdy suma cyfr iloczynu jest równa iloczynowi sum cyfr.
źródło
MATL , 10 bajtów
Wyjścia
0
na łatwe,1
na trudne.Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
R ,
13511010986 bajtówWypróbuj online!
Pobiera dane wejściowe jako ciągi znaków.Jest brzydki, ale działa ™.To teraz wykorzystuje podejście splotowe, jak w odpowiedzi Leaky Nun , więc przyjmuje dane wejściowe jako liczby całkowite i zwraca wartości
TRUE
trudne do pomnożenia i liczbyFALSE
łatwe do pomnożenia.W przeszłości zawsze miałem problemy z przenoszeniem podejść do splotu, ale dziś w końcu przeczytałem dokumentację :
Co jest po prostu głupie. Więc wyodrębnianie cyfr jest odwrócone
n
i przekształca się w port odpowiedzi Dziurawej Zakonnicy.źródło
Python 2 , 88 bajtów
Pobiera na wejściu dwie liczby całkowite i zwraca
False
(łatwe do pomnożenia) lubTrue
(nie).Wypróbuj online! (zbyt wolny dla jednego z przypadków testowych)
źródło
len(`n+m`)
w rzeczywistości wypadłby dla 40, 30 .len(`n+m`)+1
?len(`n`+`m`)
powinien zrobić.JavaScript (Node.js) ,
43413736 bajtówDzięki @ Dennis za pomysł użycia interpolacji łańcuchów w tej odpowiedzi i zaoszczędzić 4 bajty!
Dzięki @ ØrjanJohansen za -1!
Wypróbuj online!
Oczywiście, gdy baza docelowa jest mniejsza niż oryginalna baza (jak w mojej odpowiedzi Jelly, podstawa to 2),
<
należy ją odwrócić.źródło
Wolfram Language (Mathematica) ,
75666556 bajtówWypróbuj online!
Odbieranie 2 ciągów wejściowych
Wyjaśnienie:
-9 do zmiany na użycie łańcucha jako danych wejściowych
-1 do używania operatora infix
-9 Dzięki @MartinEnder za
Max
funkcjęźródło
Python 2 ,
158135123113 bajtów-12 bajtów dzięki Leaky Nun. -10 bajtów dzięki ovs
Wypróbuj online! lub Wypróbuj wszystkie przypadki testowe
źródło
all(d[k]<10for k in d)
działa, czy jest to po prostu Python 3?Julia 0.6 , 30 bajtów
Wypróbuj online!
Dane wejściowe to krotka liczb, dane wyjściowe
true
służą do mnożenia liczb trudnych ifalse
łatwych..
jest aplikacją funkcji elementarnych....
rozszerza krotkę (list liczb całkowitych) do dwóch osobnych wejśćconv
funkcji.źródło
Python 3 ,
5835 134039 bajtówWygląda na to, że wpadłem na ten pomysł dwie godziny za późno .
Dzięki @ ØrjanJohansen za grę w golfa na 1 bajcie!
Wypróbuj online!
źródło
SNOBOL4 (CSNOBOL4) ,
268264247246243131 bajtówWypróbuj online!
Przenosi podejście Nitrodona . Myślę, że po raz pierwszy zdefiniowałem funkcję w SNOBOL,
D
dla sumy cyfr.stara wersja, 243 bajty:
Wypróbuj online!
Wejście na STDIN oddzielone znakami nowej linii, wyjście na STDOUT: pojedynczy znak nowej linii dla łatwego pomnożenia i brak wyjścia na trudny do pomnożenia.
To nie zdobędzie żadnych nagród, ale przedstawia inne podejście (cóż, tak naprawdę jest to naiwne podejście). Nie sądzę, bym mógł napisać to w cubix, ale SNOBOL jest wystarczająco twardy, aby z nim pracować.
Ponieważ pobiera dane wejściowe jako ciąg znaków, będzie to działać dla każdego wejścia zawierającego mniej niż 512 cyfr; Nie jestem w 100% pewien, jak dużyARRAY
mogą być wartości w SNOBOL.INPUT jest buforowany w tej wersji SNOBOL, aby mieć maksymalną szerokość 1024 znaków; wszystkie pozostałe postacie zostaną utracone. Wydaje się, że tablica może być dość duża; konieczne ponad 2048 komórek.
źródło
Węgiel drzewny , 38 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyprowadza a,
-
gdy liczby są łatwe do pomnożenia. Wyjaśnienie:Zainicjuj
z
wystarczająco dużą (sumę długości danych wejściowych) tablicę zer.Pętla nad wskaźnikami danych wejściowych
q
ih
.Wykonaj jeden krok długiego mnożenia.
Sprawdź, czy nie ma.
źródło
Pari / GP , 52 bajty
Wypróbuj online!
źródło
Haskell,
8281 bajtówLiczby przyjmowane jako ciągi znaków. Zwraca,
False
jeśli liczby są łatwe do pomnożenia iTrue
inaczej.Wypróbuj online!
Myślę, że to wystarczająco różni się od odpowiedzi @ Laikoni . Jak to działa:
źródło
Haskell ,
45 lat44 bajtówEdytować:
==
na<
.Pomyślałem o tym, zanim spojrzałem na inne odpowiedzi, a potem odkryłem, że Alice użyła tego samego podstawowego pomysłu. Publikowanie i tak, ponieważ jest krótsze niż inne odpowiedzi Haskell.
?
bierze dwie liczby całkowite i zwraca aBool
. Użyj jako331?1021
.False
oznacza, że mnożenie jest łatwe.Wypróbuj online!
s
to funkcja obliczająca sumę cyfr liczby całkowitej. (read.pure
konwertuje znak jednocyfrowy na liczbę całkowitą).źródło
Rubinowy , 69 bajtów
Wypróbuj online!
źródło
Haskell , 123 bajty
Wypróbuj online! Przykładowe użycie:
"331" % "1021"
dajeTrue
.źródło
Perl 5 , 100 + 2 (
-F
) = 102 bajtyWypróbuj online!
wyprowadza fałsz dla łatwego, prawda dla łatwego
źródło
Galaretka , 8 bajtów
Wypróbuj online!
Port mojej odpowiedzi Javascript . Nie krótszy niż istniejąca odpowiedź na galaretkę, ponieważ galaretka ma wbudowany potężny splot.
Weź dane jako listę dwóch liczb. Zwraca
1
za łatwe,0
za niełatwe.Wyjaśnienie:
źródło
C (gcc) , 104 bajty
Zasadniczo wykonaj mnożenie „ręcznie” przez r [] i ustaw wartość zwracaną, jeśli jakaś kolumna przekroczy 9, ponieważ oznaczałoby to przeniesienie.
Co zaskakujące, było to krótsze niż moja pierwsza próba, w której argumentami były łańcuchy.
Wypróbuj online!
źródło