KATOエンジニヤリング開発日誌

「アウトプット無きエンジニアにインプットもチャンスも無い」の精神で書いています

CodeIQの「汚いコードを綺麗にしてして」解答

CodeIQの「汚いコードを綺麗にしてして」を解いたので、私が作成したコードを晒します。

4月25日の1時に回答締切なので、ネタバレを避けるためそれ以降に投稿しています。

www.kato-eng.info

設問

変数名="文字列"

のように変数名の変数にイコール( = )で文字列を代入するコードが3行入力されます。
この3行のコードの変数名とイコール( = )の部分を左寄せモード、右寄せモードそれぞれのルールに従い揃えます。

左寄せモードでは=の位置を左端に揃えます。
右寄せモードでは変数名を右端で揃えます。
揃える際は半角ドットを利用して揃えてください。

標準入力

・1行目は左右寄せモード。l は左寄せモード、r は右寄せモードです
・2行目-4行目は整形対象のコードです。以下のフォーマットになっています

変数名="文字列"
変数名="文字列"
変数名="文字列"

例1: 左寄せモードのインプット

l
ab="a"
abc="bb"
abcd="ccc"

左寄せモードのアウトプット

ab..="a"
abc.="bb"
abcd="ccc"

例2: 右寄せモードのインプット

r
ab="a"
abc="bb"
abcd="ccc"

右寄せモードのアウトプット

..ab="a"
.abc="bb"
abcd="ccc"

仕様

  • 標準入力の末尾には改行があります
  • 標準出力の末尾に改行をつけてください
  • 標準入力の仕様で説明した内容以外の入力は行われません(不正入力に対するチェックは不要)

解答

言語はPython3を選択しました。

# coding: utf-8

# 標準入力の受け取り
mode = input()
not_formatted_variable_list = list()
for _ in range(3):
    not_formatted_variable_list.append(input())

# [["variable", "value"], ["variable", "value"], ["variable", "value"]] のデータ形式にする
splitted_variable_list = list()
for variable in not_formatted_variable_list:
    temp_list = variable.split("=")
    splitted_variable_list.append(temp_list)

# 変数名の最大文字数を取得する
max_variable_name_length = 0
for variable_list in splitted_variable_list:
    temp_var_length = len(variable_list[0])
    if max_variable_name_length < temp_var_length:
        max_variable_name_length = temp_var_length

# モードに応じて標準出力を行う
if mode == "l":
    for variable_list in splitted_variable_list:
        variable_list[0] = variable_list[0].ljust(max_variable_name_length, ".")
        print("=".join(variable_list))
elif mode == "r":
    for variable_list in splitted_variable_list:
        variable_list[0] = variable_list[0].rjust(max_variable_name_length, ".")
        print("=".join(variable_list))

結果

f:id:masayuki_kato:20180408002458p:plain