3分プログラミング

週末プロジェクトネタ

休みの日にプログラミングしたいなぁ,新しい言語で何か作ってみたいなぁ,と思った時に,「さて,何を作ろうか?」で悩むことがある。 ということで,よくあるお題などを気づいたら書いていく。 注意点としては,ここではあまり言語に依存しない問題を上げ…

クランプ関数(0〜255に値を丸める)のやり方

またまたcodewarsの他人の解答より。 本題はRGBの変換だったけど,その前処理で0以下の数値を0に,255以上の数値を255にクランプする処理がある。 僕は富豪的に下記で。 lst = map(lambda x: 0 if x<0 else x, lst) lst = map(lambda x: 255 if x>255 else …

文字列からの数値抜き出しとソート時のインデックス取得

CodeWarsより。 わかりやすいように少し改題。また,CodeWarsはPython2で動いているので下記のコードは通らない。 問題 入力:数値を含む文字列の配列が与えられる。ただし,各文字列には1~9の数字が1つだけ入っており,文字列間に含まれる数値の重複はない…

配列の中に奇数回出現する1つの整数値

codewarsというので遊んでいたら,他人の良い回答を見つけた。 問題 整数の配列が与えられる。その中に1つだけ奇数回出現する整数値が存在する。それを求めよ。 例)[1,3,5,2,6,8,4,3,1,5,2,6,8,3] -> 3 色々とやり方はあると思うけれど,XORを使う方法がな…

並列計算の効果検証用プログラム

並列化の試行やJITの効果テストなどのために,Forをたくさん回す計算例が必要になる。 そのような例としてモンテカルロ法を置いておく。 ToDo 並列計算のテスト用としては,モンテカルロ法のような単純に並列化される(データ共有が無い)ものだけでなく,適時…

gifアニメーション(convert)

やりたいこと 評価結果などをアニメーション表示したい時がある。リアルタイムなグラフのプロットならGnuplotでも良いけれど,ゲームプレイ画像などを表示したい場合には画像からアニメーションを作れると良い。 方法 "連番"の画像ファイルを用意する。注意…

画像から塗り絵問題の生成(線画抽出)

塗り絵生成 先日のお絵かきロジック生成の時にPILの使い方を覚えた。 その中で、画像処理って使うのも単純で、アルゴリズムも単純なものが多いなぁ、という感想をもった。 例えば、2値化して、エッジ強調すれば塗り絵になるなぁ、すぐ出来そうだなぁ、みたい…

ヒートマップ

配列内のデータをRGBのヒートマップに変換したいことは良くあるのでメモ。 下の関数は配列内のデータの最大値(max_val), 最小値(min_val)とヒートマップ化したい値vを渡すと、そのvのRGBを返す。 def calc_heatmap_rgb(min_val, max_val, v, str_out=True): …

二分探索 バイナリサーチ

簡単でかつ効果が高いのでよく使うサーチ. 意外と境界条件でバグりがち.味噌は,右側を配列の外において置く. #include<iostream> #include<vector> using namespace std; int main() { int d, n; cin >> d; cin >> n; vector<int> v(n); for (int i=0; i<n; ++i) cin>>v[i]; int l=0, r=v.siz</n;></int></vector></iostream>…

線形探索と番兵アルゴリズム

番兵アルゴリズムはただの書き方の問題だと思ってたけど,高速化のテクニックだった,という話. forでvectorの要素を回す時に,毎回比較演算が行われるけど,それが勿体無いという場合に,絶対に止まるよに番兵を置いておいて無限ループで回すというのが番…

Euler Projecect 1

100以下の整数のうち,3か5の倍数の和. Ruby 最もシンプルにただ全部舐めていくだけ. sum = 0 100.times do |i| if i%3==0 or i%5==0 sum += i end end p sum

ランダムウォーク

お題 X軸上をランダムに動く点の軌跡を求める.1ステップで±1か,動かないか. python 一歩ずつやってもいいけど,ガバッと乱数作ってnumpyのcumsumを使う方法でもいい. import numpy as np move = np.random.randint(-1,2,100) # generate 100 random in…

ディレクトリ内のあるファイル群に処理を適用する

お題 あるディレクトリ配下のあるファイル群(例えば拡張子がrbのファイルに対してなど)に何か処理を適用する場合.スクリプトを書くときに良くあるのかな. Ruby Dir::glob("/home/nobunaga/codes/*.rb").each do |f| func(f) end python pythonもほぼ同様…

順列の作成

お題 N個の配列からM個の並びを全て列挙する.所謂縦列. python itertoolsを使う.自分で何もやっていないけど,pythonを使う意味はそこだから別に気にしない. import itertools if __name__ == "__main__": a = [0,1,2,3,4,5,6,7,8,9] for p in itertools…

ルーレット選択

お題 GAとかで使うルーレット選択を書く.いわゆる重み付きランダム選択.重みWがx:y:z=1:2:3の場合,x=1/6, y=2/6, z=3/6の確率で生成する.色んな言語で累積和,2分探索,乱数を扱う良い練習問題なのかな. python やり方としては重みの累積和の配列を作…