GCD / LCMポリグロット!


26

あなたの課題は、入力のGCDをある言語で出力し、入力のLCMを別の言語で出力するプログラムまたは関数を作成することです。GCDまたはLCM(Mathematicaを探しています)の組み込みは許可されていますが、推奨されていません。入力は2つあり、常に正の整数で、1000を超えることはありません。

テストケース

各行は、次の形式の1つのテストケースです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

可能なすべての入力については、このペーストビン参照してください0 < x, y < 31。同じ言語の異なるバージョンは異なる言語としてカウントされることに注意してください。


だから... if変数に格納されている場合、言語のバージョンに基づいて許可されていますか?
IllidanS4は、モニカを

@ illidanS4それは結構です。
Programmer5000

回答:


24

ゼリー / 実際には、2バイト

00000000: 1e 67                                            .g

これは、提出されたプログラムの16進ダンプ(xxd)です。TIOはCP437エンコードをサポートしていないため、オンラインでテストできません。@Megoは、これがCygwinで機能することを確認するのに十分なほど親切でした。Cygwinは、実際にCP437を実装しています。

ゼリー:GCD

JellyはJellyコードページを使用するため、次の文字が表示されます。

œg

オンラインでお試しください!

使い方

œは不完全なトークンであるため、無視されます。g組み込みのGCDです。

実際:LCM

実際にはCP 437を使用しているため、次の文字が表示されます。

▲g

オンラインでお試しください!

使い方

LCM入力です。以来g(GCD)が必要と2つの整数入力を、それが実行されません。


27

C / C ++、79 78 73バイト

バイトを保存してくれた@ETHproductionsに感謝します!

int f(int a,int b){int c,d=a*b;for(;a;b=c)c=a,a=b%a;auto e=.5;c=e?d/b:b;}

CはGCDを計算しますオンラインで試してください!

C ++はLCMを計算しますオンラインで試してください!

Cではauto e=.5、自動ストレージクラス(デフォルト)で整数変数を宣言します。その後、0に初期化されますが、C ++ 11では、0.5に初期化されるdoubleを宣言します。そのため、変数の値はC ++では真偽、Cでは偽になります。

この関数は、ユークリッドのアルゴリズムを使用してGCDを計算し、aとbの積をGCDで除算してLCMを計算します。

returnステートメントを省略すると、少なくともGCCで機能します。以下の78バイトのソリューションは、どのコンパイラでも動作するはずです。

int f(int a,int b){int c,d=a*b;for(;a;b=c)c=a,a=b%a;auto e=.5;return e?d/b:b;}

1
できれば説明は、クールになる

@cat説明が追加されました。
Steadybox

1
間違っていなければ、次を使用してバイトを節約できますfor(;a;b=c)c=a,a=b%a;
。ETHproductions

@ETHproductionsありがとう!;)のfor代わりに使用する理由があることを知っていたwhile
Steadybox

18

実際 / Jelly、3バイト

00000000: 11 1c 67                                         ..g

これは、提出されたプログラムの16進ダンプ(xxd)です。

オンラインでお試しください!1

実際:GCD

実際にはCP 437を使用しているため、次の文字が表示されます。

◄∟g

オンラインでお試しください!

使い方

     (implicit) Read a and b from STDIN and push them on the stack.
◄    Unassigned. Does nothing.
 ∟   Unassigned. Does nothing.
  g  Pop a and b and push gcd(a,b).
     (implicit) Write the result to STDOUT.

ゼリー:LCM

JellyはJellyコードページを使用するため、次の文字が表示されます。

×÷g    

オンラインでお試しください!

使い方

×÷g  Main link. Left argument: a. Right argument: b

×      Multiply; yield ab.
  g    GCD; yield gcd(a,b).
 ÷     Division; yield ab/gcd(a,b) = lcm(a,b).

注:abは正であるためgcd(a、b)lcm(a、b)= abが成り立ちます。


1 TIOは実際に実際にUTF-8を使用します。ASCII文字とCP437文字0x11および0x1cの両方が割り当てられていないため、プログラムはそれでも動作します。


9

アリスジェリー、9バイト

アリスはLCMを計算します:

//L
oi@g

オンラインでお試しください!

スペースのように見えるのは、実際0x7FにはDEL制御文字です。

JellyはGCDを計算します。Jellyは印刷可能なASCIIとのみ互換性のある独自のコードページを使用しているため、ラインフィードとDEL ½文字はそれぞれ次のようになり、ラインフィードになります。

//L½oi@
g

オンラインでお試しください!

説明

Jellyは簡単です。1行目は無意味なヘルパーリンクを定義し、2行目は実際のプログラムであり、GCDビルトインが含まれています。

アリスは少しトリッキーですが、組み込みも使用します。

/   Reflect to SE. Switch to Ordinal.
    While in Ordinal mode, the IP bounces diagonally up and down through the grid.
i   Read all input as a single string.
L   Compute the shortest common superstring of an empty string and the input. That
    is simply the input itself, so this does nothing.
    After two more bounces, the IP hits the top right corner and turns
    around, continuing to bounce up and down while moving west.
