Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
変態ショートコーダーへの道        @uskey512
自己紹介今をときめく(脳内)ゆるふわ系プログラマ競技プログラマ畑な人コーラは一日2リットルまで             のうき☆マヂカ
ショートコーディングって何?A. ある機能を実現する際に、   記述するコードを可能な限り短くする行為      さようなら、可読性。こんにちは、新世界。
必要な心構え・出来るだけ行儀悪くコードを書く・演算順序や(コード上)短い処理への置換、データの持ち方、アルゴリズム等を意識する。・環境固有の動作や処理系の内部まで考える      そして1Byteに命(睡眠時間)を賭ける気概
何をもって実現とみなすのか実行環境に差異があってはならず、ショートコーダー達が共通の条件で同じ問題と戦えなければならない。→オンラインジャッジシステムの利用- PKU (北京大学)   http://poj.org/              ...
ショートコーディング例[AOJ 0006] Reverse Sequence文字列 str を入力したとき、その文字列を逆順に出力するプログラムを作成して下さい。文字は半角英数字のみで、20 文字以内とします。             http...
普通に解いてみる (217B(161B)) #include <stdio.h> #include <string.h> int main(void) {     char i, str[21];     scanf("%s", str);  ...
行儀悪く解いてみる (167B(115B)) main() {     char i, str[21];     scanf("%s", str);     for (i = strlen(str) - 1; 0 <= i; i--){    ...
同じ処理に置き換える (145B(98B)) main(i)                       -1 => 11111111(2)   iが0以上 {                                     ↓    ...
ちょっと頭を使ってみる入力された文字列の逆を表示する…              T    出力時              S              E       入力時              T       (やや強引に)これはス...
再帰でスタックっぽく扱う (114B(79B)) main(i){     if (i != 10){            main(getchar());   ¥n     } else return 0;                 ...
IFとか要らないですしおすし(84B(61B))main(i){     i-10 &&     main(getchar()) &     putchar(i-1?i:10);     return 0;}    ・AND演算子(&&)で接続...
予約語なんて消えちまえ! (72B(53B))j;main(i){    j=i-10 &&    main(getchar()) /    putchar(i-1?i:10);}    ・return文で設定される戻り値は     eaxレジ...
これで最短やで!(ドヤ顔投稿
これで最短やで!(ドヤ顔投稿
┐(´ー`)┌
これで最短やで!(ドヤ顔投稿      卒研担当教授は出しぬいた!
まとめ(白目メリット・(変態的な)アルゴリズムを勉強できる・処理系のディープな中身も勉強できる!・頭がやわらかくなる→ボケ防止?デメリット・業務中に-1ならチルダ判定一択だろJKとか思っちゃう・汚いコードの中の何かに目覚める          ...
おまけAOJに投稿する時の見た目j;main(i){j=i-10&&main(getchar())/putchar(i-1?i:10);}
Upcoming SlideShare
Loading in …5
×

X hago2 shortcoding 20110827

2,830 views

Published on

AOJ[0006] 53B

  • Be the first to comment

X hago2 shortcoding 20110827

  1. 1. 変態ショートコーダーへの道 @uskey512
  2. 2. 自己紹介今をときめく(脳内)ゆるふわ系プログラマ競技プログラマ畑な人コーラは一日2リットルまで のうき☆マヂカ
  3. 3. ショートコーディングって何?A. ある機能を実現する際に、 記述するコードを可能な限り短くする行為 さようなら、可読性。こんにちは、新世界。
  4. 4. 必要な心構え・出来るだけ行儀悪くコードを書く・演算順序や(コード上)短い処理への置換、データの持ち方、アルゴリズム等を意識する。・環境固有の動作や処理系の内部まで考える そして1Byteに命(睡眠時間)を賭ける気概
  5. 5. 何をもって実現とみなすのか実行環境に差異があってはならず、ショートコーダー達が共通の条件で同じ問題と戦えなければならない。→オンラインジャッジシステムの利用- PKU (北京大学) http://poj.org/ 利用可能言語: C, C++, Java, Pascal, Fortran- AOJ (会津大学) http://judge.u-aizu.ac.jp/onlinejudge/ 利用可能言語: C, C++, Java
  6. 6. ショートコーディング例[AOJ 0006] Reverse Sequence文字列 str を入力したとき、その文字列を逆順に出力するプログラムを作成して下さい。文字は半角英数字のみで、20 文字以内とします。 http://goo.gl/C7H5u
  7. 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. 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. 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. 10. ちょっと頭を使ってみる入力された文字列の逆を表示する… T 出力時 S E 入力時 T (やや強引に)これはスタックだ…
  11. 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. 12. IFとか要らないですしおすし(84B(61B))main(i){ i-10 && main(getchar()) & putchar(i-1?i:10); return 0;} ・AND演算子(&&)で接続した式は、 最初の式の結果によって実行されるか決定 If文とかそんなものなかった!
  13. 13. 予約語なんて消えちまえ! (72B(53B))j;main(i){ j=i-10 && main(getchar()) / putchar(i-1?i:10);} ・return文で設定される戻り値は eaxレジスタに設定される。 →じゃあeaxレジスタに0が入ればreturn文は要らない! →ダミーの除算で0を入れてやる。 →→でも除算処理だけだと最適化で削除され(ry 予約語は死んだ!(ニーチェ コレが最短だぜうおおおおお!
  14. 14. これで最短やで!(ドヤ顔投稿
  15. 15. これで最短やで!(ドヤ顔投稿
  16. 16. ┐(´ー`)┌
  17. 17. これで最短やで!(ドヤ顔投稿 卒研担当教授は出しぬいた!
  18. 18. まとめ(白目メリット・(変態的な)アルゴリズムを勉強できる・処理系のディープな中身も勉強できる!・頭がやわらかくなる→ボケ防止?デメリット・業務中に-1ならチルダ判定一択だろJKとか思っちゃう・汚いコードの中の何かに目覚める やってみると意外と楽しいよ! みんなもショートコーディングしようぜ!
  19. 19. おまけAOJに投稿する時の見た目j;main(i){j=i-10&&main(getchar())/putchar(i-1?i:10);}

×