Swift/C版のベースとなる実装的に思っていただければ幸いです。特殊な説明以外はSwiftに回します。
あと、私家版なのでところどころ初心者向けでない部分ありますがご了承ください(本家実装リンクにあるRubyはわかりやすい実装です)
実装リンク集 https://qiita.com/drken/items/6edb1c0542d4c3b7179c
問題一覧 https://abs.contest.atcoder.jp/assignments
解答
例題 PracticeA
0.rb
#!/usr/bin/ruby
a=gets.to_i
b,c=gets.split.map &:to_i
d=gets.chomp
puts '%d %s'%[a+b+c,d]
別解
ddは$<.read
と同じ意味で、全読みです。1行ずつ読むのが面倒かつまとめて読んで大丈夫な場合は使うことがあります。
0_1.rb
#!/usr/bin/ruby
a,b,c,d=`dd`.split
puts '%d %s'%[a.to_i+b.to_i+c.to_i,d]
第1問 ABC086A Product
1.rb
#!/usr/bin/ruby
a,b=gets.split.map &:to_i
puts a*b%2>0?"Odd":"Even"
第2問 ABC081A Placing Marbles
数値出力はpでok.
2.rb
#!/usr/bin/ruby
p gets.count('1')
別解
全読みして、0の文字コード*3と改行の文字コードの和を引く。
2.rb
#!/usr/bin/ruby
p`dd`.sum-154
第3問 ABC081B Shift only
2進文字列にして、サイズから「1の逆インデックス-1」を引く。~n
は-n-1
と同義です。
3.rb
#!/usr/bin/ruby
gets;p gets.split.map{|e|s='%b'%e;s.size+~s.rindex(?1)}.min
第4問 ABC087B Coins
4.rb
#!/usr/bin/ruby
r=0
a,b,c,x=$<.map &:to_i
(0..x/500).each{|i|(0..(x-500*i)/100).each{|j|
k=x-500*i-100*j
r+=1 if k%50==0&&c>=k/50&&a>=i&&b>=j
}}
p r
第5問 ABC083B Some Sums
10で順番に割らなくても、文字列を数字の配列にすればいいですよね
5.rb
#!/usr/bin/ruby
n,a,b=gets.split.map &:to_i
p (1..n).select{|i|k=i.to_s.bytes.map{|b|b-48}.reduce(:+);a<=k&&k<=b}.reduce(:+)
第6問 ABC088B Card Game for Two
6.rb
#!/usr/bin/ruby
gets
a=gets.split.map(&:to_i).sort_by(&:-@)
r=0
a.each_with_index{|e,i|r+=e*(-1)**i}
p r
第7問 ABC085B Kagami Mochi
7.rb
#!/usr/bin/ruby
gets;p$<.to_a.uniq.size
第8問 ABC085C Otoshidama
8.rb
#!/usr/bin/ruby
n,y=gets.split.map &:to_i
(0..n).each{|i|(0..n-i).each{|j|
k=n-i-j
if i*1000+j*5000+k*10000==y
puts [k,j,i]*' '
exit
end
}}
puts '-1 -1 -1'
第9問 ABC049C Daydream
9.rb
#!/usr/bin/ruby
T=%w(dream dreamer erase eraser).map(&:reverse)
s=gets.chomp.reverse
c=0
while c<s.size
k=T.find{|e|s[c,e.size]==e}
if !k
puts :NO
exit
end
c+=k.size
end
puts :YES
第10問 ABC086C Traveling
10.rb
#!/usr/bin/ruby
gets;puts ([[0,0,0]]+$<.map{|e|e.split.map &:to_i}).each_cons(2).all?{|e,f|
t=f[0]-e[0];x=f[1]-e[1];y=f[2]-e[2]
x+y<=t && (t-x-y)%2<1
} ? :Yes : :No