Вдохновленный вызовом коэффициента передачи Lego Китом Рэндаллом.
Я также планирую построить гигантского робота Lego, который в конечном итоге сможет уничтожить других роботов в ранее не упоминавшемся соревновании. * В процессе создания робота я буду использовать множество зубчатых передач для соединения разные части робота. Я хочу, чтобы вы написали мне самую короткую программу, которая поможет мне построить сложные зубчатые передачи, необходимые для такой сложной задачи. Я, конечно, буду использовать только шестерни с радиусами 1, 2, 3 и 5 произвольных лего.
Каждое зубчатое колесо в зубчатой передаче имеет определенную целочисленную координату на двумерной сетке. Первая передача расположена в точке (0,0), а последняя - в неотрицательных координатах. Местоположение и размер первой и последней шестерен будут предоставлены в качестве входных данных, ваша программа должна указать, какие шестерни идут, где заполнить пробелы.
Кроме того, ваша программа должна использовать минимально возможное количество передач в передаче. Меньше передач / поезд = больше поездов ** = больший и лучший робот разрушения.
Ввод будет состоять из одной строки:
X,Y,B,A
X и Y - координаты конечной передачи. Первая передача всегда находится в точке (0,0). B и A - радиусы конечной и начальной шестерен соответственно. Чтобы добавить некоторые трудности, вы должны убедиться, что выходное зубчатое колесо вращается в правильном направлении. Если A и B имеют одинаковый знак, то выходное зубчатое колесо должно вращаться в одном и том же направлении, и должно использоваться нечетное количество зубчатых колес. Если они имеют противоположные знаки, то необходимо использовать четное количество передач.
Выходными данными должен быть список местоположения X, местоположения Y и радиусов каждого дополнительного зубчатого колеса, по одному зубчатому колесу на линию. Если существует несколько решений с минимальной передачей, напечатайте только одно на ваш выбор. Порядок передач на выходе не имеет значения.
Примеры (возможны более эквивалентные решения):
in
4,0,1,1
out
2,0,1
in
7,7,-2,-2
out
4,3,3
OR
0,7,5
OR
the above reflected over y=x line
in
7,8,-1,2
out
7,0,5
7,6,1
OR
7,0,5
1,8,5
in
7,7,2,-2
out
4,-3,3
7,1,2
12,1,3
12,7,3
OR
any permutation of the above, or reflected over y=x line
Now you're thinking with gear trains!
Вот решения приведенных выше примеров, визуализированные:
Насколько я знаю, никакие проблемы невозможны, если две входные шестерни не перекрываются или не соединяются напрямую. Вам не придется иметь дело с этим.
Это код гольф, самый короткий ответ выигрывает.
* Будущий кот, кто-нибудь?
** Чу Чу !!