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

本履歴

購入した古本の履歴と時々プログラミング

1次元配列中の連続した部分配列で和が最大となるものを求める

UVa: 11951 - Area 事の発端はこの問題(UVa Online Judge)。 長方形の数字の配置が与えられた時にサブ長方形で和が最大となるもの(ただしK以下)を求める問題。DP[x, y] = Sum(1, 1, x, y)を使ってO(N^2*M^2)の解法はTLEっぽいので、最終的に長方形の数字…

Rubyで任意の順列の次を求める

next_permutation in Ruby 他言語にはnext_permutationがあるのにRubyに無いのはけしからん、ということでnext_permutationを実装しました。 比較可能なオブジェクトからなる配列を渡すだけです。O(n)なので[*1..n]の全順列をiterateする場合はArrayのpermut…

各種Heap処理速度の比較1

The Heap implementation can make significant difference Google Code Jamも2016 R1BがそろそろということでWEBをさまよっていたらいろいろな人の優先順位付きキューがgemとして公開されていたので、自分の実装と比較してみた。 GitHub - matiasbattocchia…

Rubyだとダイクストラ最短路アルゴリズムはバイナリヒープよりスキューヒープ実装の方が速い?!

Skew Heap might be way faster than Binary Heap in Dijkstra Algorithm in Ruby 気になっていたデータ構造Skew heap - Wikipedia, the free encyclopediaを筆のすさびにRubyで書いてみたら、結構速い。もしやとchange_keyも作ってダイクストラの最短経路ア…

「の」の字形の無限に循環する配列のk番目

K-th Value of Japanese Hiragana Character "の"-like Infinitely Circulating Array コンピュータは有限しか扱えないので前の状態から次の状態が決まる系は最終的に必ず循環します。そんな循環する状態列のk番目をここでは求めたいと思います。例えば、み…

Identifies mirrored and rotated one

したがって面白くするため、回転・鏡像を含めて同一視した場合にどのくらいになるか手で数えてみた。なんとなく偶数になると思っていたが、N=4の場合は7という数字が出てきて不思議な感じ。これは配置によって回転・鏡像変換8通り全てが異なる順列になる場…

N Rooks = N!

チェスにハマったので、8 Queensのカウンターパート的8 Rooksを考えてみた。チェスでRook(ルック、lookと発音は違う)は将棋で言うところの飛車の動きをする駒で、それを8*8のチェスボード上に互いに攻撃しあわないよう置くことを考えることになる。これは…

Faster DP Implementation of Integer Partition Function with the Complexity O(N^2)

そこで色々調べた所、蟻本にO(N^2)の方法が載っている事がわかって一件落着。こちらもDPだけど、分割する数を取るのが違う点。 DP[n,m]=nをm個以下で分割するときの総数とするとDP[n,m]=DP[n,m-1]+DP[n-m,m] nをm個以下の整数の和にするときに0も含めて考え…

Naive DP Implementation of Integer Partition Function with the Complexity O(N^3)

