CrystalでMerge Sort
Crystal 0.20.0
こちらのRuby versionを参考にしました。
def merge_sort(array) return array if array.size <= 1 mid = (array.size / 2).round left, right = array[0...mid], array[mid..-1] merge(merge_sort(left), merge_sort(right)) end def merge(left, right) res = [] of Int32 until left.empty? || right.empty? if left.first <= right.first res.push(left.shift) else res.push(right.shift) end end res + left + right end
もう一つ。上記のと変数名やメソッド名揃えてなくてアレですけど・・・。
これの元ネタはPython Algorithms, Listing 3-2
def mergesort2(seq) mid = (seq.size / 2).round lft, rgt = seq[0...mid], seq[mid..-1] lft = mergesort2(lft) if lft.size > 1 rgt = mergesort2(rgt) if rgt.size > 1 res = [] of Int32 until lft.empty? || rgt.empty? if lft.first <= rgt.first res.push(lft.shift) else res.push(rgt.shift) end end return res + lft + rgt end
crystal play
上で実行してみます。
require "benchmark" . . . seq = [5,3,6,9,1,4,2,8,7] Benchmark.bm do |x| x.report("merge_sort:") do p merge_sort(seq) end x.report("merge_sort2:") do p mergesort2(seq) end end
user system total real merge_sort: [1, 2, 3, 4, 5, 6, 7, 8, 9] 0.000000 0.010000 0.010000 ( 0.014788) merge_sort2: [1, 2, 3, 4, 5, 6, 7, 8, 9] 0.000000 0.010000 0.010000 ( 0.011958)
いま気づいたけど、crystal play
のログにめっちゃ警告でてるじゃあないですか・・・。
Warning: benchmarking without the `--release` flag won't yield useful results
Python Algorithms: Mastering Basic Algorithms in the Python Language
- 作者: Magnus Lie Hetland
- 出版社/メーカー: Apress
- 発売日: 2014/09/04
- メディア: ペーパーバック
- この商品を含むブログを見る
Bootstrap4 Alpha3 - チェックボックスボタンがfocusedの時もoutlineなスタイルにする
な、何を言っているのかわからねーと思うが・・・
http://v4-alpha.getbootstrap.com/components/buttons/#checkbox-and-radio-buttons
上のリンクをチェックしていただけるとわかるかと思いますが、チェックボックスがボタン型になったボタングループを用意します。
ボタングループを用意
<div class="btn-group" data-toggle="buttons"> <label class="btn btn-outline-success btn-block"> <input type="checkbox" autocomplete="off"> Checkbox 2 </label> . . . </div>
btn-group
クラスがあるdivに、data-toggle="buttons"
を追加します。これでボタンがトグル可能になるわけです。buttons
が複数形であることに注意。
ボタンはbtn-outline-success
でアウトラインスタイルに、btn-block
でブロック型にします。
注意としてはinput
要素ではなくlabel
のクラスに定義する点ですかね。
input
要素はtype="checkbox"
としておきます。
これだけでactive(checked)
な場合は緑地に白字、そうでない場合はoutline
なスタイルになってくれるのですが、一つ問題があります。
focusが当たっている時は白地になってくれない
クリックしてactive
からnon-active
にした場合、フォーカスがかかっている状態では色が変わってくれません。フォーカスを外した時に初めて、白地のアウトラインスタイルになってくれます。
下のCodepenの例でいうと左側(または上側)のグループです。ちょっと試していただけると良いかと。
See the Pen Bootstrap4 Alpha3 - Keep non-active buttons with outline style when focused by Noriyo Akita (@noriyotcp) on CodePen.
さて、これをどうするかなと
続きを読むBootstrapのalertのようなものを作ってみる
要はこういう風なものです。
http://getbootstrap.com/components/#alerts
See the Pen Notification Bar Examples by Noriyo Akita (@noriyotcp) on CodePen.
続きを読む【備忘録】【Ruby on Rails】MiniTestにおいて、ActionView::Template::Error: couldn't find file... と出るときは
Ruby on Rails Tutorialの4th Editionが出たので、アプリを作っていったのですが
time_ago_in_words
を使用している箇所を、rails_best_practicesのNot user time_ago_in_wordsに倣って、rails_timeago
というgemを使うことにしました。
そこまでは良かったのですが、rails test
が以下のようなエラーを吐いて軒並み落ちてしまいました。
ActionView::Template::Error: ActionView::Template::Error: couldn't find file 'rails-timeago' with type 'application/javascript'
テストにおいてrails-timeago
を見つけられてないみたいでしたので、Gemfileをこのように修正しました。
- Before
group :development do . . gem 'rails-timeago', '~> 2.0' end
- After
group :development, :test do . . gem 'rails-timeago', '~> 2.0' end
つまり:development
groupから:development, :test
groupに移してあげた、という基本中の基本みたいな話です・・・。
それでも落ちる場合はspring
をいったん切ってみる、など
$ ps aux | grep spring $ kill -9 PID
これで完全な対処になっているかどうかわかりませんが、備忘録として・・・。
ちなみにRails
は5.0.0
で、cloud9上で開発しました。