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
Become a Pro
speakerdeck
PRO
29
5.4k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Faster Mobile Websites
deanohume
307
31k
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.4k
Build The Right Thing And Hit Your Dates
maggiecrowley
36
2.8k
Rails Girls Zürich Keynote
gr2m
95
14k
Designing for Performance
lara
610
69k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.5k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
Embracing the Ebb and Flow
colly
86
4.7k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
A designer walks into a library…
pauljervisheath
207
24k
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など)を経験した子供が 自由研究の題材として使うのも良いかもしれない
• 皆様も触ってみてはいかがでしょうか? 以上