整数を分割したい病に患ってしまった。見る整数はなんでも、4=1+1+1+1=1+1+2=1+3=2+2のように分割してしまう恐ろしい病気だ。ちなみに4の場合の分割数は5である(自身も含める)。Wikipedia(https://en.wikipedia.org/wiki/Partition_(number_theory) )を読…

Pure Implementation of Dijkstra's Shortest Path Algorithm with Priority Queue in Ruby

プログラム言語 Ruby での純粋ダイクストラ最短経路アルゴリズム(優先順位付きキュー利用)です。O(m*log(n))の実行時間です(n:ノード数、m:辺の数)。 外部ライブラリなどに依存していないため、このままコピペすれば競技プログラミングで使えると思いま…

CodeIQ

CodeIQで出題されていたマヨイドーロ問題を解いてみました。出題者は数学ガールでお馴染みの結城先生です! 使ったアルゴリズムは動的計画法ですが、どういう風に私がこの解に到達したのかを時系列を追って説明したいと思います。問題文を読んですぐに思いつ…

CodeIQ

CodeIQで開催されていた@cielavenirさんのRestricted WordsのRubyで提出した自分のソース公開。わーい、評価5頂きました。 方法はmethod_missingでメソッド名を取得する方法。 それだけだとつまんないので、本文を英語の文にしてみました。 後で、スペース出…

競技プログラミング

昨日参加できなかったAtcoder#014の問題をRubyで解いたので。全部解けたのは初めてかも。 A. 君が望むなら世界中全てのたこ焼きを赤と青に染め上げよう 偶奇性を問われてる。ワンライナーで。 puts gets.to_i%2<1 ? "Blue" : "Red" B. あの日したしりとりの…

コードゴルフ

そういえば、前に参加していたCodeIQのこっちのゴルフコンペもソースコード公開。最初のCゴルフの2次元連立方程式の問題。 C言語は通常まったく書かないけど(=ゴルフ専用)、頑張ってみたら、なんとか上級超えられた。わーお。 scanfする時に&a,&b,&c,..と…

コードゴルフ

CodeIQのid:Ozyさん開催コードゴルフコンペに参加していたので、自分のコード公開。 提出期限の月曜の明け方に縮めてた。縮まりまくって、徹夜だよ・・・あるあるーw 最初にハッシュにx,yでの値を保存していたけど、結局、1次元配列の方が短くなることが判…

GCJ2013(Google Code Jam 2013 Round 2)

さあて、Google Code Jam 2013 Round2。目標は1000位に入ってTシャツをゲットすること。 夕方から仮眠を取り、1時間前に起きて、幅優先探索と深さ優先探索とダイクストラのアルゴリズムを復習し、 日本時間土曜日23時からいざスタート。問題Aを読んだ瞬間、…

競技プログラミング

Golf関係でCodeIQのアカウントを取ったのだが、計算幾何学の問題があったのでちょっと解いてみた。 https://codeiq.jp/ace/stakemura/q296 フィードバックが返ってきてるので、ソースコード公開してもいいんだよね。 Computational Geometry: Algorithms and…

競技プログラミング

最近codechefサボってたんだけど、GCJ(Google Code Jam 2013)が開催中なので、腕試しに出てみたら五問解けた。あれあれ?簡単になってる?? Rubyで解くよう頑張った。 Matchsticks(http://www.codechef.com/MAY13/problems/MSTICK) 今月の中ではMatchsticks…

GCJ2013(Google Code Jam 2013 Round 1C)

Round 1Cは練習でponanza戦を観戦しつつ参加してみた。ラウンド中はinputを落とせないので、紙と頭のなかで解いて、後日コーディングしてみた。 Aは問題文を読み間違いして全然見当違いのコードになってた・・・ので後で解く。 ([1,0,1,1,1,0,1,0]なる1,0か…

製本

この前のPDFを製本してみた。 どうだろうか、やはり紙で読むのは電子データにはない温かみがある、素晴らしいね。 紙の準備:30分 印刷:30分 折丁作成:30分 表紙づくり:45分 糸綴じ:2時間 仕上げ:1時間久しぶりなので時間がかかった。 テキストは、NHK…

GCJ2013(Google Code Jam 2013 Round 1B)

Round 1Bは毎回深夜回。土曜夕方、なぜか成分献血して、その後20時から仮眠を4時間取ってAM1時スタート。 前回からの変更点はTextEditorがsublime(registered!!)になったこと。買っちゃいました。てへぺろ。問題Aが吸収ゲーでSとLで点数に差がない、Bは…

製本のためPDFをbookletページに変換

今度引っ越すのだが、以前購入したクリームキンマリという紙が余っていることに気づいたので、なにか製本しようかなと考えた。 英語の練習用に半年間くらい購読していたESL PodcastのPDFが多量にあるので、それを製本してみたいかなと。通常kindle上でESLのp…

プログラミングコンテストの練習

とっておきの数学パズルから次の問題。 一列に50個のコインが並んでいて、先手後手が両端いずれからか一つコインを取っていきそのコインに書かれている金額を得る。最後のコインを取った時に総金額が多いほうが勝ちとする。この時、先手が負けない戦略を考…

GCJ2013(Google Code Jam 2013 Round 1A)

今年のGCJ Round 1は、ひとつの週末に固まっていないのがうれしいなと思ってのんびりしていたら、あっという間に当日になり、GW初日の土曜日10時から開始。 8時に起き、いい天気なので部屋を掃除してたら開始5分前になっていてびっくり。急いで準備して30秒…

プログラミングコンテストの練習

http://rubygems.org/gems/algorithms の中からHeapwikipedia:ヒープを使ってみよう!そもそもHeapってPascalでしか書いたことないし、配列で2分木を表現するBinary Heapで今まで十分だった。 必要な操作は、pushと(最大値/最小値)のpop、sizeくらいかな。…

プログラミングコンテストの練習

Google Code Jamが通常のプログラムコンテストと違うのは、ローカルで答えを出せばいい点、 つまり標準ではないライブラリが使える!!!わおー ということで、役に立つかはわからないけど、自分が知っているRuby gemを紹介させてください。 今回はmemoize。…

GCJ2013(Google Code Jam 2013 Qualification Round)

さあて、今年もやってきたGCJ 2013! ハンドルuruで参加しています。(http://www.go-hero.net/jam/13/name/uru) 当日は電王戦第四局を観つつ解こうと思っていたら、将棋が大変なことになって、GCJどころではなかった。 それでも問題文はひと通り眺めていて、…

プログラミングコンテストの練習

Puzzles for Hackers:スクリプトキディから大人のハッカーへ (IT Architects' Archive 知の連環)に載っていた覆面算をRubyで。 HACKER+HACKER+HACKER=ENERGY 一般の覆面算は総当りでやるしか無いのだろうけど、これは3*HACKER=ENERGYで両辺6桁の数なので、 …

プログラミングコンテストの練習

二分探索木をRubyで書いてみた。極悪データの追加とランダムデータの追加で処理時間を比べてみた。 バランスを取ることの重要性がわかるなあ。 次は乱択アルゴリズムのTreapを実装して、極悪データに対処してみる。 class Node attr_accessor :value,:parent…

プログラミングコンテストの練習

NxNのチェス盤にクイーンN個を互いに攻撃し合わないように置く置き方は何通りか? Rubyで書いてみた。再帰の問題だけど、木をDFSしてるわけだし、途中で探索やめてるし(枝刈り?)、なかなかいい問題じゃん。 N=12 $column=Array.new(N,false)#横方向 $up=A…

プログラミングコンテストの練習

ハノイの塔をRubyで。塔といえばこれが一番有名かもしれない、ハノイの塔。(バベルも有名か・・・あ、天国の塔もBGMで)最初に書いたコード #move n-th disc from x to y with using z def hanoi(n,x,y,z) if n==1 puts "Move disc %d from %d to %d"%[n,x,…

プログラミングコンテストの練習

トポロジカルソートをWikipediaを参考にRubyで書いてみた。 トポロジカルソートとは、(これも名前がいけてない気がするが・・・)、DAGを左から右に進むように一列に並べること。一意ではないが、存在は示せる。 数学的には、DAG(半順序)を拡張し、すべて…

プログラミングコンテストの練習

世界で闘うプログラミング力を鍛える150問 ~トップIT企業のプログラマになるための本~に載っていた問題をRubyで。 こういうパズル的な問題面白いなあ。 class Stack def initialize @stack=[] end def push(n) @stack.push(n) end def pop @stack.pop end en…

プログラミングコンテストの練習

この動画のおねえさんが好きすぎて困ってしまうのですが、、大好きすぎて日本科学未来館の展示にも思わず行ってしまったほど。 TAOCPが全巻揃っていた・・・あの声が館内に響きわたっていたなあ。 ちなみに、Knuthのコンピュータ科学者がめったに語らないこ…

Bぷよ4000試合やってみて

ぷよm@sが大好きで初代ぷよにこんな戦略があったのかーと驚きつつストーリーと闘ぷよを楽しんでいたんですけど、(アイマスしらないけど) なんと、最新話でBぷよ(http://bx0.digick.jp/puyo/)なるフリーのゲームが紹介されていて、押入れの埃をかぶったWind…

あなごる Hello broken keyboard

今回のあなごるは面白かった。負けたけど、たまにはこういうのもいいなあ。使う文字の種類を少なくする・・・! 以下、自分のコードの変遷 begin write()end.は必須。beginとwriteの間をスペースかセミコロンか。 19.032 これしかないと思っていた時代もあり…

古本買いました

福田恆存翻訳全集〈第4巻〉 福田 恆存 2500 Math Girls 結城 浩 400 迷路の本 Greg Bright 400 真ん中は、日本語版持ってなかったので、調度良かった。 英語も結構辞書なくても読めるレベル。布団の中で4章までいけた。 ミルカさんが椅子蹴るのは同じだねっ…

古本買いました@ブックオフ

1日1分レッスン! TOEIC Test―時間のないあなたに!即効250点up (祥伝社黄金文庫) 中村 澄子 100 1日1分レッスン! TOEIC Test パワーアップ編 (祥伝社黄金文庫) 中村 澄子 100 暗号技術入門-秘密の国のアリス 結城 浩 400 ネットワーク不正侵入検知 dy NovakSt…

古本買いました@ブックオフ

じゅんばん 安野 光雅 350 みずをかぞえる 安野 光雅 150

古買いました。

続・とっておきの数学パズル Peter Winkler 2000

プログラミングコンテストの練習

ポリアの組合せ論入門(-組合せ論入門)に面白い問題があったので、ちょっと考えよう。 二項係数の偶奇性を求めるアルゴリズムを考えよ 二項係数はn個の中からk個選ぶ組合せの数n_C_kだったね。n_C_k%2、なんだ簡単じゃんといかないのが面白い。 愚直に まず検…

競技プログラミング

今月のCodeChef(http://www.codechef.com/JULY12)は、5問解けた。どこかで見たようなのが多かったなあ。 Gift Rift(http://www.codechef.com/JULY12/problems/SAD) 行列が与えられるので、行の中で最小かつ列の中で最大となっている数値を答えろ、な問題。 …

本買いました。

数学ガール/ガロア理論 (数学ガールシリーズ 5) 結城 浩 1900 出ているの知って買いに行く。

GCJ2012(Google Code Jam 2012 Round 2)

結局、Round 1は999位でぎりぎりパスできたのだが、Round2で撃沈。Rank: 1863 Score: 6 Round 2 土曜の23時スタート。ドデカミンストロングを飲んで頭をすっきりさせ挑んだ。 まず、点数と問題文を眺めてDは迷路っぽので後回し。Aが点数的に簡単そう。Cは図…

古本買いました。

せいくらべ 安野 光雅 300 かずのだんご 安野 光雅 300

プログラムコンテストの練習問題

Algorithms and Programming: Problems and Solutionsにあった次の問題を考えてみた。 ソートされた2つのn次配列xとm次配列yと整数qが与えられる。 i,jをうまく選んでx[i]+y[j]をqに近くせよ。計算量O(n+m) わからなかったのでヒントを参考に・・・ 新しい…

GCJ2012(Google Code Jam 2012 Round 1)

Round 1A GWを満喫するためにどうしてもこのラウンドで通過を決めたいところ。 A,Bの問題文を一瞥し、Aのsmall,largeが同じスコアなのでA,B,Cの順に決定 Problem A. Password Problem 問題の意味がわからず手こずった。幸先悪いなー。 各ストラテジーごとに…

古本買いました。

プログラミングの宝箱 アルゴリズムとデータ構造 (C magazine) 紀平 拓男, 春日 伸哉 600

再帰の練習

このあいだ買ったKindle本「Algorithmic Puzzles」より、つーかよくある問題だな。 Cover a 2^n ×2^n board missing one square with right trominoes, which are L-shaped tiles formed by three adjacent squares. The missing square can be any of the b…

GCJ2012(Google Code Jam 2012)

奥さん!今年も始まりましたよGCJ2012。もっちろん参加、で、D.Large以外なんとか解けて、75点。予選通過できました! ニックネームuruで参加していますよ。 Scoreboardの画面でFriendタブに行き、右上のボックスにuruと入れて、Add friendボタン押せばOKで…