読者です 読者をやめる 読者になる 読者になる

らりょすの日記

備忘録と感じたことと。ブログじゃないです,日記です。

Atcoderのそれをどうやって解くか悩みに悩んだ末に出した答え【追記した】

f:id:raryosu:20140330211503p:plain
昨日あったAtCoder Regular Contest #020
なんとなくPython3でやろうと思って。

石をすべらせるゲーム

問題

  • 二匹の動物が-1000〜1000の目盛りがふられた氷の上で石を滑らせる。
  • どっちが勝っているか,判定せよ

与えられるのは2匹(Ant, Bug)の目盛りがスペース区切り

2 3

Antの石が2,Bugの石が3にある
そしたら

Ant

と表示する。
同点だったらDrawと表示

んで。
俺は当然数値の絶対値取らないといけないなーと思ってこんなコード書きました

import math
A, B = map(int, input().split())
 
A = math.fabs(A)
B = math.fabs(B)
 
if A < B :
  print("Ant")
elif B < A :
  print("Bug")
else :
  print("Draw")

mathモジュールをインポートして,math.fabsで絶対値とりました
でも,絶対値とるのもっと簡単だった

abs(x)

これで取れるので,

A, B = map(int, input().split())
A = abs(A)
B = abs(B)
 
if A < B :
  print("Ant")
elif B < A :
  print("Bug")
else :
  print("Draw")

でいいみたい。

縞模様

やってない

A mod B Problem

問題

  • ある値(an)とその値を繰り返す回数(Ln)がN個与えられる
  • それらをすべてつなげたもの(A)を与えられた数値(B)で割ったあまりを出力する

与えられるのは

N
a1 L1
a2 L2
:
aN LN
B

なんかPythonではstring型の文字列*回数で繰り返されるって読んだから
an*Lnをリストに入れて,それを結合してBでわればいいんじゃねぇかと思った
しかし。リストの中の文字列を結合する方法がググってもわかんなくて(汗)
やりたかったこと

['1','2','3','4']
=>'1234'

今日,Pythonができる知人に

"".join(['1','2','3','4'])

でできるって言われた
初めてのPythonに書いてあった気がしなくもないね。

書いたコードはこれ

N = int(input())
ax = []
 
for i in range(N):
  a, L = map(int, input().split())
  a = str(a)
  ax.append(a*L)
 
ay = "".join(ax[:N])
ay = int(ay)
 
B = int(input())
 
print(ay % B)

Pythonistaに言わせればリスト内包表記云々とか汚いとか言われるんだろうけど頑張ってるの。
もっときれいな書き方あるんだろうけど初心者には無理です。

まとめ

まぁ考え方を固定しすぎてる感がある
終わったあと他の人のコードを見たけど,A mod...のでリスト使ってる人いなかったし
よく考えれば,普通に何かの変数に足しながらfor文で回せばいいだけだし。
でも,.joinだとか,あとは絶対値とるのとか。色々出来たから結論的にはよし(?)
Pythonistaになるべくもっと頑張らなきゃなー

(レベルばれるの恥ずかしいけど忘れそうだからメモ書き)

【追記】まとめで書いたことを実現した(2014.03.31)

A = ""

for i in range(int(input())):
  a, L = map(int, input().split())
  a = str(a)
  A += a*L

print(int(A)%int(input()))

こっちのほうがシンプルだしわかりやすいね
多分まだまだ短くできるね,勉強もっと頑張る