<div style="margin: 2em 0; font-size: 3rem">
# スマホで始める <br /> 競技プログラミング <br /> (Android 編)
</div>
りすりす/TwoSquirrels
----
<img src="https://github.com/TwoSquirrels.png" alt="" style="height: 6em; float: right;" />
## 1. 自己紹介
<span class="note">
<早口>
traP っていう競プロやゲーム開発や Web 開発からグラフィックやサウンドまで、PC でできる創作すべてをやっているクソデカサークルに所属しているりすりすと申します。
</早口>
それでは本題に入らせていただきます。
(0:30)
</span>
- 名前: **りすりす/TwoSquirrels**
- 趣味:
- プログラミング全般
- **競プロ**
- ゲーム開発 <img src="https://md.trap.jp/uploads/upload_7bcb6ce0c8fce8f3f519ae8542d707bb.png" alt="" style="height: 5em; float: right;" />
- Web 開発
- ツール開発
- 深夜アニメ
- お絵描き
----
## 2. 競プロはハードルが高い!
- コンテスト時間に PC の前にいる必要がある
- AtCoder に出るなら、**貴重な週末の夜** に
PC の前にいなきゃいけない
- 週末の夜は **帰宅中** なことが多いので、
競プロをはじめにくい! **← あるある**
- 問題を解くとき、PC に向き合う必要がある
- **ベッドでごろごろ** しながらできない!
----
## 2. 競プロはハードルが高い!
- コンテスト時間に PC の前にいる必要がある
- AtCoder に出るなら、**貴重な週末の夜** に
PC の前にいなきゃいけない
- 週末の夜は **帰宅中** なことが多いので、
競プロをはじめにくい! **← あるある**
- 問題を解くとき、PC に向き合う必要がある
- **ベッドでごろごろ** しながらできない!
<div style="position: absolute; top: calc(50% - 1.5em); width: 100%; text-align: center; font-size: 3em; background-color: #000000cc; color: #ff99cc;">
**そんな偏見を**
**なくしたい!**
</div>
----
## 3. スマホで始めませんか?
| 電車内でも | ベッドでも |
|:---------------------------------------------------------------------------:|:---------------------------------------------------------------------------:|
|  |  |
----
## 4. でもどうやって?
**実は、なんでもできるスマホアプリがある**
| Android | iOS |
|:-------:|:---:|
| <img src="https://md.trap.jp/uploads/upload_a7ee7426fc7baced0b9592d4b2a907fa.png" width="200px" /> <br /> Termux | <img src="https://md.trap.jp/uploads/upload_675d4012166f019d0fd04168de44d4aa.png" width="200px" /> <br /> iSH Shell |
<br />
<br />
----
## 4. でもどうやって?
**実は、なんでもできるスマホアプリがある**
| **Android** | iOS |
|:-------:|:---:|
| <img src="https://md.trap.jp/uploads/upload_a7ee7426fc7baced0b9592d4b2a907fa.png" width="200px" /> <br /> **Termux** | <img src="https://md.trap.jp/uploads/upload_675d4012166f019d0fd04168de44d4aa.png" width="200px" /> <br /> iSH Shell |
りすりすは iOS 端末を持っていないので、
今回は Termux での方法のみを紹介します
----
## 5. Termux の仕組み
- 実は **Android は Linux ベース**
- ただし、Android はユーザーの権限では
自由に Linux コマンドを叩けない
- そこで Termux は
- **専用のパッケージマネージャーを提供**
- 他の仮想環境系のアプリと違い、
**Android で直接動く**
----
## 6. Termux のインストール
**F-droid 経由で** インストールしてください!
Play Store 版は Google Play の制限によって
古いバージョンで更新が止まっているため非推奨
<img src="https://md.trap.jp/uploads/upload_e545dea7379f7b6ffa7c433384ab62d7.png" style="width:240px; height:360px; object-fit:cover; object-position:top;" />
<img src="https://md.trap.jp/uploads/upload_42191a38464fcbaa6ff10bc414237961.png" style="width:240px; height:360px; object-fit:cover; object-position:top;" />
----
## 7. 後は PC とほぼ同じ
<img src="https://md.trap.jp/uploads/upload_02767ce598d0331fef199feadcce8831.png" style="width:240px; float:right;" />
<div style="display: inline-block; width: 15em;">
必要なパッケージを入れて
```bash
pkg update
pkg upgrade -y
pkg install -y build-essential binutils \
gdb git python pypy3 \
curl wget jq termux-api
```
好きなエディターを入れて
```bash
pkg install -y emacs vim
```
Fastfetch も入るよ
```bash
pkg install -y fastfetch
fastfetch --logo-position top
```
</div>
----
## 8. でもそれ操作キツくない?
**実は、Termux には便利機能がたくさん!**
1. ピンチイン/アウトで **文字サイズを拡大/縮小**
2. いつものキーボードの上に **拡張キーボード**
設定ファイルから **自由にカスタマイズ可能!**
矢印/Ctrl/ESC/Tab などの特殊キーや、
よく使う記号などを置ける
3. 画面長押しでコピーもペーストも可能
----
## 9. 複数のタブが欲しいよ
**あります。** 画面を左からスワイプすると……?
<img src="https://md.trap.jp/uploads/upload_5caaeeeaf04af255b1313b550d46cc31.png" style="width:360px; height:480px; object-fit:cover; object-position:top; float: left;" />
競プロだと、**エディター** と
**実行用のターミナル** で
セッションを分けることが多い
ちなみにりすりすは Emacs を
使っています
----
## 10. 環境構築
`.bashrc` にこういうの書いておくと楽
```bash
export CPLUS_INCLUDE_PATH="$HOME/ac-library"
run() {
if [ "$1" -ot "${1%.*}" ]; then
./"${1%.*}"
return
fi
clang++ -std=c++20 -O2 -Wall -Wextra -DDEBUG -g \
-fsanitize=address,undefined "$1" -o "${1%.*}"
if [ $? -eq 0 ]; then
./"${1%.*}"
fi
}
alias copy='termux-clipboard-set <'
```
----
## 11. いざ、精進!
<img src="https://md.trap.jp/uploads/upload_53c3080b7603a08b7f6dfa3213420536.png" style="width:360px; height:480px; object-fit:cover; object-position:top;" />
<img src="https://md.trap.jp/uploads/upload_b99d874e48aa32ac92bd5a77c4ef3e78.png" style="width:360px; height:480px; object-fit:cover; object-position:top;" />
----
## 12. ありがとうございました
https://md.trap.jp/s/mrrlutY1a
<img src="https://md.trap.jp/uploads/upload_2ee3a47c3a448f775b456eef1107aabd.png" style="float: left;" />
← このページに説明が <br /> 丁寧に書かれています。
<style>
div:has(> .note) {
text-align: left;
.note {
position: absolute;
font-size: 0.4em;
background-color: #333c;
color: #fff;
}
}
.reveal {
/* background-color: #000000; .slides { background-color: #191919; } */
section {
text-align: left;
padding: 0;
}
ul {
display: block;
}
strong {
color: #ff3399;
}
.graphviz {
background-color: transparent;
}
.note {
display: none;
}
}
</style>
{"type":"slide","slideOptions":{"theme":"white","slideNumber":"c/t"}}