LoginSignup
2
0

Cyberという言語、面白いぞ

Posted at

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がないのでこうしました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0