【paiza】Paizaの規約と生成AIを利用したプログラミングスキルチェックの学習方法について

# はじめに
* Paiza は素晴らしいプログラミングの学習サイトであるが、私個人は「アルゴリズム問題の模範解答が無いから使いにくい」などを理由に上手に活用できていなかった
* 周りの方のお話から「生成AIを活用すれば効果的に学習できるよ」という助言をいただき、以前より Paiza を上手に活用できるようになった
    * あくまで一例ではありますが他の方に共有する目的で記事にまとめる

# 【前置き】Paiza は模範解答が無い理由
* **レベルアップ問題集やプログラミングスキルチェックに<font color="Red">模範解答が無い</font>から辛い**（外部公開できない）
* 模範解答が無い理由として**利用規約に問題に関する内容を外部公開してはならない規約がある**ため、解答はもちろん関連するヒントも公開されていない

:::note alert
* paiza で公開許可されていない問題をブログなどで公開することは禁止されている
    * [この事例のように](https://github.com/xsliang/pa-/issues/1)、ブログはもちろん GitHub 等で外部公開することも禁じられているので注意

> (3) ブログ・SNS等の各種媒体（インターネット媒体に限られず、不特定多数が閲覧可能なものを全て含む。）上において、当社がpaizaで出題した問題の内容、当該問題に対する解答、解答へのヒント等の示唆およびカンニング等の不正を助長する内容等を掲載する行為。
> 
> [第3章 paiza > 第11条（禁止事項）](https://paiza.jp/guide/kiyaku#:~:text=%E5%BF%9C%E5%8B%9F%E3%81%99%E3%82%8B%E8%A1%8C%E7%82%BA-,%E7%AC%AC3%E7%AB%A0%20paiza,-%E7%AC%AC10%E6%9D%A1)

※ 2025/03/14 時点
:::

# 【本題】AI を活用して Paiza を活用する
* Paizaのプログラミングスキルチェックは利用規約の関係で参考にできる資料が無いため、解答が分からないままであったり、他の解法を知れないといったように独学に限界がある

:::note
**生成AIを利用して、答え合わせやリファクタリングを行うことでスキル向上を目指す**
* 以下に示す二種類のプロンプトを使って Paiza のスキルチェックをより効果的に活用する
:::

<font color="Red">**※ 以下のプロンプトは https://paiza.jp/works/mondai/d_rank_skillcheck_archive/email_address を題材としたプロンプトとなっております**</font>

## [1] paizaの問題を解けなかった場合、模範解答を知りたい場合
* 解けなかった問題や模範解答を知りたい場合は以下のプロンプトで模範解答を生成してもらう

:::note warn
* 以下のプロンプトの内、以下の項目を必要に応じて書き換えて入力してください
    1. [使用言語]
    1. [問題文]
    1. [入力例]
    1. [期待する出力]
    1. [制約・条件]
:::

```text:[1] プロンプトの入力例
[問題説明]
次のアルゴリズム問題を解いてください。

[使用言語]
Ruby

[求める解答]
- 可読性の高いコードで書いてください。
- コメントを適宜入れて、処理の流れがわかるようにしてください。
- 時間計算量や空間計算量も考慮して、最適化の余地がある場合は説明してください。

[問題文]
Eメールアドレスとはローカル部とドメインを「@」を繋いだ文字列で表されます。
ローカル部を s ,ドメインを t として、それぞれ長さ n の文字列が改行区切りで入力されます。
以下の構文に沿った文字列を出力してください。
s(ローカル部)@t(ドメイン)
例えば
info
paiza.jp
のような入力の場合
info@paiza.jp
と出力して下さい。

[入力例]
入力は以下のフォーマットで与えられます。

s
t

入力値最終行の末尾に改行が１つ入ります。

[期待する出力]
ローカル部とドメインから以下の構文に沿った文字列を出力してください。
s(ローカル部)@t(ドメイン)
最後は改行し、余計な文字、空行を含んではいけません。

[制約・条件]
すべてのテストケースにおいて、以下の条件をみたします。
・ 1 ≦ n ≦ 64
s , t は半角英数と「.」(半角ドット)で構成された文字列です。
```


## [2] paizaの問題を解けた場合、解答のリファクタリングをする場合
* 問題を解けた場合は自分の回答コードを改善してもらい、別の解法を知る

:::note warn
* 以下のプロンプトの内、以下の項目を必要に応じて書き換えて入力してください
    1. [使用言語]
    1. [問題文]
    1. [入力例]
    1. [期待する出力]
    1. [制約・条件]
    1. [自分のコード]
:::

```text:[2] プロンプトの入力例
[問題説明]
次のアルゴリズム問題を解いてください。

[使用言語]
Ruby

[求める解答]
- 可読性の高いコードで書いてください。
- コメントを適宜入れて、処理の流れがわかるようにしてください。
- 時間計算量や空間計算量も考慮して、最適化の余地がある場合は説明してください。

[問題文]
Eメールアドレスとはローカル部とドメインを「@」を繋いだ文字列で表されます。
ローカル部を s ,ドメインを t として、それぞれ長さ n の文字列が改行区切りで入力されます。
以下の構文に沿った文字列を出力してください。
s(ローカル部)@t(ドメイン)
例えば
info
paiza.jp
のような入力の場合
info@paiza.jp
と出力して下さい。

[入力例]
入力は以下のフォーマットで与えられます。

s
t

入力値最終行の末尾に改行が１つ入ります。

[期待する出力]
ローカル部とドメインから以下の構文に沿った文字列を出力してください。
s(ローカル部)@t(ドメイン)
最後は改行し、余計な文字、空行を含んではいけません。

[制約・条件]
すべてのテストケースにおいて、以下の条件をみたします。
・ 1 ≦ n ≦ 64
s , t は半角英数と「.」(半角ドット)で構成された文字列です。

[自分のコード]
input_line = gets
puts "XXXXXX"


[求めるフィードバック]
- 自分のコードのバグがあれば指摘し、修正してください。
- より効率的な解法があれば提案してください。
- コードの可読性や設計の改善点があれば指摘してください。
- 時間計算量と空間計算量についても解説してください。
```



# 【オススメ】プロンプト入力の手間を省く便利な拡張機能

https://blaze.today/

:::note
こちらの拡張機能を導入することで、面倒な入力の手間を省くことが出来るのでオススメです
:::

### 【登録例】
* このような形で登録しておけば素早く入力が可能になる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518714/68743db8-7ca4-4667-bedd-ded9a9b297dd.png)

# まとめ
* Paiza は解答を外部公開してはならない規約がある
* 規約の関係で参考になる資料が大変少ないので生成AIを活用した勉強法が効果的


---
### 参考資料

https://paiza.jp/guide/kiyaku#:~:text=%E5%BF%9C%E5%8B%9F%E3%81%99%E3%82%8B%E8%A1%8C%E7%82%BA-,%E7%AC%AC3%E7%AB%A0%20paiza,-%E7%AC%AC10%E6%9D%A1

https://github.com/xsliang/pa-/issues/1

https://blaze.today/

https://chromewebstore.google.com/detail/text-blaze-templates-and/idgadaccgipmpannjkmfddolnnhmeklj?hl=ja