ページ

2012/02/29

[競技プログラミング][C言語][AOJ10016]Grading

AIZU ONLINE JUDGE http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10016

Grading

あなたの課題は、あるクラスの数学の成績を付けるプログラムを作成することです。

プログラムは複数の学生のテストの点数を読み込みます。

テストの点数は、中間試験の点数 m、期末試験の点数 f、再試験の点数 r で構成されています。

中間試験と期末試験は 50 点満点(m, f ≤ 50)、再試験は 100 点満点 (r ≤ 100)です。

試験を受けていない場合は点数を -1 とします。

以下の手順で成績が付けられます:
  • 中間試験、期末試験のいずれかを欠席した場合成績は F。
  • 中間試験と期末試験の合計点数が 80 以上ならば成績は A 。
  • 中間試験と期末試験の合計点数が 65 以上 80 未満ならば成績は B。
  • 中間試験と期末試験の合計点数が 50 以上 65 未満ならば成績は C。
  • 中間試験と期末試験の合計点数が 30 以上 50 未満ならば成績は D。
    ただし、再試験の点数が 50 以上ならば成績は C。
  • 中間試験と期末試験の合計点数が 30 未満ならば成績は F。

Input

複数のデータセットが入力として与えられます。各データセットでは、空白で区切られた m、f、r が 1 行に与えられます。

m、f、r がすべて -1 のとき入力の終わりとします。

Output

各データセットについて、成績(A、B、C、D、または F)を1行に出力して下さい。
回答:vol100/AOJ10016.cpp at master from wada811/AOJ - GitHub
成績付けの手順そのままに条件文を記述した。
毎回 printf()を呼び出すんじゃなくて(char)grade で管理しても良かったかも。
後は点数の条件分岐で毎回足し算するのもなんか微妙な気がするんだけどどうなんだろう。
この程度の小さいプログラムだから気にしなくてもいいのかもしれないけど。

それではまた明日。

2012/02/28

[競技プログラミング][C言語][AOJ10015]Finding Missing Cards

AIZU ONLINE JUDGE http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10015

Finding Missing Cards

太郎が花子と一緒にトランプ遊びをしようとしたところ、52枚あるはずのカードが n 枚のカードしか手元にありません。
これらの n 枚のカードを入力として、足りないカードを出力するプログラムを作成して下さい。

太郎が最初に持っていたトランプはジョーカーを除く52枚のカードです。

52枚のカードは、スペード、ハート、クラブ、ダイヤの4つの絵柄に分かれており、各絵柄には13のランクがあります。

Input

最初の行に太郎が持っているカードの枚数 n (n ≤ 52)が与えられます。

続いて n 組のカードがそれぞれ1行に与えられます。各組は1つの空白で区切られた文字と整数です。
文字はカードの絵柄を表し、スペードが'S'、ハートが'H'、クラブが'C'、ダイヤが'D'で表されています。
整数はそのカードのランク(1 ~ 13)を表しています。

Output

足りないカードをそれぞれ1行に出力して下さい。各カードは入力と同様に1つの空白で区切られた文字と整数です。
出力するカードの順番は以下のとおりとします:

  • 絵柄がスペード、ハート、クラブ、ダイヤの順番で優先的に出力する。
  • 絵柄が同じ場合は、ランクが小さい順に出力する。
回答:vol100/AOJ10015.cpp at master from wada811/AOJ - GitHub
マークと数字の二次元配列で真偽値判定のループだ!と思ったら
C言語はデフォルトで boolean を使うことが出来なかったのでビックリでした。
C言語において「≠0 : 真」、「=0 : 偽」なので必要ないのでしょうが、
他の言語で boolean に慣れているとC言語でも使いたくなりますね。
確かに真偽値は入門書とかでも使ったの見たことなかったわーと思って、
何かないかなとググってみたら、C言語にもboolがあった。 - ボクノスを見つけました。
C99から追加された標準Cライブラリの実装 stdbool.hを使えば良いみたいです。
使い方は回答のGitHubのコードを参照してください。

それではまた明日。

2012/02/27

[競技プログラミング][C言語][AOJ10014]Print a Chessboard

AIZU ONLINE JUDGE http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10014

Print a Chessboard

以下のような、たてH cm よこ W cm のチェック柄の長方形を描くプログラムを作成して下さい。

#.#.#.#.#.
.#.#.#.#.#
#.#.#.#.#.
.#.#.#.#.#
#.#.#.#.#.
.#.#.#.#.#
上図は、たて 6 cm よこ 10 cm の長方形を表しています。

長方形の左上が "#" となるように描いて下さい。

Input

入力は複数のデータセットから構成されています。各データセットの形式は以下のとおりです:

H W

H, W がともに 0 のとき、入力の終わりとします。

Output

各データセットについて、たて H cm よこ W cm の枠を出力して下さい。

