powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Программирование [игнор отключен] [закрыт для гостей] / из тестового задания
16 сообщений из 166, страница 7 из 7
из тестового задания
    #39152742
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Достаточно одной функции для шифрования и расшифровки.
В случае расшифровки просто зашифровать дверь номер 0. В результате будет номер закодированной двери.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
// door - номер кодируемой двери
// max_door - максимальный номер двери
// switch_board - массив переключателей
// switch_count - количество переключателей
int crypt(int door, int max_door, bool switch_board[], int switch_count) {
	// требуемое количество переключателей (2^N)
	int mask = 1;
	while (mask <= max_door) {
		mask = mask * 2;
	}
	// Проверка достаточности переключателей
	if(switch_count < mask) {
		printf("Error: Too few switches. Need %d\n", mask);
		return -1;
	}
	// Кодирование
	int ret = door;
	for (int i = 1; i < mask; i++) {
		if (switch_board[i]) ret = ret ^ i;
	}
	return ret;
}

// Пример использования
void test() {
	// Исходное состояние переключателей
	bool sw[40] = { 0 };
	sw[2] = true;
	sw[3] = true;
	// Номер двери, на которую надо указать
	int door_num = 7;
	// Номер переключателя для кодирования
	int switch_for_code = crypt(door_num, 8, sw, 40);
	printf("Change switch %d\n", switch_for_code);
	// Переключение выключателя
	sw[switch_for_code] = !sw[switch_for_code];
	// Получение номера двери
	int door_need = crypt(0, 8, sw, 40);
	printf("Need door %d\n", door_need);
}

...
Рейтинг: 0 / 0
из тестового задания
    #39152793
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Если сделать одну функцию,
то либо потребуется дополнительный параметр, управляющий режимом работы,
либо вызывающая процедура должна сама выполнять часть работы по кодированию.

На мой взгляд, это тот случай, когда две лучше, чем одна )
...
Рейтинг: 0 / 0
из тестового задания
    #39153122
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahovmini.weblab,

тоже спрошу )

А почему бы в качестве Encode/Decode не скопировать мои CodeToNumber, GetNewCode?
В питоне нет сдвигов? )
я хотела записать решение, так как я его понимаю
с битовыми операциями я не очень-то пока дружу, разберусь - поправлю ( работаю по Agile )

Dima TДостаточно одной функции для шифрования и расшифровки.

согласна
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
из тестового задания
    #40118594
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UP. Всё таки отличная задача была.

Я ходил вокруг нее и облизывался. Тоесть я не спешил ее делать. Обычно такие вкусные задачи оставляю
на отпуск на подумать. Но прошло 5 лет и я просто позабыл.

Я помню что последнее я рисовал - фасеты. Для трех комнат - три кружочка с пересечениями и вышло 7 фасетов
по которым нужно было сделать xor.

Но я хотел обобщить этот алгоритм для бОльшего числа комнат. Я помню Шарахов обосновал формулу количества
перключателей и комнат. Давайте добъем задачу и сделаем реализацию для N комнат и произвольного числа
перключателей.

Возможно XOR не единственный вариант и арифметическая сумма - тоже кажется мне идеей интересной хотя-бы
на обсудить.
...
Рейтинг: 0 / 0
из тестового задания
    #40118741
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

ну так в 18708203 все решено в общем виде, только задавай нужный тебе BitCount, табличка сама получится

Код: pascal
1.
2.
3.
4.
const
  BitCount= 2;                            //кол. битов для кодирования номера двери - задать нужное
  MaxNumber= 1 shl BitCount - 1;     //макс. номер двери (мин=0) 
  MaxCode= 1 shl MaxNumber - 1;    //макс. значение кода (мин=0)



функции CodeToNumber и GetNewCode от размерности не зависят
...
Рейтинг: 0 / 0
из тестового задания
    #40118749
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опять Delphi
...
Рейтинг: 0 / 0
из тестового задания
    #40118751
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

а что с ним не так?
...
Рейтинг: 0 / 0
из тестового задания
    #40118754
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да всё нормально. Ворчу.
...
Рейтинг: 0 / 0
из тестового задания
    #40118755
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov
mayton,

а что с ним не так?


