O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
Bashで
競技プログラミング
AtCoder
佐伯研M2 松田
自己紹介
•  松田 淳平
•  東工大 佐伯研M2
•  JavaとかKotlinとかRubyとかシェル芸とか
•  twitter:@fat_daruuuuma, github:jmatsu
Bash
•  Bourne-again shell
•  シェルスクリプトが実行できる
•  各種コマンドを呼び出す
•  オブジェクト指向ではない
競技プログラミング
•  制限時間,メモリ制限の中で,問題となってい
るプログラムを実装する競技
•  普通
•  いかに早く実装するか
•  Solveした問題数
•  異端(?)
•  いかに短く実装するか
•  いかに実行速度を早くするか...
Bashで競技プログラミング
•  いけそうな気がする


BashCoder

https://github.com/jmatsu/BashCoder
BashでAtCoder
•  実行言語をBashで,AtCoderの問題を解く
•  ツラい
•  大抵TLE
•  大抵MLE
•  BashCoder
•  https://github.com/jmatsu/BashCoder
BashでAtCoderのツラさ
•  各種コマンドを呼び出せるだけ
•  しかもコマンドは基本ビルドオプション無し
•  awkならでかい整数を扱うにはビルド時に設定が必要
•  オブジェクト指向ではない
•  配列がゴミ
•  関数や変数の...
BashでAtCoderの楽しさ
•  TLEで汎用プログラミング言語の偉大さを体感
•  Javaめっちゃ早い!!Java!!!!!
•  いかにオーバヘッドを失くすかという頭の体操
•  関数呼び出しがオーバヘッド = 下手な再帰は罠
• ...
BashでAtCoderの楽しさ
•  TLEで汎用プログラミング言語の偉大さを体感
•  Javaめっちゃ早い!!Java!!!!!
•  いかにオーバヘッドを失くすかという頭の体操
•  関数呼び出しがオーバヘッド = 下手な再帰は罠
• ...
え、でも、そもそもできんの?
•  できます(多分)
•  まだ簡単なの50個くらいしか解いてないけど
BashでAtCoderの制限
•  使える計算用コマンドは基本グローバルスコー
プ!!!!
•  調子乗ってループ変数をかぶらせるとバグる
•  関数内定義もグローバルスコープ
•  関数の引数だけが関数内スコープ
•  多次元配列はawkし...
Bashのための問題もある
•  ABC002 B
•  http://abc002.contest.atcoder.jp/tasks/abc002_2
•  与えられた文字列から母音を消す
•  解答 tr ‒d [aiueo]
Zshじゃs...
Bashのための問題もある
•  ABC002 B
•  http://abc002.contest.atcoder.jp/tasks/abc002_2
•  与えられた文字列から母音を消す
•  解答 tr ‒d [aiueo]
•  Zsh...
シェル芸のための問題もある
•  ABC018 A
•  http://abc018.contest.atcoder.jp/tasks/abc018_1
•  与えられた3つの数字の順位を出す
•  解答 rev¦grep -n .¦rev¦s...
シェル芸のための問題もある
•  ABC018 A
•  http://abc018.contest.atcoder.jp/tasks/abc018_1
•  与えられた3つの数字の順位を出す
•  解答 rev¦grep -n .¦rev¦s...
勿論Bash殺しもある
•  ATC001 B Union find
•  http://atc001.contest.atcoder.jp/tasks/atc001_2
•  Union find.関数いっぱい呼び出す
•  解答 ☓ Bashで...
勿論Bash殺しもある
•  ATC001 B Union find
•  http://atc001.contest.atcoder.jp/tasks/abc001_2
•  Union find.関数いっぱい呼び出す
•  解答 ☓ Bashで...
他にも楽しさ
•  ショートコーディングがしやすい
•  反転やソートなどがコマンドで存在
•  パイプで繋いでくワンライナー
•  超気持ちいい
•  嫌でもコマンドに詳しくなる
•  便利.はかどる.研究にも最高
•  シェル芸が合法的に認...
謝辞
•  AtCoder社
•  いっぱい提出してマシン働かせてごめんなさ
い・・・
•  (各種コマンドのバージョンとビルドオプション
が知りたいです)
•  USP友の会を始め,全国のシェル芸人の皆さん
•  ブログや記事に助けられていま...
おまけ
•  AtCoder提出コマンドを作りました
•  Gpst
•  https://github.com/jmatsu/gpst
•  対話的&&コンフィグ利用をすることで,言語選択
や問題選択を間違えてWAとかしない!!!!
•  自...
Próximos SlideShares
Carregando em…5
×

