Вы , наверное , все знаете 7-сегментный дисплей , который может отображать среди прочего все цифры от :
Вызов
Мы рассматриваем только сегменты , ваша задача - декодировать одну цифру, учитывая, какие сегменты включены.
Это может быть закодировано как 8-битное целое число, вот таблица каждой цифры с их двоичным представлением и соответствующими значениями с прямым и прямым порядком байтов:
Правила и ввод / вывод
- Вход будет одним из
- одно целое число (как в таблице выше одного из двух заданных порядков)
- список / массив / .. битов
- строка, состоящая из символов
ABCDEFG
(вы можете предположить, что она отсортирована, как примерABC
кодирует ), их регистр - ваш выбор (не смешанный регистр)
- Вывод будет цифрой, которую он кодирует
- Вы можете предположить, что недопустимые входные данные (неверный означает, что нет соответствующей цифры)
тесты
Поскольку этот вызов позволяет несколько представлений, пожалуйста, обратитесь к таблице.
Ответы:
JavaScript (ES6), 26 байт
Принимает участие в Little Endian.
Попробуйте онлайн!
источник
Python 3 , 18 байт
Попробуйте онлайн!
Использует входные данные с прямым порядком байтов. Содержит необработанный
\x7F
байт.Python 2 , 27 байт
Попробуйте онлайн!
источник
Wolfram Language (Mathematica) , 41 байт
Попробуйте онлайн!
Использует в качестве входных данных столбец с прямым порядком байтов целых чисел. Игнорировать предупреждение о синтаксисе.
Для ввода X мы сначала берем X mod 41, а затем получаем результат mod 11. Результаты отличаются от mod 11, поэтому мы можем извлечь их из таблицы. Например, 126 mod 41, mod 11 - 3, поэтому, если мы сделаем позицию 3 равной 0, мы получим правильный ответ для ввода 126.
Стол есть
9[,6,0,8,2,3,1,7,5,4]
. Часть 0 это голова, которая есть9
. Часть 1 отсутствует, так что, этоNull
, чтобы сохранить байт: нам никогда не нужно принимать участие 1. Тогда часть 2 - это6
, часть 3 -0
и так далее, как обычно.Ответ Джонатана Аллана дает нам
1[4,9,8,6,2,0,5,3,7][[384~Mod~#~Mod~13]]&
. Это не короче, но это избегает синтаксического предупреждения!Wolfram Language (Mathematica) ,
2725 байт(Здесь есть какой-то персонаж, который не совсем появляется, извините. Нажмите на ссылку ниже, и вы увидите это.)
Попробуйте онлайн!
Это все о грубом принуждении некоторой строки войти внутрь,
Hash
чтобы хэши имели правильные значения mod 11. Более грубое форсирование, вероятно, может привести нас к еще более короткому решению.источник
Желе , 12 байт
Принимает порядковый номер с прямым порядком байтов.
Попробуйте онлайн!
Это наивная реализация, возможно , есть способ получить более краткий код.
источник
Python 2 , 31 байт
Попробуйте онлайн! принимает входные данные в порядке байтов
источник
Java (JDK) , 32 байта
Попробуйте онлайн!
кредиты
источник
JavaScript (Node.js) , 25 байт
Принимает порядковый номер с прямым порядком байтов.
Попробуйте онлайн!
Порты для 31 байта в Python с
lambda n:'1498620537'[384%n%13]
источник
Пробел , 152 байта
Обязательные «S, T и L на самом деле не существуют, это просто видимые представления команд».
Попробуйте онлайн!
Заканчивается ошибкой.
Эквивалентный синтаксис, похожий на ассемблер:
источник
Brainfuck ,
474176154151149137 байтПринимает входную строку восемь
0
и1
включая первый0
десятичную точку.(как во втором столбце таблицы в посте)
Выходные цифры от 0 до 9.
Попробуйте онлайн!
Алгоритм
Наблюдая за состоянием определенного сегмента, мы можем разбить набор возможных цифр на меньшие подмножества. Ниже приведено статическое двоичное дерево поиска, используемое в моем коде. Левое поддерево соответствует состоянию ON сегмента, правое соответствует состоянию OFF сегмента.
Некоторые наблюдения полезны для игры в гольф
+++++
для обоих значений, а затем+
только для шести.+
команд, если заранее добавим 2 к выходному значению. В этом случае нам нужно только уменьшить его0
и1
получить преимущество для других цифр.источник
Сетчатка , 96 байт
Попробуйте онлайн! Возможно, это не лучший способ, но это интересный способ программирования в Retina. Объяснение:
Пытается запечатлеть интересные случаи. Положительные снимки просто фиксируют письмо, если оно присутствует. Следовательно, длина захвата равна 1, если он присутствует, и 0, если он отсутствует. Частными случаями являются снимки 4 и 6, которые существуют, только если D или E отсутствуют соответственно. Они могут быть выражены только в десятичной системе счисления , как
$#4
и ,$#6
но это все , что нам нужно здесь. Захваты затем строятся в строку, длина которой является желаемым числом. Например, если мы напишем,6*$1
то эта строка имеет длину 6, если A присутствует, и 0, если она отсутствует. Чтобы выбрать между различными выражениями, мы используем$.
(для положительных значений) или$#
(для отрицательных значений) значения, равные 0 или 1, и это можно затем умножить на строку.F
повторяется 6 раз иB
дважды (путем конкатенации, так как это гольфер). Тем не менее, результат игнорируется, если обаE
иG
присутствуют. Это обрабатывает случаи2
,6
и8
.F
повторяется 5 раз, и, еслиB
присутствует, добавляется шестой раз плюс дополнительные 3 (представленные константной строкой длины 3). Тем не менее, результат игнорируется, еслиD
он присутствует иE
отсутствует. Это обрабатывает случаи3
,5
и9
.A
повторяется 6 раз,G
повторяется 3 раза и1
добавляется дополнительный (представленный постоянным символом между ними, потому что он гольфист). Однако результат игнорируется, еслиD
отсутствует. Это обрабатывает случаи1
,4
и7
.Вышеуказанные строки затем объединяются и длина берется. если ничего из вышеперечисленного не применимо, строка не генерируется, и поэтому ее длина равна
0
.Результирующие строки (до определения длины) выглядят следующим образом:
источник
MATL , 14 байтов
Ввод - это число, представляющее сегменты в формате с прямым порядком байтов.
Попробуйте онлайн!
объяснение
источник
Perl 5- пл, 24 байта
Попробуйте онлайн!
Принимает младшие порядковые числа.
источник
Рубин , 29 байт
Попробуйте онлайн!
источник
Japt, 15 байт
Принимает значение с прямым порядком байтов в качестве входных данных.
Попытайся
объяснение
Строка содержит символы в каждой из кодовых точек значений с прямым порядком байтов;
Ud
получает символ в коде ввода иb
находит его индекс в строке.источник
Нейм , 15 байт
Объяснение:
Попробуйте онлайн!
источник
Stax , 12 байт
Запустите и отладьте его
Входные данные представляют собой целое число с прямым порядком байтов.
Он использует ту же строковую константу, что и решение Luis MATL.
источник
TI-BASIC (серия TI-83 + / 84 +), 15 байтов
Использует младший порядок ввода. Хеши довольно распространены в TI-BASIC, поэтому я написал хеш-функцию brute-forcer для подобных случаев.
Нам немного повезло, так как множитель имеет длину 9 цифр, а не ожидаемые 10.
источник
05AB1E ,
17161512 байт-1 байт благодаря @ErikTheOutgolfer .
-1 байт, создав порт ответа @MishaLavrov 's Mathematica .
-3 байта благодаря @Grimy .
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
Посмотрите эту подсказку 05AB1E (раздел Как сжать большие целые числа? ), Чтобы понять, почему
•NŽyf¯•
это так99608231754
.источник
128в
. Забыл, что есть встроенный для128
того, чтобы быть пополам256
. Благодарность!¦C•26¤æÈÛµÀš•2ô₂+sk
(19).Древесный уголь, 17 байт
Попытайся!
Порт Япта ответ .
источник