各データセットの後に、1つの空行を入れて下さい。
回答:vol100/AOJ10014.cpp at master from wada811/AOJ - GitHub
もうちょっと条件を工夫できるような気もするけど単純にわかりやすい方法でクリア。
二重ループシリーズはこれで終わり。

それではまた明日。

2012/02/26

ツイートボタンをカスタマイズして「@~さんから」を非公式RT形式にする

きっとこの記事を見る人は記事のTweetボタンからツイートした時に表示されている「@~さんから」というのは
画像がなくても伝わると思うので、細かいことは抜きに改善方法だけを載せておきます。

元のコードはDevAchieve: Bloggerの記事フッターに各種ソーシャルボタンを設置する方法にある通り。
<a class='twitter-share-button' data-via='null' data-count='horizontal' data-lang='ja' expr:data-text='data:blog.title + ": "+ data:post.title' expr:data-url='data:post.url' href='http://twitter.com/share'>Tweet</a>
<a class='twitter-share-button' data-count='horizontal' data-lang='ja' expr:data-text='" RT @null "+ data:blog.title + ": "+ data:post.title' expr:data-url='data:post.url' href='http://twitter.com/share'>Tweet</a>
変更点は data-via='wada811' の削除と、
expr:data-text への " RT @wada811 "+ の追加です。
自分であまり使わないから気にしてなかったんですが、
ちょうど下の記事を見たのでウチでも直しておきました。
Happy-Go-Lucky: Bloggerで"ブログ内ツイートボタンをカスタマイズして
Twitterアカウント名をイイ感じに表示してみた"

この記事の新規性は無いけど
情報源は多いほうが良いということで。(俺が発掘するの面倒だし)

Bloggerの検索結果のCSSを上書きする


この画像を見るとわかるようにBloggerの検索ウィジェットから検索した時に表示される結果に
変な border-botttom がかかっていて見苦しかったので修正しました。
検索結果のページのCSSは別に読み込んでいるようなので !important を指定して強制上書きしました。

画像では見切れているけど枠のボーダーは消えずにヒットした件数と各結果の border-bottom が消えました。
タブ部分もくっついて良い感じの表示になります。
.gsc-result{
 border-bottom: none !important;
}

.gsc-result-info{
 border-bottom: none !important;
}

.gsc-tabsArea{
 margin: 0px !important;
}

2012/02/25

DevAchieveブログカスタマイズまとめ

Blogger設定画面>テンプレート>カスタマイズ

テンプレート:Awesome Inc.(黒)
背景:変更なし
幅を調整:ブログ全体1100px, サイドバー310px
レイアウト:右サイドバー, 下段2段組

アドバンス
ページ:Verdana 14px
リンク:#9fc5e8
表示済み:#ea9999
カーソル:#b6d7a8
ブログタイトル:Times New Roman 40px
ブログの説明:Verdana 14px
タブのテキスト:Verdana 14px
日付ヘッダー:Verdana 14px
投稿タイトル:Verdana 22px
ガジェットタイトル:Verdana 14px
ガジェットテキスト:Verdana 14px
ガジェットのリンク:リンクと同じ
フィードのリンク:リンクと同じ

CSSを追加:
DevAchieve: Bloggerのラベルウィジェットのカスタマイズ
DevAchieve: CSS3でボックスを角丸にするborder-radiusを使ってみた
DevAchieve: CSS3の角丸を使ってキーを表現してみた
DevAchieve: BloggerにソースコードをハイライトするSyntaxHighlighterを導入する
DevAchieve: Bloggerの検索結果のCSSを上書きする
target="_blank"を設定したらリンクテキストのあとにアイコンを表示する | DevAchieve

HTMLの編集:
DevAchieve: Bloggerの「登録: 投稿 (Atom)」の表示を消す方法
DevAchieve: BloggerをIEで開くと最新版でもIE7として表示されることによる問題
DevAchieve: Bloggerの人気の投稿にTweet&はてブカウンターを表示させる方法
DevAchieve: Bloggerの記事フッターにGrow!ボタンを設置する方法
DevAchieve: Web上でチップが貰えるぞ!噂のGrow!をBloggerに設置する方法
DevAchieve: Bloggerの記事フッターに各種ソーシャルボタンを設置する方法
ツイートボタンをカスタマイズして「@~さんから」を非公式RT形式にする | DevAchieve
Bloggerのページタイトルを「記事タイトル | ブログタイトル」にする方法 | DevAchieve


ウィジェットの追加:
DevAchieve: Bloggerのページ機能と記事一覧を表示する方法
Bloggerの最新コメントをウィジェットに表示する | DevAchieve

その他
BloggerのモバイルページをGoogle検索に表示させない方法 | DevAchieve

