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>
Respuestas:
Jalea , 7 bytes
Pruébalo en línea!
Utiliza convolución (que contribuí a Jelly: D)
Cómo funciona
fuente
<⁵Ạ
salida sin un booleano NO realizado en él.JavaScript (ES6), 67 bytes
Toma la entrada como 2 cadenas en la sintaxis de curry
(a)(b)
. Devolucionesfalse
para fácil otrue
no fácil.Casos de prueba
Mostrar fragmento de código
Alt. versión (defectuosa),
645552 bytesAhorró 3 bytes al tomar cadenas, como lo sugiere @Shaggy
Como lo señaló @LeakyNun, este método fallaría en algunos enteros específicos grandes
Toma la entrada como 2 cadenas en la sintaxis de curry
(a)(b)
. Devolucionestrue
para fácil ofalse
no fácil.Casos de prueba
Mostrar fragmento de código
¿Cómo?
La idea aquí es exponer explícitamente los acarreos insertando ceros antes de cada dígito de cada factor.
Ejemplos:
331 x 1021 se convierte en 30301 x 1000201 , lo que da 30307090501 en lugar de 337951 . Al agregar un cero inicial al resultado y agrupar todos los dígitos por 2, esto se puede escribir como 03 03 07 09 05 01 . Todos los grupos tienen menos de 10 , lo que significa que no habría habido ningún acarreo en la multiplicación estándar.
431 x 1021 se convierte en 40301 x 1000201 , lo que da 40309100501 y se puede escribir como 04 03 09 10 05 01 . Esta vez, tenemos un 10 que revela un carry en la multiplicación estándar.
fuente
108
el medio estropea su algoritmo)Alice , 30 bytes
Pruébalo en línea!
Salidas
1
para fácil y0
para difícil.Los números son fáciles de multiplicar si y solo si la suma de dígitos del producto es igual al producto de las sumas de dígitos.
fuente
MATL , 10 bytes
Salidas
0
para fácil,1
para difícil.Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
fuente
R ,
13511010986 bytesPruébalo en línea!
Toma la entrada como cadenas.Es feo pero funciona ™.Esto ahora utiliza un enfoque de convolución, como en la respuesta de Leaky Nun , por lo que toma la entrada como números enteros y devuelve
TRUE
los números difíciles de multiplicar y losFALSE
fáciles de multiplicar.Siempre he tenido algunos problemas para portar enfoques de convolución en el pasado, pero hoy finalmente leí la documentación :
Lo cual es una tontería. Entonces la extracción de dígitos se invierte
n
y se resuelve en un puerto de la respuesta de Leaky Nun.fuente
Python 2 , 88 bytes
Toma dos enteros como entrada y devuelve
False
(fácil de multiplicar) oTrue
(no).Pruébalo en línea! (demasiado lento para uno de los casos de prueba)
fuente
len(`n+m`)
en realidad fallaría por 40, 30 .len(`n+m`)+1
?len(`n`+`m`)
aunque debería hacerlo.JavaScript (Node.js) ,
43413736 bytes¡Gracias @ Dennis por la idea de usar interpolación de cadenas en esta respuesta y ahorrar 4 bytes!
Gracias @ ØrjanJohansen por -1!
Pruébalo en línea!
Por supuesto, cuando la base de destino es menor que la base original (como en mi respuesta de Jelly, la base es 2),
<
debe voltearse.fuente
Wolfram Language (Mathematica) ,
75666556 bytesPruébalo en línea!
Recibiendo 2 entradas de cadena
Explicación:
-9 para cambiar el uso de cadena como entrada
-1 para usar el operador infijo
-9 Gracias @MartinEnder por la
Max
funciónfuente
Python 2 ,
158135123113 bytes-12 bytes gracias a Leaky Nun -10 bytes gracias a ovs
Pruébalo en línea! o Pruebe todos los casos de prueba
fuente
all(d[k]<10for k in d)
funciona o es solo Python 3?Julia 0.6 , 30 bytes
Pruébalo en línea!
La entrada es una tupla de números, la salida es
true
para números difíciles de multiplicar yfalse
para números fáciles..
es la aplicación de función de elemento inteligente....
expande la tupla (de listas de dígitos enteros) a dos entradas separadas de laconv
función.fuente
Python 3 ,
5835 134039 bytesParece que tuve esta idea dos horas tarde .
¡Gracias a @ ØrjanJohansen por jugar golf en 1 byte!
Pruébalo en línea!
fuente
SNOBOL4 (CSNOBOL4) ,
268264247246243131 bytesPruébalo en línea!
Puertos el acercamiento por Nitrodon . Creo que esta es la primera vez que he definido una función en SNOBOL,
D
para suma de dígitos.versión anterior, 243 bytes:
Pruébalo en línea!
Entrada en STDIN separada por nuevas líneas, salida a STDOUT: una sola nueva línea para multiplicar fácilmente y sin salida para no multiplicar fácilmente.
Esto no va a ganar ningún premio, pero presenta otro enfoque (bueno, realmente este es el enfoque ingenuo). No creo que pueda escribir esto en cubix, pero SNOBOL es lo suficientemente resistente como para funcionar como es.
Como toma la entrada como una cadena, esto funcionará para cualquier entrada con menos de 512 dígitos cada una; No estoy 100% seguro de qué tan grandeARRAY
puede ser SNOBOL.INPUT se almacena en esta versión de SNOBOL para tener un ancho máximo de 1024 caracteres; todos los demás personajes se pierden. Parece que un ARRAY puede ser bastante grande; bien por encima de las 2048 células necesarias.
fuente
Carbón , 38 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Emite a
-
cuando los números son fáciles de multiplicar. Explicación:Inicialice
z
a una matriz de ceros lo suficientemente grande (suma de longitudes de entradas).Recorrer los índices de las entradas
q
yh
.Realiza un paso de la multiplicación larga.
Verifique si hay acarreos.
fuente
Pari / GP , 52 bytes
Pruébalo en línea!
fuente
Haskell,
8281 bytesLos números se toman como cadenas. Devoluciones
False
si los números son fáciles de multiplicar y de loTrue
contrario.Pruébalo en línea!
Creo que es lo suficientemente diferente de la respuesta de @ Laikoni . Cómo funciona:
fuente
Haskell ,
4544 bytesEditar:
==
a<
.Pensé en esto antes de mirar las otras respuestas, luego descubrí que la de Alice usaba la misma idea básica. Publicar de todos modos ya que es más corto que las otras respuestas de Haskell.
?
toma dos enteros y devuelve aBool
. Usar como331?1021
.False
significa que la multiplicación es fácil.Pruébalo en línea!
s
es una función que calcula la suma de los dígitos de un entero. (read.pure
convierte un carácter de un solo dígito en un entero).fuente
Ruby , 69 bytes
Pruébalo en línea!
fuente
Haskell , 123 bytes
Pruébalo en línea! Ejemplo de uso:
"331" % "1021"
rendimientosTrue
.fuente
Perl 5 , 100 + 2 (
-F
) = 102 bytesPruébalo en línea!
salidas falsas para fácil, verdadero para no fácil.
fuente
Jalea , 8 bytes
Pruébalo en línea!
Un puerto de mi respuesta Javascript . No más corto que la respuesta Jelly existente porque Jelly tiene una convolución poderosa incorporada.
Tome la entrada como una lista de dos números. Devoluciones
1
para fácil,0
para no fácil.Explicación:
fuente
C (gcc) , 104 bytes
Básicamente, haga una multiplicación "a mano" en r [] y establezca el valor de retorno si alguna columna es superior a 9, ya que eso significaría que se ha producido un acarreo.
Sorprendentemente, esto fue más corto que mi primer intento que tomó los hilos como argumentos.
Pruébalo en línea!
fuente