Эта проблема была вдохновлена программистским блогом, который я часто посещаю. Пожалуйста, смотрите оригинальный пост здесь: программирование головоломки
Вызов
Определите функцию так f:Q->Q
, чтобы f(f(n)) = -n
для всех ненулевых целых чисел n
и где Q
было множество рациональных чисел.
Детали
На любом языке, который вы предпочитаете, определите одну функцию или программу, f
которая принимает в качестве параметра один номер n
и возвращает или выводит один номер f(n)
.
Ввод может быть осуществлен с помощью любого наиболее естественного для вашего языка механизма: аргумент функции, чтение из STDIN, аргумент командной строки, позиция стека, голосовой ввод, знаки банды и т. Д.
Выходные данные должны быть возвращаемым значением из функции / программы или распечатаны в STDOUT.
Я хотел бы ограничить ответы функциями, которые не используют состояние программы или глобальную память / данные, которые видны снаружи функции f
. Например, сохранение счетчика вне f
этого подсчета подсчитывает, сколько раз f
было вызвано, и просто делать отрицание на основе этого подсчета не очень сложно или интересно для всех. Принятие решений f
должно опираться только на данные в f
лексической области.
Однако это ограничение, вероятно, не подходит для некоторых языков, ориентированных на стек, или для других типов языков, которые не различают эти типы данных или области. Пожалуйста, используйте свое лучшее суждение, чтобы соответствовать духу этой задачи.
счет
Применяются общепринятые правила игры в гольф - ваш счет - это количество байтов в исходном коде.
Минимальный ответ требует, чтобы домен и кодомен f
были подмножеством рациональных чисел Q
. Если вы ограничите свой домен и кодомен f
до целых чисел Z
, то ваш счет - это верхний предел 90% количества байтов в вашем исходном коде.
Баадур
В случае ничьей будет использовано следующее:
- Наименьшее количество печатаемых непробельных символов в вашем исходном коде
- Самая ранняя дата и время подачи ответа
редактировать
Вы не обязаны поддерживать номера произвольного размера. Пожалуйста, интерпретируйте наборы Z
и Q
типы данных на выбранном вами языке (обычно целочисленные и с плавающей запятой соответственно).
Если ваше решение полностью основано на базовой структуре или битовой структуре типа данных, пожалуйста, опишите ее ограничения и способы ее использования.
f:Q->Q
значит?
f
что это функция, отображающая членов Q
(рациональных чисел) в другие члены (возможно, одинаковые) из Q
. см. en.wikipedia.org/wiki/Function_(matmatics)#Notation