Ruby関連のことを調べてみた2022年03月21日

Ruby関連のことを調べてみた2022年03月21日

【LeetCode】13. Roman to Integerを解いてみた

## はじめに
コーディングテスト対策としてLeetCodeの13. Roman to Integerを解いていく。

## 問題文を和訳
– ローマ数字は、I、V、X、L、C、D、M の7つの異なる記号で表されます。
– Symbol Value
– I 1
– V 5
– X 10
– L 50
– C 100
– D 500
– M 1000
– たとえば、2はローマ数字でIIと書き、2つの1を足すだけです。
– 12はXIIと書きますが、これは単にX+IIです。 27という数字はXXVII、つまりXX+V+IIと書かれています。
– ローマ数字は通常、左から右へ最大から最小へと書かれます。
– ただし、4の数字はIIIIではありません。その代わり、数字の4はIVと書かれています。
– 1は5の前にあるので、それを差し引いて4にします。
– 同じ原則が、IXと書かれた数字の9にも適用されます。減算が

元記事を表示

本日の基礎練習問題(22/3/21)

**問題**
3桁の正の整数を入力します。その整数の「百の位・十の位・一の位の和」について、
10の倍数(0,10,20,30…)からの差が
・2以内であるときは”True”
・それ以外は”10の倍数との差は○です”
と表示されるようにしましょう。

出力例:
near_ten(117)→True
near_ten(123)→10の倍数との差は4です
near_ten(111)→10の倍数との差は3です
0も10の倍数に含むものとします。

百の位・十の位・一の位の和が6などの時に、「10の倍数との差は6です」と出力せずに、「10の倍数との差は4です」と10の倍数から近い方の差を出力するようにしてください。

# 私の回答
“`
def near_ten(num)
total = (num/100) + (num/10%10) + (num%10)

end
“`
# 解説
時間制限で百の位・十の位・一の位の和だけしか記述できなかった。

# 模範回答
“`
def near_ten(num)
total = (num/100) + (num/10 % 10) + (n

元記事を表示

Rubyの基礎文法2(IF文・CASE文・配列・ハッシュ)

デイトラ学習記録

# 目次

– [IF文](#if文)
– [CASE文](#case文)
– [配列](#配列)
– [ハッシュ](#ハッシュ)
– [繰り返し表現](#繰り返し表現)

# IF文

条件分岐

“`Ruby
if conditional_branch then # ifの後に条件を書く
# 処理
end

# thenは省略可能
“`

IF文にはBoolean(true or false)を用いる。

“`Ruby
puts 70 > 50
#=> true

puts 50 > 70
#=> false
“`

条件がtrueであれば処理が実行され、falseであれば実行されない。

“`Ruby
score = 70

if score > 50
puts “scoreは50以上である”
end
#=> scoreは50以上である
“`

比較演算子

“`Ruby
a == b # a と b が等しい
a != b # a と b が等しくない
a < b # a が b よりも小さい

元記事を表示

【LeetCode】9. Palindrome Numberを解いてみた

## はじめに
コーディングテスト対策としてLeetCodeの9. Palindrome Numberを解いていく。

## 問題文を和訳
– 整数xを指定すると、xが回文整数の場合にtrueを返します。
– 整数は、前方からの読みと後方から読みが同じ場合、回文です。
– 例えば、121は回文ですが、123は回文ではありません。
– Input: x = 121
– Output: true
– Input: x = -121
– Output: false
– Explanation: From left to right, it reads -121.
From right to left, it becomes 121-.
Therefore it is not a palindrome.

