Suche senden
Hochladen
X hago2 shortcoding 20110827
•
1 gefällt mir
•
1,576 views
U
uskey512
Folgen
AOJ[0006] 53B
Weniger lesen
Mehr lesen
Diashow-Anzeige
Melden
Teilen
Diashow-Anzeige
Melden
Teilen
1 von 19
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Map
Map
kikairoya
すごいConstたのしく使おう!
すごいConstたのしく使おう!
Akihiro Nishimura
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
natrium11321
C++入門?
C++入門?
tsudaa
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
Kohsuke Yuasa
emc++ chapter32
emc++ chapter32
Tatsuki SHIMIZU
Ruby紹介3(pdf)
Ruby紹介3(pdf)
Gohryuh
Empfohlen
Map
Map
kikairoya
すごいConstたのしく使おう!
すごいConstたのしく使おう!
Akihiro Nishimura
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
natrium11321
C++入門?
C++入門?
tsudaa
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
Kohsuke Yuasa
emc++ chapter32
emc++ chapter32
Tatsuki SHIMIZU
Ruby紹介3(pdf)
Ruby紹介3(pdf)
Gohryuh
Emcjp item21
Emcjp item21
MITSUNARI Shigeo
モナドハンズオン前座
モナドハンズオン前座
bleis tift
関数型プログラミング in javascript
関数型プログラミング in javascript
Ryuma Tsukano
並行プログラミングと継続モナド
並行プログラミングと継続モナド
Kousuke Ruichi
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
C++11概要 ライブラリ編
C++11概要 ライブラリ編
egtra
お前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのか
Kousuke Ebihara
yieldとreturnの話
yieldとreturnの話
bleis tift
templateとautoの型推論
templateとautoの型推論
MITSUNARI Shigeo
業務報告会
業務報告会
Tomofumi Takayama
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
勝成 鈴江
言語処理系入門4
言語処理系入門4
Kenta Hattori
Scala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみた
Kazuyuki TAKASE
Emcjp item33,34
Emcjp item33,34
MITSUNARI Shigeo
Clojure programming-chapter-2
Clojure programming-chapter-2
Masao Kato
Implicit Implicit Scala
Implicit Implicit Scala
Kota Mizushima
Java電卓勉強会資料
Java電卓勉強会資料
Toshio Ehara
2011年12月9日
2011年12月9日
nukaemon
C++でHello worldを書いてみた
C++でHello worldを書いてみた
firewood
勉強会課題①
勉強会課題①
真亮 坂口
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
Ransui Iso
Material
Material
_TUNE_
Weitere ähnliche Inhalte
Was ist angesagt?
Emcjp item21
Emcjp item21
MITSUNARI Shigeo
モナドハンズオン前座
モナドハンズオン前座
bleis tift
関数型プログラミング in javascript
関数型プログラミング in javascript
Ryuma Tsukano
並行プログラミングと継続モナド
並行プログラミングと継続モナド
Kousuke Ruichi
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
C++11概要 ライブラリ編
C++11概要 ライブラリ編
egtra
お前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのか
Kousuke Ebihara
yieldとreturnの話
yieldとreturnの話
bleis tift
templateとautoの型推論
templateとautoの型推論
MITSUNARI Shigeo
業務報告会
業務報告会
Tomofumi Takayama
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
勝成 鈴江
言語処理系入門4
言語処理系入門4
Kenta Hattori
Scala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみた
Kazuyuki TAKASE
Emcjp item33,34
Emcjp item33,34
MITSUNARI Shigeo
Clojure programming-chapter-2
Clojure programming-chapter-2
Masao Kato
Implicit Implicit Scala
Implicit Implicit Scala
Kota Mizushima
Java電卓勉強会資料
Java電卓勉強会資料
Toshio Ehara
2011年12月9日
2011年12月9日
nukaemon
C++でHello worldを書いてみた
C++でHello worldを書いてみた
firewood
勉強会課題①
勉強会課題①
真亮 坂口
Was ist angesagt?
(20)
Emcjp item21
Emcjp item21
モナドハンズオン前座
モナドハンズオン前座
関数型プログラミング in javascript
関数型プログラミング in javascript
並行プログラミングと継続モナド
並行プログラミングと継続モナド
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
C++11概要 ライブラリ編
C++11概要 ライブラリ編
お前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのか
yieldとreturnの話
yieldとreturnの話
templateとautoの型推論
templateとautoの型推論
業務報告会
業務報告会
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
言語処理系入門4
言語処理系入門4
Scala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみた
Emcjp item33,34
Emcjp item33,34
Clojure programming-chapter-2
Clojure programming-chapter-2
Implicit Implicit Scala
Implicit Implicit Scala
Java電卓勉強会資料
Java電卓勉強会資料
2011年12月9日
2011年12月9日
C++でHello worldを書いてみた
C++でHello worldを書いてみた
勉強会課題①
勉強会課題①
Ähnlich wie X hago2 shortcoding 20110827
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
Ransui Iso
Material
Material
_TUNE_
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
Ransui Iso
テーマ「最適化」
テーマ「最適化」
technocat
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
Usp友の会勉強会、ジャクソン構造図の巻(前編)
Usp友の会勉強会、ジャクソン構造図の巻(前編)
umidori
プログラマ講習第3回
プログラマ講習第3回
Yuma Yoshimoto
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
Preferred Networks
Scalaの限定継続の応用と基本
Scalaの限定継続の応用と基本
Kota Mizushima
Scalaの限定継続の応用と基本(改訂版)
Scalaの限定継続の応用と基本(改訂版)
Kota Mizushima
Boost jp9 program_options
Boost jp9 program_options
nyaocat
第12回計算機構成
第12回計算機構成
眞樹 冨澤
C++14言語編
C++14言語編
Mitsuru Kariya
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
Ouka Yuka
講座C入門
講座C入門
Tokai University
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
CHY72
人工無脳バトル 1st STEP 回答と解説
人工無脳バトル 1st STEP 回答と解説
JustSystems Corporation
Usp友の会勉強会、ジャクソン構造図の巻(後編)
Usp友の会勉強会、ジャクソン構造図の巻(後編)
umidori
Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
Ähnlich wie X hago2 shortcoding 20110827
(20)
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
Material
Material
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
テーマ「最適化」
テーマ「最適化」
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Usp友の会勉強会、ジャクソン構造図の巻(前編)
Usp友の会勉強会、ジャクソン構造図の巻(前編)
プログラマ講習第3回
プログラマ講習第3回
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
Scalaの限定継続の応用と基本
Scalaの限定継続の応用と基本
Scalaの限定継続の応用と基本(改訂版)
Scalaの限定継続の応用と基本(改訂版)
Boost jp9 program_options
Boost jp9 program_options
第12回計算機構成
第12回計算機構成
C++14言語編
C++14言語編
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
講座C入門
講座C入門
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
人工無脳バトル 1st STEP 回答と解説
人工無脳バトル 1st STEP 回答と解説
Usp友の会勉強会、ジャクソン構造図の巻(後編)
Usp友の会勉強会、ジャクソン構造図の巻(後編)
Ekmett勉強会発表資料
Ekmett勉強会発表資料
Ekmett勉強会発表資料
Ekmett勉強会発表資料
X hago2 shortcoding 20110827
1.
変態ショートコーダーへの道
@uskey512
2.
自己紹介 今をときめく(脳内)ゆるふわ系プログラマ 競技プログラマ畑な人 コーラは一日2リットルまで
のうき☆マヂカ
3.
ショートコーディングって何? A. ある機能を実現する際に、
記述するコードを可能な限り短くする行為 さようなら、可読性。こんにちは、新世界。
4.
必要な心構え ・出来るだけ行儀悪くコードを書く ・演算順序や(コード上)短い処理への置換、 データの持ち方、アルゴリズム等を意識する。 ・環境固有の動作や処理系の内部まで考える
そして1Byteに命(睡眠時間)を賭ける気概
5.
何をもって実現とみなすのか 実行環境に差異があってはならず、 ショートコーダー達が共通の条件で同じ問題と戦えなければならない。 →オンラインジャッジシステムの利用 - PKU (北京大学)
http://poj.org/ 利用可能言語: C, C++, Java, Pascal, Fortran - AOJ (会津大学) http://judge.u-aizu.ac.jp/onlinejudge/ 利用可能言語: C, C++, Java
6.
ショートコーディング例 [AOJ 0006] Reverse
Sequence 文字列 str を入力したとき、その文字列を逆順に 出力するプログラムを作成して下さい。文字は半 角英数字のみで、20 文字以内とします。 http://goo.gl/C7H5u
7.
普通に解いてみる (217B(161B)) #include
<stdio.h> #include <string.h> int main(void) { char i, str[21]; scanf("%s", str); for (i = strlen(str) - 1; 0 <= i; i--){ printf("%c", str[i]); } printf("¥n"); ・配列に文字列を入れて、逆順で表示 return (0); } ・出力時に改行入れないとダメだったり
8.
行儀悪く解いてみる (167B(115B)) main()
{ char i, str[21]; scanf("%s", str); for (i = strlen(str) - 1; 0 <= i; i--){ printf("%c", str[i]); } printf("¥n"); ・インクルード宣言は省略しても動く return (0); ・関数,変数の型宣言は省略可能 } ・voidは省略可能 gccってすごいコンパイラ!!
9.
同じ処理に置き換える (145B(98B)) main(i)
-1 => 11111111(2) iが0以上 { ↓ ↓ char str[21]; ~-1 => 00000000(2) iが-1でない scanf("%s", str); for (i = strlen(str); ~--i;){ putchar(str[i]); } puts(""); ・printfをputs, putcharで置換 return 0; ・ループ条件のまとめ } ・mainの引数使えば宣言しなくても 普通の解き方じゃここまでか…
10.
ちょっと頭を使ってみる 入力された文字列の逆を表示する…
T 出力時 S E 入力時 T (やや強引に)これはスタックだ…
11.
再帰でスタックっぽく扱う (114B(79B)) main(i){
if (i != 10){ main(getchar()); ¥n } else return 0; T putchar(i-1?i:10); return 0; S } E ・再帰でスタック領域の変数を使う →配列宣言不要(添字演算子文短く(ry T ・最後の改行は表示せず、 ¥n 最初の文字の前に改行を表示する処理
12.
IFとか要らないですしおすし(84B(61B)) main(i){
i-10 && main(getchar()) & putchar(i-1?i:10); return 0; } ・AND演算子(&&)で接続した式は、 最初の式の結果によって実行されるか決定 If文とかそんなものなかった!
13.
予約語なんて消えちまえ! (72B(53B)) j;main(i){
j=i-10 && main(getchar()) / putchar(i-1?i:10); } ・return文で設定される戻り値は eaxレジスタに設定される。 →じゃあeaxレジスタに0が入ればreturn文は要らない! →ダミーの除算で0を入れてやる。 →→でも除算処理だけだと最適化で削除され(ry 予約語は死んだ!(ニーチェ コレが最短だぜうおおおおお!
14.
これで最短やで!(ドヤ顔投稿
15.
これで最短やで!(ドヤ顔投稿
16.
┐(´ー`)┌
17.
これで最短やで!(ドヤ顔投稿
卒研担当教授は出しぬいた!
18.
まとめ(白目 メリット ・(変態的な)アルゴリズムを勉強できる ・処理系のディープな中身も勉強できる! ・頭がやわらかくなる→ボケ防止? デメリット ・業務中に-1ならチルダ判定一択だろJKとか思っちゃう ・汚いコードの中の何かに目覚める
やってみると意外と楽しいよ! みんなもショートコーディングしようぜ!
19.
おまけ AOJに投稿する時の見た目 j;main(i){j=i-10&&main(getchar())/putchar(i-1?i:10);}
Jetzt herunterladen