[Phothon]プログラマー2020 KACA実習-キーボードを押す


プログラマー2020 KACA実習-キーボードを押す


問題のソース


2020 KACO実習-キーボードを押す
問題の説明)
スマートフォンの電話キーボードの各スペースには、次の数字があります.

この電話のキーボードには、左手と右手の親指で数字を入力したいだけです.
最初の左手親指は*キーボードから始まり、右手親指は#キーボードの位置から始まり、親指を使うルールは以下の通りです.
  • 親指は上下左右4方向にしか移動できず、キーボードを動かすセル距離は1です.
  • 左側の列の3つの数字1、4、7を入力する場合は、左手親指を使用してください.
  • 右側の列の3つの数字3、6、9を入力する場合は、右手親指を使用してください.
  • の4つの数字2、5、8、0を入力する場合は、2つの親指の現在のキーボード位置に近い親指を使用します.
    2つの親指の距離が等しい場合は、右利きは右手親指、左利きは左手親指を使用します.
  • の順序で押す番号を含む配列番号、左利きか右利きかを示す文字列手をパラメータとして与えた場合、各番号の親指が左手か右手かを示す連続文字列の形で戻る求解関数を完了します.
  • [制限]
  • numbers配列のサイズは1000を超えません.
  • numbers配列要素の値は0または9以下の整数です.
  • 手は「左」または「右」です.
  • 「左」は左利き、「右」は右利きを表す.
  • 左手親指を使用する場合はL、右手親指を使用する場合はRとなり、順番に接続され、文字列形式で返されます.[IO例]
    numbershandresult[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5]"right""LRLLLRLLRRL"[7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2]"left""LRLLRRLLLRR"[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]"right""LLRLLRLLRL"

    <Solution>


    変数の使用:
    1.(入力)整数-番号付けリスト
    2.(入力)文字列-ハンドル
    3.左手の現在位置
    4.右手の現在位置
    5.(出力)文字列(答え)
    6.数値-座標辞書
    7.(左手の距離を計算)
    8.(右手距離算出値)

    <メソッドとプロシージャ>


  • key1. 適切なif文
  • を使用
  • key2. COGO
  • key3. abs()を使用せずにmathをインポートし、サイズ
  • を比較する

    <Code>

    def solution(numbers, hand):
        
        print(numbers)
        nowL='*'
        nowR='#'
        answer=''
        dict={1:(0,0), 2:(1,0), 3:(2,0),
          4:(0,1), 5:(1,1), 6:(2,1),
          7:(0,2), 8:(1,2), 9:(2,2),
          '*':(0,3), 0:(1,3), '#':(2,3)
        }
        for i in numbers:
            if i in [1,4,7]:
                answer=answer+'L'
                nowL=i
            elif i in [3,6,9]:
                answer=answer+'R'
                nowR=i
            elif i in [2,5,8,0]:
                leftCalc=abs(dict[i][0]-dict[nowL][0]) + abs(dict[i][1]-dict[nowL][1])
                rightCalc=abs(dict[i][0]-dict[nowR][0])+ abs(dict[i][1]-dict[nowR][1])
                if leftCalc<rightCalc:
                    answer=answer+'L'
                    nowL=i
                elif leftCalc>rightCalc:
                    answer=answer+'R'
                    nowR=i
                else:
                    if hand=='right':
                        answer=answer+'R'
                        nowR=i
                    else:
                        answer=answer+'L'
                        nowL=i
        return answer