Команда IT специалистов выполнит подготовку инфраструктуры для вашего бизнеса.
Внедрение самых передовых решений и технологий.
Поддержка и сопровождение ваших сервисов.
Выполнение работ под "ключ", от покупки сервера, до настройки автоматизации процессов.
8(977)608-78-62 adm@nixm.ru

remake "русская рулетка"

Ответить
Аватара пользователя
nezabudka
Местный говорун
Местный говорун
Сообщения: 618
Зарегистрирован: 18 апр 2015, 06:13
Откуда: Ростов на Дону

remake "русская рулетка"

Сообщение nezabudka »

Ввиду повышенной опасности предоставляемой информации настоятельная просьба ко всем
читателям перед выполнением любой части кода из нижепреведнного сценария прочесть
статью до конца.
Как известно даже в самой небольшей строчке кода можно найти некоторые возможности по
улучшению. Сегодня мы с вами разберем очень простенькую но тем не менее смертельно опасную
игру "Русская Рулетка", проведем оптимизацию и конвертируем ее в безопасный в руках пользователя
вариант под названием Remake "Русская Рулетка". И так пишим всем известный код и проводим
разбор фрица:
(Внимание перед выполнением строчки данного кода следует в обязательном порядке
обновить бэкап всей системы
)

Код: Выделить всё

[ $[$RANDOM % 6] == 0 ] && rm -rf / || echo 'you win!'
Для начала определим алгоритм в правилах игры:
В барабан нагана вставляем один патрон, раскручиваем, подносим ствол к виску, жмем на спусковой
крючек, все, любуемся результатом. Новичкам и людям с неокрепшей психикой следует
однозначно потренироваться на муляже:

Код: Выделить всё

[ $[$RANDOM % 6] ==0 ] && echo 'you lose!' || echo 'you win!'
Теперь вывернем принцип действия. Переменная $RENDOM возвращает случайное число из
интервала 0 - 32767, это положительная часть всех возможных 16 битных чисел. Остаток от деления
на шесть получаем с помощью конструкции $((выражение)) или как в данном случае $[выражение].
Выражение это будет равно одному из ряда от нуля до пяти. Сравниваем с одним из значений, пулю
принимаем за ноль реализовывая тем самым один случайный вариант из шести возможных.
Логические операторы && И(and) и || ИЛИ(or) предоставляют выбор действий в зависимости от
проверки сравнения в нутри объемлющих квадратных скобок и в зависимости от выбора выводится
строка при помощи оператора echo. Незабываем что квадратные скобки это тоже оператор и их
необходимо отделять от других литералов пробелом, исключением является конструкция $[...]
предназначенная для выпонения арифметических операций. Результатом проигрыша будет
по всей видимости отсутствие домашней директории пользователя на жестком диске.
Почему то ни кто не догадался упростить код игры и мы сделаем это самостоятельно, для чего не станем
вычислять остаток от деления а сразу воспользуемся кодом возврата нашего выражения заключив его
в двойные круглые скобки, здесь результат в 0 трактуется как false, а любое другое значение как true.

Код: Выделить всё

(( $RANDOM % 6 )) && echo 'you win' || echo 'you lose'
Заметте что теперь для правильной работы кода мы инвертировали строки оперетора echo.
И даже если мы уберем знак переменной в двойных круглых скобках, код будет продолжать
исправно работать

Код: Выделить всё

(( RANDOM % 6 )) && echo 'you win' || echo 'you lose'
На этом все, получаем 5 за оптимизацию и 5 за безопасность, можно давать детям.
В помощь экстремалам для первоначального варианта игры всегда команда sudo. Удачи!
Последний раз редактировалось nezabudka 02 май 2015, 17:03, всего редактировалось 1 раз.
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Аватара пользователя
Kycok
Уважаемый участник
Уважаемый участник
Сообщения: 280
Зарегистрирован: 16 янв 2015, 06:53
Откуда: Санкт-Петербург
Контактная информация:

Re: remake "русская рулетка"

Сообщение Kycok »

А нет у вас таких советов по питону? :)
Аватара пользователя
nezabudka
Местный говорун
Местный говорун
Сообщения: 618
Зарегистрирован: 18 апр 2015, 06:13
Откуда: Ростов на Дону