кстати тут недавно смотрел одну задачку из школы 42,
у этих ваших сишников прямо-таки душераздирающие решения )))
...
Рейтинг: 0 / 0
из тестового задания
    #40118757
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что за школа?
...
Рейтинг: 0 / 0
из тестового задания
    #40118762
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Что за школа?


Обучение азам программистов в разных странах,
у нас вроде при поддержке сбера,
точно не знаю, велик не мой.

Сама задача известна давно, привожу в их интерпретации.

The game is composed of 2 stacks named a and b.

To start with:
- a contains a random number of either positive or negative numbers without any duplicates.
- b is empty

The goal is to sort in ascending order numbers into stack a.

To do this you have the following operations at your disposal:
sa : swap a - swap the first 2 elements at the top of stack a. Do nothing if there is only one or no elements.
sb : swap b - swap the first 2 elements at the top of stack b. Do nothing if there is only one or no elements.
ss : sa and sb at the same time.
pa : push a - take the first element at the top of b and put it at the top of a. Do nothing if b is empty.
pb : push b - take the first element at the top of a and put it at the top of b. Do nothing if a is empty.
ra : rotate a - shift up all elements of stack a by 1. The first element becomes the last one.
rb : rotate b - shift up all elements of stack b by 1. The first element becomes the last one.
rr : ra and rb at the same time.
rra : reverse rotate a - shift down all elements of stack a by 1. The last element becomes the first one.
rrb : reverse rotate b - shift down all elements of stack b by 1. The last element becomes the first one.
rrr : rra and rrb at the same time.
...
Рейтинг: 0 / 0
из тестового задания
    #40118796
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А от чего душа раздиралась?
...
Рейтинг: 0 / 0
из тестового задания
    #40118799
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98,

от решений, которым не всегда удается
отсортировать 100 случайных чисел даже за 700 ходов.
...
Рейтинг: 0 / 0
из тестового задания
    #40118804
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ясно.
Я не защищаю и не обвиняю, просто вспомнил кубик Рубика. Теоретически там несколько базовых перестановок, и соответственно их комбинации. Казалось бы всё просто, если их расписать подробно.
Но когда берёшь его в руки 1-й раз, 2й, 3-й, то процесс длится о-очень долго, но чаще закончится одной-двумя гранями.
Если воспользоваться готовыми блоками преобразований, то очень часто можно и собрать за несколько минут.
А по телеку видел соревнование - по 10-20 сек, только палцы сверкали. Похожее наблюдал и в транспорте пару лет назад. Как роботы на конвейере. Тренировка.
...
Рейтинг: 0 / 0
из тестового задания
    #40118806
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь другое, не зря же вспомнилась эта задача в этом топике )

700 это гораздо более, чем достаточно.
И вариантов решений более, чем 1.
...
Рейтинг: 0 / 0
из тестового задания
    #40118816
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov

Обучение азам программистов в разных странах,
у нас вроде при поддержке сбера,
точно не знаю, велик не мой.

Сама задача известна давно, привожу в их интерпретации.

The game is composed of 2 stacks named a and b.

To start with:
- a contains a random number of either positive or negative numbers without any duplicates.
- b is empty

The goal is to sort in ascending order numbers into stack a.

Капец задача. Напоминает ханойские башни но с другим API. Не захотел-бы ее решать.
Просто так. Слишком как-то тоскливо что-ли начинать ее делать. Тут мне кажется
надо как-то сильнее замотивировать или чуть снизить порог вхождения.

Раз в сезон я играю в Klotski. Это настольная игра вроде пентамино и пятнашек.
Нужно двигать геометрические фигурки так чтобы они заняли определенное место.
Иногда кажется что капец. Решения не существует. Психуешь. Отставляешь игру.
Потом возвращаешся. И вдруг... задача решается. И погнал дальше по уровням.
А дальше уровни - еще хуже. Те-же фигурки. Но вместо двух мелких добавляется
еще одна крупная. Больше тупиков или альфа-бета отсечений.
...
Рейтинг: 0 / 0
16 сообщений из 166, страница 7 из 7
Форумы / Программирование [игнор отключен] [закрыт для гостей] / из тестового задания
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (7): Анонимы (5), Yandex Bot, Bing Bot 3 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]