monolog

monora log #=> ものろーぐ

2012年の投稿

年末です。

雑記

いつの間にか2012年終わるらしいです。まだ元旦の様子を鮮明に思い出せますが……

今年あった内容が多すぎてまとめる気も起きないのでだらだらと箇条書きします。

  • JCと初日の出を見に行く

  • 不登校脱却っぽい何か

  • 受験勉強頑張った

  • 10年ぐらい前から行きたかった志望校に受かりました

  • JCをもふった

  • 入学してJKをもふった

  • 朝投稿したら机の上にロウきゅーぶ!のポスターが広げられていた

  • 次の日には智花のフィギュアが置いてあった

  • 次の日にはry

  • Supercon行きたいな〜と思って先輩達にお願いしてチームを組んでもらう

  • 予選をゴリ押しで解く

  • 初RedBull

  • 予選通って本選行きが決定

  • 色々とあってタイに行く

  • タイから帰ってきた次の日からSuperconで5日ぐらい計算機室に閉じ込められる

  • ふえぇ……が流行りだす

  • 本選のサンプルプログラムを読むのに期間の8割を使う→挫折

  • 文化祭でRedBull4本ぐらい飲んだ→学内の自販機が売り切れに

  • レポートの提出期限に追われる

  • レポートの提出期限に追われる

  • レポートの提出期限に追われる

  • レポートの提出期限に追われる

  • JKをもふもふした

  • プログラミング生放送勉強会 第19回@品川に参加する

  • CombConfに参加した

  • 発表をやった→壁紙のスク水が写っているところがが写真に収められる

  • LTすべった

  • ㍆㌋㌉㌏㌉㌸㌾㌋㌞㌹㌅

  • レポートが年内再提出なのにまだ手を付けてない←イマココ

  • 妹に身長を抜かされているかもしれない事実が[要出典]

この記事、誰得なのかわからないですね…… なんだかんだ言って、僕は今年かなり充実した1年を送ったと感じているので全て良しですね。

では良いお年を

いつの間にか2012年終わるらしいです。まだ元旦の様子を鮮明に思い出せますが…… 今年あった内容が多すぎてまと[…]

プログラミング生放送 第19回@品川とCombConfに参加しました。

雑記

昨日今日と2日続けてプログラミング関係の勉強会に参加して来ました。

内部の様子については多分他の方がまとめていらっしゃると思うので個人的な短い感想です。

今回、この2つの勉強会で色々な方と話すことが出来て、すごいな〜と思うことがとても多かったです。 年齢に関係なく、色々な人と交流出来て、自分が今まで知らなかったような分野のことを新しく知ったりとか、これ使う必要性あるのかなぁ……と思っていたものの活用法という新しく学ぶことというのがとても多かったです。

CombConfでは「Ajaxで暗号化通信とかいろいろ」というタイトルで発表をしました。 発表でデモに失敗したり、頑張って直してLTで見せようと思ったらまた失敗したりしてます。⇒動きました発表やLTのデモが失敗するのは何かジンクスとかなんですか……?(Wikipedia参照)

夏のSuperconではあまり他の方と交流することが出来なかったので、自分にとっては初めての経験でしたが、またこういった機会があったら参加してみたいと思います。

数回ブログ記事書いて思ったけど筆不精すぎてやばい。

昨日今日と2日続けてプログラミング関係の勉強会に参加して来ました。 内部の様子については多分他の方がまとめてい[…]

mod_mrubyをFreeBSDで動かそうとして詰まる

FreeBSD Programming

CombConfの発表が2日後に迫っているにも関わらず他の技術に手がでます。

組み込み向けのRubyであるmrubyをApacheに組み込めるようにした、mod_mrubyというものをFreeBSDで動かしてみようかと思って手を出したら大苦戦しました。

とりあえず動いたには動いたという状況ですが、簡単なメモとベンチマークを取ってみました。

2013/2/17追記mod_mrubyの更新によって手順が変わりました⇒ mod_mruby on FreeBSD

導入はmod_mrubyのページと同じようにやればいいのかと思いきや、makeでエラーを吐いてしまいます。


