program

S4クラス用のgeneric関数でキャッシュを実現する方法を考える

概要 Rが常に値渡しであるために関数の返り値のキャッシュをオブジェクトの中に素直に持てなくて困ったので解決法を考えた。 背景 ある特定のオブジェクトを引数として、もの凄く重たい関数が何回も呼ばれるとする。毎回真面目に計算するのはしんどいので、…

S4クラスを継承する時に気を付けること

背景 S4クラスメカニズムでは、setMethod関数のcontains引数に親クラスの名前を含める事で継承を実現できる。で、こんなコードを書くとエラーになってしまった。 setClass("A", representation(a="numeric")) setMethod("initialize", "A", function(.Object…

gdbでステップイン出来ない時に疑う事

原理は知らないけど、クラスのメンバ関数をインラインに書いちゃうとステップインしてくれない。らしい。 class A{ public: int func(int); int func2(int y){ int z = y + 1; return z; } }; int A::func(int y){ int z = func2(y); return z + 1; } int ma…

Pocket Book

問題 Pocket Book n人の名前のリストがある。全ての名前はm文字から成る。 i, j, k: 1 この操作を何回でもやってよい。 最終的に1番目に現れうる名前は何通りあるか 方針 以下がポイント 最初に k = m と選ぶと、m文字目に現れている任意の文字を1番目の名前…

Steps

問題 Steps やるだけ。0割に気を付ける。 コード

Marks

問題 Marks やるだけ コード

PikachuEasy

問題 PikachuEasy やるだけ コード

CasketOfStarEasy

問題 CasketOfStarEasy 長さ n の数列x[i]が与えられる(インデックスは0, ..., n-1とする)。 以下の手順を数列の長さが2になるまで繰り返す。 0 x[i]は消える この時、x[i-1] * x[i+1]が得点として加算される 最終的な得点が最大になる手順を探せ 方針 再帰…

Round 107 Div2 C Win or freeze

問題 Win or Freeze 交互に手番が来る2人ゲーム 紙に自然数 q が最初に書かれている 手番のプレイヤーは紙に最後に書かれた数字の非自明な約数を書かなければならない 何も書くことが出来なくなったプレイヤーの勝ち 方針 q を q = p1 x p2 x p3 x ... x pn …

Round 107 Div2 B Phone Numbers

問題と方針 問題-> Phone Numbers 方針:やるだけ コード

Round 107 Div2 A Soft Drinking

問題と方針 問題-> Soft Drinking 方針:やるだけ コード

正規表現メモ

要求仕様 Index_(N)という部分列が複数含まれた文字列が渡されるので、その部分をIndices_(N+1)と書き換える 実装 import re string = "abcIndex_1:Index_2:Index_3---Index_100xyz" rex = "Index_([0-9]+)" robj = re.compile(rex) temp = string ret = "" …

DengklekTryingToSleep

方針 3つ全部が綺麗なものを全部並べる その左右に2個を繋げた時に価値が最大になるペアを全探索 本番は撃墜された。初被撃墜。 コード

DengklekMakingChains

方針 やるだけ ソース

SRM 530 Div2 easy GogoXBallsAndBinsEasy

答案 #include <sstream> #include <string> #include <vector> #include <map> #include <algorithm> #include <iostream> #include <utility> #include <set> #include <cctype> #include <queue> #include <stack> #include <cstdio> #include <cstdlib> #include <cmath> #include <iterator> using namespace std; bool …</iterator></cmath></cstdlib></cstdio></stack></queue></cctype></set></utility></iostream></algorithm></map></vector></string></sstream>

KingSort

方針 ローマ数字の文字列 -> 整数 の変換が肝 'I'は基本的には1, 但し、次が'V'or'X'なら-1. 'X'も同様に基本的には10, 但し、次が'L'なら-10. 雑感 コードを提出した時、「このコードは、30%以上の無関係なコードを含んでいるから、Unused Code Ruleに抵触…

PairingPawns

方針 やるだけ 回答

SICPはスマホに入れると捗る

習っておくと筋が良くなると言われるschemeを勉強しようと思い立ち、SICPを読み始めた。無料で全文公開だし、演習問題も豊富についてるし、非常に有難い。 wgetで全体を落としてスマホの中に突っ込んどけば、どこでも読める。emacsの上で、emacs-w3mを使って…

Google Code Jam Japan 2011 予選 C

問題 http://code.google.com/codejam/contest/dashboard?c=889487#s=p2 方針

Google Code Jam Japan 2011 予選 B

問題 https://code.google.com/codejam/contest/dashboard?c=889487#s=p1 方針

Rのメモ

メモ1 2本のベクトルx, yがある時に、x, y両方に含まれている要素を調べる方法。 > x <- 2 * (1:10) > y <- 3 * (1:10) > x[apply(outer(x, y, '=='), 1, any)] [1] 6 12 18 メモ2 Rの付置演算子をemacsのalignで揃える。 ;; align for R (require 'align) (…

SRM 508 Round1 div2 mid DivideAndShift

方針 DP。というかメモ化再帰。 f(x)を長さxの時に必要な最小手数とすると、 f(x) = min{min{f(x/p) + 1| p : xの素因数}, min(m-1, x-m+1)} が成り立つ。但し、m = M % x。 この漸化式の気持ちは、 長さNの時の最小手数は、 1回 Divide 操作をやってさらに …

SRM 508 Round 1(?) div2 easy CandyShop

方針 素直に調べる。 雑感 何で Round 1 なの?

srm 504.5 mid TheNumbersWithLuckyLastDigit

問題 http://www.topcoder.com/stat?c=problem_statement&pm=11096&rd=14514 下1桁が 4 or 7 の正の自然数を lucky number と呼ぶ 正の自然数 n を lucky number の和で表したい。この時、なるべく summand の数を少なくしたい。いくつの数が必要か? 方針 f…

srm 504.5 easy TheJackpotDivTwo

問題 http://www.topcoder.com/stat?c=problem_statement&pm=11432&rd=14514

SRM 506 div2 easy SlimeXSlimeRancher2

問題 http://www.topcoder.com/stat?c=problem_statement&pm=11279&rd=14435 (要ログイン) 方針 やるだけ。

SRM 506 div2 mid SlimeXSlimesCity

問題 http://www.topcoder.com/stat?c=problem_statement&pm=11154&rd=14435 (要ログイン) 初期状態の都市のサイズが population[i] (i = 0, .., N-1) で与えられる。 任意の順番で、都市を2つづつ選び、それらを併合して1つの都市にする。最終的に1つだけが…

google code jam 2011 Qualification Round C Candy Splitting

問題 http://code.google.com/codejam/contest/dashboard?c=975485#s=p2 方針 これは、方針を考えるのに苦労した。けど、方針が分かればコーディングは一瞬。前の2問とは逆のパターン。 求められていることを、抽象的に述べると、次のとおりになる。 数列 a[…

google code jam 2011 Qualification Round B Magicka

問題 http://code.google.com/codejam/contest/dashboard?c=975485#s=p1 方針 素直にシミュレーション

google code jam 2011 Qualification Round A Bot Trust

問題 http://code.google.com/codejam/contest/dashboard?c=975485#s=p0 2本の廊下にそれぞれBlue, Orangeのロボットが居る。 各廊下は長さ100で、地点 1, 2, ..., 100にボタンがある。 O 2, B 1, B 2, O 4 というようなリストでボタンを押す順番のリストが…