Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
「PG0」触ってみた / debut PG0
Search
tobi00604
March 22, 2024
0
11
「PG0」触ってみた / debut PG0
tobi00604
March 22, 2024
Tweet
Share
More Decks by tobi00604
See All by tobi00604
ProjectEuler.netを少しだけ遊んでみた / debut ProjectEuler
tobi00604
0
7
MicrosoftのAI製品がCopilotに改名した件 / microsoft copilot brand
tobi00604
0
14
砂糖には防腐効果がある / preservative effect of sugar
tobi00604
0
38
Featured
See All Featured
Building an army of robots
kneath
306
45k
Navigating Team Friction
lara
187
15k
What's in a price? How to price your products and services
michaelherold
246
12k
It's Worth the Effort
3n
185
28k
Docker and Python
trallard
44
3.5k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.4k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.5k
Git: the NoSQL Database
bkeepers
PRO
430
65k
A designer walks into a library…
pauljervisheath
207
24k
Making the Leap to Tech Lead
cromwellryan
134
9.4k
Transcript
「PG0」触ってみた 学習用にピッタリなプログラミング言語だった! 2024/03/22
PG0とは • プログラミング言語のひとつ • 最大の特徴はとにかくシンプルな文法 • 初心者がつまづきがちな要素がとことん省かれている • プログラミング教室・新人研修・学校の授業などでの 活用を想定している、とのこと
• 本格的なシステム開発に使える言語ではないことに注意
PG0にある要素・ない要素 • 初心者の学習用に特化していることがよく分かる ある要素 ない要素 • 整数型 • 配列 •
If/else文による分岐 • while文による反復 など • 小数型、文字列型 • クラス • 関数 • ビット演算 など
順次・分岐・反復 • PG0はできることが限定的だからこそ、 構造化プログラミングを習得しやすい • 構造化プログラミングとは… • 3種類の基本制御、順次・分岐・反復を 組み合わせた構造でプログラミングしよう、 という考え方のことを指す言葉
• 計算機科学者のダイクストラが 1968年ごろに提唱したとされている
PG0を触ってみよう • Webブラウザ版が手軽で便利 ⇒ https://nakka.com/pg0/ • 余談だが、PG0を拡張させたPG0.5というものもある • 機能が豊富なのでプログラミング経験者向け •
画面描画APIを使えば簡単なゲーム制作もできる
PG0専用の実行ツールがすごい • 処理の進行状況が分かりやすいインターフェース • いわゆるステップ実行、変数のウォッチ、 ブレークポイントの設置といった操作ができる
さっそくなにかコーディングしてみる • JOI(日本情報オリンピック)2023/2024 二次予選 A問題 「カードゲーム 2」を解くコードを実装してみる • JOI公式サイト 問題文ページ
• https://www2.ioi-jp.org/joi/2023/2024-yo2/2024-yo2-t1.html
簡単に問題の紹介 • 数字が書かれているカードがいくつかある • 「数字が3ずつ離れている」ような3枚を選びたい • 選ぶことが可能かどうか判定するプログラムを実装せよ • 例えばカードが5枚あって 2,
4, 5, 7, 10 が書かれている場合 ⇒ 4, 7, 10 を選べるので “可能” (4と7の差は3で、7と10の差も3だから)
アルゴリズムの方針 • カード保持状況を管理する配列 b を用意する • 例えばカードが5枚あって 2, 4, 5,
7, 10 が書かれている場合 ⇒b[2], b[4], b[5], b[7], b[10] だけを 1 にする • この配列を使って、「i番目」「i+3番目」「i+6番目」を 変数 i をインクリメントしながらチェックしていけばOK b[0] b[1] b[2] b[3] b[4] b[5] b[6] b[7] b[8] b[9] b[10] 0 0 1 0 1 1 0 1 0 0 1
PG0特有の仕様に合わせる • 本来は、手持ちカードの情報を標準入力で受け取り、 判定結果の文字列(“Yes”/”No”)を標準出力するのだが… • PG0には標準入力や標準出力がない! • 今回は入力するデータをコード内にベタ書きした • 今回は判定結果の値をexit文で返すことにした
• PG0では文字列を扱えない! • 今回は “Yes”/”No” の代わりに整数 1/0 を使うことにした
None
入力データは ベタ書き 変数の中身を確認可能 ※今回の場合は、i=8 と なっていることから、 8, 11, 14 のカードが
選ばれたことが分かる exitされた結果は ここに表示される
オンライン上に保存 • 今回のコードをオンライン上に保存してみた • 固有のURLが割り当てられ、 誰でも参照可能、実行可能な状態となった • https://nakka.com/pg0/?cid=d231eeab-b968-4b90-bfc3-33aec2229925 • このコード公開機能は、研修や授業などの参加者同士が
お互いのコードをレビューしたりするとき役立ちそう!
終わりに • とにかくとっつきやすかった • 実際触ってみて「これ何だろう」と悩む場面が全くなかった • 言語仕様はもちろん、開発ツールが使いやすくて嬉しい • ビジュアルプログラミング(Scratchなど)を経験した子供が 自由研究の題材として使うのも良いかもしれない
• 皆様も触ってみてはいかがでしょうか? 以上