(備忘録)AtCoderをやって11

問題

A, B, C からなる長さ N の文字列 S と、1 以上 N 以下の整数 K が与えられます。 文字列 S の K 文字目を小文字に書き換え、新しくできた S を出力してください。

atcoder.jp

自分の回答

絶対にもっといい回答あると思ったけど思い付かなかった

n, k = gets.split.map(&:to_i)
s = gets.chomp.to_s
a = s.slice!(k-1)
puts s.insert(k-1, a.downcase)

その他の回答

単純にs[k-1]で指定箇所の文字取ってこれるからそれでいい訳ですね

n,k = gets.split.map &:to_i
s = gets.chomp
s[k-1] = s[k-1].downcase
puts s

問題

下記参照

atcoder.jp

自分の回答

無理やり通したけどめっちゃ汚いコード・・・

a = gets.chomp
b = a.slice!(2..3).to_i
a = a.to_i

if 1 <= a && a <= 12 && 1 <= b && b <= 12
  puts "AMBIGUOUS"
elsif 1 <= b && b <= 12
  puts "YYMM"
elsif 1 <= a && a <= 12
  puts "MMYY"
else
  puts "NA"
end

その他の回答

意外と愚直にやる方法しかなさそう?大きな変更はないですが、条件の部分を変数に代入して少し見やすくしたパターン

a = gets.chomp
b = a.slice!(2..3).to_i
a = a.to_i
x = 1 <= a && a <= 12
y = 1 <= b && b <= 12

if x && y
  puts "AMBIGUOUS"
elsif y
  puts "YYMM"
elsif x
  puts "MMYY"
else
  puts "NA"
end