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

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

Сообщение nezabudka » 02 май 2015, 13:41

Ввиду повышенной опасности предоставляемой информации настоятельная просьба ко всем
читателям перед выполнением любой части кода из нижепреведнного сценария прочесть
статью до конца.
Как известно даже в самой небольшей строчке кода можно найти некоторые возможности по
улучшению. Сегодня мы с вами разберем очень простенькую но тем не менее смертельно опасную
игру "Русская Рулетка", проведем оптимизацию и конвертируем ее в безопасный в руках пользователя
вариант под названием 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
Аватар пользователя
nezabudka
Местный говорун
Местный говорун
 
Автор темы
Сообщений: 612
Фото: 180
Стаж: 2 года 5 месяцев 4 дня
Откуда: Ростов на Дону
Благодарил (а): 283 раз.
Поблагодарили: 145 раз.

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

Спонсор

Спонсор
 

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

Сообщение Kycok » 02 май 2015, 15:42

А нет у вас таких советов по питону? :)
Аватар пользователя
Kycok
Уважаемый участник
Уважаемый участник
 
Сообщений: 281
Фото: 20
Стаж: 2 года 8 месяцев 6 дней
Откуда: Санкт-Петербург
Благодарил (а): 39 раз.
Поблагодарили: 60 раз.

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

Сообщение nezabudka » 02 май 2015, 16:58

Kycok писал(а):

А нет у вас таких советов по питону? :)

Мне очень нравится питон, и я видела что раздел пока пустует. Обязательно поделюсь в будущем материалом по Python, Ipython и Scapy
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Аватар пользователя
nezabudka
Местный говорун
Местный говорун
 
Автор темы
Сообщений: 612
Фото: 180
Стаж: 2 года 5 месяцев 4 дня
Откуда: Ростов на Дону
Благодарил (а): 283 раз.
Поблагодарили: 145 раз.

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

Сообщение Kycok » 02 май 2015, 17:55

nezabudka писал(а):

Обязательно поделюсь в будущем материалом по Python

Очень бы пригодилось! ;) Как раз сейчас пишу монополию, и, скорее всего, есть куски кода, которые можно заставить работать быстрее
Аватар пользователя
Kycok
Уважаемый участник
Уважаемый участник
 
Сообщений: 281
Фото: 20
Стаж: 2 года 8 месяцев 6 дней
Откуда: Санкт-Петербург
Благодарил (а): 39 раз.
Поблагодарили: 60 раз.

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

Сообщение Oleg65 » 02 май 2015, 18:48

Этот и подобные способы подробно расписаны в последней версии (предыдущую только пытаюсь сравнивать с последней) Advanced Bash Script Guide
Аватар пользователя
Oleg65
Местный говорун
Местный говорун
 
Сообщений: 756
Стаж: 2 года 8 месяцев 4 дня
Откуда: г.Коломна Моск.обл.
Благодарил (а): 54 раз.
Поблагодарили: 178 раз.

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

Сообщение nezabudka » 02 май 2015, 19:11

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
Аватар пользователя
nezabudka
Местный говорун
Местный говорун
 
Автор темы
Сообщений: 612
Фото: 180
Стаж: 2 года 5 месяцев 4 дня
Откуда: Ростов на Дону
Благодарил (а): 283 раз.
Поблагодарили: 145 раз.

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

Сообщение Oleg65 » 02 май 2015, 19:24

nezabudka писал(а):

Oleg65 писал(а):

Этот и подобные способы подробно расписаны в последней версии (предыдущую только пытаюсь сравнивать с последней) Advanced Bash Script Guide

А можно немножко яснее что бы у меня мозги не дымились?
Конечно, это где-то в 16-17 главах (примерно), где объясняется действие [[ ]] и (( )). Точнее укажу чуть позднее (как найду), кстати, главы в предыдущей и последней версиях - не соответствуют друг другу по нумерации. Если не лень самой покопаться - старая версия и новая версия
Аватар пользователя
Oleg65
Местный говорун
Местный говорун
 
Сообщений: 756
Стаж: 2 года 8 месяцев 4 дня
Откуда: г.Коломна Моск.обл.
Благодарил (а): 54 раз.
Поблагодарили: 178 раз.

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

Сообщение nezabudka » 02 май 2015, 19:40

Oleg65 писал(а):

Если не лень самой покопаться - старая версия и новая версия

Если чесно то лень. Этот учебник написан очень сухим языком, читать его довольно нудное занятие
и я пользуюсь им в основном для справок по определенному вопросу при необходимости так
сказать когда есть интерес. Но с вами я вполне согласна и думаю в этом учебнике описаны многие примеры применения команд в баше.
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Аватар пользователя
nezabudka
Местный говорун
Местный говорун
 
Автор темы
Сообщений: 612
Фото: 180
Стаж: 2 года 5 месяцев 4 дня
Откуда: Ростов на Дону
Благодарил (а): 283 раз.
Поблагодарили: 145 раз.

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

Сообщение Oleg65 » 03 май 2015, 06:45

nezabudka писал(а):

Oleg65 писал(а):

Если не лень самой покопаться - старая версия и новая версия

Если чесно то лень.
Старая версия Глава7 "Проверка условий", Новая версия -7.1 Test Constructs
Аватар пользователя
Oleg65
Местный говорун
Местный говорун
 
Сообщений: 756
Стаж: 2 года 8 месяцев 4 дня
Откуда: г.Коломна Моск.обл.
Благодарил (а): 54 раз.
Поблагодарили: 178 раз.

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

Сообщение nezabudka » 03 май 2015, 08:40

Хочу только добавить, мне очень нравится в консоли как оптимизация кода так и построение заведомо избыточных конструкций, зачастую бесполезных но исправно работающих приемов и порой это бывает намного интересней и увлекательней. :)
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Аватар пользователя
nezabudka
Местный говорун
Местный говорун
 
Автор темы
Сообщений: 612
Фото: 180
Стаж: 2 года 5 месяцев 4 дня
Откуда: Ростов на Дону
Благодарил (а): 283 раз.
Поблагодарили: 145 раз.


Вернуться в Bash

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1