Programming note」カテゴリーアーカイブ

paizaLvアップ問題と解答(標準出力7)Ruby

※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。

詳しくはコチラ

なるべくわかりやすい解説を付けました。

問題1 1 行または 2 行の出力 (paizaランク D 相当)

数値 N (N = 1 または 2) が入力されます。N = 1 の場合は 1 を、N = 2 の場合は 1 と 2 を改行区切りで出力してください。

入力される値
N

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
答えの数値を出力してください。

* N = 1 のとき

1

* N = 2 のとき

1
2

末尾に改行を入れ、余計な文字、空行を含んではいけません。

条件
すべてのテストケースにおいて、以下の条件をみたします。

* N = 1 または 2

入力例1
1
出力例1
1
入力例2
2
出力例2
1
2

解答

# 標準入力値を受け取り変数に代入
n = gets.to_i
# 1からnまで1行ずつ出力する
puts [*1..n]

問題2  数行の出力 (paizaランク D 相当)

数値 N が入力されます。1 から N までの数値をすべて、改行区切りで出力してください。

入力される値
N

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
答えの数値を出力してください。

1
2
...
N

末尾に改行を入れ、余計な文字、空行を含んではいけません。

条件
すべてのテストケースにおいて、以下の条件をみたします。

* 1 ≦ N ≦ 5

入力例1
1
出力例1
1
入力例2
2
出力例2
1
2

解答

# 標準入力値を受け取り変数に代入
n = gets.to_i
# 1からnまで1行ずつ出力する
puts [*1..n]

paizaLvアップ問題と解答(標準出力6)Ruby

※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。

詳しくはコチラ

なるべくわかりやすい解説を付けました。

問題4 入力された 10 個の文字列を出力 (paizaランク D 相当)

10 個の文字列 S_1, S_2, S_3, …, S_10 が改行区切りで与えられます。
これらの文字列をすべて、半角スペース区切りで出力してください。

入力される値
S_1
S_2
S_3
...
S_10

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
答えの文字列を 1 行で出力してください。

S_1 S_2 S_3 ... S_10

末尾に改行を入れ、余計な文字、空行を含んではいけません。

条件
すべてのテストケースにおいて、以下の条件をみたします。

* S_i の長さは 1 以上 10 以下
* S_i は英小文字列

入力例1
q
bpdi
u
ky
meqt
rrnc
co
jjw
e
fwio
出力例1
q bpdi u ky meqt rrnc co jjw e fwio

解答 複数行の入力値を受け取り半角スペースを間に挟んで結合して出力する。

strings = readlines.map(&:chomp)
puts strings.join(' ')

FINAL問題【文字列の出力】入力された 10 個の文字列を出力 (paizaランク D 相当)

10 個の文字列 S_1, S_2, S_3, …, S_10 が半角スペース区切りで与えられます。
これらの文字列をすべて、改行区切りで出力してください。

入力される値
S_1 S_2 S_3 ... S_10

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
答えの文字列を 10 行で出力してください。

S_1
S_2
S_3
...
S_10

末尾に改行を入れ、余計な文字、空行を含んではいけません。

条件
すべてのテストケースにおいて、以下の条件をみたします。

* S_i の長さは 1 以上 1,000 以下
* S_i は英小文字列

入力例1
a a a a a a a a a a
出力例1
a
a
a
a
a
a
a
a
a
a

解答  半角スペース刻みの入力値を受け取り、出力する。

strings = gets.split
puts strings

paizaLvアップ問題と解答(標準出力5)Ruby

※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。

詳しくはコチラ

なるべくわかりやすい解説を付けました。

問題1 1 つの文字列を出力 (paizaランク D 相当)

文字列 paiza を出力してください。

入力される値
入力はありません。

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
答えの文字列を 1 行で出力してください。

paiza

末尾に改行を入れ、余計な文字、空行を含んではいけません。

条件
なし

解答   putsで文字列を出力できる

puts 'paiza'

問題2 2 つの文字列を出力 (paizaランク D 相当)

文字列 paizalearning を半角スペース区切りで出力してください。

