綱渡り
シーソー(おそらく「this-that」を意味するフランス語の「ci-ça」から)は、同様に遍在するスライドとスイングとともに、遊具の神聖な三位一体の3分の1を形成します。シーソーは、各側のモーメントの合計が等しい場合にのみ、完全なバランスになります。したがって、シーソーは、モーメントの合計が小さい側に特定の量の重量を追加することでバランスを取ることができます。これを達成することがこの挑戦の目標です。
チャレンジ
あなたの課題は、入力としてシーソーの描写を取り、それを再び出力し、バランスをとるためにシーソーの一端に重みを追加することです。
入力
プログラムは、合理的な形式で、次のようなASCIIシーソーを取る必要があります。
100 100
-------------------
^
最初の行には2つの数値が含まれ、それぞれがシーソー上の重みを表します。それぞれの側にちょうど1つの重りがあり、それぞれが厚板の側の端に作用します。重みは整数であることが保証されており、常に対応する厚板の端に合わせられます。これらの数値が支点(^
)と重なることはありません。
2行目は、シーソーの「プランク」を表します。各ダッシュ(-
)は、長さの^
ない支点()のすぐ上のダッシュを除いて、各ダッシュと同じ長さを表します。
3行目は、シーソーの支点を表します。この支点は、この行のスペースではない唯一の文字、サーカムフレックス( '^')によってマークされます。支点は、有効な入力の板の長さに沿った任意の場所に配置できます。ただし、十分なスペースが残っていれば、重みを表す数値が入力または出力の支点と重ならないようにできます。
入力には3行が含まれ、シーソーを構成する文字の前後に空白がないことが保証されます(もちろん、必要な3行目を除きます)。
出力
出力の場合、同じシーソーの描写を標準出力に印刷する必要がありますが、シーソーのバランスをとるために、重量の1つ(1つのみ)をより大きい重量に置き換えます。入力は、整数のみを使用してこれを可能にすることが保証されています。したがって、重みは小数点やその他の同様の表記なしで表示する必要があります。あなたの言語がstdoutを使用していない場合は、出力についてコミュニティ/メタコンセンサスで行ってください。末尾の改行は問題ありませんが、描画形式に対する他の変更はおそらく大丈夫ではありません。
例示
テスト入力と対応する出力
入力1
12 22
--------------------
^
出力1
12 26
--------------------
^
入力2
42 42
-----------
^
出力2
42 42
-----------
^
入力3
3 16
----------------
^
出力3
14 16
----------------
^
入力4
1 56
-------------------
^
出力4
196 56
-------------------
^
リファレンス実装-Python 3
# Takes a list of strings as input
def balance_seesaw(lines):
weights = [int(w.strip()) for w in lines[0].split()]
length = len(lines[1])
pivot = lines[2].find("^")
left_length = pivot
right_length = length - 1 - pivot
left_torque = weights[0] * left_length
right_torque = weights[1] * right_length
if left_torque > right_torque:
weights[1] = left_torque // right_length
elif right_torque > left_torque:
weights[0] = right_torque // left_length
weights = [str(w) for w in weights]
string_gap = " " * (length - sum(len(w) for w in weights))
lines[0] = weights[0] + string_gap + weights[1]
print("\n".join(lines))
balance_seesaw(["1 56",
"-------------------",
" ^ "])
ルール
これはcode-golfであるため、最短のコードがバイト単位で勝ちます。ご使用の言語でバイト数を数えるのが面倒な場合は、メタを確認してください。
標準のルール/抜け穴が適用されます。
入力は適切な形式で行う必要があります。適切な形式の完全なリストは次のとおりです。
- 改行文字で区切られた行を持つ単一の文字列
- 各文字列が行を表す文字列のリスト
- 文字の2D配列またはマトリックス
関連する課題
- シーソーで一連のウェイトのバランスをとる-samgakが提案した2015年8月