関連:
DevAchieve: Bloggerのリダイレクトによる弊害を回避するための二つの方法の比較

結構色々なことやったので、リセットされた時にすぐに復活できるように。

2012/02/24

[競技プログラミング][C言語][AOJ10013]Print a Frame

AIZU ONLINE JUDGE http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10013

Print a Frame

以下のような、たてH cm よこ W cm の枠を描くプログラムを作成して下さい。

##########
#........#
#........#
#........#
#........#
##########
上図は、たて 6 cm よこ 10 cm の枠を表しています。

Input

入力は複数のデータセットから構成されています。各データセットの形式は以下のとおりです:

H W

H, W がともに 0 のとき、入力の終わりとします。

審判データに用いられる入力の条件は、3 ≤ H, W ≤ 100 です。

Output

各データセットについて、たて H cm よこ W cm の枠を出力して下さい。

各データセットの後に、1つの空行を入れて下さい。
回答:vol100/AOJ10013.cpp at master from wada811/AOJ - GitHub
等幅フォントじゃないから表示が微妙なことになっているけど#で周りを囲みたいということ。
条件文で剰余を取って0のとき、の方が短そうだな。

それではまた。

2012/02/23

C言語で文字としての % を表示する

個人的にとあるファイルを自動生成する処理をC言語で書いていて、
% を書きたくなったのでエスケープシーケンスみたいに \% と書いたらエラーになったのでメモ。
C言語で文字としての % を表示させるには %% と書く必要がある。


printf("明日の降水確率は%d%%です。\n", rain)
実行結果
明日の降水確率は30%です。

てな感じ。

[競技プログラミング][C言語][AOJ10012]Print a Rectangle

AIZU ONLINE JUDGE http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10012

Print a Rectangle

たてH cm よこ W cm の長方形を描くプログラムを作成して下さい。

1 cm × 1cm の長方形を '#'で表します。

Input

入力は複数のデータセットから構成されています。各データセットの形式は以下のとおりです:

H W

H, W がともに 0 のとき、入力の終わりとします。

Output

各データセットについて、H × W 個の '#' で描かれた長方形を出力して下さい。

各データセットの後に、1つの空行を入れて下さい。
回答:vol100/AOJ10012.cpp at master from wada811/AOJ - GitHub
基本的な二重ループの処理で、Noteがほとんど答えになっている。
少し間が開いたけど詰まったり、サボってたわけじゃないんだよ。

それではまた明日。

2012/02/20

Twitter Webで引用ツイートするためのChrome拡張機能「Quote Tweet」

Chrome ウェブストア - Quote Tweet
新Twitter WebでツイートURLをつぶやくと詳細表示時に下の画像のようにツイートをインラインで開けるようになりました。
そこで手軽に引用ツイートができるようにGoogle Chromeの拡張機能を開発、公開しました。

使い方は下の画像のようにツイートの詳細を開いた時に↑の「QT」マークが出るのでコレをクリック。
「 QT (引用するツイートのURL)」と入力済みのつぶやきウインドウが表示されるからツイートしよう!

