Для поста грабителей, машина Cheapo Enigma (Грабители)
Представление полицейского будет состоять из программы / функции, которая принимает один байт данных и возвращает один байт данных. Каждый возможный ввод должен производить уникальный вывод. (Другими словами, ваша функция должна быть биективной)
Грабители попытаются создать вашу обратную функцию, используя как можно более короткий код. Итак, ваша цель - сделать вашу функцию трудной для инвертирования.
Вы не можете использовать встроенные модули, которые имеют единственную цель хеширования или шифрования.
Количество ваших байтов не может превышать 64 байта. 0-байтовые решения не имеют права на выигрыш.
Формат ввода / вывода
8 бит (0 или 1) или целое число-10 в диапазоне 1-256, 0-255 или от -128 до 127. Можно использовать стандартный ввод-вывод или файловый ввод-вывод. Функция также может возвращать значение в качестве вывода. Вход и выход должны принадлежать к одному диапазону (двоичный, 1-256, 0-255 или от -128 до 127). Грабителю также потребуется использовать этот диапазон для ввода и вывода.
счет
Отношение вашего байта к числу лучших попыток грабителя против вас. Самый низкий балл побеждает.
Вы имеете право выиграть (как полицейский), только если грабитель попытался победить вас. (Этот грабитель может быть вы)
пример
C ++, использует диапазон 0-255, 31 байт
int x;
cin>>x;
cout<<(x+1)%256;
Возможна подача грабителем в C ++, 32 байта
int f(int x)
{return x?x-1:255;}
Использование того же языка или аналогичного алгоритма не является обязательным
Это дает оценку 31/32 = 0,97 для полицейского и грабителя.
источник
Ответы:
Javascript,
118 байт, оценка: 8/5Простая реализация серого кода. Для декодирования обычно требуется целый цикл. Посмотрим, кто придет с наименьшей или вообще без петли!
источник
x^x/4
будет сложнее, потому что не должно быть встроенных для него ...^
- побитовый xor, а не возведение в степень. В любом случае это выглядит волшебноC, 64 байта, оценка 64/71 = 0,901
Принимает ввод в диапазоне [0 255].
Попробуйте онлайн! - на TIO (с использованием GCC) это производит:
Обратите внимание, что в других системах он может выдавать другой (но все еще действительный) вывод, поскольку C не требует конкретной
rand
реализации. Мое представление - это версия, работающая на TIO (по ссылке).Я очень разочарован тем, что мне не удалось заставить версию, подобную моей original (
f(x){return rand(srand(x*229))/229%256;}
), работать на TIO, так как я думаю, что она намного элегантнее. Так как это работает только на Clang, работающем на OS X, это не справедливо для конкуренции. Это все еще довольно неловко, чтобы повернуть вспять, так что этого достаточно, я думаю.источник
srand()
, поэтому вам придется решить, приемлемо ли это в этой форме.Желе , 2/5
Попробуйте онлайн, чтобы увидеть всю таблицу.
источник
JavaScript, 44 байта 22/3
Использует лексикографическую сортировку (Javascript Default), чтобы переставить все числа от 0 до 255
Попробуйте онлайн!
источник
C (gcc) ,
3227/30 байтСпасибо Кристофу за игру в гольф 5 байтов.
Попробуйте онлайн!
источник
f(x){x=x?f(x*5+1&255)+1:0;}
счет27/30
.Javascript, 11/8 байт
Домен / диапазон от 1 до 256.
источник
x**3
иx**5
должен работать.JavaScript, 13 байт 13/12
Вход и выход находятся в диапазоне 1-> 256
Попробуйте онлайн!
источник
Javascript, 27/29 байт
Изменить: диапазон / домен 1..256. Генерируется грубой силой, более или менее.
источник
Октава , 16/6
Попробуйте онлайн!
источник
Java, 35 байт
Домен / Диапазон 0-255
источник
Рубин, 23 байта
Диапазон и домен 0..255. Объедините 228 с собой x раз, затем возьмите результат по модулю 257 (от 0 до 0). 228 - это первое магическое число после 9, которое работает для этого диапазона (дает различные значения, которые не включают 256).
источник
Python 3, 55 байт
Домен / Диапазон 0-255.
источник
Python 3, 32 байта 32/23
Домен / Диапазон 0-255.
Перелистывает первые четыре байта с последними четырьмя и добавляет три к первым байтам.
источник
Mathematica, 13 байт
Использует диапазон [1..256], хотя он одинаково действителен для диапазона [0..255]. Чтобы увидеть всю таблицу, скопируйте / вставьте одну из следующих строк кода в песочницу Wolfram :
источник
Brainfuck , 37/11
Попробуйте онлайн!
Не очень хорошо, но диапазон 0-255
источник