読者です 読者をやめる 読者になる 読者になる

ソンブレロ鍋

鍋メモ

Vimでファイル末尾に改行が追加されて困った (:set nofixeol)

Vim を用いて,末尾に改行がついていないファイルを編集し保存するとファイル末尾に改行が付け加えられることに気づいて少しハマった.

できれば対処法1で対処したい.

対処法1 (Vim v7.4.785 以降の場合)

対処法2 (Vim v7.4.785 未満の場合)

  • :set binary noeol をしてから保存する

    • Vim が BINARY MODE でかつ noeol が設定されていれば,保存した時に改行を追加しないようだったのでこれで対処できる.

最後に改行がないファイルが作れない · Issue #152 · vim-jp/issues

FiiO M3を買った

FiiO という中国の音響メーカーが出してる FiiO M3 という音楽プレーヤーを買った.今までは iPod ClassicRockBox というソフトウェアを入れて使っていたけれど, iPod の HDD のあたりの調子が悪くなったようでファイルを読み込めなくなったり書き込めなくなったりした.

FiiO X1 とか X3 とかが日本で輸入元オヤイデ電気として販売されているが M3 は販売していないのであまり話を聞いてなかったけれど大きさと最低限の機能でいいだろうと思って買った.

色は cyan を買った,元は Ivoly White しか色がなかったけれど最近新たに増えたようだ.

このプレーヤーは内蔵メモリが 8GB あり,microSD(XC) を挿入する口がひとつ付いている.公式では64GBまでのmicroSDに対応と書いてあったが, Amazon のレビューに「 128GB でもいけたぞ」と書いてあったので 128GB の microSD をすこし試してみたところ問題なく読み込んでいる.

そのレビューはここ

Amazon.com: Stumpy's review of FiiO M3 8GB Micro-Portable Digital Music P...

手元で試した microSD カードはこれ

Amazon.co.jp: ☆東芝製チップ採用☆バルク品☆microSDXCカード Class10 UHS-I対応 128GB SD変換アダプター/プラケース付き MFMCSDXC10X128G_BULK: パソコン・周辺機器

 

このプレーヤーの良い点は小さくて軽いことと (microSD の) 容量が大きいことで,悪い点はソフトウェアに,あるフォルダ以下のファイルを全部再生するという機能がないこと.再生したければプレーヤー上でファイルをいちいち再生リストに登録していくか, PC 等で作成したプレイリストファイルを使う必要がある.
<2016-05-24 09:40追記>  プレイリストファイルには対応していない <追記ここまで>

この悪い点がなかなか不便なので FiiO X1 を買うかもしれない……. X1 にはソフトウェアアップデートで機能が追加されたらしい.

どうするか.

Google Code Jam 2016 Round1A に参加した

Competitive Programming Programming Python

Google Code Jam 2016 Round1A に参加した.

Past Problems - Google Code Jam (過去のコンテスト一覧)

Round1A の前に Qualification Round という予選があり,そちらで A, B, C, D の四問 (それぞれ small, large と規模の異なる入力がある) を解き,Quarification ラウンドで 30 点を超えると Round1 に参加できる. Qualification Round についてもそのうち書くかもしれないが, 75 点だった.

 

一問目

問題を読み違えたので二度も WrongAnswer を出してしまった.

一文字ずつ追加していって辞書順で一番遅い単語を作り出せという問題で,現在の単語 (文字列) と追加する文字をそれぞれ T, c とすると, c+T と T+c を比べて辞書順でより遅い方を採用していけばいいと思う.

また,辞書順なので c が T の先頭文字より遅ければ c を先頭につける,という方法の方が速いかもしれない.こっちの方法で解いた.

 

二問目

問題を理解していなく,「行列が一部分だけ重なり,重なった部分が上書きされてしまったので,消えてしまった部分を答えろ」という問題だと勝手に思って解いた.

