задача
Задача состоит в том, чтобы отобразить любое из 128 возможных состояний 7-сегментного дисплея .
Ваша программа должна принимать строку из 7 символов («битов»), которые либо либо, 0
либо 1
. Первый бит ввода соответствует сегменту A следующей иллюстрации, второй - B и т. Д. (Игнорировать dp
):
То, как вы представляете дисплей, зависит от вас - один символ Unicode или ASCII , графическое изображение ASCII или что угодно, что вы можете придумать. Однако каждый вход должен иметь свой собственный выход. Если вы придумали что-то необычное, я уверен, что вы можете собрать положительные голоса, демонстрируя некоторые примеры.
Все 128 возможных состояний дисплея:
правила
- Codegolf
- Как я уже сказал, разрешен любой вид вывода, но было бы неплохо, если бы вы его указали.
- Вводом может быть стандартный ввод или аргумент командной строки.
Примеры
вход
1101101
Выход
Как ASCII / Unicode:2
Различные виды искусства ASCII (я не слишком хорош в этом)
_ ╺┓ ╒╗ ---
_| ┏┛ ╔╝ |
|_ ┗╸ ╚╛ ---
|
---
Ответы:
J (51)
выход:
источник
1 2 1#"1' #'{~5 3$,0,.502 A.".&>1!:1]1
.С, 106
Размер составляет 74 символа, если разрешено переименовывать программу "W00WG5WW1GW66WG4WW2GW33WG"
Бег:
заметки:
«W» и «G» (0x47 и 0x57) выбраны так, что значение & 7 = 7, то есть они безопасно индексируют нулевой символ, заканчивающий входную строку.
источник
Brainfuck - 224
Печать с использованием восклицательных знаков:
Не самый читаемый, но и не слишком ужасный.
Удивлен тем, как близко это не быть последним местом.
источник
Постскриптум
121107требуется
n
определить как строку для обработки, так что вызывать какполучить
полный комплект
источник
Mathematica:
135129118, отображение изображенияпробелы добавлены "для наглядности"
редактировать
Для требовательных пользователей сайта: без использования внешней маски:
источник
&
.&
.APL,
5855Пример ввода:
Выход:
⍞='1'
принимает входные данные как массив символов и преобразует их в числовой массив.1 2 2 1 2 2 1×⍞='1'
преобразует этот массив в:0
для пустых,1
для_
,2
для|
(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]
назначить этот массив переменнойx
и переупорядочить для представления сегментов F, G, B, E, D, C0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]
соединяет пробел, сегмент A и еще один пробел вперед3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]
преобразовать в матрицу 3x31+3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]
преобразует в индексирование на основе 1Наконец, использует строку
' _|'
для преобразования указателей в символыредактировать
Срезал 3 символа, конкатенируя a
0
перед массивом и используя дублированные знаки, предотвращая присвоение переменнойисточник
{
1 символ короче индексации скобок[]
.PHP 66 байт
Небольшое улучшение , используя
md5
волшебную формулу, но требует 3 дополнительных двоичных байт:¡
,æ
иÚ
являются символы 161, 230 и 218 соответственно. Он должен работать как есть, если непосредственно скопирован и сохранен в формате ANSI.PHP 73 (70) байт
Если вы позволите мне три двоичных символа, это может быть уменьшено до 70 байт :
где
ƒ
,ß
иõ
это символы 131, 223 и 245 соответственно.Получает входные данные в качестве аргумента командной строки. Пример использования:
источник
php.ini
(по умолчанию они уже есть), либо для тестирования вы можете добавить в скрипт следующий код:<? error_reporting(E_ALL & ~E_NOTICE); ?>
JavaScript + jQuery + HTML + CSS (
210201)Это решение использует спрайты CSS и изображение, представленное в качестве примера :
HTML (3)
CSS (
8271)Спасибо xem за трюк " background: url ":
JavaScript (125 после удаления новых строк добавлено здесь для удобства чтения)
Онлайн тест: http://jsfiddle.net/zhqJq/3/
источник
<p>
тег и избегатьdisplay:block
CSS для экономии местаR (65 символов):
Полагается на некоторые свободные приближения для некоторых трансцендентных чисел ...
источник
Python 2 - 65
Пример:
источник
PostScript:
53 двоичных, 87 ASCII52 двоичных, 86 ASCIIHexdump программы с использованием бинарных токенов:
Загрузите этот файл, чтобы опробовать его.
Использование токенов ASCII:
Первый
forall
цикл помещает все необходимые координаты в стек. Координаты хранятся в строке, чтобы минимизировать требуемое пространство. Координаты в обратном порядке, то есть последние 4 символа для сегмента А. Мы рисуем линию из(0,8)
до(4,8)
для этого сегмента (на самом деле, мы должны добавить 48 ко всем координатам, потому чтоforall
все ASCII-коды помещаются в стек).Вторая
forall
перебирает все0
s и1
s во входной строке и превращает их в значение серого.0
s отображаются белым (значение серого 1) и1
s - черным (значение серого 0). Затем мы используем координаты, что первыйforall
цикл оставил в стеке, чтобы нарисовать линии.Вызовите программу, используя Ghostscript, как у Джеффа Риди:
Это отображает:
источник
neg 49 add
(что удивительно, кстати) с1 and
.not 1 and
, верно? Сохраняет один байт как в ASCII, так и в двоичном формате.bitshift
это такое длинное слово.APL
101 86 7369Ввод с экрана через ⍞
Который производит матрицу символов 9x5, состоящую из пробелов и ⎕, следующим образом:
Семизначное число преобразуется в вектор разделения для выбора ⎕ координат.
источник
Mathematica
1121031009688, используя графикиисточник
[123]
[123], ниIntegerDigits[123]
работа для меня. Я получаю толькоz
без выделения.Python (107)
Определенно более пригодный для игры в гольф.
Выход:
Объяснение:
источник
Python 2.7 (93 символа):
Объяснение:
С вводом stdin используйте импровизированный троичный оператор, чтобы задать
*
для true и пробел для false. Возьмите эти значения и вставьте их в оператор формата в формате 7-значного дисплея. Было бы не более 83 символов, если бы дисплей работал так:но заказ делает это дольше. У кого-нибудь есть способ обойти это?
Пример:
источник
print' {0}\n{5} {1}\n {6}\n{4} {2}\n {3}'.format(*[' *'[i=='1']for i in raw_input()])
) Нет необходимости в скобках и месте для оператора print.>'0'
вместо=='1'
иinput()
(с галочкой вокруг, но это не будет отображаться из-за форматирования здесь) вместоraw_input()
.x = `input()`
Я думал, что нам нужен нерешительный ответ ...
Clojure, 159 символов
Выше будет работать в REPL и даст правильный ответ. Например:
Кидаю цифры в него с небольшими модификациями:
выходы:
Не легко читать, но они есть!
источник
Javascript 123
Я могу уменьшить количество символов (101), если мы используем только один символ для состояния «включено», но оно менее разборчиво:
источник
Постскриптум 136
Не победитель, но другой подход.
Ожидается, что входная строка будет в стеке:
Это еще хуже. 294, чтобы сделать «двоичное» растровое изображение. Мне потребовалось некоторое время, чтобы вспомнить, что каждый ряд дополняется четным байтом. Таким образом, битовая карта 3x5 составляет пять байтов со значительными битами 3 мсек.
Вывод такой же уродливый, как и другой. :(
Хорошо, вот тот, который выглядит хорошо. 190
Изменить: это было вверх ногами и назад. Исправлено сейчас.
источник
Mathematica 264
Чтобы вывод выглядел правильно, потребовалось много байтов, так что на этот раз не было сигары. Но в любом случае вот подробный код (264 символа).
Полный набор символов:
Цифры:
источник
PHP - 155 символов
это будет 150 символов, если мы используем декларацию массива php 5.4, но у меня не установлено это на моем ноутбуке, поэтому я не смог его протестировать.
Образец ставит.
Объяснение:
Сначала я разделил 7-сегментный дисплей на пять строк и 3 столбца. С 1-й, 3-й и 5-й строкой havimg '-' в средней колонке и пробел в противном случае.
Во 2-м и 4-м ряду есть труба '|' символ в первом и последнем столбце. Теперь наличие этих символов следует ориентировать на вводимые значения.
Я создал справочную таблицу, которая в основном состоит из двух справочных таблиц. Первый для расчета значений для 1-го, 3-го и 5-го ряда. И еще один со смещением 2 (3-й элемент) для расчета строк 2-го и 4-го.
источник
Java - 204 символа
Образец вывода:
Отформатировано правильно:
Жаль, что я мог бы избежать этого для цикла, но я попробовал несколько других вещей, и все они были дольше. Вероятно, есть лучший способ сделать это, но это моя первая попытка кода в гольф. (И Java для меня как худший язык, поэтому я подумал, что это будет интересно.) Даже Brainfuck заставил меня победить, но, по крайней мере, мой результат выглядит лучше.
РЕДАКТИРОВАТЬ: может избавиться от "общественности" на уроке, экономит мне 7 символов!
И спасибо, Даниеро, за показ мне printf! (18 символов сохранены)
Переписан формат вывода, изменены литералы символов на десятичные, сохранены 12 символов.
источник
printf
метод несколько версий назад, который в основномprintln
иformat
в одной (как функция C); Это спасет вас от некоторых персонажей,for
цикла и часть обновления в один, сохранив один символ:for(int i=7;i>0;c[--i]=a[0].charAt(i)==49?(i%3==0?95:'|'):32);
VBA - 263
Это некрасиво, но это работает, я думаю. У меня проблемы с просмотром правильного порядка бит, поэтому я делаю выводы из ответов других. Даже если этот фрагмент неправильный, длина кода должна оставаться неизменной.
источник
VBScript - 178 символов
источник
CJam - 29
CJam - это новый язык, который я разрабатываю, похожий на GolfScript - http://sf.net/p/cjam . Вот объяснение:
l
считывает строку из ввода0
является число 0N
является переменной preinitialized к новой строки строки]
собирает элементы на стеке в массивs
преобразует значение (массив) в строку, таким образом , добавление нулевого и перевод строки к данному входу7078571876784728737
является число (то же число, которое я использовал в python, но там было шестнадцатеричное число)A
- переменная, предварительно инициализированная до 10,b
выполняет базовое преобразование, генерируя массив [7 0 7 8 ... 3 7],\
меняющий последние два значения в стекеf=
применяет=
оператор (здесь, доступ к индексированному массиву) к входной строке (плюс ноль и новая строка) и каждому числу 7, 0, 7, ...Индекс 7 соответствует добавленному нулю, а 8 соответствует добавленной новой строке.
Мое решение на Python делает то же самое (за исключением разделения цифр с помощью преобразования строк)
источник
VBA, 188 символов
Обратите внимание, что необходимо набрать 188 символов, если только они включают обязательные пробелы - IDE расширяет его, когда вы копируете его в редактор VBA.
К сожалению, VBScript не имеет строго типизированного байтового массива, или этот метод может быть намного короче.
источник
Javascript (ECMAScript 2016) - 108 байт
Это, вероятно, может быть дальше, но я не могу думать ни о чем.
источник
JavaScript, 148 байт
Попробуйте онлайн! (Нижний колонтитул Node.js для чтения
.input.tio
)Принимает ввод ABCDEFG в двоичных флагах и возвращает:
источник
SmileBASIC, 136 байт
Вывод графический.
источник
05AB1E , 4 байта
Попробуйте онлайн или проверьте все возможные входы .
См проверить все возможные входы ссылку выше, чтобы увидеть отображение, используемое для каждого входа.
Объяснение:
Это нарушает правила, где говорится:
Альтернатива больше в духе задачи с использованием выходного формата:
38 байт :
Можно определенно играть в гольф ..
Попробуйте онлайн или проверьте все возможные входы .
Объяснение:
Посмотрите эту подсказку 05AB1E ( раздел Как сжать большие целые числа? ), Чтобы понять, почему
•L7ו
это так1367524
.источник
PHP 5.6, 65 байтов обычного ASCII
или, без завершающего переноса строки, но с немного побитовой забавой:
Запустите как трубу с
-nR
или попробуйте их онлайн .разбивка 1
разбивка 2
источник