В задаче не хватает мотивации. Или дополнения. Типа там - найти самый длинный путь для того чтобы змейка долго ползла. Это один кейс. Или найти самый длинный путь с максимальным числом поворотов. Это другой кейс. Больше клавиатурных нажатий.
Или если поле - бесконечное (завернутое в Тор) как часто бывает в играх - то будет что-то третье. А если можно повторно посещать ячейки где уже хвост удалился - то тогда будет сразу бесконечный путь.
Вобщем автор явно торопился. А спешка .. она здесь вредна. Мешает понять реальную задачу.
Ипатьев, мне нечего ответить вам. Я не знаток PHP. Но я готов признать что есть различные интерпретации ошибок в разных ЯП. Главное чтоб базовые алгоритмические конструкты такие как вызов метода или condition или цикл с предусловием у нас был одинаково трактован. Иначе нам придется объявить другую теорию разработки кода на бумаге где два разработчика уже не сошлись в терминологии. А это очень печально. Это все равно что у них не сошлись законы арифметики.
1) Флаги. Ассемблер. Любая команда взводит флаг (division by zero к примеру). Программист может их обработать или игнорировать. Самый либеральный уровень.
2) Коды возврата. Си. Windows-API, Linux-Api. Любой сис-колл их возвращает. Очень-очень желательно их обработать. Ну по крайней мере игнорирование ret-параметра будет слишком очевидно.
3) Исключения. Java. C#. В некоторых случаях (Java Exceptions) их практически невозможно игнорировать. Можно передать наверх. Или накрыть пустым блоком catch() который вобщем-то слишком очевиден. Вобщем
Отдельно можно рассмотреть монаду Either в Rust но я не знаю куда ее протолкнуть. Она по смыслу ближе к (2) кодам возврата.
MiheiSV, да. Моё решение можно улучшить. На самом деле нам list/len не нужны.
Нужен фильтр и find_first. И опицональное результат. Я рассуждаю в терминах Scala/haskell.
Ты в теле вопроса так и не задал вопрос. Непонятно что именно ты хочешь ускорять? go-routine это технология. Вряд-ли ее можно ускорить. Можно ускорить твой код. А для этого надо понять где узкое место. Можешь узнать сколько времени работают твои Marhsall/Unmarshall? Println (кстати зачем он там?) Время отработки GET.
Вот технический момент. Если штук 100 из 3000 ендпоинтов будут отдавать Connection Timeout то что в этот момент будут чувсвовать твои вычислительные потоки? Это архитектурный вопрос.
Или если поле - бесконечное (завернутое в Тор) как часто бывает в играх - то будет что-то третье. А если можно повторно посещать ячейки где уже хвост удалился - то тогда будет сразу бесконечный путь.
Вобщем автор явно торопился. А спешка .. она здесь вредна. Мешает понять реальную задачу.