GitHubにソースコードを公開しました。
wada811/QuoteTweet - GitHub https://github.com/wada811/QuoteTweet
jQuery使ったことない、Chrome拡張開発したことない、で変なことしてないと良いんですが…。
変なところを見つけたらそっとpull requestしてください(*´Д`)

追記(2012/02/21):ショートカットキー"q"で開いているツイートをまとめて引用できるようにしました(ver.1.1.0)
追記(2012/02/23):窓の杜に掲載されました!
窓の杜 - 【REVIEW】TwitterのURLの貼り付けによる引用をサポートするChrome拡張「Quote Tweet」
追記(2012/05/04):一昨日辺り?からのTwitterWebのTLの内部的な変更に対応しました。
"QT"をクリックした場合はリプライが入るようになりました。
引用元ツイートのハッシュタグを追加されるようになりました。(ver1.2.0)

2012/02/18

CSS3でボックスを角丸にするborder-radiusを使ってみた

追記(2012/06/01):border-radiusについてはベンダープレフィックス(8, 9行目の記述)は必要なくなりました。

SyntaxHighlighterで表示する程でもないコマンド系のコードを
角丸ボックスで表示しているのを見てカッコ良かったので取り入れてみました。
例↓
git push -u origin master

導入方法はコチラ:CSS3 角丸を表現する border-radius | CSS Lecture

こんな感じでカスタマイズしました。
span.cmd {
    color: #000000;
    margin: 5px;
    padding: 5px 10px;
    line-height: 2em;
    background-color:  #FFFFFF;
    border-radius: 10px;        /* CSS3草案 */  
    -webkit-border-radius: 10px;    /* Safari,Google Chrome用 */  
    -moz-border-radius: 10px;   /* Firefox用 */  
}
marginは左右にしか効かないので上下の幅はline-hrightで指定することになります。
IE8以下は角丸に対応していないので角が丸くなりません。
リンク先ではOperaでは角丸にならないと書かれていましたが、
少なくともOpera11.61では角丸になることを確認しました。

CSS3の角丸を使ってキーボードのキーを表現してみた

追記(2012/06/01):border-radiusについてはベンダープレフィックス(9, 10行目の記述)は必要なくなりました。

ショートカットキーとかを表示させる時に画像を用意するのは面倒なのでCSS3の角丸と
昔ながらのborder-styleを使ってキーボードのキーを表現してみた。

例↓
Windows 7ではWin+数字でタスクバーにあるソフトを起動できます。

と、こんな感じで表示することができます。
border-style: outset;は古臭いHPの香りがしますが、
角丸にすると本当にキーっぽくて良い感じです。

サンプルコードはコチラ。
span.key {
    border: 5px #eee outset;
    color: black;
    margin: 5px;
    padding: 5px 10px;
    line-height: 2.5em;
    background-color: #eee;
    border-radius: 10px;        /* CSS3草案 */
    -webkit-border-radius: 10px;    /* Safari,Google Chrome用 */
    -moz-border-radius: 10px;   /* Firefox用 */
}

2012/02/14

[競技プログラミング][C言語][AOJ10011]Reversing Numbers

AIZU ONLINE JUDGE http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10011

Reversing Numbers

与えられた数列を逆順に出力するプログラムを作成して下さい。

Input

入力は以下の形式で与えられます:

n
a1 a2 . . . an
n は数列の長さを示し、ai は i 番目の数を表します。

n ≤ 100 とします。

Output

逆順の数列を1行に出力して下さい。
数列の要素の間に1つの空白を入れて下さい(最後の数の後に空白は入らないことに注意して下さい)。
回答:vol100/AOJ10011.cpp at master from wada811/AOJ - GitHub
scanf関数での入力の受け取り方は次のページを見ておくと良い。
scanf関数 - http://www.pc.uec.ac.jp/sp/hshrkw/edu/program/b1/Ex2-1b.htm

それではまた明日。

2012/02/13

[競技プログラミング][C言語][AOJ10010]Simple Calculator

AIZU ONLINE JUDGE http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10010

Simple Calculator

2つの整数 a, b と1つの演算子 op を読み込んで、a op b を計算するプログラムを作成して下さい。
ただし、演算子 op は、"+"(和)、"-"(差)、"*"(積)、"/"(商)、のみとし、
割り算で割り切れない場合は、小数点以下を切り捨てたものを計算結果とします。

Input

入力は複数のデータセットから構成されています。各データセットの形式は以下のとおりです:

a op b

op が '?' のとき 入力の終わりを示します。このケースの出力は行ってはいけません。

Output

各データセットについて、計算結果を1行に出力して下さい。
回答:vol100/AOJ10010.cpp at master from wada811/AOJ - GitHub
Noteのscanf関数の使い方を見たら後は演算子で分岐させるだけ。
入力の受け取り方さえわかれば何も難しいことはない。

それではまた明日。

2012/02/11

[競技プログラミング]Sony GO FOR IT 1)人生の時計

Sony Japan | 新卒採用|ソニー株式会社 採用情報 | 新卒採用 | GO FOR IT コードで世界は変えられる|1) 人生の時計

1) 人生の時計

あなたの一生を24時間にたとえると今日は何時何分何秒ですか?
ただしあなたはあなたの誕生日(a年b月c日)の0時ちょうどに生まれて
n歳まで生きる(n歳のときは生きていてn+1歳にはなれない)とし、bとcは一般的な月日の範囲とします。

i) 1990<=a<=2000,n=80のとき、今日は何時何分何秒ですか? ii) 1900<=a<=2000,n=200のとき、今日は何時何分何秒ですか?



これくらいならできそうかなと思って作ってみた。

追記(2012/05/02)

表示がバグっていて直すのも面倒なので削除しました。。

2012/02/10

[競技プログラミング][C言語][AOJ10009]Circle

AIZU ONLINE JUDGE http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10009

Circle

半径 r の円の面積と円周の長さを求めるプログラムを作成して下さい。

Input

1つの実数 r が与えられます。

Output

面積と円周の長さを1つの空白で区切って1行に出力して下さい。
出力は浮動小数点数とし、0.00001 以下の誤差を含んでもよいものとします。
回答:vol100/AOJ10009.cpp at master from wada811/AOJ - GitHub
円の面積と円周の長さを求めるなんて中学生でもできるぜ!余裕だ!
と、思ったら余裕でリジェクトされた\(^o^)/
Sample Outputを見てみると小数点以下の桁が結構あるので
円周率が3.14じゃダメなようです。\円周率が3.14なんてゆとり!/
Noteを見てみると、円周率のメモ:3.141592653589 と書いてありました。
これで通るようになります。

それではまた明日。

2012/02/09

[競技プログラミング][C言語][AOJ10008]A / B Problem

AIZU ONLINE JUDGE http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10008

A / B Problem

2つの整数 a と b を読み込んで、以下の値を計算するプログラムを作成して下さい:

a ÷ b : d (整数)
a ÷ b の余り : r (整数)
a ÷ b : f (浮動小数点数)

Input

1行に2つの整数 a, b が与えられます。

Output

d, r, f を1つの空白で区切って1行に出力して下さい。
fについては、0.00001以下の誤差があってもよいものとします。
回答:vol100/AOJ10008.cpp at master from wada811/AOJ - GitHub
これもNoteを見ると、もうほとんど答えになっている。

それではまた明日。

2012/02/08

BloggerをIEで開くと最新版でもIE7として表示されることによる問題

記事フッターのソーシャルボタンがIEだけ右の画像のように改行されてました。
画像には写りきってないですがソーシャルボタンだけで3行使っていて
レイアウトがカッコ悪くてどうにかしたかったのですが原因不明なので諦めてました。

各ブラウザの最新版をサポートするはずの
Gorw!ボタンの背景が白くなっていたので
とりあえずTwitterに投げときました。

きっとGrow!の中の人が
エゴサーチして対応してくれると
思ってた(・ω<)テヘペロ

本当に対応していただいて、
実はBloggerのテンプレートにIEを見たらIE7だと思えというアレなコードが入ってたということでした。
以下がそのコードです。
<head>
<meta content='IE=EmulateIE7' http-equiv='X-UA-Compatible'/>
2行目の部分を削除することによってIE9などで開いてもIE7として表示されることはなくなります。

最新版のIEさえもIE7として認識させる理由はなんなのでしょうね…。
IE7の方がマシなんてことは普通ないと思いますけど…。

不具合報告ってほどのことをしてないけどお礼にGrow!してもらっちゃった!やった!(*´∀`*)