Bashで競技プログラミング #w8lt #w8lt4

5.381 visualizações

Publicada em

東工大西8号館LT用
Bashで競技プログラミングをやるツラい話

Publicada em: Tecnologia
  • Seja o primeiro a comentar

Bashで競技プログラミング #w8lt #w8lt4

  1. 1. Bashで 競技プログラミング AtCoder 佐伯研M2 松田
  2. 2. 自己紹介 •  松田 淳平 •  東工大 佐伯研M2 •  JavaとかKotlinとかRubyとかシェル芸とか •  twitter:@fat_daruuuuma, github:jmatsu
  3. 3. Bash •  Bourne-again shell •  シェルスクリプトが実行できる •  各種コマンドを呼び出す •  オブジェクト指向ではない
  4. 4. 競技プログラミング •  制限時間,メモリ制限の中で,問題となってい るプログラムを実装する競技 •  普通 •  いかに早く実装するか •  Solveした問題数 •  異端(?) •  いかに短く実装するか •  いかに実行速度を早くするか •  いかに実行速度を遅くするか
  5. 5. Bashで競技プログラミング •  いけそうな気がする
  6. 6. 
 BashCoder
 https://github.com/jmatsu/BashCoder
  7. 7. BashでAtCoder •  実行言語をBashで,AtCoderの問題を解く •  ツラい •  大抵TLE •  大抵MLE •  BashCoder •  https://github.com/jmatsu/BashCoder
  8. 8. BashでAtCoderのツラさ •  各種コマンドを呼び出せるだけ •  しかもコマンドは基本ビルドオプション無し •  awkならでかい整数を扱うにはビルド時に設定が必要 •  オブジェクト指向ではない •  配列がゴミ •  関数や変数の呼び出しのオーバヘッドがでかすぎ •  早い計算は向いてない •  整数と文字列しかない •  しかも長さに制限がある •  ARCではCから,ABCではDから人生がツラい
  9. 9. BashでAtCoderの楽しさ •  TLEで汎用プログラミング言語の偉大さを体感 •  Javaめっちゃ早い!!Java!!!!! •  いかにオーバヘッドを失くすかという頭の体操 •  関数呼び出しがオーバヘッド = 下手な再帰は罠 •  BSDとGNUの違いをWAで体感できる •  あとはBSD(Mac)で書いてもREだったり •  超シェル芸が上達する
  10. 10. BashでAtCoderの楽しさ •  TLEで汎用プログラミング言語の偉大さを体感 •  Javaめっちゃ早い!!Java!!!!! •  いかにオーバヘッドを失くすかという頭の体操 •  関数呼び出しがオーバヘッド = 下手な再帰は罠 •  BSDとGNUの違いをWAで体感できる •  あとはBSD(Mac)で書いてもREだったり •  超シェル芸が上達する •  なんかすごいできた気になる
  11. 11. え、でも、そもそもできんの? •  できます(多分) •  まだ簡単なの50個くらいしか解いてないけど
  12. 12. BashでAtCoderの制限 •  使える計算用コマンドは基本グローバルスコー プ!!!! •  調子乗ってループ変数をかぶらせるとバグる •  関数内定義もグローバルスコープ •  関数の引数だけが関数内スコープ •  多次元配列はawkしか使えない!!!! •  しかもawkじゃ間に合わないことがある •  ビット演算がない!!!!!! •  自分で実装する •  関数を呼び出し過ぎたら負け!!!! •  自分で末尾再帰最適化しましょう^_^
  13. 13. Bashのための問題もある •  ABC002 B •  http://abc002.contest.atcoder.jp/tasks/abc002_2 •  与えられた文字列から母音を消す •  解答 tr ‒d [aiueo] Zshじゃsyntax error •  ABC004 B •  http://abc004.contest.atcoder.jp/tasks/abc004_2 •  与えられた文字列群を180度回転 •  解答 tac¦rev Macはtacがないのでtail -r
  14. 14. Bashのための問題もある •  ABC002 B •  http://abc002.contest.atcoder.jp/tasks/abc002_2 •  与えられた文字列から母音を消す •  解答 tr ‒d [aiueo] •  Zshじゃsyntax error •  ABC004 B •  http://abc004.contest.atcoder.jp/tasks/abc004_2 •  与えられた文字列群を180度回転 •  解答 tac¦rev •  Macはtacがないのでtail -r
  15. 15. シェル芸のための問題もある •  ABC018 A •  http://abc018.contest.atcoder.jp/tasks/abc018_1 •  与えられた3つの数字の順位を出す •  解答 rev¦grep -n .¦rev¦sort -rn¦grep -n .¦rev¦sort¦rev¦cut -c1 •  反転して順序つけて,戻して昇順に並び替え,順序つけて反転して最初 の順序に並び替え,反転して2回目につけた順序を取り出す •  ABC009 B •  http://abc009.contest.atcoder.jp/tasks/abc009_2 •  与えられた数字群から2番目に大きい数を出す •  解答 read N;tail -$N¦sort¦uniq¦sort -rn¦head -2¦tail -1 •  指定番号だけ読み込み,文字列で並び替えて重複削除,数字昇順で並 び替えて2番目取り出し
  16. 16. シェル芸のための問題もある •  ABC018 A •  http://abc018.contest.atcoder.jp/tasks/abc018_1 •  与えられた3つの数字の順位を出す •  解答 rev¦grep -n .¦rev¦sort -rn¦grep -n .¦rev¦sort¦rev¦cut -c1 •  反転して順序つけて,戻して昇順に並び替え,順序つけて反転して最初 の順序に並び替え,反転して2回目につけた順序を取り出す •  ABC009 B •  http://abc009.contest.atcoder.jp/tasks/abc009_2 •  与えられた数字群から2番目に大きい数を出す •  解答 read N;tail -$N¦sort¦uniq¦sort -rn¦head -2¦tail -1 •  指定番号だけ読み込み,文字列で並び替えて重複削除,数字昇順で並 び替えて2番目取り出し
  17. 17. 勿論Bash殺しもある •  ATC001 B Union find •  http://atc001.contest.atcoder.jp/tasks/atc001_2 •  Union find.関数いっぱい呼び出す •  解答 ☓ BashでOOはTLE, 関数呼び出し最小化でも TLE ○ awkかbcで配列使ってunion find •  ABC003 D •  http://abc003.contest.atcoder.jp/tasks/abc003_4 •  部屋のレイアウト問題 •  dpやcombinationで解ける •  解答 ☓ dpはTLE, combでもawkじゃTLE ○ bcで局所最適なビット演算を実装して combキャッシュを利用して計算
  18. 18. 勿論Bash殺しもある •  ATC001 B Union find •  http://atc001.contest.atcoder.jp/tasks/abc001_2 •  Union find.関数いっぱい呼び出す •  解答 ☓ BashでOOはTLE, 関数呼び出し最小化でも TLE ○ awkかbcで配列使ってunion find •  ABC003 D •  http://abc003.contest.atcoder.jp/tasks/abc003_4 •  部屋のレイアウト問題 •  dpやcombinationで解ける •  解答 ☓ dpはTLE, combでもawkじゃTLE ○ bcで局所最適なビット演算を実装して combキャッシュを利用して計算
  19. 19. 他にも楽しさ •  ショートコーディングがしやすい •  反転やソートなどがコマンドで存在 •  パイプで繋いでくワンライナー •  超気持ちいい •  嫌でもコマンドに詳しくなる •  便利.はかどる.研究にも最高 •  シェル芸が合法的に認められる •  最高
  20. 20. 謝辞 •  AtCoder社 •  いっぱい提出してマシン働かせてごめんなさ い・・・ •  (各種コマンドのバージョンとビルドオプション が知りたいです) •  USP友の会を始め,全国のシェル芸人の皆さん •  ブログや記事に助けられています •  特に@ryuichiueda さんや@hi_saito さんには深い感謝 の意を云々
  21. 21. おまけ •  AtCoder提出コマンドを作りました •  Gpst •  https://github.com/jmatsu/gpst •  対話的&&コンフィグ利用をすることで,言語選択 や問題選択を間違えてWAとかしない!!!! •  自分の環境に特化すると無駄なのでIssue&PR歓迎 •  Git関係のコマンドを作りました •  フォーク先と簡単に同期 •  https://github.com/jmatsu/syfork •  簡単に外部スクリプトをgit aliasに •  https://github.com/jmatsu/git-fast-alias

×