ダーツゲーム(Programmers 17682)


🧑‍💻 ダーツゲーム

  • ダーツゲームは、ダーツボードに3回ダーツを投げ、点数の和で実力を競うゲームで、みんな簡単に楽しめます.
  • に入社したばかりの武智はコード力を認められ、ゲームの核心部分の採点ロジックを担当した.ダーツゲームの得点ロジックは以下の通りです.
  • ダーツゲームは3回のチャンスがあります.
  • の機会ごとに0点から10点を得ることができます.
  • 点は単(S)、双(D)、三(T)領域が同時に存在し、各領域で当選した場合、スコアから1平方、2平方、3平方(スコア1、スコア2、スコア3)を算出する.
  • オプションでは、スター賞()、阿差賞(#)、スター賞()の当選時に該当する点数と、それまでに獲得した点数がそれぞれ2倍になります.阿次賞(#)が当選した時、この点数は負数だった.
  • スター賞()も最初の機会に登場することができます.このような状況で、最初のスター賞()の点数は2倍になった.(例4参照)
  • スター賞()の効果は、他のスター賞()の効果と重なる可能性があります.そんな中、重なるスター賞(*)の点数は4倍.(例4参照)
  • スター賞(*)の効果は「アチャ賞」(#)の効果と重なる可能性があります.この場合、重なったアッチャ賞(#)の点数は-2倍です.(例5参照)
  • 単一(S)、二重(D)、三(T)の各スコアは1つ存在する.
  • スター賞(*)、雅察賞(#)は1点ごとに1つしか存在しないし、存在しないかもしれない.
  • 整数
  • 0~10を入力し、アルファベットS、D、T、*、および#からなる文字列を入力すると、合計スコアの関数が返されます.
  • 入力フォーマット
    3組の文字列は、
  • 「スコア|加算|[オプション]」からなる.
  • 例)1 S 2 D*3 T
  • 分は0から10の整数です.
  • ボーナスはS、D、Tの1つです.
  • オプティカル(光学式)ドライブは*または#のいずれかで、ない場合があります.
  • 出力フォーマット
  • 3回の機会で得られたスコアの合計の整数値を出力します.
  • 例)37

  • 🧑‍💻 解決策

  • 文字列を別々に比較しようとしますが、順番にCスタイルで解くといいです.
  • の最初の文字のiは-1
  • に初期化された.

    🧑‍💻 コード#コード#

    def solution(dartResult):
        dart_list = list(dartResult)
        point = []
        i = -1
    
        for x in range(len(dart_list)) :
            if dart_list[x].isdigit() :
                if dart_list[x + 1].isdigit() :
                    point.append(10)
                elif dart_list[x - 1].isdigit() :
                    continue
                else :
                    point.append(int(dart_list[x]))
                i += 1
    
            else :
                if dart_list[x] == 'D':
                    point[i] = pow(point[i], 2)
                elif dart_list[x] == 'T':
                    point[i] = pow(point[i], 3)
                elif dart_list[x] == '*':
                    if len(point) == 1:
                        point[i] *= 2
                    else :
                        point[i] *= 2
                        point[i - 1] *= 2
                elif dart_list[x] == '#':
                    point[i] *= -1
    
        return sum(point)

    🧑‍💻 総評

  • 時にはCスタイルが逆にきれいになることがあります.
  • あまり複雑に考えないことを目標にしていたのですが、なぜ金沢はそんなに複雑に考えているのか分かりませんが・・・練習だけが答えだと思います.