Cyberについて
AtCoderの新言語アップデートで使えるようになりました。
個人的な感想ですが、Pythonのような書き心地にC++並の速度が出ます。
↓読んでください。
公式サイト 公式ドキュメント
AtCoder Beginners Selectionの11問をCyberで解いた
まず最初に一つ言っておきます。
int型は使えない→number型を使う
入力で渡されるrawstring型からint型やnumber型に直接変換ができない
ということで、rawstring型などの文字列型からnumber型に変換する関数を作りました。
ほとんど使われていない言語なので、シンタックスハイライトが効きません↓
-- string型をnumber型に変換。
func ston(s):
l = s.len()
n = 0
for 0..l each i:
n = n * 10 + number(s[i])
return n
Welcome to AtCoder
-- string型をnumber型に変換。
func ston(s):
l = s.len()
n = 0
for 0..l each i:
n = n * 10 + number(s[i])
return n
a = ston(getInput())
t = getInput().split(' ')
b = ston(t[0])
c = ston(t[1])
prints '{a + b + c} '
print getInput()
printsは末尾に改行をしない出力です。
多分ですが、以下のように、formatの中に文字列を入れると出力が変わります。
print '{getInput()}'
abcde
rawstring (5)
Product
-- string型をnumber型に変換。
func ston(s):
l = s.len()
n = 0
for 0..l each i:
n = n * 10 + number(s[i])
return n
t = getInput().split(' ')
a = ston(t[0])
b = ston(t[1])
if a * b % 2 == 0:
print 'Even'
else:
print 'Odd'
Placing Marbles
-- string型をnumber型に変換。
func ston(s):
l = s.len()
n = 0
for 0..l each i:
n = n * 10 + number(s[i])
return n
t = getInput()
c = 0
if t[0] == '1':
c += 1
if t[1] == '1':
c += 1
if t[2] == '1':
c += 1
print '{c}'
文字列についてはPythonとほぼ同じです。
Shift Only
-- string型をnumber型に変換。
func ston(s):
l = s.len()
n = 0
for 0..l each i:
n = n * 10 + number(s[i])
return n
-- string型をnumber型のlistに変換。
func stoln(s):
a = []
for s.split(' ') each i:
a.append ston(i)
return a
n = ston(getInput())
a = stoln(getInput())
ans = 30
for a each i:
c = 0
while i % 2 == 0:
c += 1
i /= 2
if c < ans:
ans = c
print ans
除算はPythonとは違い、/ (スラッシュ1つ)です。
Coins
-- string型をnumber型に変換。
func ston(s):
l = s.len()
n = 0
for 0..l each i:
n = n * 10 + number(s[i])
return n
a = ston(getInput())
b = ston(getInput())
c = ston(getInput())
x = ston(getInput())
ans = 0
for 0..a+1 each i:
for 0..b+1 each j:
for 0..c+1 each k:
if 500 * i + 100 * j + 50 * k == x:
ans += 1
print ans
Some Sums
-- string型をnumber型に変換。
func ston(s):
l = s.len()
n = 0
for 0..l each i:
n = n * 10 + number(s[i])
return n
t = getInput().split(' ')
n = ston(t[0])
a = ston(t[1])
b = ston(t[2])
c = 0
for 1..n+1 each i:
j = i
s = 0
while j > 0:
s += j % 10
j /= 10
j = number(int(j))
if a <= s and s <= b:
c += i
print c
切り捨てがよく分からなかったので、j = number(int(j))
としました。
Card Game for Two
-- string型をnumber型に変換。
func ston(s):
l = s.len()
n = 0
for 0..l each i:
n = n * 10 + number(s[i])
return n
-- string型をnumber型のlistに変換。
func stoln(s):
a = []
for s.split(' ') each i:
a.append ston(i)
return a
n = ston(getInput())
a = stoln(getInput())
a.sort((i, j) => i > j)
x = 0
for 0..n each i:
if i % 2 == 0:
x += a[i]
else:
x -= a[i]
print x
昇順ソート…a.sort((i, j) => i < j)
降順ソート…a.sort((i, j) => i > j)
Kagami Mochi
-- string型をnumber型に変換。
func ston(s):
l = s.len()
n = 0
for 0..l each i:
n = n * 10 + number(s[i])
return n
-- string型をnumber型のlistに変換。
func stoln(s):
a = []
for s.split(' ') each i:
a.append ston(i)
return a
cnt = []
for 0..101 each i:
cnt.append 0
n = ston(getInput())
for 0..n each i:
a = ston(getInput())
cnt[a] += 1
ans = 0
for 0..101 each i:
if cnt[i] > 0:
ans += 1
print ans
Otoshidama
-- string型をnumber型に変換。
func ston(s):
l = s.len()
n = 0
for 0..l each i:
n = n * 10 + number(s[i])
return n
t = getInput().split(' ')
n = ston(t[0])
y = ston(t[1])
for 0..n+1 each i:
for 0..n+1 each j:
k = n - i - j
if k >= 0:
if 10000 * i + 5000 * j + 1000 * k == y:
print '{i} {j} {k}'
exit(0)
print '-1 -1 -1'
exit(0)
も使えます。
白昼夢
s = getInput()
n = s.len()
dp = []
for 0..n+1 each i:
dp.append 0
dp[0] = 1
for 0..n+1 each i:
if i >= 5 and dp[i - 5] == 1 and s[i - 5..i] == 'erase':
dp[i] = 1
if i >= 6 and dp[i - 6] == 1 and s[i - 6..i] == 'eraser':
dp[i] = 1
if i >= 5 and dp[i - 5] == 1 and s[i - 5..i] == 'dream':
dp[i] = 1
if i >= 7 and dp[i - 7] == 1 and s[i - 7..i] == 'dreamer':
dp[i] = 1
if dp[n] == 1:
print 'YES'
else:
print 'NO'
部分列はs[i..j]
でPythonのs[i:j]
の意味になります。
Traveling
-- string型をnumber型に変換。
func ston(s):
l = s.len()
n = 0
for 0..l each i:
n = n * 10 + number(s[i])
return n
n = ston(getInput())
nt = 0
nx = 0
ny = 0
for 0..n each i:
a = getInput().split(' ')
t = ston(a[0])
x = ston(a[1])
y = ston(a[2])
s = 0
if x - nx > 0:
s += x - nx
else:
s += nx - x
if y - ny > 0:
s += y - ny
else:
s += ny - y
if s % 2 != (t - nt) % 2 or s > t - nt:
print 'No'
exit(0)
nt = t
nx = x
ny = y
print 'Yes'
absがないのでこうしました。