$ make
make: illegal option -- -
usage: make [-BPSXeiknpqrstv] [-C directory] [-D variable]
        [-d flags] [-E variable] [-f makefile] [-I directory]
        [-j max_jobs] [-m directory] [-V variable]
        [variable=value] [target ...]
rake aborted!
Command failed with status (2): [make -C src --no-print-directory CC='gcc' ...]

Tasks: TOP => default => all
(See full trace by running task with --trace)
*** [libmruby.a] Error code 1

Stop in /root/mod_mruby.

どうもmrubyのRakefileがLinux向けのようで、makeをgmakeに書き換える必要があるようです。


$ nano tmp/mruby/Rakefile
#MAKE = ENV['MAKE'] || 'make'
MAKE = ENV['MAKE'] || 'gmake'

mrubyは1回mod_mrubyをmakeをしないとRakefileが存在しないので注意です。

あとはWarningが出ますがとりあえずスルーして、make installすればApacheにモジュールが登録されます。 あとはhttpd.confに、


AddHandler mruby-script .mrb

と書き加えれば普通にmrubyファイルが動くはずなのですが……

自分の環境(Freebsd 9.1-BETA1 amd64, Apache/2.2.23 Event MPM)な環境では、httpdを起動した直後からCPUをバカ食いする上、リクエストに全く応答しなくなるという状況に陥ってしまい、解決策が分からなくなりました。 そんなことをTwitterで呟いたら、mod_mrubyの作者である、matsumoto-rさんから

http://twitter.com/matsumotory/status/282046980342022144

という指摘を頂きました。試しに(FreeBSD 9.0 i386, Apache/2.2.22 Prefork MPM)な旧サーバーで試したところ、何も問題がないかのように動きました。 どうもApache 2.2でEvent MPMをやるのはだめみたい……?

試しにどのくらい速いのか、mruby, FastCGIのRuby(mod_fcgid, 1.9.3p125), 静的ファイルの3つで比較してみました。


$ cat test.mrb
Apache.rputs("Hello")
Apache.return(Apache::OK)
#!/usr/local/bin/ruby

$ cat test.rb
print "Content-type: text/plainnn"
print "Hello!"

$ cat test.txt
Hello!

検証機のスペック: IBM ThinkCentre 8086-AGJCPU: Celeron D 330 2.66GHz RAM: DDR-SDRAM 1GB LAN: Gigabit Ethernet(Intel chip)

abの条件は下記の通り


$ ab -n 100000 -c 100

結果:

  • mruby

