Su desafío es crear un programa o función que genere el GCD de sus entradas en un idioma y el LCM de sus entradas en otro. Las incorporaciones para GCD o LCM (te estoy mirando, Mathematica) están permitidas pero no son recomendables. Habrá 2 entradas, que siempre serán enteros positivos, nunca mayores de 1000.
Casos de prueba
Cada línea es un caso de prueba en el formato x y => GCD(x,y) LCM(x,y)
:
1 1 => 1 1
1 2 => 1 2
4 1 => 1 4
3 4 => 1 12
7 5 => 1 35
18 15 => 3 90
23 23 => 23 23
999 1000 => 1 999000
1000 999 => 1 999000
1000 1000 => 1000 1000
Vea este pastebin para todas las entradas posibles con 0 < x, y < 31
. Tenga en cuenta que las diferentes versiones de los mismos idiomas cuentan como idiomas diferentes.
if
se permite un basado en una versión del idioma, si se almacena en una variable?Respuestas:
Jalea / En realidad , 2 bytes
Este es un hexdump (xxd) del programa enviado. No se puede probar en línea porque TIO no admite la codificación CP437. @Mego tuvo la amabilidad de verificar que esto funciona en Cygwin, que implementa CP437 según lo previsto para Actually.
Jalea: MCD
Jelly usa la página de códigos Jelly , por lo que ve los siguientes caracteres.
Pruébalo en línea!
Cómo funciona
œ
es una ficha incompleta y por lo tanto ignoradag
es el GCD incorporado.En realidad: LCM
En realidad usa CP 437 , por lo que ve los siguientes caracteres.
Pruébalo en línea!
Cómo funciona
▲
es la entrada LCM. Comog
(GCD) requiere dos entradas enteras, no se ejecuta.fuente
C / C ++,
797873 bytes¡Gracias a @ETHproductions por guardar un byte!
C calcula el MCD: ¡ Pruébelo en línea!
C ++ calcula el LCM: ¡ Pruébelo en línea!
En C,
auto e=.5
declara una variable entera con la clase de almacenamiento automático (que es la predeterminada), que luego se inicializa a 0, mientras que en C ++ 11 declara un doble, que se inicializa a 0.5. Entonces el valor de la variable será verdadero en C ++ y falso en C.La función calcula el MCD con el algoritmo de Euclides y el MCD dividiendo el producto de ayb por el MCD.
Omitir la declaración de devolución funciona al menos en GCC. La solución de 78 bytes a continuación debería funcionar con cualquier compilador:
fuente
for(;a;b=c)c=a,a=b%a;
for
lugar dewhile
;)Actualmente / Jelly , 3 bytes
Este es un hexdump (xxd) del programa enviado.
Pruébalo en línea! 1
En realidad: MCD
En realidad usa CP 437 , por lo que ve los siguientes caracteres.
Pruébalo en línea!
Cómo funciona
Jalea: LCM
Jelly usa la página de códigos Jelly , por lo que ve los siguientes caracteres.
Pruébalo en línea!
Cómo funciona
Nota: La fórmula mcd (a, b) mcm (a, b) = ab se cumple porque a y b son positivos.
1 TIO en realidad usa UTF-8 para En realidad. Dado que tanto los caracteres ASCII como los caracteres CP437 0x11 y 0x1c no están asignados, el programa funciona de todos modos.
fuente
Alice y Jelly , 9 bytes
Alice calcula el LCM:
Pruébalo en línea!
Lo que parece un espacio es realmente
0x7F
, elDEL
personaje de control.Jelly calcula el MCD. Dado que Jelly usa su propia página de códigos que solo es compatible con ASCII imprimible, el salto de línea y el carácter DEL se convierten en
½
y salto de línea, respectivamente:Pruébalo en línea!
Explicaciones
Jelly es trivial: la primera línea define un enlace auxiliar sin sentido, la segunda línea es el programa real y simplemente contiene el GCD incorporado.
Alice es un poco más complicada, pero también utiliza una función integrada:
fuente
What looks like a space
en realidad no parece un espacioOctava / MATLAB,
6661 bytesGuardado 5 bytes gracias a Foon.
(x*y)^any()
era, por supuesto, más corto que1+(x*y-1)*any()
.Bueno, al menos no usa el incorporado para
lcm
.Explicación:
Esto usa el incorporado
gcd
para calcular el divisor común más grande.En Octave, esto se eleva al poder de
1-2*any(version==82)
.any(version==82)
está0
en Octave, así que esto es simplementegcd(x,y)^1
. Se multiplica por(x*y)^any(version==82)
, o(x*y)^0 = 1
.Para MATLAB,
gcd
se eleva al poder de1-2*any(version==82)
.any(version==82)
está1
en MATLAB, así que esto esgcd(x,y)^-1
. Se multiplica por(x*y)^any(version==82)
, o(x*y)^1 = x*y
. Esto da el mínimo común múltiplo, ya quelcm(x,y) == x*y/gcd(x,y)
para números positivos.fuente
Gelatina y MATL ,
65 bytesEste es un programa completo en cualquiera de los dos idiomas. Calcula el GCD en Jelly (¡ Pruébelo en línea! ) Y el LCM en MATL (¡ Pruébelo en línea! ). El programa MATL sale con un error (permitido por defecto) después de producir la salida correcta.
Solo se utilizan caracteres ASCII, por lo que corresponden a los mismos bytes codificados en los dos idiomas.
Explicación de GCD en gelatina
Explicación de LCM en MATL
fuente
Julia 0.4 / Julia 0.5 , 18 bytes
Evalúa a
gcd
en Julia 0.4 (¡ Pruébelo en línea! ) Y alcm
en Julia 0.5 (¡ Pruébelo en línea! ).Cómo funciona
En Julia 0.4,
log.(1)
es una forma abreviada degetfield(log,1)
, que devuelve la ubicación de la memoria dellog
generador, por ejemplo, el punteroPtr{Void} @0x00007f2846cb6660
. Por lo tanto, el resultado no es cero, la comparación es falsa y la expresión se evalúa comogcd
.En Julia 0.5, se introdujo una nueva sintaxis de vectorización de funciones.
log.(1)
ahora es una abreviatura debroadcast(log,1)
, que, dado1
que no es iterable, simplemente se evalúalog(1)
. El resultado es, por lo tanto, cero, la comparación es verdadera y la expresión se evalúa comolcm
.fuente
Octava / MATLAB,
444241 bytesEsto define una función anónima para GCD (
@gcd
) en Octave y para LCM (@lcm
) en MATLAB.Ejemplo en Octave (o Pruébelo en línea ):
Ejemplo en MATLAB:
fuente
JS (ES6), CGL (lenguaje de golf CGL) , 31 bytes (no competitivos)
La característica LCM de CGL se agregó después de este desafío.
Lo que parece un espacio es en realidad un espacio ininterrumpido, un comentario para CGL. JS calcula el GCD:
Y CGL calcula el LCM:
Pruébalo:
fuente