入力される値
入力はありません。

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
答えの文字列を 1 行で出力してください。

paiza learning

末尾に改行を入れ、余計な文字、空行を含んではいけません。

条件
なし

解答  配列を文字列として作成

puts %w[paiza learning].join(' ')

または

puts ["paiza", "learning"].join(' ')

問題3 入力された 2 つの文字列を出力 (paizaランク D 相当)

2 つの文字列 S, T が入力されます。S, T を改行区切りで出力してください。

入力される値
S
T

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
答えの文字列を 2 行で出力してください。

S
T

末尾に改行を入れ、余計な文字、空行を含んではいけません。

条件
すべてのテストケースにおいて、以下の条件をみたします。

* S, T の長さは 1 以上 10 以下
* S, T は英小文字列

入力例1
paiza
learning
出力例1
paiza
learning

解答  複数行の文字列の入力値を受け取り出力する。

strings = readlines.map(&:chomp)
puts strings

paizaLvアップ問題と解答(標準出力4)Ruby

※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。

詳しくはコチラ

なるべくわかりやすい解説を付けました。

問題4 10 個の数値を出力 (paizaランク D 相当)

1 から 10 までの数値をすべて、半角スペース区切りで出力してください。
ただし、末尾に半角スペースを出力してはいけません。

入力される値
入力はありません。

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
答えの数値を 1 行で出力してください。

1 2 3 4 5 6 7 8 9 10

末尾に改行を入れ、余計な文字、空行を含んではいけません。

条件
なし

解答

puts %W[1 2 3 4 5 6 7 8 9 10].join(' ')

または

puts [*1..10].join(' ')

FINAL問題【半角スペース区切りの出力】1,000 個の数値を出力 (paizaランク D 相当)

1 から 1,000 までの数値をすべて、半角スペース区切りで出力してください。
ただし、末尾に半角スペースを出力してはいけません。

入力される値
入力はありません。

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
答えの数値を 1 行で出力してください。

1 2 3 4 5 6 7 8 9 10 11 12 13 ... 999 1000

末尾に改行を入れ、余計な文字、空行を含んではいけません。

条件
なし

解答 1から1000までの配列を作成してから半角スペースを間に挟んで結合して出力する

puts [*1..1000 ].join(' ')

paizaLvアップ問題と解答(標準出力3)Ruby

※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。

詳しくはコチラ

なるべくわかりやすい解説を付けました。

問題1 2 つの数値を出力 (paizaランク D 相当)

2 つの 1 を半角スペース区切りで出力してください。

入力される値
入力はありません。

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
答えの数値を 1 行で出力してください。

1 1

末尾に改行を入れ、余計な文字、空行を含んではいけません。

条件
なし

解答 文字列+空白と文字列を足す

puts "1 " + "1"

または  配列を作成してから.joinで半角スペースを間に挟んでつなぎあわせる

puts [1,1].join(' ')

問題2 3 つの数値を出力 (paizaランク D 相当)

3 つの数値 8, 1, 3 を半角スペース区切りで出力してください。

入力される値
入力はありません。

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
答えの数値を 1 行で出力してください。

8 1 3

末尾に改行を入れ、余計な文字、空行を含んではいけません。

条件
なし

解答

puts "8 " + "1 " + "3"

または

puts [8,1,3].join(' ')

または

print [8,1,3].join(' ')

問題3 10 個の数値を出力 (末尾に半角スペース有) (paizaランク D 相当)

1 から 10 までの数値をすべて、出力してください。
ただし、数値の後には必ず半角スペースを出力してください。

入力される値
入力はありません。

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
答えの数値を 1 行で出力してください。

1 2 3 4 5 6 7 8 9 10

末尾に改行を入れ、余計な文字、空行を含んではいけません。

条件
なし

解答 %Wで配列を作成して半角スペースを間に挟んで結合して、出力する

puts %W[1 2 3 4 5 6 7 8 9 10 ].join(' ')

または 1から10までの配列を作成して、半角スペースを間に挟んで結合して、出力する

puts [*1..10 ].join(' ')

paizaLvアップ問題と解答(標準出力2)Ruby

