SRM 627 Div2 oo- unrated -> 1176

するめ。初参加。challangeとかのことは一応知ってる状態。

英語の問題をどれだけ早く読み解けるかという壁が立ちはだかった。読めても今のところは1000点はだめだっただろうな。

250 ManySquares

概要

いろんな長さのまっすぐな棒がある。組み合わせて作れる正方形の最大数。ただし1辺を構成するのに1本しか使えない。

入力

  • 棒の長さの列sticks
    • 列の長さは1..50
    • 棒の長さは1..1000

出力

  • 作れる正方形の数(非負整数)

解法

結局同じ長さの棒4本に対して正方形1つになるので、端から集計していって、4本毎に個数に1足す。

class ManySquares {
  public:
  int howManySquares(vector <int> sticks) {
    map<int,int> hash;
    int ans = 0;

    rep(i,sticks.size()){
      hash[sticks[i]]++;
      if(4 == hash[sticks[i]]){
        hash[sticks[i]] = 0;
        ans++;
      }
    }

    return ans;
  }
};

500 HappyLetterDiv2

何かのゲーム。最初にフィールド内に何人かプレイヤーがいて、各プレイヤーが英小文字をひとつずつ持っている。各ターンに異なる文字を持つプレイヤーが2名選ばれてフィールドから除外する操作を、選べなくなるまで繰り返す。残ったプレイヤーがいるなら、プレイヤーの持っている文字は全て同じになるので、その文字が勝利文字。いなければ、勝利文字はない。

最初の段階でゲームがどのように進行しても必ず勝利文字になる文字が特定できるらしい。できるならその文字を、できなければピリオドを返せ。

入力

  • 最初にフィールド内にいるプレイヤーの文字を結合した文字列letters。
    • 文字列長は1..50
    • 各文字は'a'..'z'

出力

  • 必ず勝利文字になるような文字が存在するなら、その文字。しなければ、ピリオド。

解法

過半数を占める文字があればそれが勝利文字、なければ選び方によって変動するのでピリオド。半分丁度ではプレイヤーが残らないので勝利文字にならない。

class HappyLetterDiv2 {
  public:
  char getHappyLetter(string letters) {
    map<char,int> hash;
    int maxCount = 0;
    char mostPopular = '.';

    rep(i,letters.size()){
      hash[letters[i]]++;
      if(maxCount<hash[letters[i]]){
        maxCount = hash[letters[i]];
        mostPopular = letters[i];
      }
    }

    if(maxCount <= letters.size()/2){
      return '.';
    }else{
      return mostPopular;
    }
  }
};

1000 BubbleSortWithReversals

概要

  • 非負整数列Aをバブルソートするときに、swapする動作の回数を最小にしたい。
  • ソートする前に次の操作をK回まで行ってよい。
    • Aの部分列の順序を反転する。ただし、各回で選ぶ部分列は独立であること。

入力

  • 非負整数列A
    • 長さは2..50
    • 各値は2..50
  • 自然数K

出力

  • swap操作の最小回数(非負整数)

解けてないので解けたら更新。

LTP08の話をすると見せかけた桃子の話

先日、LTPの個人曲について喋るニコ生をした。その時に私がした話をベースに書く。

ここに何が書いてあるか

LTP08のメンバーは充実した現実世界の生活をおくってきたけど、桃子は現実世界では友達もいなくて孤独に生きてきたから、LTP08のメンバーにならなかったのは残念ながら当然。これからがんばろう。

曲目の確認

LTP08にて何が描かれたか

LTP08のメンバーは、最年少の中谷育(10)、下から3番目の大神環(12)、矢吹可奈(14)、高槻やよい(14)の4名からなる。メンバー発表当時よりロリ組と話題になっていたのが、もう大分前のことに思える。

「ホップ♪ステップ♪レインボウ♪」が描くのは友達関係に関することだ。ひとりよりふたり、ふたりよりたくさんの精神で、友達を最大の宝としている。Bメロの歌詞は1番と2番で対応しており、友達関係につきものである喧嘩と和解を歌っている。何よりみんなで遊ぶことが楽しい、みんな一緒に外に飛び出そう、という歌。