それではー

[競技プログラミング][C言語][AOJ10007]Swapping Two Numbers

AIZU ONLINE JUDGE http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10007

Swapping Two Numbers

2つの整数 x, y を読み込み、それらを値が小さい順に出力するプログラムを作成して下さい。

ただし、この問題は以下に示すようにいくつかのデータセットが与えられることに注意して下さい。

Input

入力は複数のデータセットから構成されています。
各データセットは空白で区切られた2つの整数 x, y を含む1行から構成されています。

x と y がともに 0 のとき入力の終わりを示し、このデータセットに対する出力を行ってはいけません。

Output

各データセットごとに、x と y を小さい順に並べたものを1行に出力して下さい。
x と y の間には1つの空白を入れて下さい。
回答:vol100/AOJ10007.cpp at master from wada811/AOJ - GitHub
Swapと言うほどSwapしないし、Note見ちゃったらほとんど答えを見たようなもの。

それではまた明日。

2012/02/07

[競技プログラミング][C言語][AOJ10006]Print Test Cases

AIZU ONLINE JUDGE http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10006

Print Test Cases

オンラインジャッジでは、提出されたプログラムが多種多様な入力データそれぞれに対して正しい出力をしているかを判定するために、入力データに複数のデータセットが含まれているものがあります。この問題は、そのようなデータセットを処理するための練習問題です。

1つの整数 x を読み込み、それをそのまま出力するプログラムを作成して下さい。

ただし、この問題は以下に示すようにいくつかのデータセットが与えられることに注意して下さい。

Input

入力は複数のデータセットから構成されています。
各データセットは1つの整数 x を含む1行から構成されています。

x が 0 のとき入力の終わりを示し、このデータセットに対する出力を行ってはいけません。

Output

各データセットごとに、以下の形式で x を出力して下さい:

Case i: x
ここで、i は1から始まるデータセットの番号を示します。Caseと番号 iの間に1つの空白を入れて下さい。
また、:(コロン)と整数 x の間に1つの空白を入れて下さい。サンプル入出力を参考にして下さい。
回答:vol100/AOJ10006.cpp at master from wada811/AOJ - GitHub
これ自体は簡単だけど、これからのデータセットの受け取り方の基本なので重要ではある。
Sample Inputのサンプルを全部コピーして実行時に渡しても動くということは知っておくと便利。

それではまた明日。

2012/02/06

[競技プログラミング][C言語][AOJ10005]Print Many Hello World

AIZU ONLINE JUDGE http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10005

Print Many Hello World

1000 個の "Hello World" を出力するプログラムを作成して下さい。

Input

この問題に入力はありません。

Output

各行に "Hello World" と書かれた 1000 行の文字列を出力して下さい。
回答:vol100/AOJ10005.cpp at master from wada811/AOJ - GitHub
病んでる感じの"Hello World"をループ処理によって実現させましょう。改行を忘れずに。

