-
こんにちは、いなむーです。 最近、会社でRubyでクライアントコマンドなツールを作るにはThorを使うと良いというのを教えていただきました。 そこで、せっかくなのでThorを使ったクライアントコマンドツールを作りたいと思って、早速作ってみました。 それが、こちら。 [blogcard url=https://github.com/kzm0211/oasobi/] このgemは、Macのhomebrewでインストールできるor元々インストールされているコマンドをまとめたものです。 なので、Macでhomebrewが使えることが前提のツールです。 slコマンドとかご存知の方も多いと思いますが、その辺を一つ一つインストールしていると何が入っていたか忘れると思います。 その辺のおもしろコマンドシリーズを一括でインストールしたり、アンインストールできるようにしてしまおうと思って作ったgemです。 [code] $ bundle exec bin/oasobi install [/code] こんな感じでインストールができます。 [code] $ bundle exec bin/oasobi help [/code] 使えるコマンド一覧が表示されます。 [code] $ bundle exec bin/oasobi sl [/code] slが走ります。 正直中身は大したものではありません。 ※インストールしてしまえば、そのままコマンド打った方が色々できますし…^^; ただ、私がここでやりたかったのは – gemの作り方を知る – yamlでリスト管理する – Thorでクライアントコマンド的に使う ということでしたので、そのへんが一通りできたので目的は達成できたかなと思います。 これから実用的なツールを作るにあたって、良い勉強になったので色々作っていきたいです。 以上。Created
28 Jun 2016 -
こんにちは、いなむーです。 いつものatcoderシリーズです。 今回はいつもより問題が簡単だったため、初めてCまで解くことができました。 問題Aはこちら。 そして書いたコードはこちら。 [code] A,B,C = STDIN.gets.split(/ /).map {|v|v.to_i} p 2 * ( A*B + A*C + B*C ) [/code] 表面積の公式に当てはめただけです。 ただ、公式を思い出すのに苦労しましたがw つぎに問題Bはこちら。 そして書いたコードはこちら。 [code] X = gets.to_i (1..1000000000).each do | v | if (v ** 4) == X puts v exit end end [/code] この辺がプログラマーとの違いな気がします。このコードでは無駄にとにかく4乗になる値を回してるだけなので、きっともっと良い方法がありそうです。 そして問題Cはこちら。 書いたコードはこちら。 [code] K = “WBWBWWBWBWBW” * 3 arr1 = %w[ Do Re Mi Fa So La Si ] arr2 = Array.newatcoder Created
17 Jun 2016 -
こんにちは、いなむーです。 Rubyのアクセス制限である、privateとprotectedを試したみたのでそのメモを残しておきます。 参考サイトにさせていただいたサイトはこちら↓ [blogcard url=http://ubiqlog.com/archives/9421] 本来Rubyでは、レシーバーなしでのメソッド呼び出しはできない。 このため、自クラス及びサブクラス内のメソッドの呼び出すためには、selfというレシーバーを用いなければならないのだが、例外的にselfレシーバーだけは省略できる。 この省略形を関数形式と呼んでいる。 private テストコード(1) ここでは、privateに設定したメソッドを、関数形式で呼び出します。 [code] class Sample1 def call1 call_private end def call_private p “private dayo” end private :call_private end s1 = Sample1.new s1.call1 [/code] 実行結果 [code] $ ruby test2.rb “private dayo” [/code] 正しく呼びだされていることがわかります。 テストコード(2) ここでは、privateに設定したメソッドを、レシーバを指定して呼び出します。 [code] class Sample1 def call1 self.call_private end def call_private p “private dayo” end private :call_private end s1 = Sample1.new s1.call1 [/code] 実行結果 [code] $ ruby test2.Created
13 Jun 2016 -
こんにちは、いなむーです。 最近、「カンバン仕事術」を読んだ時に、工数はフィボナッチ数列で出すと良いというのを見かけました。 前職でも、開発の人がフィボナッチ数列で出すと良いという話から工数を算出してみたら、結構良いかもって言ってたのを思い出しました。 具体的な内容はWikipediaを参照すると良いですが、自然界にも日常にも多数存在する数列で、黄金比とも関係があるようです。 名刺とか、タバコ、マンガ本などもこのフィボナッチ数で構成されているようです。 [blogcard url=https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A3%E3%83%9C%E3%83%8A%E3%83%83%E3%83%81%E6%95%B0] 正直数学的なことはあまり得意な方ではなかったのですが、なんとなく、atcoderばかりじゃなくて違うことがしたかったので、Rubyでフィボナッチ数列のアルゴリズムを書いてみることにしました。 雑な感じですがこんな感じ。 [code] F0 = 0 F1 = 1 arr = Array.new arr = [F0, F1] num = 0 while num < 15 arr « arr[-1] + arr[-2] num = num + 1 end puts arr [/code] 結果はこちら。 [code] 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 [/code] ちゃんとフィボナッチ数列になってますね。 単純なアルゴリズムではありますが、なんとなく好きな数列だったの取り上げてみました。 以上。Created
3 Jun 2016 -
こんにちは、いなむーです。 毎度いつものatcoderです。 今回はabc038のaとbを解きました。 早速aの問題。 [blogcard url=http://abc038.contest.atcoder.jp/submissions/748589] コードはこちら。 [code] S = gets.chomp.to_s puts S[-1] == ‘T’ ? ‘YES’ : ‘NO’ [/code] ここでのポイントはStringメソッドを使用しているところです。 S[-1]とすることで最後から1文字目を抽出して、チェックしてます。 次にb問題。 問題はこちら。 [blogcard url=http://abc038.contest.atcoder.jp/tasks/abc038_b] 巨大ディスプレイの話ですね笑 一瞬解像度かな?と思うのですが、1920mmとかでているので、1.92m幅のディスプレイを使っているようなので、会議でもするのでしょうか。 実際に書いたコードはこちら。 [code lang=”ruby”] class ABC038b def setvar array = Array[] STDIN.read.each_line do | var | array « var end @H1, @W1 = array[0].split(‘ ‘).map { | v | v.to_i } @H2, @W2 = array[1].split(‘ ‘).map { | v | v.to_i } endatcoder Created
31 May 2016 -
こんにちは、いなむーです。 いつものatcoderシリーズです。 最近Bも解けるようになってきたので、Bも挑戦するようにしています。 Bでは比較的配列操作などすると、スムーズに解けるイメージがついてきたので、もう少し頑張ってCまでいけたらなぁという所感です。 ということでまずAの問題はこちら。 [blogcard url=http://abc031.contest.atcoder.jp/tasks/abc031_a] そして、書いたコードがこちら。 [code] class ABC031a def inputnum @A, @D = STDIN.gets.split(/ /).map { | var | var.to_i } end def display self.inputnum if @A.between?(1,200) && @D.between?(1,200) @Aup = (@A + 1) * @D @Dup = (@D + 1) * @A end if @Aup > @Dup p @Aup else p @Dup end end end x = ABC031a.new x.display [/code] この問題で良かったのが、上記コードについては特に大きく悩むことなく一発で書けて、atcoderでも100点を取れたことです。 splitでスペース区切りで変数に入れるところや、betweenで範囲を指定するメソッドなど、過去に何度も使用してきているので書くことへの抵抗が減っているのは大きいなと感じます。 そして、B問題はこちら。 [blogcard url=http://abc031.contest.atcoder.jp/tasks/abc031_b] 私が書いたコードはこちら。Created
30 May 2016 -
こんにちは、いなむーです。 今日もAtCoderの問題です。 「これなら解けそう」って思ったら、解きたくてしょうがなくなるので、atcoder中毒になってますね笑 勉強にはなりました。 では、さっそく。 問題はこちら。リンク先をご参照ください。 [blogcard url=http://abc032.contest.atcoder.jp/tasks/abc032_b] そして書いたコードがこちら。 [code] class ABC032b def inputnum s, k = STDIN.read.split(?\n) @s = s.to_s @k = k.to_i end def setarr snum = 0 slength = @s.length snum2 = snum.to_i @array = Array[] (snum..slength).each { | var | str1 = @s[var,@k] @array « str1 if str1.size >= @k } end def displaynum p @array.sort.uniq.count end end x = ABC032b.new x.inputnum x.setarr x.displaynum [/code] これだとClassにする意味が無いかもしれませんが、とりあえずはこれで100点が取れたので、残しておきます。atcoder Created
24 May 2016 -
こんにちは、いなむーです。 AtCoderシリーズです。 今回はABC032のA問題「高橋くんと青木くんの好きな数」です。 問題はこちら。 問題文 青木君は整数 a で割り切れる数が好きです。 高橋君は整数 b で割り切れる数が好きです。 n 以上の整数で、青木君と高橋君の両方が好きな最小の数を答えてください。 入力 入力は以下の形式で標準入力から与えられる。 a b n 1 行目には、整数 a(1≦a≦100) が与えられる。 2 行目には、整数 b(1≦b≦100) が与えられる。 3 行目には、整数 n(1≦n≦20,000) が与えられる。 出力 出力は以下の形式で標準出力に行うこと。 1 行目に、n 以上の整数で青木君と高橋君の両方が好きな数の最小値を出力せよ。末尾の改行を忘れないこと。 この問題に対して、書いたコードがこちら。 [code] class Favnum def inputnum @a, @b, @n = STDIN.read.split(?\n).map { | v | v.to_i } end def smallestnum self.inputnum if @a.between?(1,100) && @b.between?(1,100) && @n.between?(1,20000) i = @n while i >= @natcoder Created
23 May 2016 -
こんにちは、いなむーです。 最近Apacheの設定変更案件がありまして、設定自体は大した内容ではないのですが、テストをどうしようかと考えた際にInfratasterを試すのはどうかという話になりました。 そこで、実際にいくつか試してみたので備忘録的に残しておきます。 まずは、導入です。 Gemfileに書くか、gemでインストールします。 [code] $ gem install infrataster または、下記を実施。 $ vim ~/Gemfile source ‘https://rubygems.org’ gem ‘infrataster’ $ bundle install $ gem list | grep infrataster infrataster (0.3.2) 次に、Infratasterを実施したいディレクトリで、下記を実行します。 [code] $ mkdir 任意のディレクトリ $ cd 任意のディレクトリ $ rspec –init [/code] 次にspec/spec_helper.rbに接続情報を記載します。 ※今回はVagrantを使用し、且つ、Vagrantfileとは違う場所にInfratasterのコードを書いたと想定します。 ※vagrant: trueとするとvagrant ssh-configで読み取れる接続情報で接続できるようですが、もしvagrant ssh-configが読めるディレクトリでなくても、下記のようにすればssh接続情報で接続可能です。もちろん秘密鍵で接続も可能です。 [code] $ vim spec_helper.rb require ‘infrataster/rspec’ Infrataster::Server.define( :vm1, ‘192.168.33.11’, ssh: {user: ‘vagrant’, password: ‘vagrant’} ) RSpec.configure do |config| config.expect_with :rspec do |expectations| expectations.include_chain_clauses_in_custom_matcher_descriptions = trueInfrataster Created
16 May 2016 -
こんにちは、いなむーです。 タイトルだけ見るととても激ハックした感じがしますが、そんなことはありません笑 今日もAtCoder(abc033a)シリーズでございます。 タイトルはAtCoderの問題文を抜粋しているためこうなっております。 今回の問題はこちら。 問題文 あなたはゲーム開発メンバーの一員です。 現在、あなたはプレイヤーがゲームをプレイするために必要な暗証番号を決めさせる部分を実装しています。 この暗証番号は 4 桁 であり、それぞれの桁は 0 以上 9 以下の数字のいずれかです。暗証番号が 0 で始まる可能性もあります。 安全上の関係で、 4 桁とも同じ数字である暗証番号は認めないことにしました。プレイヤーが入力した 4 桁の数 N が与えられるので、 これが 4 桁とも全て同じ数字であるかどうかを判定してください。 入力 入力は以下の形式で標準入力から与えられる。 N 1 行目には、N が与えられる。N は 4 文字の 0 から 9 の数字からなる。 N が 0 で始まることもある。 出力 N が 4 桁とも全て同じ数字であるなら SAME を、そうでないなら DIFFERENT を 1 行に出力せよ。 出力の末尾にも改行を入れること。 入力例 1 2222 出力例 1 SAME そして私が書いたコードはこちら。 [code] A, B, C, D = gets.atcoder Created
15 May 2016