Enviar búsqueda
Cargar
X hago2 shortcoding 20110827
•
1 recomendación
•
1,576 vistas
U
uskey512
Seguir
AOJ[0006] 53B
Leer menos
Leer más
Denunciar
Compartir
Denunciar
Compartir
1 de 19
Descargar ahora
Descargar para leer sin conexión
Recomendados
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
Recomendados
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_
Más contenido relacionado
La actualidad más candente
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
勉強会課題①
勉強会課題①
真亮 坂口
La actualidad más candente
(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を書いてみた
勉強会課題①
勉強会課題①
Similar a 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勉強会発表資料
時響 逢坂
Similar a 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);}
Descargar ahora