それではまた明日。

2012/02/05

Bloggerの「登録: 投稿 (Atom)」の表示を消す方法

RSSの登録のためのウィジェットをブログのフッターに設置しているので
記事の後に表示される「登録: 投稿 (Atom)」で同じものが表示される意味がありません。
なのでテンプレートのHTMLをよく探してみるとフィードのリンクがあったので
消してみたら表示されなくなりました。
昨日、Bloggerのテンプレートを復旧しなければならなくなって大変だったので
小さな変更ですがメモしておきます。

Blogger設定画面>テンプレート>HTMLの編集>続行
で、HTMLをエディタなどにコピーして以下のタグを検索します。
<b:include name='feedLinks'/>
これを削除すれば、「登録: 投稿 (Atom)」の表示を消すことができます。

Bloggerのラベルウィジェットのカスタマイズ

ラベルウィジェットを設置したのだが
ラベルを表示させると縦に羅列されて、
サイドバー以外に設置する場合は
あまりにもスペースを取りすぎるので
カスタマイズしました。
ラベルウィジェト自体はHTMLのリストタグを
使って構成されているので
CSSをいじって横に並べるようにしました。
floatを使ったリストの基本的な横配置です。
.list-label-widget-content ul li{
    float: left;
    margin-right: 3px;
    white-space: nowrap;
}
これで置いてみるとラベル名と()で囲まれた投稿数が半角スペース1つ分くらい空いていて
投稿数が左右どちらのラベルに対応しているかわかりにくかったのでカンマを挟んで、マージンを設定しました。
<b:widget id='Label1' locked='false' title='ラベル' type='Label'>
<b:includable id='main'>
  <b:if cond='data:title'>
    <h2><data:title/></h2>
  </b:if>
  <div expr:class='"widget-content " + data:display + "-label-widget-content"'>
    <b:if cond='data:display == "list"'>
      <ul>
      <b:loop values='data:labels' var='label'>
        <li>
          <b:if cond='data:blog.url == data:label.url'>
            <span expr:dir='data:blog.languageDirection'><data:label.name/></span>
          <b:else/>
            <a expr:dir='data:blog.languageDirection' expr:href='data:label.url'><data:label.name/></a>
          </b:if>
          <b:if cond='data:showFreqNumbers'>
            <span dir='ltr'>(<a expr:href='data:blog.canonicalHomepageUrl + "feeds/posts/default/-/" + data:label.name + "?alt=rss"' expr:title='data:postLabelsLabel + " " + data:label.name + " (RSS)"'><data:label.count/></a>),</span>
          </b:if>
        </li>
      </b:loop>
      </ul>
    <b:else/>
      <b:loop values='data:labels' var='label'>
        <span expr:class='"label-size label-size-" + data:label.cssSize'>
          <b:if cond='data:blog.url == data:label.url'>
            <span expr:dir='data:blog.languageDirection'><data:label.name/></span>
          <b:else/>
            <a expr:dir='data:blog.languageDirection' expr:href='data:label.url'><data:label.name/></a>
          </b:if>
          <b:if cond='data:showFreqNumbers'>
            <span class='label-count' dir='ltr'>(<a expr:href='data:blog.canonicalHomepageUrl + "feeds/posts/default/-/" + data:label.name + "?alt=rss"' expr:title='data:postLabelsLabel + " " + data:label.name + " (RSS)"'><data:label.count/></a>),</span>
          </b:if>
        </span>
      </b:loop>
    </b:if>
    <b:include name='quickedit'/>
  </div>
</b:includable>
</b:widget>
なぜか、white-space: nowrap; を設定しないとIE7以下で正常に表示されません。
コレを取るとリストの表示幅終端付近で押しつぶされたタグが表示されるので必須です。

追記(2012/03/31)
ラベルカウント部分にラベル毎のフィードへのリンクを追加しました。
参考:Windup T: Blogger - ラベル別のフィード配信

2012/02/04

ソースコードをハイライトするSyntaxHighlighter3.0を使いこなす

導入編:DevAchieve: BloggerにソースコードをハイライトするSyntaxHighlighterを導入する

SyntaxHighlighterを使用してソースをカラフルに表示するには、
以下の二通りの方法で記述することができます。
  1. preタグを使う
  2. scriptタグを使う

preタグを使う

