CodeIQの「5乗のダンジョン」を解いてみた
最短コードへの道のりは遠く・・・
問題
「1, 2, 3, 4, 5, 6, 7, 8, 9」の9つの数字から、被らないように3つずつ選んだ、2つの「3桁の数字」があります。これは、たとえば「123, 456」「951, 372」などです(「123, 345」のように、同じ数字が2回出てくることはありません)。
この2つの数字のうち、1つ目の数値を「a」、2つ目の数値を「b」とします。「c」の値が、「a」を5乗した値ならば「0」を、「b」を5乗した値ならば「1」を戻すプログラムを書いてください。
LV1
3回挑戦しました。
1回目:16文字
問題文そのままに、安直に5乗したコードがこちら。
(b*b*b*b*b==c)+0
2回目:12文字
規則性に気づいてまず書いたコードがこちら。
+!((c-b)%10)
3回目:11文字
最短コードになりました。
(c-a)%10&&1
LV2
30文字
-(c-a).toFixed().substr(-1)&&1
数値⇒文字列変換はtoFixed、末尾はsubstr(-1)を使いました、というかそれ以外わかりませんでした。
解説記事を見ると、escape(n)とか他にもいろいろあったんですね。
そして新たなダンジョンへ続く…。
挑戦者求む!【JavaScript】あべこべのダンジョン - LV1 by クロノス・クラウン合同会社 柳井 政和│CodeIQ