はじめに
日本語のプログラミング言語になでしこ、プロデルがあります。共に、AtCoderで採用されており、それぞれの言語で解答を提出することができます。
今回、同じ問題を両者で解いてみた時、仕様の違いが興味深かったので紹介します。
やり方としては、まずPythonを用いて解答を作り、それをなでしこ、プロデルに翻訳するという形をとります。
問題
整数Xを十進法で表したときの各桁の数字の和をf(X)としたとき、Xがf(X)で割り切れる場合、Xはハーシャッド数です。
整数Nが与えられるので、ハーシャッド数かどうか判定してください。
python解答
X0=int(input())
M=0
X=X0
for i in range(len(list(str(X0)))):
M+=X%10
X=X//10
if X0%M==0:
print('Yes')
else:
print('No')
翻訳のポイント
数字を文字列として見た時の字数はいくらか
[python]
len(list(str(X0)))
[なでしこ]
Y0=X0を文字列変換。
LはY0の文字数。
[プロデル]
Lは[X0]の文字数。 ・・・・・・[]の用法が便利に使える
Xを、Xを10で割った時の商で置き換える
[python]
X=X//10
[なでしこ]
X=X/10の整数部分。
[プロデル]
Yは、X/10を切り捨てたもの。
X=Y ・・・・・・後からYをXに代入する
X0がMで割り切れるならば
[python]
if X0%M==0:
[なでしこ]
もしX0%M=0ならば、
[プロデル]
ANS=X0%M ・・・・・・計算は先に済ませる
もしANSの整数が0ならば、 ・・・・・・整数指定が必要
これらのポイントに対応することでAC解答できます。
なでしこ解答
入力を尋ねて、X0に代入。
Y0=X0を文字列変換。
LはY0の文字数。
M=0
X=X0
i を 0 からLまで繰り返す。
M=M+X%10
X=X/10の整数部分。
ここまで。
もしX0%M=0ならば、"Yes"を表示。
違えば、"No"を表示。
プロデル解答
X0は、コンソールから受け取ったもの。
Lは[X0]の文字数。
M=0
X=X0
iを1から1ずつ増やしながらL+1まで繰り返す。
M=M+X%10
Yは、X/10を切り捨てたもの。
X=Y
繰り返し終わり。
ANS=X0%M
もしANSの整数が0ならば、「Yes」を表示。
そうでなければ、「No」を表示。
終わりに
AtCorderの簡単な問題をいろいろな言語で解いています。言語間の違いを相互に知ることで、効率的に多言語並行学習を進めることが可能と考えています。皆様にもおすすめします。