「グッデイ・サンシャイン!」は中谷育の性質をよく表している。この年齢にしては増せている方で、子供扱いすることを嫌がり、何か任せられることに大人っぽさを感じてウキウキする一方、その内情は年相応の女の子である。こちらは、みんなと過ごすいつもの時間を踏まえた上で、ひとりで何かをする、みんなとは違うことをすることに、まわりのみんなに対する優越感を感じている。

「オリジナル声になって」は自分自身と向き合う。矢吹可奈の明るく前向きで努力家な一面をおさえながら、自身は何であるのか、何が自分自身であるのかを探し求める、青年期の課題に頭から突っ込んでいく歌になっている。*1

「ハートウォーミング」は家族の中の自分の存在を描く。高槻やよいの背景によく対応した歌詞になっているが、ここに歌われるのはまさしく、家族の中で母親にも似た頼られる位置にあって、その役目を全うする、年齢からは想像もつかないほどの強い母性の姿である。

「Good-Sleep, Baby」では、環の歌うすれ違いや可奈の歌う努力についてこれらを受容し、眠る間は大変なことは忘れて、ゆっくりおやすみなさい、とドラマパートでテーマになっていた「癒し」をイメージさせる。

現実世界の住人たち

4名とも、歌の内容は現実世界の人との関わりについて言及している。面々はみな現実世界に居場所を持ち、その中で生活を送ってきた。それぞれの曲に注目すれば、大事にしたいみんなという集団を認識し、その中でどう自分を認められたいか、そもそも自分とは何であるかを考え、自分が集団の中でどのような存在として振る舞うか、と段階を踏んで成長する子供の精神が浮かび上がってくる。

「Good-Sleep, Baby」は日中の現実世界での営みを踏まえた、夢の中での「癒し」を歌っており、あくまでメインステージは起きている間、現実の世界であることを印象づける。

やっと本題。

桃子はLTP08のメンバーにはなりえなかった

桃子がこのLTP08のメンバーと決定的に異なる点が、彼女は友人関係が壊滅的な状態にあり、更に両親との関係も良好とはいえない*2、というところである。LTP08の曲に見出した精神の発達を、桃子はどれもまともに経験できていないか、一般とはかけ離れた形で経験してしまっている。彼女には現実世界に居場所がなかったのだ。

桃子には、夢の中でまた会うような友達はいないのだ。現実にもいないのだから当たり前のことだ。だが彼女にとっても、夢の世界は強く意味のあるものである。

「デコレーション・ドリ〜ミンッ♪」に描かれる桃子の夢の世界

桃子は11歳、中谷育と大神環の間で、ミリオンスターズの中で2番目に若い。それでいてかつて人気子役であった経歴を持つ。アイドル以前から彼女は、演技の世界の人間であった。

夢の世界、つまり現実でない世界は、そもそもが桃子のメインステージなのだ。演技の世界ではどのような自分にもなることができる。それこそお姫さまだろうと構わない。おとぎ話でさえ叶えることができるのだ。実際は、それまでの現実の世界には「一緒に踊って」くれる人はいなかったのだが。

歌の中にも、夢の世界以外の話題は出てこない。仕事の場も遊びの場も夢の世界だった桃子は、現実世界に生きてきたLTP08のメンバーと一緒にはいられないのだ。

桃子を救済するLTP12、「ココロがかえる場所」

ではLTP12に入って桃子はどうなったのかというと、孤独だった桃子自身が既にかけがえのない現実の存在で、そのときがあったからこそ、踏み出した今を強く歩けるんだよ! と過去の自分に対する追認という形式で、問題をあるがままに自分に組み込んでしまう。今のアイドルとしての生活を現実世界における桃子自身の居場所とし、夢ではなく現実として、目の前のステージを楽しむことを欲するようになる。

これはある程度年齢を重ねた者からしか出てこない機転であって、LTP08にいるような子供たちからはなかなか得られないものだ。*3桃子自身、年齢にふさわしくない形で大人の世界に順応してしまっていて、桃子が何かしらの形で認めた大人の姿しか、彼女の心を打つことができなかったのだと思う。

LTP12のメンバーは何かしらの課題を乗り越えてきた、あるいは乗り越えようとする面々が並ぶ*4が、その人選は桃子の救済がひとつの大きな目的であったものと思う。

LTP12の話は、また改めてまとめる。