Re: remake "русская рулетка"

Сообщение nezabudka »

Kycok писал(а):А нет у вас таких советов по питону? :)
Мне очень нравится питон, и я видела что раздел пока пустует. Обязательно поделюсь в будущем материалом по Python, Ipython и Scapy
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Аватара пользователя
Kycok
Уважаемый участник
Уважаемый участник
Сообщения: 280
Зарегистрирован: 16 янв 2015, 06:53
Откуда: Санкт-Петербург
Контактная информация:

Re: remake "русская рулетка"

Сообщение Kycok »

nezabudka писал(а):Обязательно поделюсь в будущем материалом по Python
Очень бы пригодилось! ;) Как раз сейчас пишу монополию, и, скорее всего, есть куски кода, которые можно заставить работать быстрее
Аватара пользователя
Oleg65
Местный говорун
Местный говорун
Сообщения: 859
Зарегистрирован: 18 янв 2015, 10:56
Откуда: г.Коломна Моск.обл.

Re: remake "русская рулетка"

Сообщение Oleg65 »

Этот и подобные способы подробно расписаны в последней версии (предыдущую только пытаюсь сравнивать с последней) Advanced Bash Script Guide
Аватара пользователя
nezabudka
Местный говорун
Местный говорун
Сообщения: 618
Зарегистрирован: 18 апр 2015, 06:13
Откуда: Ростов на Дону

Re: remake "русская рулетка"

Сообщение nezabudka »

Oleg65 писал(а):Этот и подобные способы подробно расписаны в последней версии (предыдущую только пытаюсь сравнивать с последней) Advanced Bash Script Guide
А можно немножко яснее что бы у меня мозги не дымились?
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Аватара пользователя
Oleg65
Местный говорун
Местный говорун
Сообщения: 859
Зарегистрирован: 18 янв 2015, 10:56
Откуда: г.Коломна Моск.обл.

Re: remake "русская рулетка"

Сообщение Oleg65 »

nezabudka писал(а):
Oleg65 писал(а):Этот и подобные способы подробно расписаны в последней версии (предыдущую только пытаюсь сравнивать с последней) Advanced Bash Script Guide
А можно немножко яснее что бы у меня мозги не дымились?
Конечно, это где-то в 16-17 главах (примерно), где объясняется действие [[ ]] и (( )). Точнее укажу чуть позднее (как найду), кстати, главы в предыдущей и последней версиях - не соответствуют друг другу по нумерации. Если не лень самой покопаться - старая версия и новая версия
Аватара пользователя
nezabudka
Местный говорун
Местный говорун
Сообщения: 618
Зарегистрирован: 18 апр 2015, 06:13
Откуда: Ростов на Дону

Re: remake "русская рулетка"

Сообщение nezabudka »

Oleg65 писал(а):Если не лень самой покопаться - старая версия и новая версия
Если чесно то лень. Этот учебник написан очень сухим языком, читать его довольно нудное занятие
и я пользуюсь им в основном для справок по определенному вопросу при необходимости так
сказать когда есть интерес. Но с вами я вполне согласна и думаю в этом учебнике описаны многие примеры применения команд в баше.
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Аватара пользователя
Oleg65
Местный говорун
Местный говорун
Сообщения: 859
Зарегистрирован: 18 янв 2015, 10:56
Откуда: г.Коломна Моск.обл.

Re: remake "русская рулетка"

Сообщение Oleg65 »

nezabudka писал(а):
Oleg65 писал(а):Если не лень самой покопаться - старая версия и новая версия
Если чесно то лень.
Старая версия Глава7 "Проверка условий", Новая версия -7.1 Test Constructs
Аватара пользователя
nezabudka
Местный говорун
Местный говорун
Сообщения: 618
Зарегистрирован: 18 апр 2015, 06:13
Откуда: Ростов на Дону

Re: remake "русская рулетка"

Сообщение nezabudka »

Хочу только добавить, мне очень нравится в консоли как оптимизация кода так и построение заведомо избыточных конструкций, зачастую бесполезных но исправно работающих приемов и порой это бывает намного интересней и увлекательней. :)
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Ответить

Вернуться в «Bash»