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
10
「PG0」触ってみた / debut PG0
tobi00604
March 22, 2024
Tweet
Share
More Decks by tobi00604
See All by tobi00604
ProjectEuler.netを少しだけ遊んでみた / debut ProjectEuler
tobi00604
0
6
MicrosoftのAI製品がCopilotに改名した件 / microsoft copilot brand
tobi00604
0
5
砂糖には防腐効果がある / preservative effect of sugar
tobi00604
0
19
Featured
See All Featured
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
7
520
What's in a price? How to price your products and services
michaelherold
243
12k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
43
6.8k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
A Philosophy of Restraint
colly
203
16k
4 Signs Your Business is Dying
shpigford
180
21k
Fireside Chat
paigeccino
33
3k
BBQ
matthewcrist
85
9.3k
How to Think Like a Performance Engineer
csswizardry
20
1.1k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Code Review Best Practice
trishagee
64
17k
Scaling GitHub
holman
458
140k
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など)を経験した子供が 自由研究の題材として使うのも良いかもしれない
• 皆様も触ってみてはいかがでしょうか? 以上