Translate

BTemplates.com

Powered by Blogger.

2019年2月27日水曜日

2019-02-11、12、15、25、27 到達点メモ


コマンドプロンプト

入力を受け付ける
set /p testdata=

値を代入する
echo %testdata%

参考サイト:バッチファイルでよく使う書き方まとめ


Node.js

コマンドプロンプトから入力した値を使いたい。
例えば以下のように入力した場合、testdataという文字列を使いたいとします
node index.js testdata

この場合、index.js上では以下のように指定する必要があります
var data = process.argv[2];

参考サイト:Node.jsでコマンドライン引数を取得する


ruby

downto
大きい順から特定の値まで一づつカウントダウンする
大きい値から調べたい時は便利。

String[0,x]
左がインデックス番号で、右が文字数。

計算の順番

a=1
b=5
puts a+b > 9 ? "Fin" : a+b

で10以上の時はFinと表示するもしくは、10未満の時は
aとbの合計結果を出したいとする

その際に、毎回a+bって書くのが嫌ので
これを一行に纏めようとした。

a=1
b=5
puts result = a+b > 9 ? "Fin" : result

例えば、上記のように書くと、結果は空になる。
計算の順番的に代入は後になっているものと思われる。
そこで以下のように書けば、ちゃんと合計結果が出る

a=1
b=5
puts (result = a+b) > 9 ? "Fin" : result

正直な所、競技プログラミング以外でこのように一行で書く意味はあまりないと思うが
やり方として覚えておくとよいと思う。

重複の削除の仕方

処理速度の問題は置いておくとして
結果だけ見れば配列の重複したものを削除したい場合
s="testcase".to_a
s.uniq と s | [] と s|s
は全部同じ結果になる

[n..m]と[n...m]の違い

[n..m]
ピリオド二つの奴は、n番目からm番目という意味

[n...m]
ピリオド三つの奴は、n番目からm-1番目という意味。つまり、m番目を含まない

[n..(m-1)]ってやるよりは見た目的には奇麗だが
見逃しが起きそうではある。

参考サイト
[] (Array)

検証してみた話。

rubyで配列のユニークな奴を取りたい場合は
array.uniq か array|[]のどちらかを使えばよいのだが
結局どちらが早いのだろうか?
と思ったので、以下の条件でテストしてみた。
・文字列は1000文字で、AからCのランダムな文字が入る
・同じ文字列を一万回重複削除し、そのタイムを取得する
・100個のタイムを取得し、最大値、最小値、平均値を求める

以下が実際に検証したコードである

valueRandom = Random.new(1024)
alphabet=("A".."Z").to_a
moji = 1000.times.map{alphabet[valueRandom.rand(3)]}

uniqTimes = []
100.times do
    stratTime = Time.now.to_r
    10000.times.map{moji|[]}
    endTime = Time.now.to_r
    uniqTimes << endTime - stratTime
end
puts "array|[]"
puts "FastTime:#{uniqTimes.min.to_f}"
puts "SlowTime:#{uniqTimes.max.to_f}"
puts "AverageTime:#{(uniqTimes.inject(:+)/100).to_f}"

uniqTimes = []
100.times do
    stratTime = Time.now.to_r
    10000.times.map{moji.uniq}
    endTime = Time.now.to_r
    uniqTimes << endTime - stratTime
end
puts "array.uniq"
puts "FastTime:#{uniqTimes.min.to_f}"
puts "SlowTime:#{uniqTimes.max.to_f}"
puts "AverageTime:#{(uniqTimes.inject(:+)/100).to_f}"


結果は以下のようになった。

array|[]
FastTime:0.525499
SlowTime:0.669585
AverageTime:0.55385082

array.uniq
FastTime:0.524965
SlowTime:0.602402
AverageTime:0.55188603

ある意味分かり切った事ではあったが
正直誤差の範囲内だと思う。

今回は、uniqの方が早いが処理順番が逆だった時は
array|[]の方が早かったのでもっと回数をこなすとまた違う結果が出るのかもしれない。

ただ、単純に重複削除をするのであれば
分かりやすいuniqが一番無難なのでは?と思った。

0 コメント:

コメントを投稿