L   Still does nothing.
i   Try to read more input, but this simply pushes an empty string.
/   Reflect to W. Switch to Cardinal.
    The IP wraps to the last column.
L   Implicitly discard the empty string and convert the input to two integers.
    Compute their LCM.
/   Reflect to NW. Switch to Ordinal.
    The IP immediately reflects off the top boundary to move SW instead.
o   Implicitly convert the LCM to a string and print it.
    Reflect off the bottom left corner and move back NE.
/   Reflect to S. Switch to Cardinal.
i   Try to read a byte, but we're at EOF, so this pushes -1 instead. Irrelevant.
    The IP wraps back to the first line.
/   Reflect to NE. Switch to Ordinal.
    The IP immediately reflects off the top boundary to move SE instead.
@   Terminate the program.

What looks like a space本当にスペースのように見えません。
エリックアウトゴルファー

@EriktheOutgolferはフォントに依存していると思います。
マーティンエンダー

私にとっては、少なくとも私の経験では、0x7F(ミニマークダウン)はどのフォントでもスペースのようには見えませんでした。しかし、余分なラインは、それが常駐線の下に間隔ことを常に挿入...
エリックOutgolfer

7

オクターブ/ MATLAB、66 61バイト

@(x,y)gcd(x,y)^(1-2*any(version==82))*(x*y)^any(version==82))

Foonのおかげで5バイト節約されました。(x*y)^any()もちろん、よりも短かった1+(x*y-1)*any()


少なくとも、組み込みのを使用していませんlcm

説明:

これは組み込みを使用します gcdを最大公約数を計算します。

Octaveでは、これはの累乗に引き上げられ1-2*any(version==82)ます。any(version==82)ある0オクターブで、これは単純ですgcd(x,y)^1(x*y)^any(version==82)またはで乗算され(x*y)^0 = 1ます。

MATLABの場合、gcdは累乗され1-2*any(version==82)ます。any(version==82)1MATLABにあるため、これはgcd(x,y)^-1です。(x*y)^any(version==82)またはで乗算しました(x*y)^1 = x*ylcm(x,y) == x*y/gcd(x,y)正数の場合、これにより最小公倍数が得られます。


5

JellyおよびMATL6 5バイト

ZmD
g

これは、2つの言語のいずれかの完全なプログラムです。JellyでGCD(オンラインで試す!)とMATLでLCM(オンラインで試す)を計算します。正しい出力を生成した後、MATLプログラムはエラー(デフォルトで許可)で終了します。

ASCII文字のみが使用されるため、2つの言語で同じエンコードされたバイトに対応します。

ゼリーのGCDの説明

ZmD    Unused link
g      Main link (gets called automatically). Builtin GCD function (g)

MATLのLCMの説明

ZmD    Compute LCM (builtin function Zm) and display immediately (D)
g      Tries to implicitly take input to do something with it (depending
       on the type of the input). Since there is no input, it errors out

5

ジュリア0.4 /ジュリア0.5、18バイト

log.(1)==0?lcm:gcd

gcdJulia 0.4(オンラインで試してみてください!)およびlcmJulia 0.5(オンラインで試してみてください)で評価します)。

使い方

Julia 0.4ではlog.(1)、の省略形でgetfield(log,1)あり、log組み込みのメモリ位置、たとえばpointer を返しますPtr{Void} @0x00007f2846cb6660。したがって、結果はゼロ以外であり、比較は偽であり、式は次のように評価されます。gcdます。

Julia 0.5では、新しい関数ベクトル化構文が導入されました。log.(1)はの省略形でありbroadcast(log,1)1反復可能ではないため、単に評価しlog(1)ます。したがって、結果はゼロになり、比較は真になり、式はに評価されlcmます。


3

オクターブ/ MATLAB、44 42 41バイト

eval(['@' 'lcm'-[5 0 9]*all(version-82)])

これは、@gcdOctaveのGCD()および@lcmMATLABのLCM()の匿名関数を定義します。

Octaveの例(またはオンラインで試してみてください!):

>> eval(['@' 'lcm'-[5 0 9]*all(version-82)])
warning: implicit conversion from numeric to char
ans = @gcd
>> ans(12,16)
ans =  4

MATLABの例:

>> eval(['@' 'lcm'-[5 0 9]*all(version-82)])
ans =
    @lcm
>> ans(12,16)
ans =
    48

1

JS(ES6)、CGL(CGLゴルフ言語)、31バイト(非競合)

CGLのLCM機能は、このチャレンジの後に追加されました。

 g=(a,b)=>b?g(b,a%b):a
//-LⓍ

スペースのように見えるものは、実際には非破壊スペースであり、CGLのコメントです。JSはGCDを計算します:

g=(a,b)=>b?g(b,a%b):a

CGLはLCMを計算します:

//  does nothing
- decrements the current stack number, resulting in it pointing to input
L computes the LCM of the first and second stack items and pushes it to the stack
Ⓧ prints out the last stack item

やってみて:

Snippetify( g=(a,b)=>b?g(b,a%b):a
//-LⓍ
);
<script src="https://programmer5000.com/snippetify.min.js"></script>
<input type = "number">
<input type = "number">

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.