※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。

詳しくはコチラ

なるべくわかりやすい解説を付けました。

問題4 10 行の出力 (paizaランク D 相当)

以下の 10 個の整数を改行区切りで出力してください。

813, 1, 2, 923874, 23648, 782356, 3256, 2342, 24324, 112
入力される値
ありません。

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
答えの数値を 10 行で出力してください。また、出力の末尾には改行を入れてください。

813
1
2
923874
23648
782356
3256
2342
24324
112
条件
なし

解答 または  %wで文字列からなる配列を作成して出力する

puts %w(813 1 2 923874 23648 782356 3256 2342 24324 112)

FINAL問題【改行あり出力】1,000 行の出力 (paizaランク D 相当)

1 以上 1,000 以下の整数を昇順で、すべて改行区切りで出力してください。

入力される値
ありません。

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
答えの数値を 1,000 行で出力してください。また、出力の末尾には改行を入れてください。
条件
なし

解答 *1..1000で1から1000までの配列を作成する

puts *1..1000

または [*1..1000]で1から1000までの配列を作成する

puts [*1..1000]

paizaLvアップ問題と解答(標準出力1)Ruby

※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。

詳しくはコチラ

なるべくわかりやすい解説を付けました。

問題1 1 行で整数 813 を出力してください。

入力される値
ありません。

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
整数 813 を出力してください。また、出力の末尾には改行を入れてください。

813

 

条件
 なし

解答

puts 813

または

p 813

問題2 2 行の出力 (paizaランク D 相当)

整数 8 と 13 をこの順番で出力してください。
また、整数 8 を出力した後と 13 を出力した後に改行をしてください。

入力される値
ありません。

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
答えの数値を 2 行で出力してください。また、出力の末尾には改行を入れてください。

8
13

 

条件
なし

解答

puts 8
puts 13

問題3 3 行の出力 (paizaランク D 相当)

整数 8, 1, 3 をこの順に改行区切りで出力してください。

入力される値

ありません。

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
答えの数値を 3 行で出力してください。また、出力の末尾には改行を入れてください。

8
1
3

 

条件
なし

解答

puts 8
puts 1
puts 3

または  %wで文字列からなる配列を作成して、出力する

puts %w[8 1 3]

またはコチラ

puts %w(8 1 3)

Paizaレベルアップ問題集について

Paiza運営事務局に↓のうち、どこまで掲載してよいか問い合わせた結果

・問題文や問題に付随する図や表などの画像
・期待する出力
・入力される値
・条件
・入力例や出力例

“レベルアップ問題集では、それらの掲載につきまして全て掲載可能です。”

という回答をいただきました。

ただし解答コードや解説そのままは規約によりよくないため、オリジナルのコードを書くことに注意することと

スキルチェック問題は全てNGなので注意すること

以上のことに注意して掲載していきます。

Ruby逆引き・計算・基礎(プログラミング問題用・自分用)

1:1 + 2 + 3 + 4 + 5 = 15のように1 + 2 + 3 ・・・・・・+n の合計が知りたいとき

入力例1
5
出力例1 15
入力例2

10

出力例2

55

解答

n = gets.to_i
r = (1..n) 
puts r.sum
# 55

こちらでもできる(-や*で引き算や掛け算もできる)

n = gets.to_i
r = (1..n)
puts r.inject(:+)
#55

2 与えられた整数の中にnの倍数がいくつあるか知りたいとき

入力例1
2
1 6 9
出力例1
1

解答 select { |i| i % n == 0 }で倍数がわかる

n = gets.to_i
a = gets.split(' ').map(&:to_i).select { |i| i % n == 0 }
puts a.length
# 1

3 数列のn番目からm番目までの和を計算したい時

1行目に整数l,n,mが与えられます。
2行目に長さlの数列aryが与えられます。
数列のn番目からm番目までの和を計算し、出力してください

入力値

5 2 5
4 7 6 2 3 

期待する出力

18

解答  ary[n – 1 .. m – 1]で数列の2番目と5番目の数(7,6,2,3)を取りsumで合計する。