<pre class="brush: alias;">
// ココにソースを記述
</pre>
メリット:後述のscriptタグと違ってハイライトスクリプトが読み込まれなくてもテキストとして表示される。
デメリット:<以降がタグとして認識されるため&lt;と書き換えなければならない。
Bloggerの人気の投稿ウィジェットに表示される記事の前文にpreタグまで含まれると
表示が狂うことがある。(何が原因かわからないけどコレのせいで最初からHTML/CSS組み直した(´Д⊂ヽ)
このせいで記事の公開が遅れました…。とりあえず対策は記事書いてすぐにコードを貼らないこと。

scriptタグを使う

<script class="brush: alias;" type="syntaxhighlighter"><![CDATA[
// ココにソースを記述
]]></script>
メリット:<以降がタグとして誤認されることがない。(</script>タグだけは&lt;/script>と記述する必要あり)
デメリット:scriptが読み込まれるまで非表示である。また、AutoPager系の自動ページ読み込みで
読み込まれたページはハイライトスクリプトが動かず、ソースコードが非表示のままになる。
また、RSSやモバイル表示でソースコードが非表示になる。

ということで個人的にpreタグを使いたいのでpreタグで説明していきます。
同様の設定はscriptタグでも出来るので適宜読み替えて下さい。

使用言語の設定

SyntaxHighlighterを使用する際には使用言語を設定する必要があります。
上のどちらの方法でも同じで、一行目の"alias"の部分を使用言語のエイリアスに書き換えます。

Brush name
使用言語
Brush aliases
言語のエイリアス
File name
JSファイル名
ActionScript3as3, actionscript3shBrushAS3.js
Bash/shellbash, shellshBrushBash.js
ColdFusioncf, coldfusionshBrushColdFusion.js
C#c-sharp, csharpshBrushCSharp.js
C++cpp, cshBrushCpp.js
CSScssshBrushCss.js
Delphidelphi, pas, pascalshBrushDelphi.js
Diffdiff, patchshBrushDiff.js
Erlangerl, erlangshBrushErlang.js
GroovygroovyshBrushGroovy.js
JavaScriptjs, jscript, javascriptshBrushJScript.js
JavajavashBrushJava.js
JavaFXjfx, javafxshBrushJavaFX.js
Perlperl, plshBrushPerl.js
PHPphpshBrushPhp.js
Plain Textplain, textshBrushPlain.js
PowerShellps, powershellshBrushPowerShell.js
Pythonpy, pythonshBrushPython.js
Rubyrails, ror, rubyshBrushRuby.js
ScalascalashBrushScala.js
SQLsqlshBrushSql.js
Visual Basicvb, vbnetshBrushVb.js
XMLxml, xhtml, xslt, html, xhtmlshBrushXml.js
SyntaxHighlighter - Bundled Brushes

例えばHTMLをシンタックスハイライトしたい場合は、以下のようにaliasをhtmlにします。
<pre class="brush: html;">
// ココにソースを記述
</pre>

特定の行を強調表示する

下のやつは1行目が強調表示されているのでブログなどで言及する時に
読者にわかりやすくて便利です。
これは以下のように行番号を指定することによって設定可能です。
<pre class="brush: alias; highlight: [1];">
// ココにソースを記述
</pre>
カンマ区切りで行数を指定することによって複数行を強調表示することも出来ます。

開始行番号の指定

元のソースコードを全て載せるとスペースを取りすぎるので
一部分を抜き出して、対応する行だけ説明したい時に使います。
前の記事で言うと、「縦スクロールバーを消す」あたりで使った機能です。
<pre class="brush: alias; first-line: 10;">
// ココにソースを記述
</pre>
1行目のように指定することによって行番号が10から始まるようになりました。

タイトル設定

<pre class="brush: alias;" title="タイトル設定">
// ココにソースを記述
</pre>
さっきまではclass属性の中に記述していましたが、title属性を使用しているので注意です。
ちなみにtitle属性の属性値を記述しなければタイトルは表示されません。
title=""のままタイトル未記入でも表示には影響されないということです。

その他の設定

ソースコードの折りたたみ・展開、行番号非表示、
ソースコードと同時にHTMLタグのハイライト表示、
タブサイズの指定、などの設定はコチラに載っています。
今日のPython: ブログ上でプログラムソースを表示する方法②

まとめ

よく使う上の3つのオプションを指定したのがコチラです。
<pre class="brush: alias; first-line: 1; highlight: [,];" title="">
// ココにソースを記述
</pre>
highlightとtitleは未指定でも表示に影響無いのでイチイチ消さなくても良いです。
後はaliasを自分の使用言語のエイリアスに書き換えて単語登録でもしておけばOK!


これであなたもブログでソースコードを綺麗に表示できます!

それでは。

BloggerにソースコードをハイライトするSyntaxHighlighterを導入する

たまにブログなどで綺麗にソースコードを表示しているサイトを見かけますよね?
ソースコードを文法的に色を変えて(シンタックスハイライトして)表示していて綺麗ですね。
ブログなどでシンタックスハイライトするにはSyntaxHighlighterというのを使います。

まずはSyntax Highlighter Scripts Generatorで必要な言語を選択してください。
ちなみにココでハイライトのテーマも選ぶことができます。
SyntaxHighlighter - Themesで事前に好みのテーマを確認できるから要チェックです。

Generateボタンを押したらテキストエリアにコードが表示されるからコピペしましょう。
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/>
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'></script>
<script language="javascript" type="text/javascript">
 SyntaxHighlighter.config.bloggerMode = true;
 SyntaxHighlighter.all();
</script>
例えば、これはJavaだけを選択してGenerateボタンを押した時のコードです。
このように2行目に選択したテーマのCSSがあり、4行目以降にに選択した言語のJSファイルがあります。

これをそのまま使用しても良いのですが、表示少し微妙なのでCSSを少し編集します。
まずはhttp://alexgorbatchev.com/pub/sh/current/styles/shCore.cssにアクセスして、
中身をコピーしてエディタなどに貼り付けて編集しましょう。

縦スクロールバーを消す

.syntaxhighlighter {
  width: 100% !important;
  margin: 1em 0 1em 0 !important;
  position: relative !important;
  overflow: auto !important;
  font-size: 1em !important;
  overflow-y: hidden !important; // 追加
}

IEで最後の行が横スクロールバーに隠れるのを防ぐ

.syntaxhighlighter.ie {
  font-size: .9em !important;
  padding: 1px 0 20px 0 !important; // 1px->20pxに変更
}
DevAchieve: BloggerをIEで開くと最新版でもIE7として表示されることによる問題で説明したコードを削除した場合、
IE8以上ならばこの問題は発生しないのでCSSを変更する必要はありません。

以上でshCore.cssの編集が完了しました。
ファイルのアップロードに対応したブログサービスならばコレを保存して、
ブログにアップロードして上で生成したコードの1行目のURLと差し替えればOK!
Bloggerはファイルのアップロードができないので、
設定画面>テンプレート>カスタマイズ>アドバンス>CSSを追加、に
書き換えたCSSを貼り付けてブログに適用しましょう。

右上の"?"の非表示にする

<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/>
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'></script>
// (中略)選択した言語に対応するscriptタグ
<script language="javascript" type="text/javascript">
 SyntaxHighlighter.config.bloggerMode = true;
 SyntaxHighlighter.defaults['toolbar'] = false;
 SyntaxHighlighter.all();
</script>
7行目のオプションを設定しておくことによって非表示にすることができます。
これで設定は以上です。
このコードを</head>の直前に貼りつければ導入は終了です。

次の記事ではSyntaxHighlighterの使い方を説明します。
次の記事:DevAchieve: ソースコードをハイライトするSyntaxHighlighter3.0を使いこなす

2012/02/03

[競技プログラミング][C言語][AOJ10004]Sorting Three Numbers

AIZU ONLINE JUDGE http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10004

Sorting Three Numbers

3つの整数を読み込み、それらを値が小さい順に並べて出力するプログラムを作成して下さい。

Input

3つの整数が空白で区切られて与えられます。

Output

小さい順に並べ替えた3つの整数を1行に出力して下さい。整数の間に1つの空白を入れて下さい。
回答:vol100/AOJ10004.cpp at master from wada811/AOJ - GitHub
分岐を覚えたら次は定番の3つの数の並べ替え問題です。
実際にはあまり使ったことが無いので少し忘れてました(;´∀`)

それではまた明日。

2012/02/02

[競技プログラミング][C言語][AOJ10003]Small, Large, or Equal

AIZU ONLINE JUDGE http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10003

Small, Large, or Equal

2つの整数 a, b を読み込んで、a と b の大小関係を出力するプログラムを作成して下さい。

Input

入力は空白で区切られた2つの整数 a, b から構成されています。

Output

a より b の方が大きければ、 a < b a より b の方が小さければ、 a > b
a と b が等しければ、 a == b
と出力して下さい。
回答:vol100/AOJ10003.cpp at master from wada811/AOJ - GitHub
基本的な分岐。出力に値を使うと思ったら使わなかった、分岐のためだけの問題。簡単ですね。

それではまた明日。

2012/02/01

[競技プログラミング][C言語][AOJ10002]Rectangle

AIZU ONLINE JUDGE http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10002

Rectangle

たて a cm よこ b cm の長方形の面積と周の長さを求めるプログラムを作成して下さい。

Input

a と b が1つの空白で区切られて与えられます。

Output

面積と周の長さを1つの空白で区切って1行に出力して下さい。
回答:vol100/AOJ10002.cpp at master from wada811/AOJ - GitHub
これも基本的な演算と入出力。scanf()関数で一度に複数の値を読むことができることを学べる。
入門書で教えてくれなかったような…(; ・`д・´)
使わないとすぐ忘れるのでアテにならない記憶…。
記録を残しておくことは大事。

それではまた明日。