はじめに
今回、日本語プログラミング言語である「プロデル」について、Kaggle Noteboook上でLinuxコマンドを使ってコードを実行できるか試してみました。
Kaggle Notebook 環境
KaggleのバックエンドはUbuntuベースのLinux環境であり、NotebookにはPythonの実行環境が備わっていますが、Linuxコマンドを使い各種言語を実行することも可能です。利用はフロントエンドで完結する範囲に限定されますが、自分のPC環境に手を加えることなく、いろいろ試せるので便利です。
MONOのインストール
MONOは、C#をはじめとする.NETアプリケーションをクロスプラットフォームで開発および実行するためのオープンソースのフレームワークです。Microsoftの.NET Frameworkに基づいており、LinuxやmacOS、Windowsなど、異なるプラットフォームで動作するよう設計されています。
LinuxコマンドでMonoをインストールします。
!apt install ca-certificates gnupg -y
!gpg --homedir /tmp --no-default-keyring --keyring /usr/share/keyrings/mono-official-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
!echo "deb [signed-by=/usr/share/keyrings/mono-official-archive-keyring.gpg] https://download.mono-project.com/repo/ubuntu stable-focal main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
!apt install mono-devel -y
MONO版プロデルをインストール
続いて、MONO版プロデルをインストールします。
!wget -O produire-mono.tar.gz https://produ.irelang.jp/downloads/mono/latest.php?type=tar
!tar zxvf produire-mono.tar.gz
実行例1: プロデルでHello World
- rdrファイルの作成
codeの中にプログラム文を記載し、rdrファイルとして保存する。
code = """
「Hello, Produire!」と表示する
「こんにちは、プロデル!」と表示する
"""
with open("hello.rdr", "w") as f:
f.write(code)
- rdrファイルの実行
!mono pconsole.exe hello.rdr
# Hello, Produire!
# こんにちは、プロデル!
実行例2: Harshad数
以前の記事でも取り上げた問題を例にします。
整数Xを十進法で表したときの各桁の数字の和をf(X)としたとき、Xがf(X)で割り切れる場合、Xはハーシャッド数です。
整数Nが与えられるので、ハーシャッド数かどうか判定してください。
実行例2-1: 引数の値を直接コードに書き込む
- rdrファイルの作成
code2 = """
X0=「12」
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」を表示。
"""
with open("harshad.rdr", "w") as f:
f.write(code2)
!mono pconsole.exe harshad.rdr
# Yes
実行例2-2: 引数情報を別ファイルから渡す
- txtファイルの作成
code1="""12"""
with open("input.txt", "w") as f:
f.write(code1)
*rdrファイルの作成
code2 = """
X0は、プログラムの起動時設定(1)から読み込んだもの
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」を表示。
"""
with open("harshad.rdr", "w") as f:
f.write(code2)
!mono pconsole.exe harshad.rdr input.txt
# Yes