Начался 8-й конкурс Underhanded C для программистов-хакеров Как сообщает Dezbo со ссылкой на первоисточник, по условиям конкурса Underhanded C, исходный код программы должен быть читаемым, ясным, простым и совершенно невинным для постороннего взгляда. При этом программа выполняет некую вредоносную функцию, которая совершенно не очевидна при изучении исходного кода. В этом году конкурсное задание основано на реальной проблеме контроля за ядерными вооружениями. Задание составлено совместно с некоммерческой организацией Nuclear Threat Initiative, которая борется с ядерным, химическим и биологическим оружием, отслеживая состояние ядерных программ во всех странах мира. По правилам, программа должна обработать исходные данные и подделать результат обработки. Приз за победу — $1000. ЗаданиеДве страны, Народная Славная Демократическая Республика Элис (НСДРЭ) и Славная Демократическая Народная Республика Боба (СДНРБ), договорились о соглашении по ядерному разоружению. На практике договор предусматривает визит инспекторов в каждую страну для проверки наличия в боеголовках ядерных материалов, таких как плутоний, после чего боеголовки могут быть уничтожены. В идеале, инспекторам хорошо бы лично осмотреть боеголовки и изучить радиограмму либо гамма-спектрограмму объектов, чтобы убедиться, что это настоящие боеголовки, а не фальшивка. Но каждая из стран противится такому исследованию, потому что не хочет выдавать секреты своей ядерной программы. В то же время и НСДРЭ, и СДНРБ желают быть уверенными, что другая сторона уничтожает настоящие боеголовки, а не фейковые. Чтобы решить проблему, обе стороны договорились разработать детектор радиоактивных материалов с «информационным барьером», а именно — компьютерной программой, которая берёт результаты сканирования, определяет соответствие определённому шаблону и выдаёт ответ: только «да» или «нет». Задача конкурсантов — написать функцию, которая сравнивает результаты тестовых измерений с эталонным шаблоном: где test и reference — одномерные массивы шириной bins, которые соответствуют спектру гамма-излучения проверяемой боеголовки и эталонной боеголовки, соответственно. Ваш детектор должен выдать результат "1" («да»), если два массива совпадают в существенной степени, или результат "0" («нет»), если два массива не совпадают. Для настройки чувствительности детектора используется параметр threshold. Можно использовать любую формулу для проверки близости test[] и reference[]. Больше очков дадут за использование стандартных формул сравнения. «Секретная» часть программы. Каким-то образом функция match() выдаёт результат "1" («да»), даже если ядерный материал в боеголовке отсутствует. Такой результат должен быть вызван некими специальными условиями, которые организует принимающая страна. При этом в остальном детектор работает нормально и выдаваёт "0" («нет»), если специальные условия отсутствуют, а результат test[] не соответствует reference[]. Конкурс стартовал 15 августа. Образцы программ принимают на адрес underhandedC@gmail.com до 15 ноября 2015 года. Результаты объявят в январе.