Я милого узнаю по походке
Jan. 22nd, 2019 09:01 amВ процессе восстановления исходного текста программы, про которую я рассказывал в давнем году, нашлась вот такая функция (выдача скрипта-декомпилятора слегка причёсана и приведена к сишному виду):
Предлагается угадать, зачем эта функция была нужна, и почему она именно в таком виде.
int func(int arg1, int arg2, int arg3) {
if (arg2 >= 3) goto a;
arg3 = arg3 - 1;
a:
arg2 = arg2 + 011;
if (arg2 <= 013) goto b;
arg2 = arg2 - 014;
b:
arg2 := arg2 + 1;
return (((((arg1 + arg3) + (arg3 >> 2)) + (((015 * arg2) - 1) / 5)) - 034) % 7);
}Предлагается угадать, зачем эта функция была нужна, и почему она именно в таком виде.
no subject
Date: 2019-01-22 06:13 pm (UTC)Сделано так хитро, наверное, потому что сначала arg2 переводится из "базы 1" в "базу 0" и _увеличивается_, потом это увеличение берется по модулю, а потом значение возвращается в "базу 1". А величение по сути оказывается уменьшением потому что оно по размеру больше половины модуля.
А вот что они потом с ним делают - непонятно. Что-нибудь типа генерации псевдослучайных чисел в диапазое [0..6]?
no subject
Date: 2019-01-22 07:45 pm (UTC)Во-вторых, для чего бы было нужно принимать три числа, а возвращать число от 0 до 6?
no subject
Date: 2019-01-22 08:42 pm (UTC)no subject
Date: 2019-01-22 11:36 pm (UTC)