【ruby】ランダムな文字列を生成
指定した長さのランダムな文字列を作りたいと思ったときに、
「Array#sample」を使ってみたら思い通りのものが得られなかったので、
その時の( ..)φメモメモ
得たい文字列は"0"または"1"をランダムに並べた文字列。
次のようにArray#sampleを使うと、"0"を1回、"1"を1回ランダムな順序で並べた文字列しか得られない。
length = 4 # 汎用化のために、指定長さを変数に格納 [*0..1].sample(length).join # => "10" # 出力例
つまり、Array#sample では、ある要素を1回ずつしかとってこない。
しかも、生成できる文字列は最長でArrayのサイズまでなので、Arrayのサイズを超えた長さを指定してもそのサイズの文字列しか生成できない。
Array#sampleでは、"0011"みたいな文字列は生成できない。。。(´・ω・`)
ということで、調べる(´・ω・`)
その結果、"0011"みたいな文字列をランダムで生成するには次のように書けばOK!
length = 4 Array.new(length){[*0..1].sample}.join # => "0011" # 出力例
(´・ω・`)「なるほどなぁ。。。」
ちなみに、もっと一般的にアルファベットとかも使う場合は次で。
length = 4 Array.new(length){[*:a..:z, *:A..:Z, *0..1].sample}.join # => "PdgH" # 出力例
【シェルスクリプト】シェル上で進捗状況を表示
繰り返しの処理をしていく中で、今の進捗状況が見れるといいなと思い、それについて調査。
主にこちらのサイトを参考にさせてもらった。
全ては時の中に… : 【Linux】シェルで進捗を表示する
echoにおける表示の時に改行をせずに、同じ行の先頭から再描画するように書けばよい。
- "\c" : 改行を抑制
- "\r" : 行の先頭にフォーカスを移す
これら2つを組み合わせることで、徐々に変化する進捗の表示ができる。
以下、スクリプト例。
#!/bin/sh COUNT=1 # 今の実行回数を表す変数 MAX=5 # 実行回数の最大値を表す変数 while [ $COUNT -ne $MAX ] do echo "進度: ($COUNT/$MAX)\c" # 改行を抑制しながら進捗状況を表示 sleep 2 # 2秒間停止 COUNT=`expr $COUNT + 1` echo "\r\c" # 行頭にフォーカスを移す done echo "進度: ($MAX/$MAX)" # これがないと表示が消えてしまうので、最後に改行を含めて書き込む
【ruby】10進数と2進数の変換
Rubyを使っていて、
10進数から2進数への変換がしたくなったので、メモ。
10進数から2進数への変換
p 8.to_s(2) # "1000"
2進数から10進数への変換
p "1000".to_i(2) # 8
Python.hがない...
今回もライブラリを入れてる時にエラーで怒られた時の話。
fatal error: Python.h: そのようなファイルやディレクトリはありません
という感じでPython.hがないというエラーが起こった。
こんな時には、
apt-get install python2.7-dev
を実行してあげればOK。
...なんだか環境構築時間かかってるな