## 回答
“`9_PalindromeNumber.rb
def is_palindrome(x)
if x < 0 return false end y = x rev = 0 while y > 0

元記事を表示

redmine管理画面のuser一覧に、メール通知機能の情報を追加する

## ■やりたいこと
 管理画面のuser一覧に、メール通知機能の情報も表示させたい。

## ■環境:
Environment:
Redmine version 4.2.3.stable
Ruby version 2.6.9-p207 (2021-11-24) [x64-mingw32]
Rails version 5.2.6
Environment production
Database adapter Mysql2
Mailer queue ActiveJob::QueueAdapters::AsyncAdapter
Mailer delivery smtp
SCM:
Git 2.34.0
Filesystem
Redmi

元記事を表示

WindowsでRuby環境を整えようとしてつまづいた話

# 前提のお話

2022年3月に、サクッと手軽に試せるRubyの環境が欲しくなった。
その為、VSCodeにRubyの実行環境を整えようとしてみた。

予想外につまづきが多く、いくつかの記事の情報を統合して、実行環境を手に入れることができた。
発生したトラブルと、解決の為に参考にしたQiita記事をまとめ、記録として残すことにした。

# 作業内容

## (1) VSCodeのインストール~Ruby環境設定

@momoandbanana22 氏の[「Windows 10のVSCodeでrubyのdebug環境を構築する」](https://qiita.com/momoandbanana22/items/60682935ea8b01b30aec)を参考にさせて頂いた。

ハッキリいって、これで十分。
この後に何もトラブルが発生しなければ、この記事だけ見て終わっていい。

記事の末尾に付いているGitHubへのリンクは、

## (2) 「cannot load such file」が出た

しっかり設定が終わった、と思っても見落としはあるもの。

> Uncaught except

元記事を表示

【LeetCode】7. Reverse Integerを解いてみた

## はじめに
コーディングテスト対策としてLeetCodeの7. Reverse Integerを解いていく。

## 問題文を和訳
– 符号付き32ビット整数xを指定すると、その数値を逆にしてxを返します。
– xを逆にすると、値が符号付き32ビット整数の範囲[-2^31,2^31-1]の外に出る場合は、0を返します。
– 環境で64ビット整数(符号付きまたは符号なし)を格納できないと想定します。
– Input: x = 123
– Output: 321

## 回答
“`7_ReverseInteger.rb
def reverse(x)
result = 0
isNegative = false
if x < 0 x = x * -1 isNegative = true end while x > 0
result = result * 10 + x % 10
x /= 10
end
if -(2**31) <= result && result <= 2**31 -1 if isNegative

元記事を表示

【LeetCode】1. Two Sumを解いてみた

## はじめに
コーディングテスト対策としてLeetCodeの1. Two Sumを解いていく。

## 問題文を和訳
– 整数numsの配列と整数targetが与えられた場合、合計してtargetになる2つのnumsのインデックスを返します。
– 各入力には正確に1つの解があると想定でき、同じ要素を2回使用することはできません。
– 回答は任意の順序で返すことができます。
– Input: nums = [2,7,11,15], target = 9
– Output: [0,1]
– Output: Because nums[0] + nums[1] == 9, we return [0, 1].

## 回答
“`1_TwoSum.rb
def two_sum(nums, target)
result = []
for i in 0…nums.length do
for j in (i + 1)…nums.length do
if nums[i] + nums[j] == target
result.push(i,j)

元記事を表示

【Ruby】freezeを使用してオブジェクトを凍結させる。

## freezeについて
Rubyにはfreezeというインスタンスメソッドがあるらしい。

“` ruby
array = [“a”, “b”, “c”].freeze
array = array.map!{|content| content.succ}

