i := 1
while i <= #(сундуки) and игла = nil do
сундук := сундуки[i]; заяц := nil; утка := nil; яйцо := nil; игла := nil
заяц := ЗАЯЦ(сундук)
if заяц ~= nil then утка := УТКА(заяц) end
if утка ~= nil then яйцо := ЯЙЦО(утка) end
if яйцо ~= nil then игла := ИГЛА(яйцо) end
i := i+1
end
i := 1
repeat
сундук := сундуки[i]; заяц := nil; утка := nil; яйцо := nil; игла := nil
заяц := ЗАЯЦ(сундук)
if заяц ~= nil then утка := УТКА(заяц) end
if утка ~= nil then яйцо := ЯЙЦО(утка) end
if яйцо ~= nil then игла := ИГЛА(яйцо) end
i := i+1
until i > #(сундуки) or заяц = nil or утка = nil or яйцо = nil or игла = nil
Почему-то все прочитывают условия задачи так: извратиться любой ценой, но обойтись без exit. При этом предполагается, что этот изврат представляет хоть какую-нибудь ценность.
Я же написал в начале, никаких извратов, никаких компромиссов, затраты ресурсов не должны превышать исходный вариант с exit. Лишнее присваивание – расстрел. Полно ведь ситуаций, когда ресурсы крайне ограничены. Ну, на Марс мы летим.
В таких случаях приходится идти на компромисс и выбирать не красоту, а эффективность.
А Идеальный Конечный Результат – это когда цель достигнута НЕ ценой компромисса. Не жертвуя ни тем, ни другим. И затраты равны нулю.