Обновить
8K+
23

Разработчик заднего конца

32,1
Рейтинг
4
Подписчики
Отправить сообщение

В умелых руках и sed — балалайка или пишем «Морской бой» на регулярках

Уровень сложностиСложный
Время на прочтение75 мин
Охват и читатели10K

Морской бой — простая игра, в которую можно научить играть даже первоклассника. Тридцать лет назад реализацию этой игры на компьютере можно было продавать. Десять лет назад написание морского боя на любимом языке было хорошим упражнением для будущего программиста. Сегодня, когда с написанием такой игры справится и продвинутая нейронка, сложно кого-то удивить очередной ее реализацией. Но я все же попробую.

Я решил написать морской бой на sed — потоковом текстовом редакторе из набора стандартных юниксовых утилит. Обычно его применяют для того, чтобы заменить в потоке или файле одну регулярку на другую. Но дополнительные директивы, которые есть в sed, формируют Тьюринг-полный язык, на котором теоретически можно написать что угодно.

Так, энтузиасты писали на sed мастермайнд (на наши деньги — «Быки и коровы»), сокобан, сапер и даже шахматы. Я упоролся несколько сильнее и написал игру с неполной информацией, псевдослучайной генерацией расстановок и ходов и достаточно сильным противником. Причем реализованный алгоритм позволяет усилить его еще больше, изменив буквально пару строк. Насколько я могу видеть по гитхабу, у меня получился один из самых масштабных на сегодняшний день проектов (если не самый масштабный) среди всей этой адской эзотерики.

В процессе работы я никак не использовал нейронки — ни для генераций, ни для консультаций. С одной стороны, это было правильно, ведь проекты, которые были написаны раньше, люди писали без нейронок. Так что это их использование было бы просто неспортивно. С другой стороны, они могли бы помочь в плане критики тех или иных подходов, а потому некоторые мои архитектурные решения наверняка весьма дремучи. С третьей стороны, именно в личном почерке ведь и заключается искусство, а ради него все и затевалось.

Сперва я просто хотел показать, какие клевые вещи можно реализовать самыми минимальными средствами, но в итоге получился большой пошаговый гайд. Для тех, кому результат интереснее процесса, в конце статьи есть ссылка на гитхаб, чтобы сразу посмотреть, что получилось. Остальные — наливайте чайку и добро пожаловать под кат!

Погрузиться в пучины регулярных выражений

Программируем на калькуляторе dc

Время на прочтение5 мин
Охват и читатели9.7K

После того, как я научился как следует перекладывать JSON’ы, я решил получше изучить еще какой-нибудь необычный инструмент. В юниксах есть такой древний (старше языка C) калькулятор — dc. Причем этот калькулятор до сих пор жив в том смысле, что почти везде входит в стандартную поставку. Даже на маках есть. Но еще, как выяснилось, это своего рода язык программирования. Мимо такого я пройти не смог.

Читать далее

Перекладывание JSON'ов 80-го уровня или рогалик на jq

Время на прочтение2 мин
Охват и читатели7.6K

Всякий раз, когда мне нужно было распарсить что-то JSON'оподобное, я использовал утилиту jq. В состав дефолтных пакетов она еще входит не во всех линуксовых дистрибутивах, но уж на моем компьютере она точно была всегда с того момента, как я о ней узнал. Я думаю, что сегодня она действительно стала тем, чем видели ее разработчики — sed'ом для данных в формате JSON.

И все же было обидно, что максимум, что я могу сходу написать — это cat file.json | jq .["key"][0]. Поэтому я решил изучить эту штуку поподробнее. Всегда же приятно показать коллегам, как вписываешь в терминал адскую нечитаемую команду, которая, тем не менее, делает ровно то, что требуется. В программную архитектуру сегодня умеет каждый, а вот буквально переложить джейсон — это задача поинтереснее :)

Одним из источников вдохновения для меня стала старая статья про шахматы на sed. Раз уж мы и тут имеем дело с sed (пусть и для данных другого формата), то логичным выбором для учебного проекта тоже становится игра. Но я не шахматист, а больше картежник, поэтому и запрограммировать ради обучения решил карточную игру.

Выбор пал на Scoundrel — это игра-рогалик, в которую можно в одиночку играть, имея на руках стандартную колоду из 54 карт. По сути дела, пасьянс с некоторым rouge-like антуражем. Задумка обалденная, но когда я играл в эту игру реальными картами, мне очень не хватало погружения: все же сложно представлять, что бубновая десятка — это мощнейшее оружие, а трефовый туз — жесткий босс, от которого с высокой вероятностью придется сбегать. К счастью, программирование позволяет запрятать всю внутреннюю карточную логику настолько глубоко, что человек, который впервые столкнется с этой игрой в терминале, вряд ли догадается, что первоисточником стал пасьянс.

Читать далее

О QR-кодах и социальной инженерии

Время на прочтение6 мин
Охват и читатели6.7K

Привет, Хабр. В этом посте я хочу немного рассказать о том, как люди пытались дурить систему ковидных QR-кодов в России. Часть методов общеизвестна, часть — не так популярна, некоторые векторы атаки открыты до сих пор, разве что актуальность уже не та. За скобками останется совсем уж криминал вроде покупки сертификата или так называемого «укола в ватку», рассматривать я буду лишь методы, не требующие ничего, кроме компьютера и чуток лихости наглости.

Читать далее

Информация

В рейтинге
263-й
Зарегистрирован
Активность