Tarea
Dados dos enteros estrictamente positivos n y d como entrada, determine si n es divisible por d , es decir, si existe un entero q tal que n = qd
.
Puede escribir un programa o una función y utilizar cualquiera de nuestros métodos estándar para recibir entradas y proporcionar salidas.
El resultado debe ser un valor verdadero o falso ; verdadero si n es divisible por d , y falso de lo contrario.
Su código solo tiene que manejar enteros que pueda representar de forma nativa, siempre que funcione para todos los enteros de 8 bits con signo. Sin embargo, su algoritmo tiene que funcionar para enteros arbitrariamente grandes.
Puede usar cualquier lenguaje de programación , pero tenga en cuenta que estas lagunas están prohibidas de forma predeterminada.
Este es el código de golf , por lo que gana la respuesta válida más corta, medida en bytes .
Casos de prueba
n, d output
1, 1 truthy
2, 1 truthy
6, 3 truthy
17, 17 truthy
22, 2 truthy
1, 2 falsy
2, 3 falsy
2, 4 falsy
3, 9 falsy
15, 16 falsy
Tabla de clasificación
El Fragmento de pila al final de esta publicación genera el catálogo a partir de las respuestas a) como una lista de la solución más corta por idioma yb) como una tabla de clasificación general.
Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:
## Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
## Perl, 43 + 3 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><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="language-list"> <h2>Shortest Solution 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> <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> <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><script>var QUESTION_ID = 86149; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 48934; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
Respuestas:
Gelatina , 1 byte
Esto me llevó horas al golf.
Pruébalo en línea!
fuente
Brain-Flak ,
727064625846 bytesToma dividendo y divisor (en ese orden) como entrada e imprime el divisor (verdad) o nada. Como cada pila tiene una cantidad implícita e infinita de ceros, la salida vacía debe considerarse falsa.
Si bien no es apilada, esta solución usa solo una pila.
Pruébalo en línea!
¡Gracias a @WheatWizard por jugar golf en 2 bytes!
Cómo funciona
Cálculo de módulo, 42 bytes
El programa completo anterior se puede modificar de manera trivial para calcular el módulo en su lugar.
Como antes, este método no es de limpieza de pila, pero usa solo una pila. Un módulo de 0 dejará la pila vacía, lo que equivale aproximadamente a dejar 0 ; cada pila contiene ceros infinitos.
Pruébalo en línea!
Cómo funciona
Compare los dos bucles del probador de divisibilidad y la calculadora de módulo.
La única diferencia es la ubicación de
{(<()>)}{}
, que intercambia d y r si d = 0 . Para calcular el módulo, realizamos este intercambio después de disminuir d e incrementar r .Este cambio no afecta el resultado si a% b> 0 , pero si a% b = 0 , deja (n, d, r) = (0, b, 0) - en lugar de (n, d, r) = (0, 0, b) - en la pila.
Por lo tanto, para obtener el módulo, solo tenemos que hacer estallar n y d con
{}{}
.Cálculo del módulo de limpieza de pila, 64 bytes
El algoritmo de módulo de 42 bytes no es limpio de pila, por lo que no se puede usar como está en todos los programas. La siguiente versión extrae dividendos y divisores (en ese orden) de la pila activa y empuja el módulo a cambio. No tiene otros efectos secundarios.
Esta solución se basa en gran medida en el registro anterior de 72 bytes de @ WheatWizard, pero ahorra 6 bytes al no cambiar nunca las pilas.
Pruébalo en línea!
Cómo funciona
fuente
Código de máquina x86_32, 8 bytes
Esta es mi primera respuesta de código de golf, así que espero seguir todas las reglas.
Esto primero llama a cdq para borrar el registro edx, luego realiza una división firmada en el registro ecx, que almacena el resto en edx. La línea edx de prueba, edx establecerá el indicador de cero si edx es cero, y sete pone un 0 para falso si edx no era cero, y pone un 1 para verdadero si edx era 0.
Este es solo el fragmento de código que contribuye al recuento de bytes, pero para la prueba, aquí está el código C que escribí con el ensamblaje en línea porque es más fácil de esta manera manejar E / S.
fuente
Hexagonía,
15, 13, 1210 bytes¡El lenguaje basado en hexágonos favorito de todos! :RE
TL; DR funciona utilizando soluciones mágicas y sin formato para disminuir el recuento de bytes:
Ahorro de 2 bytes gracias a la magia de diseño de @ MartinEnder.
@FryAmTheEggman guardó 1 byte al usar las esquinas de manera más creativa
Tanto @MartinEnder como @FryAmTheEggman idearon una solución de 10 bytes que no imprime nada con valores falsos.
Mi solución (15):
Sin formato:
Formateado:
Solución de @Martin Ender (13):
Sin formato:
Formateado:
Explicación:
Primero, obtenemos la entrada y tomamos el módulo.
Luego, verifica si el módulo es 0 o no. Si es así, la IP gira 60 grados a la izquierda, rebota en el espejo, establece la celda en 1 e imprime.
Luego, la IP continúa en la cuarta fila. Cuando alcanza el
>
, gira a la derecha en su lugar (porque el valor de la celda ahora es 1). Se vuelve loco y vuelve a la esquina inferior derecha en dirección NO. El IP golpea el<
, va a lo largo de la fila superior y vuelve a la esquina derecha para golpear el@
, deteniendo el programa.Si el módulo resulta positivo, la IP gira 60 grados a la derecha. Una vez que sale de la esquina inferior derecha, continúa en el borde inferior izquierdo debido a las reglas de ajuste de Hexagony. Se
'
reutiliza para hacer que la IP vaya a una celda con 0 en ella. La IP luego viaja a lo largo de la cuarta fila, se envuelve a la segunda, golpea la impresión y se refleja en la<
. El resto del camino hacia el@
es el mismo.Eso es algo de magia seria.
@ Solución FryAmTheEggman (12):
Sin formato:
Formateado:
Explicación:
Al igual que las otras soluciones, obtiene la entrada y toma el módulo.
Luego, la IP se desvía hacia la esquina inferior. Si el módulo es positivo, va en el borde superior izquierdo. El
?
no tiene más entrada, por lo que establece la celda en 0.!
Luego imprime el 0 y@
finaliza el programa.Las cosas son mucho más complicadas para cuando el módulo es 0. En primer lugar, se reduce, luego se restablece a 0, luego se establece en 1, luego se imprime. Luego, el 1 se reduce a 0. Después de eso, el programa se ejecuta como lo hace al principio hasta que intenta hacerlo
0%0
. Eso hace que arroje un error silencioso y salga.Realmente me gusta el truco del error silencioso, pero una forma más simple sería reemplazarlo
(
con/
para que la IP pase la primera vez, pero se refleje en@
la segunda.Solución colaborativa (10):
Sin formato:
Formateado:
Este programa comienza igual que todos los demás programas, obteniendo la entrada y modificándola.
Si la entrada es 0, la IP gira a la izquierda cuando golpea
<
. Se desvía hacia1!@
, que imprime 1 y se cierra.Si la entrada es positiva, la IP gira a la derecha cuando golpea
<
. Sale por la esquina y va a lo largo del borde superior derecho golpeando la @ sin imprimir.fuente
Brain-flak
102, 98,96 bytesEww. Bruto. Podría publicar una explicación, pero apenas la entiendo. Este lenguaje me duele el cerebro.
Pruébalo en línea!
Gracias al usuario de github @Wheatwizard por llegar a un ejemplo de módulo. ¡Probablemente no podría haberlo descubierto yo mismo!
Además, la respuesta más corta está aquí .
Posiblemente explicación incorrecta:
El resto es bastante sencillo.
fuente
The rest is pretty straightforward.
Sí, eso parece.Javascript (ES6)
171211 bytesfuente
d=a=>b=>a%b<1
seguidod(32,2)
en la consola JS ... simplemente recibo la respuestafunction b=>a%b<1
d(32)(2)
. Porqued(32)
dafunction b=>a%b<1
, entonces tienes que llamar a esa función con tub
valorVim, 11 pulsaciones de teclas
No está mal para un lenguaje que solo maneja cadenas. :RE
fuente
<C-Left>
hacer? No puedo probarlo porque cambia Windows en Mac> _>B
lugar deb
(yCtrl
+Right
es el equivalente deW
): la diferencia es con caracteres que no son palabras, pero en este caso está haciendo exactamente lo mismo :) vimdoc.sourceforge.net/htmldoc/motion. html # <C-Left >Mathematica -
17 133 bytes¡Gracias a @MartinEnder por guardar una tonelada de bytes!
fuente
Divisible[]
.Retina, 12 bytes
Toma entradas separadas por espacios en unario, como
111111111111 1111
para verificar si 12 es divisible por 4 . Imprime 1 (verdadero) o 0 (falso).Pruébalo en línea!
FryAmTheEggman guardó dos bytes.Vaya, reescribí mi respuesta para tomar los argumentos en el orden correcto. (Entonces Fry me ganó en los comentarios. ¡Soy lento en expresiones regulares!)fuente
^(1+)\1* \1$
que funcionará.Lote, 20 bytes
Resultados
1
en éxito,0
en fracaso.fuente
C #,
271312 bytesGracias a TuukkaX por señalar que las lambdas anónimas son aceptables. Gracias a David Conrad por señalarme al curry que ni siquiera sabía que era una cosa.
Corto y dulce, ya que solo estamos tratando con números enteros que podemos usar en
<1
lugar de==0
y guardar un byte completo.fuente
(a,b)=>a%b<1;
. +1.a=>b=>a%b<1;
(nota: luego debe llamarlo como enf(a)(b)
lugar def(a,b)
)brainfuck, 53 bytes
Toma la entrada como bytes, la salida es un valor de byte de
0x00
o0x01
. Es el algoritmo DivMod seguido de negación booleana .Pruébelo en línea : tiene un montón de elementos adicionales
+
cerca del final para que pueda ver la salida en ASCII.fuente
Brain-Flak ,
8886 bytesEsta es una versión más densa del algoritmo original de prueba de divisibilidad Brain-Flak escrito por el
Dr. Green Eggs y Iron ManDJMcMayhem y por mí.Aquí hay una breve explicación (ish) de cómo funciona:
Pruébalo en línea!
fuente
LOLCODE,
7464 bytesfuente
O RLY?
Yo no lo sabia! cambiando.BTW
Aquí hay consejos de golf.C, 60 bytes
fuente
+1
de mi parte. Además, permitimos funciones, por lo que puede acortarlo fácilmenteint f(a,b){return !(a%b);}
o incluso más.int f(a,b){return!(a%b);}
es de 25 bytes, y si usa el compilador correcto, incluso podría hacerlof(a,b){return!(a%b);}
por 21 bytes.#define f(a,b)!(a%b)
( enlace ideone )Dyalog APL , 3 bytes
¿Es cero igual al resto de la división?
fuente
R,
2220 bytesComo de costumbre, lee dos números de la entrada que termina en una línea vacía.
Actualización: gracias a Jarko Dubbeldam por reducir 2 bytes (a pesar de que su edición fue rechazada, ¡fue muy útil!).
fuente
Java 8, 11 bytes
What the heck, there are JS and C# versions of this, why not a Java version, too?
Usage:
fuente
a->b->a%b<1
This raises a syntax error, doesn't it?Python, 16 bytes
fuente
lambda a,b:1.*a/b==a/b
, but was quite impressed. This is a so complex piece of code...GolfScript, 3 bytes
Explanation:
Try it online!
fuente
CJam,
64 bytesSaved 2 bytes thanks to Dennis
Try it online
fuente
Brachylog, 2 bytes
Try it online!
fuente
Julia, 9 bytes
Try it online!
fuente
Fortran 95, 78 bytes
fuente
MarioLANG,
121109107 bytesSaved 14 bytes thanks to Martin Ender
Try it online!
Explanation
The algorithm is simply to keep subtracting
d
fromn
to see if you can do it an integer number of times and have no remainder.First, the input is collected.
n
is in the first cell,d
in the second.This is essentially the main loop. It decrements the first and second cells, and increments the third.
This is the final output. If after the incrementing/decrementing, the first cell is 0, then we've eliminated
n
. If after this, the second cell (d
) is0
, thend
went inton
evenly. We increment and print (1
). Otherwise, move back to the first cell (which is0
) and print it.This loop happens if the second cell is
0
after incrementing and decrementing. It copies the third cell to the second cell. The part at the bottom is to bypass the loop if the cell is not0
.fuente
Tcl , 34 bytes
My first /*successful*/ attempt in codegolf ! This code must be executed in Tcl shell , otherwise it will not work.
One byte thanks to @Lynn .
Four bytes thanks to @Lynn and @LeakyNun (now I understand what he meant)!
fuente
?1:0
?$a%$b==0
return?exp $a%$b==0
?exp $a%$b<1
, maybe?PHP,
2322 bytesprints 1 for true, empty string (=nothing) for false
call from cli with
n
andd
as arguments10 bytes for ancient PHP:
<?=$n%$d<1
fuente
<?=!($A%$B)
. The values can be passed as part of your$_SESSION
,$_COOKIE
,$_POST
,$_GET
or (if I'm not mistaken) over$_ENV
.for PHP<5.4 with register_globals=On
. But I´ll add it for reference.for PHP<5.4 with register_globals=On
", since you have to count the bytes of yourphp.ini
file containingregister_globals=On
. However, PHP4.1 is a special case. It is the last version whereregister_globals=On
is the default value, and most functions are available from PHP4.1 and up. This version also allows the use of other functions, likeereg
andsplit
without warnings.J, 3 bytes
Usage:
Will return
1
. And is equivalent to pseudocode10 MOD 2 EQ 0
Note this is very similar to the APL answer, because J is heaviliy inspired by APL
fuente
PowerShell v2+, 20 bytes
Takes input as two command-line arguments
$args
,-join
s them together into a string with%
as the separator, pipes that toiex
(short forInvoke-Expression
and similar toeval
). The result is either0
or non-zero, so we take the Boolean not!
of that result, which means either$TRUE
or$FALSE
(non-zero integers in PowerShell are truthy). That Boolean is left on the pipeline and output is implicit.Alternative versions, also 20 bytes each
Same concept, just slightly different ways of structuring the input. Thanks to @DarthTwon for providing these.
Examples
fuente
param($a,$b)!($a%$b)
and!($args[0]%$args[1])
Haskell,
1311 bytesThis defines a new function
(!) :: Integral n => n -> n -> Bool
. Sincemod n m
returns only positive numbers ifn
andm
are positive, we can save a byte by using1>
instead of0==
.Usage:
fuente
((1>).).mod
.