l,n,m = gets.split(' ').map(&:to_i) 
ary = gets.split(' ').map(&:to_i) 

if n == m
 puts ary[n - 1] 
else
 puts ary[n - 1 .. m - 1].sum 
end
# 18

4 等差数列について知りたいとき

5 15 25 35 45 55 65 75 85 95

最初の数字が5で、10ずつ増加しています。
一般的にこれを初項5、公差10の等差数列といいます。
初項mが与えられ、公差nが与えられるので20番目までの数字をスペース区切りで出力するプログラムを作成してください。

入力例

5 4
出力例
5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69 73 77 81

解答  m.step(by: n).take(20)でできる。

  1. 与えられる入力値は2つなので、変数2つに多重代入する。(a = 5, b=4)
  2. 等差数列には.stepを使ったほうが、短く書くことができる。
  3. .take(20)で配列の先頭から20個を配列として返して
  4. .join(‘ ‘)で半角スペース刻みで出力できます。
m, n = gets.split.map(&:to_i) 
puts m.step(by: n).take(20).join(" ")

AWS+Route53+お名前.com+LBでHTTP→HTTPSにするには?

1から続きます

目標:AWS+Route53+お名前.com+LBでHTTPSにする

ACMにて発行済みになったのを確認したところからスタート

1:お名前.comにてネームサーバーを変更

①お名前.com上のタブのドメインを選択

②ネームサーバーのリンクをクリック

2:ネームサーバーの選択のその他を選択

3:別タブでRoute53のタイプNSの4つをそれぞれコピーする

4:コピーしたものを貼り付けて確認をクリック

 

5:ターミナルにてdigコマンドで確かめる

dig 自分のドメイン名 NS +short
       ↑お名前.comで取得したドメイン名

dnsv.jv(お名前.comのネームサーバー)から先程自分で設定したネームサーバー(awsdns)に変わっているのを確認します。

反映まで時間がかかりますのでご注意を・・・

6:ロードバランサーの設定

EC2を検索してEC2へ

7:ナビゲーションペイン(左のサイドバー)からロードバランサーをクリックしてロードバランサーの作成をクリック

8:Application Load Balancerの作成をクリック

9:名前は任意で自分がわかりやすい名前をつけます

 

10:”リスナーを追加”を押してHTTPSを追加します

11:VPCは自分で作成したVPCを、アベイラビリティーゾーンには、EC2のインスタンスが所属しているアベイラビリティーゾーンを含む2つを選択します。(今回はap-northeast-1aと1cを選択。2つない場合は作成します)

12:セキュリティ設定の構成をクリック

13:ACMから証明書を選択するにチェックを入れてセキュリティーグループの設定をクリック

AWS Certificate Manager証明書が作成されていないとできないので注意です。

14:新しいセキュリティーグループを作成するを選んでHTTPとHTTPSを加えてルーティングの設定をクリック

15:名前を入力してターゲットの登録をクリック

16:インスタンスを選んで登録済みに追加して確認をクリック

17:作成をクリック

18:ロードバランサーが作成されたらOK

19:Route53 へ行きホストゾーンをクリック

20:ドメインを選択して詳細を表示をクリック

21:レコードAにチェックしてレコードを編集をクリック

(右側のナビゲーションペインが見つかりづらいので注意)

 

22:レコードを編集します

①トラフィックのルーティング先のエイリアスのスイッチを右側にします

②エンドポイントを選択の部分をApplication Load BalancerとCrassic Load Balancerへのエイリアス

③リージョンを選択の部分をアジアパシフィック東京

④先程登録したロードバランサーを選択

⑤保存をクリック

https://ドメイン名でアクセスしてサイトが表示されたらOKです!

http://ドメイン名からhttps://ドメイン名に自動でリダイレクトさせる設定を次回行います。

503Bad Gatewayが出た場合

15:で作ったターゲットグループ↓を使用する

自分で作成したロードバランサーを選択してHTTPS443の編集をクリック

ターゲットグループの部分に15:で作ったターゲットグループを設定する。

変更内容を保存してhttps://ドメイン名でアクセスしてサイトが表示されたらOKです!

続く