Эта проблема была вдохновлена программированием микроконтроллера Arduino. У меня есть 6 светодиодов и 6 кнопок, подключенных к различным контактам на плате. В коде каждой кнопке и индикатору присваивается идентификационный номер (1-6). Номера выводов (в диапазоне 0-13), соответствующие номерам ID, ищутся с помощью switch
оператора. Чисто для развлечения, мне было интересно, switch
можно ли их обойти с помощью арифметической / другой функции просто для того, чтобы ужаснуть будущих разработчиков кода.
Соревнование
Укажите функцию / функции, которые принимают идентификационный номер (целое число) в качестве параметра и возвращают номер контакта (целое число) для 6 светодиодов и / или 6 кнопок без использования условных операторов (нет if
, нет switch
и нет троичного).
Возвращаемые значения для светодиодов:
ID Pin
1 3
2 5
3 6
4 9
5 10
6 11
Возвращаемые значения для кнопок:
ID Pin
1 2
2 4
3 7
4 8
5 12
6 13
Бонус вызов
Обеспечьте единственную функцию, которая принимает идентификационный номер (целое число) и второй параметр (любой тип), указывающий, запрашиваются ли контакты светодиодов или кнопок, и возвращает соответствующий вывод (целое число).
правила
Это не специфичная для Arduino проблема. Используйте любой язык , делайте что хотите.
Изменить: по предложению steveverril , это теперь вызов кода гольф .
Удачи!
(Если вы все еще читаете: хотя это явно абсурдно и произвольно по стандартам программирования, сопоставления основаны на распиновке Arduino Micro. Выводы 0 и 1 зарезервированы для последовательной связи, светодиоды назначены на 6 выводов с наименьшим номером, способных к ШИМ. кнопки назначены оставшимся контактам)
1+(1==1)
?if
,switch
и тройным) от пределов.Ответы:
C, 28 байтов каждый
Это в основном то же самое, что и ответ kirbyfan64sos, но использует массив символов вместо целых и имеет фиктивный первый байт, поэтому нет необходимости вычитать 1 из параметра функции.
источник
Haskell, 24 байта каждый
Проверять:
,
Проверять:
бонус, Haskell, 36 байт
Проверять:
0 для кнопок, 1 для светодиодов.
источник
a f n=n+a f(n+f+div 1f+2)
.С (математика), 32 /
2726 байт (45 для бонусного вызова)Несколько человек опубликовали различные решения для поиска в таблицах, но мне показалось, что я выбрал легкий путь ... Я хотел посмотреть, насколько хорошо я могу справиться с чисто математическими операциями:
Было неясно, была ли одна функция, вызывающая другую, приемлемой или нет; в противном случае
b(i)
вместо этого можно использовать это альтернативное определение (33 байта):Bonus Challenge (45 байт):
(пропуск
t=0
для кнопок,t=1
для светодиодов)источник
C, 36 байтов каждый (49 байтов для бонусного вызова)
Извините ... Я просто не мог с этим поделать ...Хорошо, сейчас я нашел реальное решение.Бонусный вызов, 49 байт
Используйте
f(button,0)
иf(pin,1)
.Живая демоверсия в Ideone.
Оригиналы:
источник
p(i){return"@cefijk"[i]&15;}b(i){return"@bdghlm"[i]&15;}
?Pyth - 12 байтов каждый
База кодирует массив.
Последний на самом деле составляет двенадцать байтов, за исключением того, что я не могу написать возврат каретки, поэтому я избежал его.
Тестовый набор для кнопок .
Тестовый пакет для светодиодов .
источник
M@jC@"\rÝ"H+12*G2
: 0 для пинов и 1 для кнопок должно работать.Пит, Бонус только: 20 байт
параметр # 2 равен 0 для светодиодов, 1 для кнопок. Чтобы получить пин-код для LED4,
g4 0
Я бы опубликовал это как комментарий к записи Maltysen, но я только начал, поэтому мне не хватает необходимой репутации. Я только сегодня начал использовать PYTH и признаю, что бесстыдно адаптировал его метод эффективного кодирования списка.
Если это неуместно, приношу свои глубочайшие извинения, и я удалю свою запись.
источник
MIPS, 16 байтов
Сдвиг и битовая маска. Вход в
$a0
, выход в$v0
.Для бонуса используйте немедленный
0xdc87420
источник
F #, 28 + 28 байт
Я хотел попробовать это без справочной таблицы.
источник
SWI-Пролог, 34 байта каждый
l/2
для светодиодов,b/2
для кнопок.Бонус, 66 байт
S = 0
для светодиодов, все остальное для кнопок.источник
q / k (18 байт каждый)
Просто случай индексации:
Пример:
Бонус (1 байт, с учетом L & B)
Пример:
источник
CJam, 10 байтов каждый
Это анонимные функции. Затем ссылки на онлайн-интерпретатор отображаются в небольшом тестовом жгуте, который выполняет функцию для всех входных значений.
Функция 1 (светодиоды):
Попробуйте онлайн
Функция 2 (кнопки):
Попробуйте онлайн
Я написал небольшую программу, которая генерирует и оценивает эти выражения. Для них обоих было найдено несколько решений с 8 символами (считая выражение только без фигурных скобок), но ни одно с меньшим.
источник
Javascript (ES6), 26/27 байт
светодиоды:
Кнопки:
Если вышеупомянутое не работает (что вероятно), вот hexdump:
Я не мог заставить второй работать с сырым CR, поэтому мне пришлось использовать
\r
Бонус, 41 байт
HexDump
Второй параметр - 0 для светодиодов и 1 для кнопок.
источник
Brainf ** k, 107 байт
Это моя первая написанная вручную программа BF, я не сомневаюсь, что есть несколько вариантов оптимизации. Но это все еще круто. :)
Я не уверен, если
[]
считается условным, хотя ...: /источник
POWERSHELL - 27-27-72
LED используют 1..6 в качестве аргументов
Кнопка использовать 1..6 в качестве аргументов
LED или КНОПКА используют b 1; l 2; б 6; л 5 и т. д. как аргументы
источник
Октава, 40 байт (бонусный вызов)
Используя анонимную функцию:
После определения этой функции, вызовите эту функцию как
ans(x,y)
, где номерx
штыря / кнопки иy
указывает штырь или кнопку со значениями1
и2
соответственно.Попробуйте онлайн
источник
JavaScript
1137466595233 (одна функция)Использование битового сдвига для получения 4-битных значений. Должен быть вызван с p (n, 195650864 или 231240736).
Alternate.
источник
Perl 4 (37 и 31 байт)
Светодиоды (37 байт):
... но он использует таблицу поиска.
Кнопки (31 байт, без поиска):
источник
JavaScript (ES6) 18,22,44
Редактировать Короче но скучно
источник
Python, 31 байт каждый
Не совсем творческий или что-то, но это работает!
Бонус, 44 байта
y
должно быть 0 для светодиодов и 1 для кнопок.источник
Python, 60 + 58 = 118 байт
Это ужасно я даже не знаю, что я здесь делаю ...
Но они довольно интересные, тем не менее! : D
источник
Рубин, 45 байт
Тестовые входы:
источник
Далее 26 байтов каждый, 34 для бонуса
Похоже на версию C от squeamish.
Бонус:
Используйте 0 для светодиодов и 6 для кнопок. И порядок параметров не имеет значения
источник
Pyth, 19 байтов каждый
Для пинов и кнопок соответственно.
источник