Tantangan Anda adalah membuat program atau fungsi yang menampilkan GCD inputnya dalam satu bahasa dan LCM inputnya dalam bahasa lain. Builtins untuk GCD atau LCM (Saya melihat Anda, Mathematica) diizinkan tetapi tidak dianjurkan. Akan ada 2 input, yang akan selalu menjadi bilangan bulat positif, tidak pernah lebih besar dari 1000.
Uji Kasus
Setiap baris adalah satu test case dalam 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
Lihat pastebin ini untuk semua input yang mungkin dengan 0 < x, y < 31
. Perhatikan bahwa versi berbeda dari bahasa yang sama dihitung sebagai bahasa yang berbeda.
if
didasarkan pada versi bahasa, jika disimpan dalam variabel, diizinkan?Jawaban:
Jelly / Sebenarnya , 2 byte
Ini adalah hexdump (xxd) dari program yang dikirimkan. Itu tidak dapat diuji secara online karena TIO tidak mendukung pengkodean CP437. @Mego cukup berbaik hati untuk memverifikasi bahwa ini berfungsi di Cygwin, yang mengimplementasikan CP437 sebagaimana dimaksudkan untuk Sebenarnya.
Jelly: GCD
Jelly menggunakan halaman kode Jelly , sehingga ia melihat karakter berikut.
Cobalah online!
Bagaimana itu bekerja
œ
adalah token yang tidak lengkap dan karenanya diabaikan.g
adalah GCD bawaan.Sebenarnya: LCM
Sebenarnya menggunakan CP 437 , jadi itu melihat karakter berikut.
Cobalah online!
Bagaimana itu bekerja
▲
adalah input LCM. Karenag
(GCD) memerlukan dua input integer, itu tidak dijalankan.sumber
C / C ++,
797873 byteTerima kasih kepada @ETHproductions untuk menghemat satu byte!
C menghitung GCD: Coba online!
C ++ menghitung LCM: Coba online!
Dalam C,
auto e=.5
mendeklarasikan variabel integer dengan kelas penyimpanan otomatis (yang merupakan default), yang kemudian diinisialisasi ke 0, sedangkan dalam C ++ 11 menyatakan ganda, yang diinisialisasi ke 0,5. Jadi nilai variabel akan benar dalam C ++ dan falsy dalam C.Fungsi menghitung GCD dengan algoritma Euclid, dan LCM dengan membagi produk a dan b oleh GCD.
Menghilangkan pernyataan pengembalian paling tidak berfungsi pada GCC. Solusi 78 byte di bawah ini harus bekerja dengan kompiler apa pun:
sumber
for(;a;b=c)c=a,a=b%a;
for
daripadawhile
;)Sebenarnya / Jelly , 3 byte
Ini adalah hexdump (xxd) dari program yang dikirimkan.
Cobalah online! 1
Sebenarnya: GCD
Sebenarnya menggunakan CP 437 , jadi itu melihat karakter berikut.
Cobalah online!
Bagaimana itu bekerja
Jelly: LCM
Jelly menggunakan halaman kode Jelly , sehingga ia melihat karakter berikut.
Cobalah online!
Bagaimana itu bekerja
Catatan: Rumus gcd (a, b) lcm (a, b) = ab tahan karena a dan b positif.
1 TIO sebenarnya menggunakan UTF-8 untuk Actually. Karena karakter ASCII dan CP437 karakter 0x11 dan 0x1c tidak ditetapkan, program tetap bekerja.
sumber
Alice dan Jelly , 9 byte
Alice menghitung LCM:
Cobalah online!
Terlihat seperti apa ruang benar-benar
0x7F
, yangDEL
karakter kontrol.Jelly menghitung GCD. Karena Jelly menggunakan halaman kode sendiri yang hanya kompatibel dengan ASCII yang dapat dicetak, karakter linefeed dan DEL berubah menjadi
½
dan linefeed, masing-masing:Cobalah online!
Penjelasan
Jelly itu sepele: baris pertama mendefinisikan tautan pembantu yang tidak masuk akal, baris kedua adalah program aktual dan hanya berisi GCD bawaan.
Alice sedikit lebih rumit, tetapi juga menggunakan built-in:
sumber
What looks like a space
tidak benar-benar terlihat seperti ruang.Oktaf / MATLAB,
6661 byteDisimpan 5 byte berkat Foon.
(x*y)^any()
tentu saja lebih pendek dari1+(x*y-1)*any()
.Yah, setidaknya itu tidak menggunakan builtin untuk
lcm
.Penjelasan:
Ini menggunakan builtin
gcd
untuk menghitung pembagi umum terbesar.Dalam Oktaf, ini dinaikkan ke kekuatan
1-2*any(version==82)
.any(version==82)
ada0
di Octave, jadi ini sederhanagcd(x,y)^1
. Ini dikalikan dengan(x*y)^any(version==82)
, atau(x*y)^0 = 1
.Untuk MATLAB,
gcd
dinaikkan ke kekuatan1-2*any(version==82)
.any(version==82)
ada1
di MATLAB, jadi inigcd(x,y)^-1
. Ini dikalikan dengan(x*y)^any(version==82)
, atau(x*y)^1 = x*y
. Ini memberi Least multiple umum, karenalcm(x,y) == x*y/gcd(x,y)
untuk angka positif.sumber
Jelly dan MATL ,
65 byteIni adalah program lengkap dalam salah satu dari dua bahasa. Ini menghitung GCD di Jelly ( Coba online! ) Dan LCM di MATL ( Coba online! ). Program MATL keluar dengan kesalahan (diizinkan secara default) setelah menghasilkan output yang benar.
Hanya karakter ASCII yang digunakan, sehingga sesuai dengan byte yang disandikan dalam dua bahasa.
Penjelasan GCD dalam Jelly
Penjelasan LCM di MATL
sumber
Julia 0.4 / Julia 0.5 , 18 bytes
Mengevaluasi
gcd
dalam Julia 0.4 ( Coba online! ) Dan kelcm
dalam Julia 0.5 ( Coba online! ).Bagaimana itu bekerja
Dalam Julia 0.4,
log.(1)
adalah singkatan untukgetfield(log,1)
, yang mengembalikan lokasi memorilog
builtin, misalnya, pointerPtr{Void} @0x00007f2846cb6660
. Hasilnya adalah bukan nol, perbandingannya salah, dan ekspresi dievaluasigcd
.Dalam Julia 0.5, sintaksis vektorisasi fungsi baru diperkenalkan.
log.(1)
sekarang merupakan singkatanbroadcast(log,1)
, yang - karena1
tidak dapat diubah - hanya mengevaluasilog(1)
. Hasilnya adalah nol, perbandingannya benar, dan ekspresi dievaluasilcm
.sumber
Oktaf / MATLAB,
444241 byteIni mendefinisikan fungsi anonim untuk GCD (
@gcd
) di Oktaf, dan untuk LCM (@lcm
) di MATLAB.Contoh dalam Oktaf (atau Coba online! ):
Contoh dalam MATLAB:
sumber
JS (ES6), CGL (CGL Golfing Language) , 31 byte (tidak bersaing)
Fitur LCM dari CGL ditambahkan setelah tantangan ini.
Apa yang tampak seperti spasi sebenarnya adalah ruang yang tidak melanggar, komentar untuk CGL. JS menghitung GCD:
Dan CGL menghitung LCM:
Cobalah:
sumber