B-Teck!

お仕事からゲームまで幅広く

【JavaScript】ユークリッドの互除法でコードゴルフして遊んだ

以下は全てコメントを除外したバイト数

  • 初期状態(152バイト)
function euclideanAlgorithm(a,b){
    // aがbで割り切れる場合、最大公約数である
    let c = a%b;
    if(c === 0){
        return b;
    }else{
        // 割り切れない場合、bと剰余を引数に再度自分自身を呼び出す
        return euclideanAlgorithm(b, c);
    }
}

 

  • アロー関数にする(150バイト)
euclideanAlgorithm = (a, b) => {
    // aがbで割り切れる場合、最大公約数である
    let c = a%b;
    if(c === 0){
        return b;
    }else{
        // 割り切れない場合、bと剰余を引数に再度自分自身を呼び出す
        return euclideanAlgorithm(b,c);
    }
}

 

  • 関数名を1文字にする(117バイト)
f = (a, b) => {
    // aがbで割り切れる場合、最大公約数である
    let c = a%b;
    if(c === 0){
        return b;
    }else{
        // 割り切れない場合、bと剰余を引数に再度自分自身を呼び出す
        return f(b, c);
    }
}

 

  • 一時変数cを削除する(103バイト)
f = (a, b) => {
    // aがbで割り切れる場合、最大公約数である
    if(a%b === 0){
        return b;
    }else{
        // 割り切れない場合、bと剰余を引数に再度自分自身を呼び出す
        return f(b, a%b);
    }
}

 

  • 先にreturnしているのでelseを削除する(70バイト)
f = (a, b) => {
    // aがbで割り切れる場合、最大公約数である
    if(a%b === 0) return b;
    // 割り切れない場合、bと剰余を引数に再度自分自身を呼び出す
    return f(b, a%b);
}

 

  • 0はfalse、0以外の数字はtrueと判定される事を利用して条件文を置き換える(67バイト)
f = (a, b) => {
    // 余り0のとき真偽値を判定させてTrue
    if(!(a%b)) return b;
    // 割り切れない場合、bと剰余を引数に再度自分自身を呼び出す
    return f(b, a%b);
}

 

  • 三項演算子でreturn文をまとめる(54バイト)
f = (a, b) => {
    // 余り0のとき真偽値を判定させてTrue
    // 割り切れない場合、bと剰余を引数に再度自分自身を呼び出す
    return !(a%b) ? b : f(b, a%b);
}

 

  • 不要な文字を削除(34バイト)
f=(a,b)=>{return!(a%b)?b:f(b,a%b)}

 

===[2021/01/16 追記]以下コメントで頂いたもの===
より短くなる方法をコメントで頂きました!ありがとうございます!

  • 波括弧とreturnを削除(26バイト)
f=(a,b)=>!(a%b)?b:f(b,a%b)

 

  • 条件式を反転させ !() を削除(23バイト)
f=(a,b)=>a%b?f(b,a%b):b