2019-12-01から1ヶ月間の記事一覧
get %r{/users/([0-9]*)} do "user_id = #{params[:captures][0]}" end %rでルートに正規表現を書ける ここでは「0〜9までの連続する値」を取得。()で囲めばキャプチャできる キャプチャしたものはparams[:captures]配列に入っている 数値以外を入力してもエ…
お題 Shift_JISで「こんにちは」と書かれたテキストファイルを作り、そのテキストファイルを読み込んでUTF-8で出力するスクリプトを作れ。 「たのしいRuby 第6版 P.426」より 回答 File.write("bar.txt", "こんにちは", encoding: "Shift_JIS") text = File.…
やりたいこと Linux(Debian)にPostgreSQLをインストールする手順 リポジトリの追加 クライアント証明書をインストール PostgreSQLをインストール ユーザー追加 感謝の参照 やりたいこと LinuxにPostgreSQLをインストールしたい Debian10系(buster)を使用 Pos…
お題 EUC-JPの文字列と、Shift-JISの文字列を連結してUTF-8の文字列を返すメソッドを定義せよ。 回答 str_euc = "マッスル".encode("EUC-JP") str_sjis = "北村".encode("Shift_JIS") def to_utf8(str_euc, str_sjis) str_euc.encode("UTF-8") + str_sjis.en…
お題 変数$:にはRubyが利用するライブラリが置かれているディレクトリの名前が配列の形で格納されている この変数を使い、RUbyが利用できるライブラリのファイル名を順に出力せよ 「たのしいRuby 第6版 P.410」より 回答 (カンニングしてしまった...) $:.e…
Rubyでファイルをコピーする方法。 Fileクラスを使う。 open("bar.txt") do |input| open("foo.txt", "w") do |output| output.write(input.read) end end まずはopen.txtというファイルを開き、データをinputとして引数にとる。 その後、書き込みたいファイ…
お題 テキストファイルからデータを読み込み、次の条件に従って上書きをするスクリプトを作成せよ。 ファイル中の行を逆順に並べ替える ファイル中の最初の1行だけ残して他は削除 ファイル中の最後の1行だけ残して他は削除 回答 # ファイル中の行を逆順に並…
2019年12月21日、Kyoto.rbに参加した。 人生で初めてのプログラミングコミュニティに出たので感想などをメモしておく。 感想 テックエキスパートで学んでエンジニアになった人がいてリアルな仕事の話を聞けた プログラミングよりもインフラ周りで苦しんだか…
やりたいこと ターミナルのls -lコマンドの結果を自分で作ったwcコマンドにかけて行数・単語数・容量を表示させたい。 つまり以下の処理をしたい。 ls -l | wc コード # 標準入力を受け取る input = $stdin.read # 行数を取得 def load_lines(str) str.count…
Rubyで見かけるアンダーバーふたつで囲まれた奴ら。 __FILE__ __dir__ き、きみたちは一体何?どこからきたの? __FILE__:現在実行しているファイル ruby_basic.rbというファイルに以下のコードを書いて実行してみる。 puts "__FILE__: #{__FILE__}" => __F…
お題 テキストファイルからデータを読み込んで、次の数を数える処理を行うスクリプトを作成せよ。 行数 単語数 文字数 サンプルテキストファイル foo.txt 山田孝之 鬼束ちひろ マッスル北村 arnold schwarzenegger 回答 # ファイルの文字列を読み込む str = …
お題 アルファベットとハイフンからなる文字列を与えられると、ハイフンで区切られた部分をcapitalizeするようなメソッドword_capitalizeを定義せよ。 引用:「たのしいRuby 第6版」P.364より 回答 def word_capitalize(str) ary = str.split(/\-/) ary.map(…
お題 「正規表現は難しい!なんて難しいんだ!」という文字列を、gsubメソッドを使って「正規表現は簡単だ!なんて簡単なんだ!」という文字列に直せ。 引用:「たのしいRuby 第6版」P.364より 回答 str = "正規表現は難しい!なんて難しいんだ!" str.gsub(…
お題 電子メールアドレス「ローカルパート@ドメイン名」の文字列から、ローカルパートを$1、ドメイン名を$2として取得する正規表現を作れ。 引用:「たのしいRuby 第6版」P.364より 回答 email = "test@domain.com" email.scan(/(\w+)@(\w+\.\w+)/) do |m| p…
正規表現は「パターン発見くん」 「正規表現」という表現がもはやとっつきにくそうなオーラを出しているが、ようは文字列とマッチングをする「パターン」の書き方のこと。最初はわかりにくいので「パターン発見くん」みたいな感じでとらえるといい。 たとえ…
お題 空白、タブ、改行で区切られた以下の文字列を、ハッシュに変換するメソッドstr_to_hashを定義せよ。 # こんな文字列を ”blue 青 white 白\nred 赤” # こんなふうにしてくれよぉ => {"blue"=>"青", "white"=>"白", "red"=>"赤"} なお、空白、タブ、改行…
お題 (1)曜日を表す英語と、日本語との対応を表すハッシュwdayを定義せよ (2)ハッシュのメソッドを使い、ハッシュwdayのペアの数を数えよ (3)eachメソッドと(1)のハッシュwdayを使って、以下のような文字列を出力せよ 「sunday」は日曜日のことです。 「mond…
Rubyのprintfメソッドについて、簡単な使い方をまとめました。 printfメソッドとは 使い方 作成例1 作成例2 指示子の種類 他にもいろんな指定方法がある printfメソッドとは 文字列の整形に使えるメソッド フォーマットに従って文字列を出力する 使い方 prin…
お題 (1) "Ruby is an object oriented programming language"という文字列に含まれる各単語を要素とする配列を作れ (1)の配列をアルファベット順にソートせよ (2)の配列を大文字と小文字の区別をせずにアルファベット順にソートせよ (1)の文字列の各文字(…
ヒアドキュメントとは 行指向文字列リテラルを使って文字列を作る方法 複数行の文字列はヒアドキュメントを使ったほうが書きやすい 作り方 <<識別子 行 行 行 識別子 先頭は<<で始める 識別子は最初と最後で同じ文字列を使う TEXT、EOF、EOBがよく使われる …
Rubyでは、%q記法を使って文字列を簡単に作ることができる。 'や"などの特殊文字をエスケープするのが面倒なときによい。 %q: 'や"をエスケープなしで記述できる p moji = %q(He said, 'I want more muscle!') => "He said, 'I want more muscle!'" 用途によ…
お題 数値からなる配列num1とnum2にたいして、それらの個々の要素を足し合わせた要素からなる配列を返すメソッドsum_arrayを定義せよ こんな感じの結果にせよ。 p sum_array([1, 2, 3],[4, 6, 8]) => [5, 8, 11] (たのしいRubyに収録されている例題です) …
お題 1〜100の整数を含む配列aryから、1〜10、11〜20、21〜30、というように10個の要素を含む配列を10個取り出せ 回答 ary = (1..100).to_a result = [] 10.times do |i| result << ary[i*10, 10] end 説明 (1..100).to_aで「1〜100」の整数を格納した配列が…
モジュールの中にクラスを入れてみる。 module LS class File attr_reader :name def initialize(name) @name = name puts @name end end end LS::File.new('hoge').name => hoge この場合、使うときはモジュール名::クラス名.メソッドになる。
Rubyでは、引数にアスタリスク2つ**をつけると、ハッシュに格納できる。 これは見たほうがわかりやすい。 def hello_with_options(msg, **opts) name = opts[:name] name2 = opts[:name2] time = opts[:time] || Time.now puts "#{msg} #{name} and #{name2}…
お題 1〜100までの整数が昇順に並ぶ配列aryを作れ 配列aryの各要素を100倍した配列ary2を作れ 回答 ary = (1..100).to_a ary2 = ary.map { |n| n * 100 } 説明 前回と似たような感じの問題。 k-koh.hatenablog.com mapメソッドにブロックを渡し、配列の各要…
お題 1~100までの整数が昇順に並ぶ配列aを作れ a[0]は1、a[99]は100とする 回答 def make_ary(ary) 1.upto(100) { |n| ary.push(n) } end ary = [] make_ary(ary) p ary 説明 1.upto(100)で「1から100まで繰り返す」という意味になる。 ブロックの中でary.pu…
共通事項 囲む文字(区切り文字)は!~!,(~),[~],%~%, &~&などいろんな記号が使える %の次に来る文字は小文字、大文字がある 大文字は式展開や改行文字などを含められる wは文字列、iはシンボルの配列を作る %w, %W 文字列の配列を作る %w(hoge foo bar baz) …
RubyではPrimeクラスで素数を扱える。 primeをrequireする。 require 'prime' Prime.prime?(i)で、iが素数ならtrue、素数じゃないならfalseが返る。 Prime.prime?(5) => true Prime.prime?(6) => false docs.ruby-lang.org
お題 (1)サイコロを降って出た目を返すメソッドdiceを定義せよ サイコロには1〜6の数字がある (もちろん)サイコロなのでランダムに値が返る (2)10個のサイコロを振って出た目の合計を返すメソッドdice10も定義せよ 回答 (1)の回答 def dice(ary) puts ary.…