前にプログラミング問題の解答をAIに頼んで別言語に書き換えさせる記事を書きました。
あんまり上手くいかなかったので再チャレンジします。
この記事はpaizaの問題の答えを
AIに頼んで別言語に書き換えさせようという試みです。
Pythonの解答をPowerShellに書き換えさせてみます。
paizaとは
ブラウザ上でコードを書いて実行できる、無料プログラミング練習問題集です。
- 難易度別に問題を選ぶ
- 問題文を読んで、解答コードを書く
- 提出するとテストケースが実行されて結果をわかる
- 正解・不正解だけではなく、解答コード例や解説も見ることができるので、プログラミングの習得から復習まで活用できます
こんな人におすすめ
- プログラミングスキルの腕試しをしたい方
- プログラミングのスキルアップしたい方
- 新しい言語にチャレンジをしたい方
問題
3Dプリンタ (Bランク相当)
Pythonで書いた解答
X, Y, Z = map(int, input().split())
grid = [[0] * Y for _ in range(Z)]
for z in range(Z):
for x in range(X):
s = input().strip()
for y in range(Y):
if s[y] == '#':
grid[z][y] = 1
bar = input()
for z in range(Z - 1, -1, -1):
for y in range(Y):
if grid[z][y] == 1:
print("#", end="")
else:
print(".", end="")
print()
↑これを元にAIへ質問を投げます。
「
PythonプログラムをPowerShell Ver5.1プログラムに書き換えてください。
プログラムを書き換えるときに次のポイントに注意してください
・変数は全て半角小文字とする
・標準入力をスプリットするときは(read-host).split()と書く
」
AIの解答:
# 入力を取得
$x, $y, $z = (read-host).split() | ForEach-Object { [int]$_ }
# グリッドを初期化
$grid = @()
for ($i = 0; $i -lt $z; $i++) {
$grid += ,(@(0) * $y)
}
# グリッドにデータを入力
for ($i = 0; $i -lt $z; $i++) {
for ($j = 0; $j -lt $x; $j++) {
$s = read-host "Enter row for Z=$i, X=$j"
for ($k = 0; $k -lt $y; $k++) {
if ($s[$k] -eq '#') {
$grid[$i][$k] = 1
}
}
}
# バーの入力 (この変数は使用しないが、指定された仕様に従う)
$bar = read-host
}
# グリッドを逆順で出力
for ($i = $z - 1; $i -ge 0; $i--) {
for ($j = 0; $j -lt $y; $j++) {
if ($grid[$i][$j] -eq 1) {
write-host -NoNewline "#"
} else {
write-host -NoNewline "."
}
}
write-host
}
まとめと解説:
前回記事ではPythonのプログラムをPowerShellに書き換えるように指示しただけでしたので失敗してしまいましたが、今回は注意点も合わせて伝えてみました。
- 変数は全て半角小文字とする
PowerShellでは変数の大文字・小文字の区別がないので変数Aも変数aも同じ扱いになります、AIはこれを学習していないみたいなので変数名を小文字限定に指示しました。
- 標準入力をスプリットするときは(read-host).split()と書く
標準入力の書き方も学習していないようなので指示しました。この指示がないと「read-host -split " "」と書かれてしまいます。
このように使いこなすのにプログラミング知識が必要で、細かい指示をいちいちしないと答えが出せないのでは、まだまだAIは発展中のツールなのだと思います。
「プログラミング知識が無くてもプログラムが書ける」という謳い文句のツールは昔からあって30年以上前の汎用機時代からあります。COBOLをJAVAに書き換えるとか、フローチャートをプログラムに置き換えるとか、文章をプログラムに置き換えるとか、いろいろありましたけど、どれもイマイチでした。
どうしてメディア(マーケッター)の人たちが絶賛しまくっているのか?
投資家からお金を集めたいとか、労働者の単価を下げたいとか?