算額あれこれ

算額問題をコンピュータで解きます

2011-02-01から1ヶ月間の記事一覧

ベンフォードの法則の例

2のべき乗数,2^0, 2^1, 2^2, 2^3, ... の先頭桁を考える。 一見,1, 2, 4, 8, 1, 3, 6, 1, 2, 5, 1, 2, 4, ... と長さ10の周期で循環しそうに見えるがそれは違う。 先頭桁の分布はベンフォードの法則に従う。 > library(gmp)> func <- function(n)+ {+ a <-…

みったくなすの ggplot2

散布図も p <- ggplot(iris, aes(Sepal.Width, Sepal.Length))p2 <- p + geom_point(aes(colour = Species))p3 <- p2 + xlab("Sepal width") + ylab("Sepal length") + xlim(2, 4.5) + ylim(4, 8)print(p3) old <- par(mar=c(3, 3, 1, 1), mgp=c(1.8, 0.6, 0…

ggplot2 をもてはやす輩がいるようだが

たいして,きれいでもないし,大局観に基づいているわけでもないし,ブラックボックス信奉を煽るだけではないかなあ。そのうち,下火になるだろう。 背景がグレー(デフォルトがグレーなだけで,背景を白にすることもできるけど)というのは,いかにもださい…

ブランド志向はここまでくるか

> 依然としてよくわからないので間瀬先生にメールにて質問させていただいたところ、即座に親切なご回答をいただきましたので紹介しますと、”「正確に」答え られる概念ではありませんし、メイルで答えられるような簡単な話でもありません。マルコフ連鎖モン…

n日後を返す関数を返す関数

http://ja.doukaku.org/29/整数nを渡すと「日時のデータを受け取って、n日後の日時を返す関数」を返す関数を作ってください。関数を返す関数が作れない場合は、関数の代わりになるようなオブジェクトでも構いません。Pythonの対話的インタプリタで表現すると…

与えられた数字のケタ数

http://ja.doukaku.org/40/与えられた数字のケタ数と、最大桁の位を求めてください。数字が2469なら4桁で最大桁は1000の位です。600なら3と100、1なら1と1です。言語によっては,簡単すぎる問題もある。func <- function(n){ k <- length(unlist(strsplit(as…

bigq クラスの数学関数

sqrt はまあ実用的 sqrt.bigq <- function(x, eps=1e-50){ x2 <- as.bigq(sqrt(as.double(x))) repeat { x3 <- (x2+x/x2)/2 if (abs(x2-x3) < eps) break x2 <- x3 } return(x3)}# as.double(sqrt.bigq(5000.45789))^2 # sqrt(as.bigq(3.456)) 3 乗根 qubic.…

文字列型日時ののN秒後時間取得

http://ja.doukaku.org/204/ 日時を表す文字列と時間(秒)を受け取り指定された日時からN秒となる日時を出力する関数 DateEx() を作成してください。関数の仕様は次の通りです。1. 入力となる日時の書式は任意である。 → プログラムの都合に合わせてよい。2. …

回文日付

http://ja.doukaku.org/289/ YYYYMMDD形式で書き下した日付が回文になる日を探して列挙してください。探すのは西暦4桁の範囲(YYYY年MM月DD日)とします。 例えば、2010年1月2日をYYYYMMDD形式で書き下すと 20100102 となり、逆から読んでも 20100102 になり…

バイナリクロック

http://ja.doukaku.org/275/ 時刻を二進数相当の表現で出力する時計アプリケーションを書いてください。 20:18の場合,例えば以下の様な出力をするイメージです。 出力例: ■□■□□ □■□□■□ グラフィックウインドウに描くことにしよう func <- function(a, s, e,…

文字の出現頻度?

まあ,これはこれでご立派なのだがhash <- new.env(hash=TRUE, parent=emptyenv())word <- 'abracadabra'for (c in strsplit(word, NULL)1) { if (exists(c, hash)) { assign(c, get(c, hash) + 1, hash) } else { assign(c, 1, hash) }}for (c in ls(hash))…

メンバーシップテストって何だ?

vec <- vector()for (x in unlist(strsplit("abracadabra", NULL))) { if (! x %in% vec) { vec <- append(vec, x) }}print (vec)[1] "a" "b" "r" "c" "d"重複を除いた要素を得ることか?unique(unlist(strsplit("abracadabra", NULL))) が一番簡単。> uniqu…

ベクトルの最後の要素

コメントされるのがイヤならば,コメント不許可にしておけばよい。せっかくなのでこちらに書いておく。 > system.time(for (i in 1:100000) {n <- length(x); x[n]}) ユーザ システム 経過 0.146 0.002 0.147 > system.time(for (i in 1:100000) tail(x, n=1…

全角数字列を半角数字列へ

encoding 依存かな。Mac なら以下も。 > x <- "2008"> paste(as.character(as.integer(sapply(unlist(strsplit(x, "")), charToRaw)[3,])-9*16), collapse="")[1] "2008" > paste(as.character(as.integer(sapply(unlist(strsplit(x, "")), charToRaw)[3…

データフレームの左右をひっくり返す

> (a <- data.frame(x=1:5, y=letters[1:5], z=rnorm(5))) x y z1 1 a -0.062778692 2 b 0.993282943 3 c -1.005930944 4 d -0.750984955 5 e 1.74401638> (b <- rev(a)) z y x1 -0.06277869 a 12 0.99328294 b 23 -1.00593094 c 34 -0.75098495 d 45 1.7440…

データフレームの天地をひっくり返す

> (a <- data.frame(x=1:5, y=letters[1:5])) x y1 1 a2 2 b3 3 c4 4 d5 5 e> (b <- a[nrow(a):1,]) x y5 5 e4 4 d3 3 c2 2 b1 1 a