Решаем задачу из Codewars
Задача называется Pipe and tap chaining operators
Задача называется Pipe and tap chaining operators
С подробным объяснением решения
На языке Scala
Конкурс мемов объявляется открытым!
Выкручивайте остроумие на максимум и придумайте надпись для стикера из шаблонов ниже. Лучшие идеи войдут в стикерпак, а их авторы получат полугодовую подписку на сервис «Пакет».
Кто сделал и отправил мемас на конкурс — молодец! Результаты конкурса мы объявим уже 3 мая, поделимся лучшими шутками по мнению жюри и ссылкой на стикерпак в телеграме. Полные правила конкурса.
А пока предлагаем посмотреть видео, из которых мы сделали шаблоны для мемов. В главной роли Валентин Выгодный и «Пакет» от Х5 — сервис для выгодных покупок в «Пятёрочке» и «Перекрёстке».
Реклама ООО «Корпоративный центр ИКС 5», ИНН: 7728632689
Вступление
Всем бобра. В промежутках между своими увольнениями работаю разработчиком. Сейчас пребываю в поисках следующего промежутка, а свободное время заполняю решением тестовых задачек на алгоритмизацию с Codewars - специального сервиса для таких вот скучающих IT-безработных.
Одна из таких задачек - разработать алгоритм пути улитки, возвращающейся домой. Проще, конечно, показать:
Думаю, идея понятна. Мы начинаем путь с левого верхнего угла, пока не окажемся в конечной точке в районе середины. Мы должны пройти весь этот путь (просчитать), последовательно сохранить все пройденные шаги и вернуть их в ответ программе, которая проверит корректность результата. Пример такого ответа для левой картинки: 1, 2, 3, 6, 9, 8, 7, 4, 5.
А пока мы в лице улитки гуляем по поле (нагуливаем результат работы), промежуточные данные о пройденных шагах нужно где-то хранить и накапливать. Для этого я использовал переменную - $distanceTravelled. В нее улитка будет бережно записывать все пройденные шаги, пока не доползет до кровати конца, а затем вернет ее содержимое проверяющий программе, чтобы получить заслуженный чупа-чупс (или по лбу, если приползла не туда или не тем маршрутом).
Стоит отметить, что выразительное имя для переменной (да и вообще для любого объекта в коде) - это залог успешного понимания работы кода и т.о. комфортного сопровождения со стороны других разработчиков. Пусть в нашем случае сей код кроме таких же странствующих бездельников никто не увидит (а уж тем более не будет пытаться дорабатывать), руку стараюсь не сбивать, ибо к переменным вроде i, r, c привыкаешь очень быстро и легко, а отвыкаешь долго и страдальчески. В этот раз я решил, что имя переменной мой утонченный вкус решительно не устраивает и с этим надо что-то делать.
В качестве отступления могу сказать, что не сильно большой я англичанин и нередко компенсировать это вынужден в Google Translate. Многие типичные для отрасли выражения и слова оседают быстро, но как минимум не мешает получить подтверждение со стороны. Так вот альянс моего дефицита языка и болванистого машиноперевода порой знатно доставляют.
Планирование
Собственно, $distanceTravelled - пройденное расстояние, путь. Вроде бы все хорошо, но два момента меня смущали:
distance - слишком неопределенно. Что есть distance? метры, километры, световые годы? безобразие
travelled - пройденное расстояние, но обычно используется в том же контексте, что у нас - путешествие, т.е. больше с развлекательно-познавательными целями, нежели с деловыми
Ну ок, какие идеи? Посовещавшись с самим собой я решил, что было бы неплохо, ежели бы переменная читалась как $пройденныеКвадраты [улиткой]. Звучит информативнее размытых пропутешествованных дистанций, мм? На том и порешили. Теперь переходим к финальной части - переводу.
Реализация
Начнем с существительного - дистанции. Коли приговорили его к замене, не будем медлить. Поскольку в нашем случае речь идет о слегка абстрактном и заточенном под задачу расстоянии, логичнее будет дистанцию измерять в squares - квадратиках (а вся доска, по коей рассекает улитка - папа-квадрат площадь, square). С этим все ясно, топаем дальше.
Следующая жертва у нас - travelled. Тут уже неоднозначнее. Улитка у нас вряд ли ходит (walked), и вряд ли кто-то видел бегающих (ran) улиток (во всяком случае без запрещенных веществ). Улитка, пожалуй, скорее ползает - creep. Однако в прошедшем времени - crept - у нас получится подкрадывающаяся улитка-ниндзя, потому гугл мне предлагает юзать crawled, что в данный контекст вполне вписывается:
Ок, гугл, как скажешь. Теперь переходим к самому главному - к женитьбе существительного с глаголом.
Вбиваем первое, что приходит в сумнящуюся голову и одновременно самое очевидное:
Хм, квадраты не желают быть пройденными, более того - уверены, что куда-то ползут. Попытка дубль два - спускаем вниз регистр у Crawled (гугл на это нередко живо реагирует):
квадраты по-прежнему порываются от нас уползти. Вечер переставал быть томным. Попытка №3:
и опять квадраты норовят прикинуться улиткой. Ладно, сжалимся над болванчиком и явно намекнем, в чем тут дело:
События развивались стремительно. Квадраты мало того что ползают без спроса, так еще и улитку оседлали! Запашные от улиток нашлись тут, понимаешь. Но мы не сдаемся и продолжаем верить в искусственный интеллект:
Тем временем упрямые квадраты продолжают свое вероломный поход с улиткой в качестве транспорта.
Больше всего несправедливости, конечно, досталось улитке. Она-то думала, это она тут главное действующее лицо, а ее запрягают как ломовую лошадь и гоняют туда-обратно какие-то неодушевленные наездники, когда должно быть ровно наоборот. Никакого уважения к главной звезде задачи.
В принципе, уже понятно, что название переменной $squaresCrawled в контексте задачи вполне корректно отражает суть переменной, но лишняя проверка лишней не бывает, так что предпринимаем последнюю попытку найти компромисс:
Подытожил напоследок гугл. И ведь не поспоришь. И еще предприимчивые.
Привет всем кто учит какие либо языки программирования, а в особенности Java.
Я далекий от про уровня человек, но люблю на досуге писать код. И вот я не так давно (благодаря упоминанию тут), открыл для себя ресурс codewars.
Ресурс поддерживает много языков программирования, так что одни и те же задачи можно решать разными языками. Пользователи сами могут создавать задачи для других и тд.
Но причина создания не в рекламе ресурса, а том что бы найти других людей у которых хобби как у меня и вместе решать задачки, обсуждать их, а может и создавать.
Код низкого качества, но вполне понятный. В спорах пишут, что шестой тест сломан, но у всех нормальных людей получается же.
Помогите пожалуйста и утопите в минусах.