月別アーカイブ: 2022年2月
ちらつきを解消するには?
global-container
jsで隠すべき要素が一瞬表示されてしまう場合
PaizaLvアップ問題集(標準出力)
※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。
詳しくはコチラ
なるべくわかりやすい解説を付けました。
問題1
実数 N、自然数 M が入力されます。N を丸めて小数第 M 位まで出力してください。
また、N の小数部が小数第 M 位に満たない場合は 0 で埋めて出力してください。
なお、小数第 M 位が 5 になることはありません。
自然な丸め処理を行って出力すると正解になります。
入力例 0.813 4 出力例4 0.8130
解答
n,m = gets.split(' ').map(&:to_f) # 小数点以下の桁数を指定しています printf("%.#{m.to_i}f", n)
問題2 複数の実数を出力 (paizaランク C 相当)
自然数 Q が与えられます。Q 回以下の問題に答えてください。
実数 N、自然数 M が入力されます。N を丸めて小数第 M 位まで出力してください。また、N の小数部が小数第 M 位に満たない場合は 0 で埋めて出力してください。
なお、小数第 M 位が 5 になることはありません。
自然な丸め処理を行って出力すると正解になります。
入力例1
4 0.813 1 0.813 2 0.813 3 0.813 4
出力例1
-
0.8 0.81 0.813 0.8130
問題3 直角三角形の出力
自然数 N が与えられます。1 ≦ i ≦ N の各 i について、i 行目には以下の数列を出力してください。* 1 以上 i 以下の数値をすべて、半角スペース区切りで出力してください
- 入力例1
-
4
出力例1
-
1 1 2 1 2 3 1 2 3 4
解答
-
入力Nを代入
-
配列[1, 2, 3, 4]を作る
-
timesで繰り返し処理をする
-
a.takeを使うことで配列をiずつ取り出して半角スペースを間に入れて出力する
n = gets.to_i a = *(1..n) 1..n.times do |i| puts a.take(a[i]).join(' ') end
問題4 すべての行の長さが不定な 2 次元配列の出力
自然数NとN個の要素の数列Mが与えられます。
1 ≦ i ≦ N の各 i について、i 行目には以下の数列を出力してください。
1 以上 M_i 以下のすべての自然数を昇順、半角スペース区切りで出力してください。
入力例1
4 2 4 3 1
出力例1
1 2 1 2 3 4 1 2 3 1
入力例2
1 1
出力例2
1
解答 入力例1で解説
-
入力Nを受け取る
-
数列Mを受け取る
-
N回繰り返す
-
mの配列の数字−1回繰り返し(m[0]のときは2−1で1回)、1から初めて
-
繰り返しが終わったら、mの配列を加える1 2
-
2回目は(m[1]なので4−1で3回繰り返し)1 2 3までやったら
-
puts m[i]で1 2 3 4が出力されて
-
以下繰り返していく
n = gets.to_i m = gets.split(' ').map(&:to_i) n.times do |i| # ここで先に1,2,3,とやってから (m[i]-1).times { |j| print "#{j +1 } "} # 最後にmの配列を足す puts m[i] end
ExecJS::RuntimeError in Users#show(エラー対処録)
ExecJS::RuntimeError in Users#show
Showing /lifehack/app/views/layouts/_head.html.erb where line #8 raised:
SyntaxError: [stdin]:5:19: reserved word ‘function’
Trace of template inclusion: app/views/layouts/application.html.erb
初めてみたエラーだったので記録
経緯
JQueryのスクリプトをパーシャルとしてリファクタリングしようとした。
原因
javascripts/task.coffeeに間違えて以下(JQueryのスクリプト)を記述したら生じた。
<script> $("span").click(function () { $("h3").toggle("slow"); }); </script>
解決法
javascripts/task.coffeeの↑の記述を削除する。
補足
views/shared/_script.html.erbにスクリプトを記述して
<%= render 'shared/script' %>
で使いました。
ExecJS::RuntimeError(エラー対処録)
初めて見たエラーだったので対処法を記しておきます。
経緯
chart.jsでグラフを作るために記事を参考に試したところエラーが発生した。
原因
window.draw_graph = -> ctx = document.getElementById("myChart").getContext('2d') barNum = 6 labels = new Array(barNum) bgColors = new Array(barNum) bdColors = new Array(barNum) for i in [0...barNum] labels[i] = 'data' + i bgColors[i] = 'rgba(75, 192, 192, 0.2)' bdColors[i] = 'rgba(75, 192, 192, 1)' myChart = new Chart(ctx, { type: 'bar', data: { labels: labels datasets: [{ label: '# of Votes', data: gon.data, backgroundColor: bgColors, borderColor: bdColors, borderWidth: 1 }] }, options: { scales: { yAxes: [{ ticks: { beginAtZero:true } }] } } })
原因
インデントのズレなど構文が間違っているとなるようです。
解決法
Rubymineの自動フォーマット(⌥+⌘+Lキー)でインデント修正して解決しました。
window.draw_graph = -> ctx = document.getElementById("myChart").getContext('2d') barNum = 6 labels = new Array(barNum) bgColors = new Array(barNum) bdColors = new Array(barNum) for i in [0...barNum] labels[i] = 'data' + i bgColors[i] = 'rgba(75, 192, 192, 0.2)' bdColors[i] = 'rgba(75, 192, 192, 1)' myChart = new Chart(ctx, { type: 'bar', data: { labels: labels datasets: [{ label: '# of Votes', data: gon.data, backgroundColor: bgColors, borderColor: bdColors, borderWidth: 1 }] }, options: { scales: { yAxes: [{ ticks: { beginAtZero: true } }] } } })
よくあるエラーらしいので、遭遇しても落ち着いて対処しよう
NoMethodError in ***Controller#show(エラー対処備忘録)
NoMethodError in ***Controller#show
undefined method `***’ for nil:NilClass
28 29 30 31 32 33 |
def show
@macs = @user.macs.page(params[:page]).per(8)
end
def update
|
ハマってしまったので、同じことを繰り返さないために。
経緯
<span class="btn-sticky">すべての更新、作成日時を表示,非表示</span> <% if @user.macs.any? %> <% @user.macs.each do |mac| %> <section class="panel"> <div class="panel-left"> <h2>目標:<%= mac.measurable %></h2> <h2>ゴールまでのプロセス<br><%= mac.actionable %></h2> <h2>目標達成が価値観に基づいているか?<br><%= mac.competent %></h2> <li><h3>更新日時:<%= mac.updated_at.to_s(:datetime_jp) %></h3> <h3>作成日時:<%= mac.created_at.to_s(:datetime_jp) %></h3></li> </ul> </div> <div class="panel-right"> <%= link_to(content_tag(:i, '', class: "fas fa-trash-alt fa-3x faa-horizontal animated-hover fa-pull-right", style: "color: rgb(80,80,80);"), mac_path(mac.id), method: :delete, data: {confirm: "本当に削除しますか?"}) %> <%= link_to(content_tag(:i, '', class: "fas fa-edit fa-3x faa-vertical animated-hover fa-pull-right", style: "color: rgb(80,80,80);"), edit_mac_path(mac.id)) %> </section> <% end %> <% end %> <%= render 'shared/script' %>
user_idに紐付いたmacモデルのもの(:measurable, :actionable, :competent)を繰り返しで表示させたかった。
原因
***_controller.rb
def show @macs = @user.macs.page(params[:page]).per(8) end
@userをmacs_controller.rbに定義していなかったためnilになった。
機能がほぼ同じだったので他のコントローラーからコピペしたせいで
リファクタリングでprivate にあった@user = User.find(params[:id])
を見落としていたため。
解決法
***_controller.rb
def show @user = User.find(params[:id]) @macs = @user.macs.page(params[:page]).per(8) end
@user = User.find(params[:id])
Rubyまとめex(標準入力)
Rubyで標準入力から値を受け取る方法 2022年版
はじめに
この記事は、プログラミング問題などでよく見られる、標準入力から値を受け取る方法をまとめたものです。
前提
使用する言語はRubyです。
一行に1要素のとき(文字列)
標準入力
Ruby
標準入力を受け取るコード
string = gets
出力するコード
p string
出力結果
"Ruby"
一行に半角スペース刻みで要素があるとき(文字列)
標準入力
Ruby PHP Python
標準入力を受け取るコード
strings = gets.split
出力するコード
p strings
出力結果
["Ruby", "PHP", "Python"]
splitを使用することで、3つの要素をそれぞれ別のものとして配列に格納しています。
※splitの使い方
split(‘ ‘)としている記事などもありますが、
半角スペース刻みの入力値の場合は引数(‘ ‘)を指定しなくても問題ありません。
つまりsplit(‘ ‘) ≒ split (※半角スペース刻みの入力値のときのみです)
複数行に一つずつ要素が存在するとき(文字列)
標準入力
Ruby
PHP
Python
標準入力を受け取るコード
strings = readlines.map(&:chomp)
#またはこちら(パフォーマンス的に推奨)
strings = readlines(chomp: true)
出力するコード
p strings
出力結果
["Ruby", "PHP", "Python"]
複数行に半角スペース付きで要素が複数存在するとき(文字列)
標準入力
Ruby PHP Python
Java C# C++
標準入力を受け取るコード
strings = readlines.map{ |i| i.split.map(&:chomp)}
# またはこちら(推奨)
strings = readlines.map(&:split)
出力するコード
p strings
出力結果
[["Ruby", "PHP", "Python"], ["Java", "C#", "C++"]]
標準入力
Ruby PHP Python
Java C# C++
入力値が数値の場合
一行に数値がひとつのとき
標準入力
123
標準入力を受け取るコード
number = gets.to_i
出力するコード
p number
出力結果
123
一行に半角スペース刻みで数値があるとき
標準入力
1 2 3
標準入力を受け取るコード
numbers = gets.split.map(&:to_i)
出力するコード
p numbers
出力結果
[1, 2, 3]
複数行に一つずつ数値が存在するとき
標準入力
1
2
3
標準入力を受け取るコード
numbers = readlines.map(&:to_i)
出力するコード
p numbers
出力結果
[1, 2, 3]
複数行に半角スペース刻みで要素が存在するとき
標準入力
1 2 3
4 5 6
標準入力を受け取るコード
numbers = readlines.map{ |i| i.split.map(&:to_i) }
出力するコード
p numbers
出力結果
[[1, 2, 3], [4, 5, 6]]
PendingMigrationError(エラー対処)
ActiveRecord::PendingMigrationError
Migrations are pending. To resolve this issue, run: bin/rails db:migrate RAILS_ENV=development
574 575 576 577 578 579 |
# Raises <tt>ActiveRecord::PendingMigrationError</tt> error if any migrations are pending.
def check_pending!(connection = Base.connection)
raise ActiveRecord::PendingMigrationError if ActiveRecord::Migrator.needs_migration?(connection)
end
def load_schema_if_pending!
|
解決方法(マイグレートする)
docker-compose exec web bundle exec rake db:migrate