*1:曲としても夕暮れ時をイメージさせ、ノスタルジックな雰囲気を強く感じさせる。

*2:儚い夢の一滴 周防桃子』のカードテキストをはじめ、クリスマスのアイドルフィーチャリングのテキストなどより。

*3:ロコ(15)はこの意味で先んじている。可奈が悩みながらもずんずん進んでいくよりずっと早い速度で、こうありたいという自分像に向けて、考える前に手を動かしてさえいる。

*4:ロコだけは強烈にポジティブなモチベーションに思えるが、実際はどうなのか定かでない。

OS X Mavericksでsvn checkoutできなかったときにやったこと

バージョン管理はgit派なのだけど、たまたまsvnで管理されたレポジトリからcheckoutする必要があって、とりあえずsvn checkoutしてみたところ

svn: E175002: Unable to connect to a repository at URL 'http://...'
svn: E175002: OPTIONS of 'http://...': Could not read status line: connection was closed by server (http://...)

こんなのが出た。調べてもあまりピンとくる情報が得られなかったので、homebrewで最新版(1.8.8)を入れたところ、

svn: E120108: Unable to connect to a repository at URL 'http://...'
svn: E120108: Error running context: The server unexpectedly closed the connection.

こう変化した。
このメッセージについてこんな記述を見つけたので、

$ sudo /opt/cisco/anyconnect/bin/websecurity_uninstall.sh

を実行したところ、正常にcheckoutできるようになった。
アンインストールせずに回避する方法はないのだろうか。

homebrewを更新しようとしたら詰まったのとその解決法

大したことではないがメモしておく

berlysia:> brew update
Warning: Could not tap homebrew/dupes/ant over mxcl/master/ant
Warning: Could not tap homebrew/dupes/cvs over mxcl/master/cvs
Error: undefined method `to_sym' for nil:NilClass
Please report this bug:
    https://github.com/mxcl/homebrew/wiki/troubleshooting
/usr/local/Library/Homebrew/cmd/update.rb:123:in `report'
/usr/local/Library/Homebrew/cmd/update.rb:121:in `each_line'
/usr/local/Library/Homebrew/cmd/update.rb:121:in `report'
/usr/local/Library/Homebrew/cmd/update.rb:35:in `update'
/usr/local/Library/brew.rb:95:in `send'
/usr/local/Library/brew.rb:95

Homebrew, Ruby, and Git - RayHightower.com ここを見つけたので

berlysia:> rbenv versions
  system
* 2.0.0-p247 (set by /Users/berlysia/.rbenv/version)

berlysia:> rbenv local system

berlysia:> rbenv versions
* system (set by /Users/berlysia/.ruby-version)
  2.0.0-p247

berlysia:> brew update
Updated Homebrew from 44988d34 to 44988d34.
==> Updated Formulae
homebrew/dupes/apr	      homebrew/dupes/file-formula   homebrew/dupes/grep		  homebrew/dupes/openssh	homebrew/dupes/tidy
homebrew/dupes/apr-util	      homebrew/dupes/gdb	    homebrew/dupes/httpd	  homebrew/dupes/tcl-tk		homebrew/dupes/zlib
==> Deleted Formulae
homebrew/dupes/ant  homebrew/dupes/cvs

無事更新できましたとさ。

Macbook Pro (Mid 2012)が起動しなくなってから解決するまでにやったこと

マカーならGenius bar行こう、という話。

事の発端

スリープ明けにパスワードを打ち始めたらそのまま固まって、強制終了した後から起動しなかった。出る画面といえば、中央にはてなマークが浮かぶのみ。

ぐぐったらこんなのが出た→Mac の起動時に、点滅する「?」マークまたは地球儀のアイコンが表示される - Apple サポート

試したこと

option押しながら起動→何も出てこなかった

いつものMacintosh HDもBOOTCAMPも出てこなかった。ついでにリカバリー領域も見えなかった。

インターネットリカバリーを利用してDisk Utilityを開き、状況確認をした。

なんと認識されていなかった。chkdskさせてもくれないのか!
この段階ではHDD買ってきて換装すっかーとか奮発してSSDにしちまうかーとか考えていた。

天啓

「ここ数ヶ月でMacBook Air Mid 2012の東芝製SSDが壊れる不具合が頻発している」というのは本当なのか調べてみた。

結果的には時期が同じだっただけで関連は認められなかったが、このreplyでGenius barに持ち込んでみようと決意し、その勢いで予約まで済ませた。


Genius barの予約が完了すると、それらしい完了ページに着地するのだが、そこにコメント欄がある。一応やるだけのことはやったので、何かの役に立つかと思って、症状とやったことを記述しておいた。

いざGenius bar

アップルストア銀座Genius barは、4階にある。
エレベーターはガラス張りで、なんと内にも外にも開延長以外のボタンがない。事前に聞いていたのでそう驚きはしなかったが、それなりの衝撃だった。

出迎えのクルーに予約の時間と名前を伝えると、席を指定されるので、座って待つ。少し混んでいて、予約の10分前に行ったのだが、結局予約の時間を数分過ぎてから担当者が出てきた。iPadで予約情報を見ていて、コメントにも気づいていたようだ。

ジーニアスがやってくれたこと

option押しながら起動(起動ディスクの選択→何も出ない)
⌘S押しながら起動(シングルユーザーモードで起動→そもそもそのモードに入れない)

ここまでは一般ユーザーでもできることだ。ジーニアスに期待していたことはこの先。

HDDを取り出して外部マウンタからアクセス

これがいけたらしい。日頃の行いがよかったんでしょうかね、原因はケーブルではないか、とりあえず交換してみましょうか、という話に。この時点でケーブルの料金と修理代の見積もりが出てきた。もしだめだったらどうなるか、ということは確認を忘れた。

本来ならば修理は1週間ほどかかるらしいが、今回は状況を考慮してすぐに交換を行い、具合が良ければそのまま持ち帰ってokということだった。

ケーブルの交換

この段階で起動できることが確認された。ここで本当はディープなチェックをするのだが、簡易なチェックをしましょうという話に。
出てきたのはMRI(Mac Resource Inspector)。これのUIがオールドマックと同じだったので、チェックの間少しだけ、ジーニアスと昔のMacの話をした。

結果

MRIの結果は異常なし。見積もり通りの額を支払って、あまりにも嬉しかったのでジーニアスと握手をして、撤収。
出費は5k弱。


Time Machineのバックアップがあるつもりだったが、実際確認したら7月時点で止まっていて肝を冷やした。バックアップはこまめに、確実に。
原因がケーブルにあったということで、先走ってHDDを新調していたら大損するところだった。保証が切れていても、早まって自力修理する前にジーニアスの力を借りてみるといいだろう。今回のケーブルは、他で入手するのは難しい品であるらしいし、そういう意味でも。

.exeファイルをダブルクリックでwineから起動するAutomatorアプリケーション

Mikuinstallerを使えば簡単に実現できるけどwineの更新とかめんどくさいじゃないですか。他のライブラリ? も古いものですし
というわけでインストールしたwineにいきなりファイルパスを投げて実行してもらえたらいいなーとか思ったりして。


すでにwineをインストールしてあることを前提に話を進めます。
あと、ターミナルはデフォルトでbashのはずですよね。そこを弄っているような方にこの記事は不要かと思いますが

    • wineのパスを調べる

ターミナルを開き、whichを使ってwineのパスを調べましょう。

$ which wine

するとこんな感じでwineのパスが表示されます。

/opt/local/bin/wine

コピーしておきましょう。先頭のスラッシュを忘れないように。

    • Automatorで作業(ってほどでもない)
      • 「ワークフローのテンプレートを選択」が表示されます。ここでは「アプリケーション」を選択します。
      • 左のツリーから、「アクション」→「ユーティリティ」→「シェルスクリプトを実行」をダブルクリックします。(右の領域にドラッグ&ドロップでも構いません)
      • 「入力の引き渡し方法」で「引数として」を選択します。
      • 「cat」と入力されている部分に、次のように入力します

/opt/local/bin/wine "\1"

/opt/local/bin/wine の部分は先ほど調べたwineのパスです。ご自分の環境にあわせてください。
"\1" の部分は引数としてファイルのパスが入ります。""は付けておいた方が無難じゃないかな。
ちなみに $1 でも動きます。\と$の違いについては私は知りませんので詳しい人に聞いてください。

    • 保存

してください。適当な所に。



あとは適当な.exeファイルをcontrol+クリックして「このアプリケーションで開く」→「その他」で保存したアプリケーションを選べばいいんじゃないでしょうか。
あわよくば関連づけてもいいでしょうし。


大分適当ですがこんな感じです。


ちなみに。
.msiはwineでいきなり実行することはできなかった気がする。「$ wine msiexec /i 〜」だったかしら。.infだともっと複雑だったと思います、必要な人はググってください。
多分同じ方法でアプリケーションが作れると思います。

Wine×Mac OS Xで東方しようぜ?

Intel Macで東方してみましょう。タイトルのとおり、Wineを使います。
環境はiMac(early 2008) 2.66 GHz C2D, ATI Radeon HD 2600 Pro、OSはMac OS X 10.6.3です。


一昔前に話題となったMikuInstallerなんてものがありましたが、今回はこちらを使わず、MacPortsを使ってwineを導入してみましょう。
なお、東方の起動にVsyncPatchを使用します。こちらの説明は割愛します。
使用しなくても起動はすると思いますが、一部の作品ではBGMが読み込まれなかったりFPSが60以外で固定されたりします。
なお今のところ、花映塚萃夢想、緋想天、非想天則のネット対戦はできていません。
できたら教えてください。

最初に確認しておくこと

  • Xcode」がインストールされていること
    • Snow LeopardLeopardならInstall DVDのオプションインストールに「Xcode.mpkg」が同梱されていると思いますので実行してインストール
    • んなもんねーよ! という方はこちら→Mac Dev Center - Apple Developer
      • アカウントをお持ちの方はログインしてください。持っていない方はregisterからアカウントを作成してください。無料ですので英語にめげずがんばりましょう。
      • 真ん中あたりのDevelopment ResourcesからDeveloper Downloadsをクリック
      • 「Developer Downloads & ADC Program Assets」右カラムのDownloadsからDeveloper Toolsをクリック
      • Xcode *.*.* Developer Tools」をクリック(この記事時点では3.2.2が最新、Snow Leopard以前をご利用の方はこちらを参照して適切なXcodeをダウンロードしてください)
      • 結構ファイルサイズが大きいので金鍔でも食べてお待ちください。
      • dmgをマウントして出てきたpkgからXcodeをインストールしてください。
  • X11」がインストールされていること
    • Snow Leopardならデフォルトでインストールされていると思います。
    • インストールされていない方は再びInstall DVDのオプションインストール、あるいはOptional Installsから。
    • 特に設定は不要でございます。

MacPortsのインストール

  • MacPorts」でググって一番上→The MacPorts Project -- Home
  • サイドバーの Getting Started から Install MacPorts をクリック
  • 「“dmg” disk images for Snow Leopard, Leopard and Tiger as a legacy platform,〜」とあります。ご自分のMac OS Xにあわせて選択してください。クリックするとdmgのインストールが始まります。
  • dmgがマウントされるとpkgが実行されます。インストールしてください。
  • インストールが終わったら再起動するか、ログインしなおしてください。やらなくてもいいかも。おかしいな? と思ったら再起動してみてください。

MacPortsの設定

  • MacPortsはターミナルから利用するアプリケーションです。ターミナルを起動してください。/Applications/Utilities/、または/アプリケーション/ユーティリティにあります。
  • まずはMacPortsのアップデートとリストの更新が必要です。一行入力してReturn、次の一行を入力してReturn。

$ sudo port -d selfupdate
$ sudo port -d sync

最初の$と半角スペースはいりませんよ?
password: と表示されますのでアプリケーションをインストールする時と同様にOSのユーザーアカウントのパスワードを入力して、Return。また、すぐに実行すれば2行目ではパスワードを要求されません。


これでMacPortsの設定は整いました。それではWineをインストールしていきましょう。

MacPortsでWineのインストール

  • ターミナルを開きます。
  • 「port search wine」と入力してReturnしてみましょう。パッケージ名にwineを含むものが出てきたと思います。今回はその中から wine-devel をインストールします。
  • 「sudo port -d install wine-devel」と入力し、Return。*1
  • またしばらくかかります。蕎麦でも茹でてお待ちください。

Wineの設定

  • まずはターミナルを開いて「winecfg」と入力してみましょう。

  • こんなんが出ると思います。「オーディオ」タブを選択しましょう。
  • 何かダイアログが出ますのでとりあえず(`・ω・)b OK!しておきましょう。
  • 「音をテスト」を押すとなんかもわもわした音がします。変な音なのは仕様でしょう。音が出なかったことがないので、出なかった方はがんばってください。
  • OK キャンセル 適用と並んでいますので、OKを押して終了してください。

いきなり東方を起動してみる

  • ターミナルを開いて「wine 」と入力します(半角スペース忘れずに)
  • ターミナルのウインドウに、起動したい東方のvpatch.exeをドロップして、Return。(wine@1.2-rc2ではファイルパスに日本語が含まれていても問題ないようです)

簡単なように書いていますが、実行できればそれでかまいません。


最新版wineではDirectXなどの更新なしで動作するはずです。
また、風神録以降のウインドウモードを指定すると直後にDockに引っ込みます(!)が、焦らずクリックすれば問題なくプレイできると思います。
文花帖以前でのウインドウモードにおいては、VsyncPatchの機能でサイズの変更が可能です。
また、文花帖以前の作品はフルスクリーンで起動することができません。前述のサイズ変更で代用してください。
VsyncPatchを利用したフルスクリーン起動が可能でしたが、command+tabによるアプリ間移動ができないようなので、実質他の作業はできない?(同本体、OSX10.7、wine1.3.25にて)


ダブルスポイラーは今のところVsyncPatchが公開されていませんが、直接th125.exeを実行することで起動できます。ただし私の環境ではfpsが66中盤に固定されてしまいます…
なお、DSのセーブデータは ~/.wine/drive_c/users/***/ShanghaiAlice/th125 に配置されます。ここに上書きすれば他で使用していたセーブデータ、リプレイを使うことができます。

「vpatch dllをロードできませんでした」の対処法

この記事時点の最新版では同様の状況で再現できませんでした。
これは、既にwineを導入していて、外付けHDDなどに東方を入れている方が対象となると思います。
MacOSXでは.(ドット)から始まるファイルをシステムが使用します。
ストレージのフォーマットがHFS+でない場合、「example.txt」というファイルに対する特別な情報を「._.example.txt」というファイル名で同じフォルダに作成し、保存しています。
ところで、vpatch.exeは同じフォルダにあるvpatch_th**.dllを「“vpatch”を含む拡張子dllのファイル」として探しています。
すると、「._.vpatch_th**.dll」というファイルに反応してしまうことになります。
よって、この問題を解決するにはそのファイルを削除すればいいわけですが、ドットから始まるファイルは初期設定ではFinderから見ることができないようになっています。
可視、不可視の設定、Finderの再起動についてはこちらが詳しいです。

東方非想天則東方緋想天のデータを読み込ませたい@wine

この項は外付けHDDなどに東方を入れていて、Windowsでも使用したい場合に役立てると思います。
Windowsでは外付けHDD(UNTITLED)をL:\と認識させているので、私の非想天則の設定には次のようにパスを指定してあります。

[th105path]
path=L:\th\th105

ですが、このままwineで非想天則を実行すると緋想天を認識してくれません。
認識させるにはwineの設定が必要です。

  • ターミナルを開き、winecfgと入力してReturnしてください。
  • winecfgのドライブ タブを選択してください。
  • 追加(A)をクリックしてください。
  • ドライブレターを指定して、OK。(私の場合はL:、あなたの使用状況に合わせて)
  • 今追加したドライブレターが選択されていることを確認し、参照(B)をクリックしてください。
  • 外付けHDDなどは/Volumes/以下にマウントされています。該当のフォルダを選択してください。

(私の場合は/Volumes/UNTITLED/でした)


非想天則にZ:/Volumes/UNTITLED/th/th105/と指定しても認識したと思いますが、他に持ち出した時意識しなくてすむことを優先すると、ドライブレターを指定して外付けドライブをマウントしてあげるのが手っ取り早いと思い、このように設定しました。


追記、妖精大戦争のこと
vsyncpatchなしで正常に動作します。文字が透けるのは相変わらずですが、問題なく遊ぶ事が出来るはず。

追記、東方神霊廟のこと
体験版はVsyncPatchなしでもfps60固定で遊ぶことができました。(同本体、OSX10.7、wine1.3.25にて)

*1:-dはなくても構わないですが非常に静かになります