[問題]
入力された記号のマークシートを # で塗りつぶす
選択肢は 0-9,a-d の14個、無効な選択肢は入力されない
マークミスにご注意を!
[入力 |例1]
7
[出力 |例1]
_ _ _ _ _ _ _ _ _ _ _ _ _ _ \n | || || || || || || ||#|| || || || || || |\n |0||1||2||3||4||5||6||#||8||9||a||b||c||d|\n |_||_||_||_||_||_||_||#||_||_||_||_||_||_|\n[入力 |例2]
c
[出力 |例2]
_ _ _ _ _ _ _ _ _ _ _ _ _ _ \n | || || || || || || || || || || || ||#|| |\n |0||1||2||3||4||5||6||7||8||9||a||b||#||d|\n |_||_||_||_||_||_||_||_||_||_||_||_||#||_|\n[期間]
1/15(土)22:00 ~ 1/22(土)21:59
[hr]
=結果=
投稿数36件(8人)
1位 (118B)
五反田 さん
j,c;main(i){putchar(i?~i%3?j?124:32:j?c%39*3-25-i?j-2?352/j*3:i/30*39+i/3+48:35:95:10+j++*gets(&c))>>j&&main(++i%43);}
2位 (119B)
zentR さん
c=4;main(i,n){for(scanf("%x",&n);c--;puts(""))for(i=-1;i++<13;printf(c-3?i-n?c-1?c?"| |":"|_|":"|%x|":"|#|":" _ ",i));}
3位 (123B)
bitter_fox さん
c,q;main(i){for(scanf("%x",&i);q<4;c++)printf(&" _ \0| |\0|%x|\0|_|\0|#|\0\n"[c-14?q?i-c?q-3?q*4:13:17:0:!++q?:21],c%=15);}
*1位1番乗り
五反田 さん
[hr]
★解説
今回のポイントは次の4つです。
文字を作る
1位のコードは1文字ずつ分岐を使って表示させています。
putchar(352/j*3)
は、j が 1 か 3 かによって、char にキャストされたあとの引数が ' ' ==32 と '_' ==95 に分かれる巧妙な処理です。
%x は scanf でも使える
scanf や printf で %x を使えば、0-9 以降の a,b,c,d を、数字と同じように扱うことができます。
ループカウントを最適なものにする
2位のコードでは、ループカウントに使う変数を、演算コストが少なくなる値で初期化しています。
複数の文字列は1つにまとめられる
3位のコードでは、一組のダブルクオーテーション ” ” の中に、\0 で区切った複数の文字列を格納しています。
Code Golf に興味が出てきたら、コミュニティ「Code Golf を楽しもう」まで!
初心者歓迎、参戦&観戦いつでもお待ちしています!
http://dixq.net/forum/viewforum.php?f=52
第16回の投稿受付中です。
[hr]
メモ
期末テストが終わったら・・・
・OOJの導入に向けていろいろ。
・2月の出題募集企画。
・結果報告トピの書式の統一作業。
・期間終了後に記録更新されたコードを載せたい。
・再投稿の場合、何回目の投稿かを書いてもらうようにしよう Q1-30B(2)
・第20回には何かしよう。
.