p array
“`

“`
can’t modify frozen Array: [“a”, “b”, “c”] (FrozenError)
“`
このようになる。

このfreezeメソッドを使用すると、オブジェクトを凍結させることができるらしい。
凍結 = 変更が効かなくなるらしい。

だから、“array = [“a”, “b”, “c”].freeze“こうすることで配列を凍結することができる。
そのため、次の行の処理“array = array.map!{|content| content.succ}“はエラーとなる。

### 参考
https://docs.ruby-lang.org/ja/latest/method/Object/i/freeze.html

元記事を表示

【Ruby】nestingについて

nestingというものがあるらしい。
いつどんなときに使うのかわからない。

“` ruby
module Gorira
module Saru
module Tanuki
p Module.nesting
end
end
end
“`
“`
[Gorira::Saru::Tanuki, Gorira::Saru, Gorira]
“`
このnestingを使用すると、クラス・モジュールのネスト情報を配列にして返してくれるらしい。

なにで使うのかはわからない。笑

### 参考
https://docs.ruby-lang.org/ja/latest/method/Module/s/nesting.html

元記事を表示

[rails] graphql-rubyでどこが遅いのかわからない場合

# 問題

graphqlを使ってると、model側で遅いのか?graphqlのタイプ側で遅いのか?更に階層が深いと検討がつきにくい。

# 解決

https://graphql-ruby.org/queries/tracing

公式ドキュメントには丁寧な説明がないけど、

https://thecodest.co/blog/graphql-ruby-what-about-performance

ここのブログでいい感じにログに出せるようなコードがあった。

`platform_trace`で実行時間を計算して`observe`に渡してるんで、そこでログに吐くなりできる。

“`rb:app_schema.rb
class MyCustomTracer < GraphQL::Tracing::PlatformTracing self.platform_keys = { "lex" => “graphql.lex”,
“parse” => “graphql.parse”,
“validate” => “graphql.validate”,
“a

元記事を表示

Ruby と Python で解く TOTO くじ 削減

# はじめに
高橋君は、少ないお小遣いで`TOTOくじ`を楽しもうと思っています。
高橋君が楽しいとは、1等もしくは2等が当たることです。
高橋君が楽しむために最適な戦略を取った場合、合計金額の最小値を求めなさい。
# TOTOくじ
https://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%84%E6%8C%AF%E8%88%88%E3%81%8F%E3%81%98

ここでは、組合せの少ない`totoGoal3`で計算を進めます。

https://www.toto-dream.com/toto/about/index.html
# 例1
一番シンプルな例は、3ダブルです。

http://www.01senmonten.com/com/home/toto5.html

2の3乗なので本来8通り(800円)必要ですが、2通りで楽しめます。

“`rb:ruby
def check(i)
f = false
[‘000’.to_i(2), ‘111’.to_i(2)].each do |x|
f |

元記事を表示

【個人開発】ランダムでカラオケで歌う曲を決めてくれるサービス「PICKUP TRACK」をリリースしました!

# はじめに
皆さんはカラオケに行った時、歌う曲に困った経験はありませんか?

最近はこのご時世なのでなかなかカラオケにも行きづらい状況ですが、私自身そういったことがよくありました。
また、私は一緒に行った友人の歌を聴くのも好きなので少しでも歌う曲に悩む時間を減らしたいとも思っていました。

そんな経験から自分と同じような悩みを持つ人に、よりカラオケを楽しんでもらいたいと思い、「PICKUP TRACK」を作成いたしました。

URL: https://pickup-track.com
GitHub: https://github.com/junjunpei/pickup_track
[![Pickup (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2564332/0ae464a7-32bf-17ac-96b4-b91ca10b5835.png)](https://pickup-track.com)

# サービス概要
※パソコン、スマホどちらからでも使用できますが、カラオケで使っていただくこと

元記事を表示

【個人開発】『書くこと(ジャーナリング)?』をもとに、感情の分析や習慣化サポートするアプリをリリースしました!!??

# ? はじめに

『書くこと(ジャーナリング)』をデジタルで実現し,感情の分析や習慣化しやすいようにサポートするサービス【Mikke(ミッケ)習慣ジャーナリング】をリリース致しました。
本サービスへの概要や想いなどを書きましたので、よければ最後までご覧ください。

:::note info
ジャーナリングとは…
「書く瞑想」とも呼ばれ, **頭に浮かんでいることを一定の時間内でただ紙に書いていく**というものです。
:::

【サービスURL】
https://a-mikke.com

# ? サービスを作った背景 / ✨ サービスに込めた想い
**自分の感情を言語化したり、思考の癖を理解することが苦手なこともあり、人と1対1で話すのが苦手でした。**

ある本をきっかけに **『書くこと(ジャーナリング)』を毎日するよう

元記事を表示

新人がよくやる間違い(MVCの領域侵犯編)

Railsを使ったアプリケーション制作を始めて2ヶ月ちょっと…。

こんな↓コードを書いていたら、先輩から「それはやばいよ」と指摘を受けました。

“`ruby
<% @users.each do |user| %>
user_type = UserType.find(user.type_id)

<%= user %>

<%= user_type.type_name %>

<% end %>
“`

なにがやばいのかわかりますか?

まあ、タイトルでネタバレしているのですぐわかってしまうと思うんですけど、**ViewでSQL文を書いている**んですね。端的に云うと、「それコントローラーでやれよ」ってことです。(さら言うとN+1問題も発生しているんですが、今回は割愛)

サンプルではリレーションのあるわかりやすい2つのモデルなので、コントローラーでらくらく書けるんですけど、

例えば直接的なリレーションのない2つのモデルを扱わないといけなかったり…

複雑な関係をもつ3~4つのモデルを同時に扱わないといけなかった

元記事を表示

本日の基礎練習問題(22/3/19)

**問題**
以下の配列に任意の値が存在するかどうか、そして何番目に存在するのか、検索するコードを作成しましょう。
添字が0の要素、つまり以下の配列における「1」は「配列の0番目に存在する」と表現します。
“`
array=[1,3,5,6,9,10,13,20,26,31]
“`
任意の値が配列内に存在しない場合は、「値は配列内に存在しません」と表示し、
存在する場合は、配列の何番目にあるかを表示してください。
※配列の上限である32以上の値による検索は想定しないものとします。
検索はバイナリーサーチ(2分割検索)を使用して行います。

ヒント
まず.lengthメソッドを使用して配列の要素数を取得し、変数number_of_elementsとします。
binary_searchメソッド内で配列の要素数を半分にしたものを変数centerとしましょう。
while文を使用して、当てはまるまで計算を繰り返します。

出力例:
“`
検索したい数字を入力してください
5
5は配列の2番目に存在します
“`
“`
検索したい数字を入力してください
7
7は配列内に存在しません
`

元記事を表示

Better ErrorsとBinding_of_callerを導入する(Rails+Docker環境)

## Better ErrorsとBinding_of_callerとは?

Railsのgemの一つでBetter_Errors gemを使うと便利で高機能なエラー画面が表示されます。

Binding_of_callerはブラウザ上でirbを使えるようになるgemです。

### Better Errorsとbinding_of_callerの導入

Gemfileに以下を記述します↓

“`Gemfile
group :development do
gem ‘better_errors’  #追加
gem ‘binding_of_caller’  #追加
end
“`

次にdocker-compose buildでコンテナをビルドします。
“`
$ docker-compose build
“`

**/config/environments/development.rb**に以下を追加します↓
“`
if Rails.env.development?
BetterErrors::Middleware.allow_ip! “0.0.0.0/0”
e

元記事を表示

Ruby 3.1.1 インストール(Windws)+ AtomでRubyを実行する方法

Rubyの現時点(2022/3/19)での最新版を入れる機会があったのでメモ。
Atomの拡張機能「atom-runner」のインストール手順も記載。

# 端末とかRubyのバージョンとか

– Windows 10 64bit
– Ruby 3.1.1
– 因みに、WindowsでRails開発を行うならWSL上で構築したほうがよい(らしい)

# Rubyインストール

### ダウンロードページ

[Downloads (rubyinstaller.org)](https://rubyinstaller.org/downloads/)

64bit版をダウンロード
※ 純粋にRubyだけを実行する場合は、**WITHOUT DEVKIT** の方でよかったらしい。
![ruby0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99895/1200d6e3-89b2-0339-0300-8a624cabc6cf.png)

### rubyinstaller-devkit-3.1.1-1-x64.

元記事を表示

LoadError: cannot load such file — coffee_scriptをRails.application.config.assets.precompile = []で対応しました。

# LoadError: cannot load such file — coffee_script

## 概要
Herokuへのアップロードをした時に、下記エラーが発生しました。
ログを見てみますと、を`LoadError: cannot load such file — coffee_script`が発生しております。

“`bash
remote: —–> Preparing app for Rails asset pipeline
remote: Running: rake assets:precompile
remote: rake aborted!
remote: LoadError: cannot load such file — coffee_script
remote: /tmp/build_17b86f88/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.5/lib/active_support/dependencies.rb:332:in `re

元記事を表示

Socket 通信の基本をメモる

Rubyの非同期タスクスケジューラーを自作するにあたり、ネットワーク通信、特にソケットについて理解を深めておきたいと考えた。

経験上まずは手を動かしてみるのがベストだと考えている。以下の素晴らしい記事が見つかったので自分でもやってみる。

https://qiita.com/MikuriyaHiroshi/items/b0a40f5e7b7be1ef327c

手を動かした中で個人的にメモっておきたいところを残す。

## Socketとは

Socketは、ネットワークはプログラムが外部のネットワークと通信する際のインターフェイスとして使われるもの。ファイルとして抽象化される。

## Socket通信の種類の例

– インターネット通信
– UDP (dgram型)
– TCP (stream型)
– プロセス間通信(UNIX domain socket通信)
– UNIX domain socket dgram (dgram型)
– UNIX domain socket stream (stream型)

dgramとs

元記事を表示

OTHERカテゴリの最新記事