CheckBoxListコントロールのinputにスタイルを設定する
苦肉の策なので、良い方法があれば教えていただきたいです。
CheckBoxListの各input要素に別々のスタイルをプログラムから設定したい。
例えば、CheckBoxList.Items[i].Valueに設定した色をinput要素の背景に設定したい。
しかしCheckBoxList.ItemsにInputAttributesはない。
input要素にスタイルを設定する方法が見つからなかったので、
スタイルシートを使って間接的に設定する。
まずCheckBoxListの持つListItemはspanで囲まれたinputとlabelに展開され、
CheckBoxList.Items[i].Attributesに追加した属性はspanの属性に追加される。
なので、CheckBoxList.Items[i].Attributes.Addでspanにidを付けて、
スタイルシートに"#spanに付けたid input"に対するスタイルを追加すればいい。
// checkboxlistはCheckBoxListコントロール // checkboxlist.Items[i].Valueは8桁の16進数がFFFFFFFFみたいに入っている for(int i=0;i < checkboxlist.Items.Count;i++) { ListItem item = checkboxlist.Items[i]; // 各チェックボックスを囲むspanにidを付ける string item_id = string.Format("{0}_Items_{1}", checkboxlist.ID, i); item.Attributes.Add("id", item_id); Style item_style = new Style(); item_style.BackColor = Color.FromArgb(Convert.ToInt32(item.Value), 16); // 設定したいスタイルを追加する Page.Header.StyleSheet.CreateStyleRule(item_style, null, string.Format("#{0} input", item_id) ); }
Mebius関数を素因数分解しないで求めるメモ
MANUEL BENITO AND JUAN L. VARONA. RECURSIVE FORMULAS RELATED TO THE SUMMATION OF THE MOBIUS FUNCTIONにあったやつ
Mebius関数とは
(nがある素数の2乗で割り切れる)
(nが相異なるk個の素因数に分解できる)
Wikipedia メビウス関数
計算方法
Mertens functionを
と定義すると
が成り立つ
これを使えば
よって
で計算できる
Rの課題?
メモ
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1377312633
課題5
対角要素が1:10の対角行列を作りなさい。
答え
diag(1:10,ncol=10,nrow=10);
http://www.okada.jp.org/RWiki/?%B9%D4%CE%F3Tips%C2%E7%C1%B4#n42877c2
課題6
matrix(1:100,10,10)を作り、rev を使って
次の行列を作りなさい。
10 20 30 40 50 60 70 80 90 100 9 19 29 39 49 59 69 79 89 99 8 18 28 38 48 58 68 78 88 98 7 17 27 37 47 57 67 77 87 97 6 16 26 36 46 56 66 76 86 96 5 15 25 35 45 55 65 75 85 95 4 14 24 34 44 54 64 74 84 94 3 13 23 33 43 53 63 73 83 93 2 12 22 32 42 52 62 72 82 92 1 11 21 31 41 51 61 71 81 91
答え
apply(matrix(1:100,10,10),2,rev);
http://www.okada.jp.org/RWiki/?R%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0Tips%C2%E7%C1%B4#mbbf5f3c
Rの情報は検索しにくい…
正多角形グラフの隣接行列とハミルトン閉路,パスの数を数えてみる
MathWorldに載っているけれど確かめてみた
http://ideone.com/WayQn
結果だけ
正四面体
// Hamiltonian Path: 6本
// Cycle: 6本
// Tetrahedral graph */
正六面体
// Hamiltonian Path: 18本
// Cycle: 12本
// Cubical graph */
正八面体
// Hamiltonian Path: 40本
// Cycle: 32本
// Octahedral graph */
正十二面体
// Hamiltonian Path: 162本
// Cycle: 60本
// Dodecahedral graph */
正二十面体
// Hamiltonian Path: 6320本
// Cycle: 2560本
// Icosahedral graph */
隣接行列はWolframAlphaやSAGEから拝借
Rで素数の無限リスト
以下を参考に..
# 無限リスト[x, fn(x), fn(fn(x)), ... ]を作る infinite.stream <- function(x, fn){ list(car=x, cdr=function() infinite.stream(fn(x),fn)) } # 無限リストlstから最初のn項のベクトルを返す infinite.take <- function(n, lst){ if(n == 0) c() else c(lst$car, Recall(n-1, lst$cdr())) } # 無限リストlstの各項にfnを適用した無限リストを返す infinite.apply <- function(fn, lst){ infinite.stream(fn(lst$car), function(x) infinite.apply(fn,lst$cdr())) } # 無限リストlstの要素xのうち, fn(x)がTRUEな要素だけの無限リストを返す infinite.filter <- function(fn, lst){ if(fn(lst$car)) list(car=lst$car, cdr=function() infinite.filter(fn,lst$cdr())) else infinite.filter(fn,lst$cdr()) } odd.from <- function(n) infinite.stream(n,function(x) x+2) primes <- list(car=2, cdr=function() infinite.filter(is.prime, odd.from(3))) is.prime <- function(n){ ps <- primes y <- ps$car while(y^2 <= n){ if(n%%y==0){ return(F) } else { ps <- ps$cdr() y <- ps$car } } return(T) } show(infinite.take(10,primes)) # [1] 2 3 5 7 11 13 17 19 23 29
リンゴ振り分け問題をGLPKで解く
3つの八百屋から値段の異なるリンゴをいくつか仕入れた。 これを5つの袋に決められた個数ずつ振り分ける。 袋ごとの平均単価が同じくらいになるように振り分ける方法を見つけたい。
元ネタはここ
要するに画像の5x3の表を埋めつつ目的関数を最小化したい
ただし, 表の要素は非負整数
目的関数は
行ごとの平均単価からの差の絶対値を合計したもの
min:
目的関数に絶対値が入ったままでは扱いづらいので
変数と
制約を導入する
結局, 目的関数と制約式は次のようになる
min:
subject to:
ただし, Rは各袋に入れるリンゴの個数
Sは八百屋から仕入れたリンゴの個数を表す
これをそのままGLPKのモデルとデータとして書く
モデル(shiwake.mod)
param YN; param FN; set Yaoya := 1..YN; set Fukuro:= 1..FN; param request{Fukuro}; param stock{Yaoya}; param price{Yaoya}; param mean_price; var X{Fukuro,Yaoya} ,>=0 ,integer; var T{Fukuro}; minimize DM: sum{i in Fukuro} T[i]; s.t. Tate{k in Yaoya}: sum{i in Fukuro}X[i,k] == stock[k]; s.t. Yoko{k in Fukuro}: sum{i in Yaoya}X[k,i] == request[k]; s.t. ABS_LB{k in Fukuro}: sum{i in Yaoya} (price[i]-mean_price)*X[k,i] >= -T[k]; s.t. ABS_UB{k in Fukuro}: sum{i in Yaoya} (price[i]-mean_price)*X[k,i] <= T[k];
データ(shiwake.dat)
param YN := 3; param FN := 5; param request := 1 8 2 21 3 4 4 55 5 8; # 八百屋から仕入れた個数 param stock := 1 29 2 51 3 16; # 八百屋ごとのリンゴの単価 param price := 1 43 2 46 3 41; # 全体の平均単価 param mean_price := 44.26;
あとはglpsolに渡せばよい
glpsol.exe -m shiwake.mod -d shiwake.dat -o shiwake.txt
結果
八百屋A, 八百屋B, 八百屋Cの順に
袋1は3個, 4個, 1個で平均単価44.25円
袋2は9個,10個, 2個で平均単価44.24円
袋3は2個, 2個, 0個で平均単価44.5円
袋4は12個, 31個, 12個で平均単価44.25円
袋5は3個, 4個, 1個で平均単価44.25円
と振り分ければよいことが分かった