Time taken for tests: 108.551 seconds Requests per second: 921.23 [#/sec] (mean) Time per request: 108.551 [ms] (mean) Time per request: 1.086 [ms] (mean, across all concurrent requests)

  • Ruby(FastCGI)

Time taken for tests: 362.996 seconds Failed requests: 109Requests per second: 275.48 [#/sec] (mean) Time per request: 362.996 [ms] (mean) Time per request: 3.630 [ms] (mean, across all concurrent requests)

  • txt

Time taken for tests: 98.767 seconds Requests per second: 1012.48 [#/sec] (mean) Time per request: 98.767 [ms] (mean) Time per request: 0.988 [ms] (mean, across all concurrent requests)

なんとmrubyが静的ファイルに迫る速度を出してました。すごい……

ちなみにmrubyが動かなかった方のメインサーバー(Core2 duo E6300@1.86Ghz, RAM512MB)ではRuby(FastCGI: mod_fcgid)で1857.93 [#/sec]とかいう値を叩きだしてました。後日メインのサーバーの方もPreforkにして検証してみようかと思います。 いつになったらFreeBSD PortsにApache 2.4が来るのだろう……

そういえば、もう明後日に迫っていますが、CombConfに参加します! 内容は、「HTTPSを使わずに暗号化通信をしよう」でやる予定です。 出来るの………?(まだ検証してない

CombConfの発表が2日後に迫っているにも関わらず他の技術に手がでます。 組み込み向けのRubyであるmr[…]

田町アドベントカレンダー 14日目: 港区立三田図書館

雑記

半分以上が @mactkg によって成り立っている田町アドベントカレンダー の14日目です。 昨日(13日目)は かんみさん(@kanm_in)のあゝ我が青春の田町よ 或いは田町アドベントカレンダー13日目でした。 校内無線LANの実情など、なかなか知る事のできない話はとても興味深かったです。

さて自分ですが、プログラミング関連の技術書はなかなか高いということもあり、最近いくつか図書館を巡っています。 そこで、田町駅から近く、今後お世話になるであろう港区立三田図書館を紹介します。

三田図書館

田町駅から三田口(西口)方面のデッキを進むと徒歩3分丁度でした。素晴らしい。

自分は港区民ではないですが、もちろん港区内に通学, 通勤していればカードが作れます。 身分の証明出来るものさえあれば、用紙1枚を書くだけでものの5分程度でカードが作れてしまいました。

港区図書館カード

カードのラッコ?がちょっと可愛い

中を色々周っていて驚いたのが、週刊アスキーとかの普通の週刊誌が結構あったということ。 雑誌の購読数がとても多く、190誌ほどの雑誌がありました。すごい!

三田図書館自体にはあまり専門書がありませんでしたが、港区内で検索してみると色々とお目当ての本が見つかったので、予約などで活用してみてはどうでしょう。

そういえば、田町アドベントカレンダー10日目:三田製麺所を見て美味しそうだなーと思い、自分もつけ麺を食べに行って来ました。 平日の昼間に行きましたが、1分も待たずに入れました。中は3階まであるようで、かなり賑わっているようです。

三田製麺所のつけ麺大盛り(400g) 700円

例に漏れず端が切れました。自分も大盛りを食べたのですが、400gはかなり量があると感じました。中(300g)や並(200g)でも全然足りるんじゃないでしょうかっ

内容が薄くなってしまいましたが、田町アドベントカレンダー14日目は @kyonfueeがお送りしました。

明日は多分 @mactkg 先輩です。@altcolonyさんの田町アドベントカレンダー15日目:東京チカラめし in 田町でした!残り10日強、頑張ってください!ではではっ

半分以上が @mactkg によって成り立っている田町アドベントカレンダー の14日目です。 昨日(13日目)[…]

Raspberry Piを買ったり

雑記

最近、巷で話題のRaspberry Piというものを買いました。 簡単にいえば約3000円のクレジットカードサイズのPCだそうです。

日本からだと下のリンクから買えるそうです。

http://jp.rs-online.com/web/p/products/7568308/? 今回は @mactkg 先輩が送料無料にするべく購入者を集めていたので便乗させて頂きました。

CPUがARMアーキテクチャなのでどんなOSでも動くわけではないですが、公式ではDebianとArchが公開されてました。 他にもFreeBSDや、Androidも動くらしい! とりあえず幾つかのサイトを参考にして(友人のステマが激しい)Arch Linuxを導入してみました。 Raspberry Pi | Arch Linux ARMArchLinux Install Guide - eLinux.org

ケーブルを接続してみた。画面出力はHDMIとコンポジットがありますが、HDMIが使えるモニタがなかったのでコンポジットに。 コンポジットが使えるモニタもないのですが、何故かGV-USBがあったのでそれでPCに取り込むことに。SSHでもいいみたい。

電源はMicroUSB端子です。700mAらしいので普通のPCだと足りないかも……?ACアダプタを買った方がいいかもしれません。 僕はMacBook AirのUSB端子で試しましたが、確かMBAは1A出せたはずなので普通に使えました。 電源ケーブルを差し込むと勝手に電源が入ります。

Arch Linuxでは初期状態でID:root, PASS:rootらしいのでログインして、キーボード配列を日本語配列に。


$ loadkeys jp106

次回起動時に自動的に読み込まれるよう/etc/rc.confにこんな感じで(なかったら作成する KEYMAP="jp106" あとはパーティションの設定をして、普通に使うのみ?(本当はスワップとか設定するべきところなんだろうけども…… Arc Linux で SD Card の余り領域を使えるようにする - Debian GNU/Linux 3.1 on PowerMac G4  

とりあえずここまでです。Rubyが普通に動いたので何か出来たら面白いなぁ……と

最近、巷で話題のRaspberry Piというものを買いました。 簡単にいえば約3000円のクレジットカードサ[…]

DigitalArts プログラミングコンテスト2012に参加しました!

Programming

タイトルの通りです。 DigitalArts Programming Contest 2012 なんとかA, B問題を解くことが出来ました。流れはこんな感じ。

http://twitter.com/kyonfuee/status/272311520388591616

長いでんがな…… C問題は解けなかったです。時間足らず。

今回は初のRubyで挑戦してみました。getsとsplitとchompでどうにかなりそう?とか思いつつ、ARCで他人のRuby解答を見よう見まねでやってました。

提出コード

A - C-Filter見た瞬間に正規表現で解けそうだと思ったのでそのまんま。 /aaa/だと"aaaa"にマッチしてしまうので、/^aaa$/にするようにして解決

#!/usr/bin/ruby -Ku
input = gets.split

ng = []
num = gets.to_i
num.times { ng < < gets.chomp }

ng.map!{|v| v = Regexp.new("^" + v.gsub("*", ".") + "$")}
ng.each{|n| input.map!{|i| i =~ n ? i = "*" * i.length : i}}

input.length.times.each {|n| print input[n]; print " " if n != input.length}
puts

298Bytes(提出時から若干変更あり)

B - Password 最初は簡潔なコードにして書いていたつもりが、前述の通りひたすらにA問題に提出してWAを返されていたので焦りながら修正していたらこんなありさまに… でも最後のこのコードしか通らなかったり。本当に良く分からないミラクル。 Rubyではchar ⇒ intは "a".ord, int => charは 96.chr みたいにやるらしい。へえ というのを利用して、後は普通のC言語でやるような感じで解いた。

後半のif out == input 以降が若干キモ?のようです。 入力が"b"の時に"aa"を返したり、"zz"のときに"yza"を返すようにしてます。

#!/usr/bin/ruby -Ku

hash = 0
input = gets.chomp
input.each_char {|s| hash += s.ord - 96}

if hash == 520 || hash == 1 #a, zzzzzzzzzzzzzzzzzzzz
  puts "NO"
  exit
end

out = ""
out += "z" * (hash / 26)
out += ((hash % 26) + 96).chr unless (hash % 26) == 0

if out == input
  if hash < 26
    out = "a"
    out += (hash - 1 + 96).chr
  else
    out = "y"
    hash -= 25
    out += "z" * (hash / 26)
    out += ((hash % 26) + 96).chr unless (hash % 26) == 0
  end
end

puts out

484Bytes

総評

もう少し落ち着いたほうがいいと思う(4度の提出ミスに対して 後はC言語みたいなコンパイラ言語が書けなくなってるくさいので、またそっちも書かないといけないような…… そういえばJOI予選も控えてますし…(PCKはあと1問が5分という所で予選落ち)

そして結構謎なのが、表彰式(1問以上解いたら参加出来る)の開始が12/3(月)の16時からということ。 平日の16時とか参加出来る人が限られそうです……

かくいう僕も地理的には近いけれども時間的に無理ゲなので遅刻の旨を伝えた上で良さげなら参加します。

(どうでも)いいこと

12/22 プログラミング生放送勉強会 第19回@品川 参加受付中! #pronama « プログラミング生放送参加するよ! 第12回 日本情報オリンピック予選参加しますよ!

以上

タイトルの通りです。 DigitalArts Programming Contest 2012 なんとかA, […]

雑記(Superconとかタイとか)

雑記

タイに行ってきたり、Supercon本選で心が折れたりと充実した日々を送っております。

本当に少しだけですがメモ程度に。

タイ 国際交流

タイは凄かったですね。今までの自分の価値観がすっ飛んだような気分です。流石ほほ笑みの国タイ。(帰国してから知った) 色々な人に助けられて、色々な場所で色々な事が学べたなあ……と。 色々書けたら良いのだけど、色々研究施設の見学などもさせて頂いたのでどうなのだろう……?

1週間がとても短く感じたとともに、もっと長く居たいと思いましたね。交換なのでまたすぐに会えるのが楽しみです。

Supercon2012

酷かった……ふえぇ…… タイとは打って変わってなかなかに厳しい毎日でした。 大会前から嫌な予感はしていましたが、やはりCUDAプログラムは事前に実践して学んでおくべきでした。 (1位チームはGPU使ってませんでした。何かおかしい) アルゴリズムについては、ほとんど無勉で挑んだのが非常に惜しい。

あまり複数人のチームというところを生かせなかったのと、全体的な事前の練習不足が惜しいところです。 せっかく本選に出れたのだから、もう少し頑張れたらなあと……

そういえば上位4チームが使ってた最小費用流アルゴリズム、そういえば大会初日の夜に、プログラミングコンテストチャレンジブックをパラパラとめくっていて目に入ってた気がします。そこで気が付くべきだった…!

まあ直近にパソコン甲子園の予選も控えてますし頑張りたいです。

まあざっとまとめるとこんな感じになります。もう少し書けたらいいなあ…

タイに行ってきたり、Supercon本選で心が折れたりと充実した日々を送っております。 本当に少しだけですがメ[…]

Kuinでエラトステネスのふるい

Programming

Kuin0.02が公開されたのでエラトステネスのふるいを使って素数を計算してみた。

Kuin0.02でコンパイル, 動作確認してます。

まだKuin用のシンタックスハイライトがない………

constに関するコンパイルエラー、Kuin0.021で修正されました。くいなちゃんに感謝です。 (2012/8/27 22:55)

{
  エラトステネスのふるい

  Author: きょんたん (@kyonline)
}

func Main()
  const N : int :: 10000000

  var isPrime : []bool :: @new [N]bool
  var Prime : []int :: @new [N]int
  var numPrime : int :: 0

  for i(0, N - 1)
    do isPrime[i] :: true
  end for

  do Prime[0] :: 2
  do numPrime :+ 1

  for i(3, N - 1, 2)
    if (!isPrime[(i - 1) / 2 - 1])
      continue i
    end if

    do isPrime[(i - 1) / 2 - 1] :: false
    do Prime[numPrime] :: i
    do numPrime :+ 1

    do Kuin@Dbg(i.ToStr())

    var j : int :: (i - 1) / 2 - 1 + i
    while (j < N)
      do isPrime[j] :: false
      do j :+ i
    end while

  end for

  do Kuin@Stop()
end func

Kuin0.02が公開されたのでエラトステネスのふるいを使って素数を計算してみた。 Kuin0.02でコンパイ[…]

タイに行ってきます

雑記

特にお知らせでもなんでもないです。タイトルのまんまです。

本当に最近決まったばかりではあるのですが、学校の国際交流の一貫としてタイの高校に行って来ます。

1週間という短い期間ですが、色々学べたらいいなと思ってます。

 

準備で色々手こずっていたり、明確な目標がなかったりして不安たっぷり。

とりあえず行くっきゃ無い?

 

写真とかこっちに貼れたらいいのだけど、あちらでインターネット環境が使えるのかどうか……。

 

帰って来たら翌日から Supercon 2012 なので多分初日は突っ伏して寝てるはずですよろしくお願いします。

というか今日旅行で北海道から帰ってきたばかりだったりします。眠い〜

特にお知らせでもなんでもないです。タイトルのまんまです。 本当に最近決まったばかりではあるのですが、学校の国際[…]

TARI TARI スタンプラリー行って来ました!

雑記

TARI TARIというアニメ、今期絶賛放送中ですが、近所(江ノ島や鎌倉など)が舞台になっていて、ちょうどスタンプラリーを行なっているということで行って来ました!

[caption id="attachment_151" align="alignnone" width="600"]

今回のスタンプラリーでもらったものとか買ったものとかその他諸々。[/caption]

応援ショップが色々あったりして、中にはこの店にしかない限定ポストカード!みたいなものもあったのでついついクリアファイルと買ってしまったり。

あまり写真を撮っていなかったわけですが、応援ショップが沢山あってついつい目移りしたり、運営の裏をかきすぎて逆に遠回りになったりと苦労しました。

スタンプの場所はネタバレになってしまうので控えますが、いくつかヒントを…?

(知りたい方はこの記事の下の方を参照にどうぞ: もちぶろぐ: TARI TARI × 江の島!コラボスタンプラリーに行ってきた!)

  • 江ノ島へは湘南モノレールでも江ノ電でも。近場の方は島の中に無料の駐輪スペースがあります。

(TARI TARIの聖地を尋ねるならば江ノ電または自転車がおすすめ!

  • 最初は片瀬江ノ島観光案内所、または藤沢市観光センター案内所でスタンプ帳をもらいますが、片瀬江ノ島観光案内所は島の入り口にあり近いので、そちらでスタンプ帳をもらうことをオススメします。

  • 島の入り口から順番に番号が大きくなっていきます。

(1番は藤沢市観光センター案内所です。

  • 基本的に大通りだけ歩いていればあっという間に集まりますのでご安心を。

(全て道沿いにあり、ノボリがあるので直ぐに見つかります!

  • 階段が多く、 暑いので飲み物はあると良いですねっ。

(江ノ島サイダーを買うとTARI TARIのポストカードがもらえるお店も多いです。

  • 時間は1〜2時間といったところ?(ゆっくりと歩いても2時間掛かるかどうかと思われます。

やっぱり、地元が舞台だったりするとどこなのか探してみたくなったりしたり。

皆さんも夏は是非どうぞ!

以下写真とか

[caption id="attachment_146" align="alignleft" width="600"]

スタンプ帳

スタンプ帳をもらっていざ![/caption]

[caption id="attachment_143" align="alignnone" width="600"]

江ノ島

Let's 江の島![/caption]

[caption id="attachment_147" align="alignnone" width="450"]

遠回りをしてこんなところを…[/caption]

[caption id="attachment_144" align="alignnone" width="449"]

江ノ島駅

スタンプラリーでもらえるクリアファイルにもなっている、江の電の江ノ島駅。[/caption]

TARI TARIというアニメ、今期絶賛放送中ですが、近所(江ノ島や鎌倉など)が舞台になっていて、ちょうどスタ[…]

FreeBSD 9.1-BETA1 セットアップメモ(仮)

FreeBSD

Mac向けに公開されたKobitoが意外と使いやすかったので、マークアップの練習も兼ねてFreeBSDのセットアップメモを作ってみたりした。 Kobitoというのは、プログラムの説明やメモなどを、Gistのように書けたりするソフトという解釈でいいのかな。

 

FreeBSD 9.1-BETA1 セットアップメモ(仮)

まだ仮だったりするので多分誤植やら間違ったことやら色々してる可能性が…

Mac向けに公開されたKobitoが意外と使いやすかったので、マークアップの練習も兼ねてFreeBSDのセット[…]

セキュリティ・キャンプ2012に応募しました…?

雑記

(昨日夜)TLがセキュキャン一色だなー。そういえばあれってどんな感じなんだろう?

⇒へええ面白そうだなぁ…… ちょっと応募してみようかな?いつ締め切りだっけ……

⇒明日の17時か!ちょっとやってみよう!

⇒Same Origin Poricyって何?分からないよ……

⇒とりあえず終わらせた!落ちてもいいや!送ろう!

⇒どうやって送るの……?紙に書いたけどFAX?メール?

⇒メールで送る⇒@sora_hにFAXで送ったほうが良いのでは?と突っ込まれる。

⇒念のためにFAXで送る⇒ごにょごにょ……

何か疲れてるみたいです。関係各位の皆様にはご迷惑をお掛けしました。

という夢のような出来事。報告終わり。

(昨日夜)TLがセキュキャン一色だなー。そういえばあれってどんな感じなんだろう? ⇒へええ面白そうだなぁ…… […]

Supercon2012に参加します!

Programming

今日になってまさかの衝撃。

公式サイトには日付しか書かれていなかったりしてメールでの発表なのかな?とか思いながら12時になるもメールなし。

なるほど落ちたのかーと思ったころ、まさかの予選通過通知。 https://twitter.com/kyonline/status/218623559478689792

とりあえず前の記事にも書いてあるとおり、何でバグあるはずなのに通ったのかとか色々謎は残りますが…

https://twitter.com/kyonline/status/218666506878320640

でも出場できるからには全力で頑張ります!

自分と先輩方2人で参加します。チーム名は後ほど…?

チーム名はhogeになりました。よろしくお願いします。(2012.7.2 2:38追記)

今日になってまさかの衝撃。 公式サイトには日付しか書かれていなかったりしてメールでの発表なのかな?とか思いなが[…]

Supercon2012予選問題を解いてみた

Programming

以前から、Superconの存在自体は知っていて、ずっと参加したいと思っていたのですが、ついに参加する機会を得ることが出来たので予選問題解きました。 が、まさかの応募する際の添付ファイルミスという目も当てられないミスを…… もしこれで本選通っていたら奇跡ですね。

追記(2012/6/25):詳細の説明は私事により2週間ほど先になるかも……? コードが長いのは仕様です。期限日の午前4時に書いていたらこうなります。 動的計画法とかそんな時間短縮を使う暇も知識もなかったのですし… 全てが同じ文字のパターンに対しては一応関数を作って対処してます。 ただ、|W|が短い場合の対策がほぼ皆無。 添付ファイルミスとは: 寝ぼけて**< と< =**を間違えたプログラムを送信した。

というわけでとりあえず修正したソースだけ置いておきます。~~詳細は後ほど? ~~多分書かない。というか書けない…… (2012.7.8追記)


/* SuperCon 2012 予選問題C用テンプレート(問C,スーパーコン予選問題 兼 1級認定問題 2012版)
・解答プログラムはこのテンプレートに従って作成すること.
・解答プログラムは1つのファイルで,チーム名.c という名前にすること.
・入力の方式は,あらかじめ入力ファイル(例:input_sample.txt)を作っ
ておき,実行時にファイル名を指定する方式です.
*/

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>

/* ↓以下の範囲は変更可能 */
#define TIME_LIMIT 59.5
#define MAX_LEN 10
#define MAX_V 100000

#define max(a,b) ( a > b ? a : b )
#define min(a,b) ( a > b ? b : a )

int isFront(char input[]);

void searchTree(int flag, int answerTemp, char inputStr[]);

void searchB (void);

int isTypeB(void);

int Sum(int flag);

int N_G = 0;
int v_G[1000];
char w_G[1000][10 + 1];
char W_G[10000 + 1];
clock_t start_G;

int answerTemp_G = 0,strLenTemp_G = 0;
/* ↑上記の範囲は変更可能 */

int main(int argc, char** argv){
int answer = -1; /* この変数に答(Vの最大値)を代入してください */
int N;
static int v[1000];
static char w[1000][10+1];
static char W[10000+1];
char* problem_file;
clock_t start, end;
FILE* fp;

int i;
char buf[0xffff];
char* p;

if(argc <= 1){
fprintf(stderr, "Enter the input file.¥n");
exit(EXIT_FAILURE);
}

problem_file = argv[1];
fp = fopen(problem_file, "r");
if(fp == NULL){
fprintf(stderr, "Cannot open %s.¥n", problem_file);
exit(EXIT_FAILURE);
}

p = fgets(buf, 0xffff, fp);
assert(p != 0);

N = atoi(strtok(buf, " ¥n"));
assert(1 <= N && N <= 1000);

p = fgets(buf, 0xffff, fp);
assert(p != 0);
p = strtok(buf, " ¥n");
strcpy(W, p);
assert(1 <= strlen(W) && strlen(W) <= 10000);
for(p = W; *p; ++p){
assert(islower(*p));
}

for(i = 0; i < N; ++i){
p = fgets(buf, 0xffff, fp);
assert(p != 0);
v[i] = atoi(strtok(buf, " "));
assert(-1000000 <= v[i] && v[i] <= 1000000);
p = strtok(NULL, " ¥n");
strcpy(w[i], p);
assert(1 <= strlen(w[i]) && strlen(w[i]) <= 10);
for(p = w[i]; *p; ++p){
assert(islower(*p));
}
}

fclose(fp);

start = clock();

/* ↓以下の範囲は変更可能 */

N_G = N;
strcpy(W_G, W);
for (i = 0; i < N; i++) {
memcpy(w_G[i], w[i], sizeof(w[i]));
v_G[i] = v[i];
}
start_G = start;

if (isTypeB() == 0) {
searchB();
} else {
searchTree(0, 0, "");
}

answer = max(0, answerTemp_G);

/* ↑上記の範囲は変更可能 */

end = clock();
printf("%s, %f, %d¥n", problem_file, (double)(end - start) / CLOCKS_PER_SEC, answer);

printf("%s, %d¥n", problem_file, answer);
return 0;
}

/* ↓以下の範囲は変更可能 */

int isFront(char input[]) {

int ret = strncmp(input, W_G, strlen(input));

if (ret == 0) return 0;
if (ret < 0) return 1;

return -1;
}
void searchTree(int flag, int answerTemp, char inputStr[]) {
int quit = 0, len, i;

char *tempStr;
tempStr = (char *)calloc(10000 + 1, sizeof(char));
strcpy(tempStr, inputStr);
len = strlen(tempStr);

for (i = flag; i < N_G; i++) {

if(((double)(clock() - start_G) / CLOCKS_PER_SEC) >= TIME_LIMIT) {
answerTemp_G = max(answerTemp_G,answerTemp); break;
}
memset(tempStr + len, 0, sizeof(char) * (10001 - len));

strcat(tempStr, w_G[i]);

switch (isFront(tempStr)) {
case -1: continue;
case 0:
answerTemp += v_G[i];

answerTemp_G = max(answerTemp, answerTemp_G);

flag = i + 1;
searchTree(flag, answerTemp, tempStr);
answerTemp -= v_G[i];

if (quit == 1) continue;
break;
case 1:
answerTemp += v_G[i];
flag = i;

answerTemp_G = max(answerTemp_G,Sum(flag + 1) + answerTemp);

quit = 1;
continue;
}
}
RET:
free(tempStr);
tempStr = NULL;
return;
}

void searchB (void) {
int AnsS = Sum(0), AnsL = AnsS, WLen = strlen(W_G);
int strLenS = strLenTemp_G, strLenL = strLenTemp_G;
int a = 0, b = MAX_LEN, c, d = MAX_V, e = MAX_V;

if (strLenTemp_G <= WLen) { answerTemp_G = Sum(0); } else {
int i;
while (strLenS > WLen && strLenL > WLen) {

for (i = 0; i < N_G; i++) {
if (v_G[i] > 0) {
c = strlen(w_G[i]);
a = max(a, c);
b = min(b, c);
}
}

for (i = 0; i < N_G; i++) {
if (v_G[i] > 0) {
c = strlen(w_G[i]);
if (a == c) d = min(v_G[i], d);
if (b == c) e = min(v_G[i], e);
}
}

strLenL -= a; AnsL -= d;
strLenS -= b; AnsS -= e;

}
if (strLenL <= WLen) answerTemp_G = AnsL;
if (strLenS <= WLen) answerTemp_G = max(answerTemp_G, AnsS);
}
return;
}

int isTypeB(void) {
char isSame = w_G[0][0];
int i,j = 0;

do {
for (i = 0; i < strlen(w_G[j]) ; i++) if (w_G[j][i] != isSame) { return 1; }
} while ( ++j < N_G );

return 0;
}

int Sum(int flag) {
int i, ret = 0;
for (i = flag; i <= N_G; i++) if(v_G[i] > 0) {
ret += v_G[i];
strLenTemp_G += strlen(w_G[i]);
}

return ret;
}
/* ↑上記の範囲は変更可能 */

まさか初投稿がこんな残念な記事になるとは…

以前から、Superconの存在自体は知っていて、ずっと参加したいと思っていたのですが、ついに参加する機会を得[…]