Ustawa o równoważeniu
Piła (podobno z francuskiego „ci-ça”, co oznacza „to-to”) stanowi jedną trzecią świętej trójcy wyposażenia placów zabaw wraz z podobnie wszechobecną zjeżdżalnią i huśtawką. Piła jest w doskonałej równowadze, jeśli i tylko wtedy, gdy suma momentów z każdej strony jest równoważna. Pilarkę można zatem wyważyć, dodając do boku określoną ilość ciężaru z sumą niższego momentu; osiągnięcie tego jest twoim celem tego wyzwania.
Wyzwanie
Twoim zadaniem jest zobrazowanie piły jako wkładu i wyprowadzenie jej ponownie, z dodanym ciężarem na jednym końcu piły, aby ją zrównoważyć.
Wejście
Twój program musi mieć, w dowolnym rozsądnym formacie, znacznik ASCII, taki jak:
100 100
-------------------
^
Pierwszy wiersz zawiera dwie liczby, z których każda reprezentuje wagi na piły. Dokładnie jeden ciężar jest obecny z każdej strony, z których każdy działa na samym końcu swojej deski. Odważniki są gwarantowane jako liczby całkowite i zawsze są wyrównane z odpowiadającym im końcem deski. Liczby te nigdy nie będą zachodzić na fulcrum ( ^
).
Druga linia reprezentuje „deskę” piły. Każda myślnik ( -
) reprezentuje równą długość myślnika, z wyjątkiem myślnika bezpośrednio nad punktem podrzędnym ( ^
), który nie ma długości.
Trzecia linia przedstawia punkt podparcia piły. Punkt podparcia jest oznaczony jedynym znakiem, który nie jest spacją w tej linii, daszkiem („^”). Punkt podparcia można umieścić w dowolnym miejscu na długości deski na ważnym wejściu, pod warunkiem, że pozostanie wystarczająca ilość miejsca, aby liczby reprezentujące wagi nie zachodziły na punkt podparcia ani na wejściu, ani na wyjściu.
Dane wejściowe mają trzy wiersze i nie zawierają spacji przed znakami tworzącymi saw lub po nich (z wyjątkiem oczywiście trzeciej linii, która tego wymaga).
Wynik
Aby wydrukować, to samo przedstawienie piły powinno być wydrukowane na stdout, ale jeden (i tylko jeden) obciążnik należy zastąpić większym ciężarem, aby wyważyć piłę. Wejścia są gwarantowane, aby umożliwić to za pomocą samych liczb całkowitych. Dlatego wagi muszą być pokazywane bez miejsc po przecinku lub innych podobnych oznaczeń. Jeśli twój język nie używa standardowego wyjścia, powinieneś przejść przez konsensus społeczności / meta co do wyników. Końcowe znaki nowej linii są w porządku, ale wszelkie inne zmiany w formacie obrazu prawdopodobnie nie są w porządku.
Egzemplifikacja
Wejścia testowe i odpowiadające wyjścia
Wejście 1
12 22
--------------------
^
Wyjście 1
12 26
--------------------
^
Wejście 2
42 42
-----------
^
Wyjście 2
42 42
-----------
^
Wejście 3
3 16
----------------
^
Wyjście 3
14 16
----------------
^
Wejście 4
1 56
-------------------
^
Wyjście 4
196 56
-------------------
^
Implementacja referencji - 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",
"-------------------",
" ^ "])
Zasady
To jest golf golfowy , więc wygrywa najkrótszy kod liczony w bajtach. Sprawdź meta, jeśli liczenie bajtów jest niezręczne w twoim języku.
Obowiązują standardowe zasady / luki.
Dane wejściowe muszą być pobierane w rozsądnym formacie. Niewyczerpująca lista odpowiednich formatów jest podana w następujący sposób:
- Pojedynczy ciąg znaków z wierszami oddzielonymi znakami nowej linii
- Lista ciągów, każdy ciąg reprezentuje linię
- Tablica 2D lub macierz znaków
Powiązane wyzwania
- Zrównoważyć zestaw ciężarów na piłie - Proponowane przez sierpnia 2015 przez samgak