Ihre Herausforderung besteht darin, ein Programm oder eine Funktion zu erstellen, die die GCD ihrer Eingaben in einer Sprache und die LCM ihrer Eingaben in einer anderen Sprache ausgibt . Builtins für GCD oder LCM (ich sehe Sie, Mathematica) sind erlaubt, aber nicht empfohlen. Es gibt 2 Eingänge, bei denen es sich immer um positive ganze Zahlen handelt, niemals mehr als 1000.
Testfälle
Jede Zeile ist ein Testfall im Format 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
In diesem Pastebin finden Sie alle Eingabemöglichkeiten mit 0 < x, y < 31
. Beachten Sie, dass unterschiedliche Versionen derselben Sprachen als unterschiedliche Sprachen gelten.
if
basierend auf einer Version der Sprache, wenn in einer Variablen gespeichert, ist erlaubt?Antworten:
Jelly / Eigentlich 2 Bytes
Dies ist ein Hexdump (xxd) des eingereichten Programms. Es kann nicht online getestet werden, da TIO die CP437-Codierung nicht unterstützt. @Mego hat freundlicherweise überprüft, ob dies auf Cygwin funktioniert, das CP437 wie vorgesehen für Actually implementiert.
Jelly: GCD
Jelly verwendet die Jelly-Codepage , sodass die folgenden Zeichen angezeigt werden.
Probieren Sie es online!
Wie es funktioniert
œ
ist ein unvollständiges Token und wird daher ignoriert.g
ist der GCD eingebaut.Eigentlich: LCM
Verwendet tatsächlich CP 437 und sieht daher die folgenden Zeichen.
Probieren Sie es online!
Wie es funktioniert
▲
ist der LCM-Eingang. Dag
(GCD) zwei Ganzzahleingaben erfordert , wird es nicht ausgeführt.quelle
C / C ++,
797873 BytesVielen Dank an @ETHproductions für das Speichern eines Bytes!
C berechnet die GCD: Probieren Sie es online!
C ++ berechnet die LCM: Probieren Sie es online!
In C wird
auto e=.5
eine Ganzzahlvariable mit der automatischen Speicherklasse deklariert (dies ist die Standardeinstellung), die dann auf 0 initialisiert wird, während in C ++ 11 ein double deklariert wird, das auf 0,5 initialisiert wird. Der Wert der Variablen ist in C ++ also wahr und in C falsch.Die Funktion berechnet die GCD mit dem Euklid-Algorithmus und die LCM, indem sie das Produkt von a und b durch die GCD dividiert.
Das Weglassen der return-Anweisung funktioniert zumindest bei GCC. Die 78-Byte-Lösung unten sollte mit jedem Compiler funktionieren:
quelle
for(;a;b=c)c=a,a=b%a;
for
anstatt zu verwendenwhile
;)Eigentlich / Jelly , 3 Bytes
Dies ist ein Hexdump (xxd) des eingereichten Programms.
Probieren Sie es online! 1
Eigentlich: GCD
Verwendet tatsächlich CP 437 und sieht daher die folgenden Zeichen.
Probieren Sie es online!
Wie es funktioniert
Jelly: LCM
Jelly verwendet die Jelly-Codepage , sodass die folgenden Zeichen angezeigt werden.
Probieren Sie es online!
Wie es funktioniert
Anmerkung: Die Formel gcd (a, b) lcm (a, b) = ab gilt, weil a und b positiv sind.
1 TIO verwendet UTF-8 für Actually. Da sowohl die ASCII-Zeichen als auch die CP437-Zeichen 0x11 und 0x1c nicht zugeordnet sind, funktioniert das Programm trotzdem.
quelle
Alice und Jelly , 9 Bytes
Alice berechnet das LCM:
Probieren Sie es online!
Was wie ein Leerzeichen aussieht, ist wirklich
0x7F
dasDEL
Steuerzeichen.Jelly berechnet die GCD. Da Jelly eine eigene Codepage verwendet, die nur mit druckbarem ASCII kompatibel ist, werden aus dem Zeilenvorschub und dem DEL-Zeichen
½
jeweils Zeilenvorschub und Zeilenvorschub:Probieren Sie es online!
Erklärungen
Jelly ist trivial: Die erste Zeile definiert eine unsinnige Hilfsverbindung, die zweite Zeile ist das eigentliche Programm und enthält einfach die eingebaute GCD.
Alice ist ein bisschen kniffliger, nutzt aber auch ein eingebautes:
quelle
What looks like a space
sieht nicht wirklich aus wie ein Leerzeichen.Octave / MATLAB,
6661 Bytes5 Bytes gespart dank Foon.
(x*y)^any()
war natürlich kürzer als1+(x*y-1)*any()
.Naja, zumindest nutzt es das eingebaute nicht für
lcm
.Erläuterung:
Dabei wird der
gcd
größte gemeinsame Divisor mithilfe der integrierten Funktion berechnet.In Octave wird dies zur Macht erhoben
1-2*any(version==82)
.any(version==82)
ist0
in Oktave, so ist das einfachgcd(x,y)^1
. Es wird multipliziert mit(x*y)^any(version==82)
oder(x*y)^0 = 1
.Für MATLAB
gcd
wird die Potenz von1-2*any(version==82)
.any(version==82)
ist1
in MATLAB, also ist diesgcd(x,y)^-1
. Es multipliziert mit(x*y)^any(version==82)
oder(x*y)^1 = x*y
. Dies ergibt das kleinste gemeinsame Vielfache, dalcm(x,y) == x*y/gcd(x,y)
für positive Zahlen.quelle
Jelly und MATL ,
65 BytesDies ist ein vollständiges Programm in einer der beiden Sprachen. Es berechnet die GCD in Jelly ( Online testen ! ) Und die LCM in MATL ( Online testen ! ). Das MATL-Programm wird mit einem Fehler (standardmäßig zulässig) beendet, nachdem die richtige Ausgabe erstellt wurde.
Da nur ASCII-Zeichen verwendet werden, entsprechen sie denselben codierten Bytes in den beiden Sprachen.
Erklärung von GCD in Jelly
Erklärung von LCM in MATL
quelle
Julia 0,4 / Julia 0,5 , 18 Bytes
Evaluiert
gcd
in Julia 0.4 ( Online testen! ) Undlcm
in Julia 0.5 ( Online testen! ).Wie es funktioniert
In Julia 0.4
log.(1)
steht eine Abkürzung fürgetfield(log,1)
, die den Speicherort deslog
eingebauten, zB des Zeigers zurückgibtPtr{Void} @0x00007f2846cb6660
. Das Ergebnis ist also ungleich Null, der Vergleich ist falsch und der Ausdruck ergibtgcd
.In Julia 0.5 wurde eine neue Funktionsvektorisierungssyntax eingeführt.
log.(1)
ist jetzt eine Abkürzung fürbroadcast(log,1)
, die - da1
nicht iterabel - einfach auswertetlog(1)
. Das Ergebnis ist somit Null, der Vergleich ist wahr und der Ausdruck wird zu ausgewertetlcm
.quelle
Octave / MATLAB,
444241 BytesDies definiert eine anonyme Funktion für GCD (
@gcd
) in Octave und für LCM (@lcm
) in MATLAB.Beispiel in Octave (oder Online ausprobieren! ):
Beispiel in MATLAB:
quelle
JS (ES6), CGL (CGL Golfing Language) , 31 Byte (nicht konkurrierend)
Die LCM-Funktion von CGL wurde nach dieser Herausforderung hinzugefügt.
Was wie ein Leerzeichen aussieht, ist eigentlich ein nicht unterbrechendes Leerzeichen, ein Kommentar für CGL. JS berechnet die GCD:
Und CGL berechnet das LCM:
Versuch es:
quelle