行列は行についても列についても単調増加になっているという条件があり,行列が 2 つ重なるということなので,重なって消えた部分に入っている数字が奇数回しか出現しなくなる.

以上で,奇数回出現している数字を昇順に並べて答えた.

※ 単調増加でない場合,上述の考え方では以下のような行列に対して正答できない.正答は 1 1 だけれど,1 は 6 回出現していて奇数回ではない.

1 1

1 1

1 1

 

三問目

自分の隣には自分がズッ友 (best friend forever) だと思ってる人がいないと輪に入れない,最大の輪は何人で作ることが出来るか,という問題だった.

強連結成分 (ここでは各ノードが自分が起点となるエッジを一つしか持たないので有向サイクルになる) を抜き出して並べるようなことを考えていたけれど,これは間違いだった.

サイクル数が 2 のサイクルを中心に,そのサイクルに向かって片思いしている列が延長されていくイメージで解いた.

具体的には,

  1. 入力を無向グラフ,有向グラフにする
  2. 無向グラフの連結成分,有向グラフの強連結成分を出す
  3. 有向グラフの強連結成分の中にあるノード数 2 のもの (つまり相互ズッ友のペア) を取り出す
  4. 3. で取り出したペアそれぞれに向かって引ける一番長いパスをそれぞれ取り出す
  5. 別のペアを取り出して 4. を行う
  6. ( (ペアと片思いの人たち) を複数並べたもの) と (サイクル数が 3 以上の最大サイクル) を比較して大きい方の輪が最大になる

これで解けた.

おそらく時間がかかったのは 4. なので,一番長いパスを探す範囲を, (当たり前だけれど) そのペアを含む連結成分に絞ったら速くなった.

 

残念ながら C-small, C-large は間に合わなくコンテスト終了後に解いたので, A, B だけ得点できた. Round1B で頑張ろう.

グラフの作成,連結成分の抽出,パスの確認などを全て Python のライブラリ networkx に頼ったので,この問題の実装はとても楽だった. networkx が便利だった.

機械学習でアニメ推薦を使ってみた

Python Programming Anime

ブログ記事を読んでやってみた.この記事

今季見るべきアニメを機械学習で推薦する - はこべブログ ♨

 

分析とか機械学習とかはほんの少しだけ勉強しようとしただけなので分かってなくて前半は流し読みした.

GitHubソースコードが公開されていてドキュメントがない状態だったけど勘で実行した.使ってみた手順を書いてるブログも有ったようだ.

機械学習による今季見るべきアニメ推薦を試してみた - 小倉病患者のカルテ

 

まず,「けいおん!」「ぷちます」「ラグナストライクエンジェルズ」が推薦された.

アイマスはそれほど重要じゃないなと思って取り除いたけれど,そもそも学習させたアニメ (好きだと示したアニメ) が 44 本 (アイマス系を除く) しかなかったのが悪いのか,それでも「けいおん!」「ぷちます」「ラグナストライクエンジェルズ」が表示された.まあ間違ってはないと思う.

 

手順を説明しているブログ記事の手順でだいたい動作した気がするが,一点だけ,本筋とは関係ないが python 仮想環境で動いてる時に出るらしい matplotlib インポート時のエラーがあって戸惑った.Matplotlib のページにそれについての説明があった.

Working with Matplotlib in Virtual environments — Matplotlib 1.5.1 documentation

解決策は Qiita から以下のものを採用した.

Python 3.3でmatplitlibとpylabを使おうとしたら RuntimeError: Python is not installed as a frameworkというエラーが発生したときの解決方法 - Qiita

 

もっとアニメを見て推薦くんを活用したい.

 

途中の eval_animes.py 実行時に,アニメタイトルが出て y を入力して (または入力せず) Enter で次のアニメタイトルが出てくるところはある程度一気に出てくれたほうが誤入力が減るような気がしなくもなかった.大部分は, Enter 連打するリズムに乗る人が悪い.