解答例¶
課題1
n = gets.to_i for i in 0..n-1 (n-i).times do print " " end (i*2+1).times do print "*" end puts end課題2
def myprime (n) i = 2 until i*i > n return false if n%i == 0 i += 1 end return true end puts (if myprime gets.to_i then "yes" else "no" end)課題3
def myprime (n) raise RuntimeError if n < 2 i = 2 until i*i > n return false if n%i == 0 i += 1 end return true end print "2以上の整数を入れてください:" begin puts (if myprime gets.to_i then "yes" else "no" end) rescue RuntimeError print "2以上の整数だと言ってるでしょうが!:" retry end課題4
x = [] loop do print '数値? ' a = gets.to_i break if a == 0 x.push(a) end while x.length > 0 do puts x.pop end課題5
dictionary = { 'dog' => '犬', 'cat' => '猫' } loop do print '英語:' x = gets.chomp if dictionary[x] puts "日本語:#{dictionary[x]}" else print "#{x}の日本語訳を教えてください:" y = gets.chomp dictionary[x] = y end end課題6
longest = '' IO.foreach('words.txt') do |line| if longest.length < line.length longest = line end end puts longest課題7
def arraycalc(x, y) result = [] while x.length > 0 result << (yield x.shift, y.shift) end result end課題8
class Account attr_reader :balance def initialize @balance = 0 end def deposit(n) @balance += n end def withdraw(n) if @balance >= n @balance -= n true # 引き出し成功 else puts "残高不足です。" false # 引き出し失敗 end end def transfer(x, n) if withdraw(n) # 自分の口座から引き出せれば x.deposit(n) # 相手の口座に入金する end end end課題9
class Student # 同じ名前のクラス宣言は、追加されていく def affiliation university + faculty end end課題11
root@c65985cfc603:/home/school# rails generate model Course name:string credit:integer compulsory:boolean invoke active_record create db/migrate/20221201155632_create_courses.rb create app/models/course.rb invoke test_unit create test/models/course_test.rb create test/fixtures/courses.yml root@c65985cfc603:/home/school# rails db:migrate == 20221201155632 CreateCourses: migrating ==================================== -- create_table(:courses) -> 0.0117s == 20221201155632 CreateCourses: migrated (0.0117s) =========================== root@c65985cfc603:/home/school# rails console Loading development environment (Rails 7.0.4) irb(main):001:0> x = Course.new(name: '体育1', credit: 1, compulsory: true) => #<Course:0x0000ffff7b4d9088 id: nil, name: "体育1", credit: 1, compulsory: true, created_at: nil, updated_at: nil> irb(main):002:0> x.save TRANSACTION (0.2ms) begin transaction Course Create (28.7ms) INSERT INTO "courses" ("name", "credit", "compulsory", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?) [["name", "体育1"], ["credit", 1], ["compulsory", 1], ["created_at", "2022-12-01 15:57:46.757863"], ["updated_at", "2022-12-01 15:57:46.757863"]] TRANSACTION (14.6ms) commit transaction => true irb(main):003:0> x = Course.new(name: 'プログラミング言語論', credit: 2, compulsory: false) => #<Course:0x0000ffff7b6787b8 id: nil, name: "プログラミング言語論", credit: 2, compulsory: false, created_at: nil,... irb(main):004:0> x.save TRANSACTION (0.1ms) begin transaction Course Create (41.2ms) INSERT INTO "courses" ("name", "credit", "compulsory", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?) [["name", "プログラミング言語論"], ["credit", 2], ["compulsory", 0], ["created_at", "2022-12-01 15:58:40.904291"], ["updated_at", "2022-12-01 15:58:40.904291"]] TRANSACTION (12.4ms) commit transaction => true課題12
root@c65985cfc603:/home/school# rails console Loading development environment (Rails 7.0.4) irb(main):001:0> x = Faculty.new(name: '環境情報') => #<Faculty:0x0000ffffae76c4c0 id: nil, name: "環境情報", created_at: nil, updated_at: nil> irb(main):002:0> x.save TRANSACTION (0.2ms) begin transaction Faculty Create (31.1ms) INSERT INTO "faculties" ("name", "created_at", "updated_at") VALUES (?, ?, ?) [["name", "環境情報"], ["created_at", "2022-12-01 16:05:32.549627"], ["updated_at", "2022-12-01 16:05:32.549627"]] TRANSACTION (13.5ms) commit transaction => true irb(main):003:0> y = Student.new(name: '花子', faculty_id: x.id, grade: 1) => #<Student:0x0000ffffae15d778 id: nil, name: "花子", faculty_id: 2, grade: 1, created_at: nil, updated_at: nil> irb(main):004:0> y.save TRANSACTION (0.0ms) begin transaction Faculty Load (1.8ms) SELECT "faculties".* FROM "faculties" WHERE "faculties"."id" = ? LIMIT ? [["id", 2], ["LIMIT", 1]] Student Create (13.4ms) INSERT INTO "students" ("name", "faculty_id", "grade", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?) [["name", "花子"], ["faculty_id", 2], ["grade", 1], ["created_at", "2022-12-01 16:05:54.003327"], ["updated_at", "2022-12-01 16:05:54.003327"]] TRANSACTION (7.4ms) commit transaction => true irb(main):005:0> y = Student.new(name: '一郎', faculty_id: x.id, grade: 2) => #<Student:0x0000ffffae1f5d48 id: nil, name: "一郎", faculty_id: 2, grade: 2, created_at: nil, updated_at: nil> irb(main):006:0> y.save TRANSACTION (0.3ms) begin transaction Faculty Load (17.3ms) SELECT "faculties".* FROM "faculties" WHERE "faculties"."id" = ? LIMIT ? [["id", 2], ["LIMIT", 1]] Student Create (22.4ms) INSERT INTO "students" ("name", "faculty_id", "grade", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?) [["name", "一郎"], ["faculty_id", 2], ["grade", 2], ["created_at", "2022-12-01 16:06:15.842145"], ["updated_at", "2022-12-01 16:06:15.842145"]] TRANSACTION (12.0ms) commit transaction => true irb(main):007:0> x.students Student Load (12.5ms) SELECT "students".* FROM "students" WHERE "students"."faculty_id" = ? [["faculty_id", 2]] => [#<Student:0x0000ffffae248570 id: 2, name: "花子", faculty_id: 2, grade: 1, created_at: Thu, 01 Dec 2022 16:05:54.003327000 UTC +00:00, updated_at: Thu, 01 Dec 2022 16:05:54.003327000 UTC +00:00>, #<Student:0x0000ffffae24feb0 id: 3, name: "一郎", faculty_id: 2, grade: 2, created_at: Thu, 01 Dec 2022 16:06:15.842145000 UTC +00:00, updated_at: Thu, 01 Dec 2022 16:06:15.842145000 UTC +00:00>]課題13
<!DOCTYPE html> <html> <head> <title>School</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <%= csrf_meta_tags %> <%= csp_meta_tag %> <%= stylesheet_link_tag "application", "data-turbo-track": "reload" %> <%= javascript_importmap_tags %> </head> <body> <%= yield %> <br><%= image_tag "http://www.sfc.keio.ac.jp/img/logo.png", width: 300 %> </body> </html>課題14
<div id="<%= dom_id student %>"> <p> <strong>Name:</strong> <%= student.name %> </p> <p> <strong>Faculty:</strong> <%= student.faculty.name %> </p> <p> <strong>Grade:</strong> <%= student.grade %> </p> </div>