Эмулировать 7-сегментный дисплей

24

задача

Задача состоит в том, чтобы отобразить любое из 128 возможных состояний 7-сегментного дисплея .

Ваша программа должна принимать строку из 7 символов («битов»), которые либо либо, 0либо 1. Первый бит ввода соответствует сегменту A следующей иллюстрации, второй - B и т. Д. (Игнорировать dp):

7SEG

То, как вы представляете дисплей, зависит от вас - один символ Unicode или ASCII , графическое изображение ASCII или что угодно, что вы можете придумать. Однако каждый вход должен иметь свой собственный выход. Если вы придумали что-то необычное, я уверен, что вы можете собрать положительные голоса, демонстрируя некоторые примеры.

Все 128 возможных состояний дисплея:

состояния

правила

  • Codegolf
  • Как я уже сказал, разрешен любой вид вывода, но было бы неплохо, если бы вы его указали.
  • Вводом может быть стандартный ввод или аргумент командной строки.

Примеры

вход

1101101

Выход

Как ASCII / Unicode:
2
Различные виды искусства ASCII (я не слишком хорош в этом)
 _   ╺┓  ╒╗   ---
 _|  ┏┛  ╔╝     |
|_   ┗╸  ╚╛   ---
              |
              ---
daniero
источник
Тесно связан с codegolf.stackexchange.com/questions/997/… ?
DavidC
@DavidCarraher: они связаны, да; Я даже сам связался с этим. Однако я бы сказал, что это немного сложнее, поскольку у вас есть еще 118 «чисел» для генерации. Большинство (?) Ответов на другой вопрос здесь не сработают, или их придется сильно переписать. Кроме того, здесь вам не нужно кодировать разные числа, поэтому возможны другие оптимизации.
Даньеро
Ты прав. Спасибо что подметил это.
DavidC
это требование, чтобы мы использовали предоставленную вами кодировку? Например, «1101101» всегда должен представлять «2»?
ardnew
@ardnew: да. Положение входных битов должно отображаться в алфавитном порядке сегментов от A до G на первом рисунке.
Даниеро

Ответы:

5

J (51)

1 2 1#"1[5 3$' #'{~,|:>0;(88707#:~7#7){>".&.>1!:1[1

выход:

1101101
 ## 
   #
 ## 
#   
 ## 
Мэринус
источник
1
Это может быть выбриты до 38 полукокса с небольшим усилием: 1 2 1#"1' #'{~5 3$,0,.502 A.".&>1!:1]1.
алгоритмическая
16

С, 106

Размер составляет 74 символа, если разрешено переименовывать программу "W00WG5WW1GW66WG4WW2GW33WG"

main(int i,char**s){
    for(s[0]="W00WG5WW1GW66WG4WW2GW33WG";i=*s[0]++;putchar(s[1][i&7]-49?i==71?10:32:42));
}

Бег:

./a.out 1101101
 ** 
   *
 ** 
*   
 ** 

заметки:

«W» и «G» (0x47 и 0x57) выбраны так, что значение & 7 = 7, то есть они безопасно индексируют нулевой символ, заканчивающий входную строку.

ребенок кролика
источник
15

Brainfuck - 224

++++++++++[>+>+++<<-]
>>++>,>,>,>,>,>,>,
<<<<<<<.
>[<+.->-]<<.
>>
>>>>>[<<<<<+<+>>>>>>-]<<<<<<.>[<->-]<.>>[<<+.->>-]<<<.>.
>>>>>>>[<<<<<<<+.->>>>>>>-]<<<<<<<<.
>>>>>>[<<<<+<+>>>>>-]<<<<<.>[<->-]<.
>>>[<<<+.->>>-]<<<<.>.
>>>>[<<<<+.>]

Печать с использованием восклицательных знаков:

 ! 
! !
 !
! !
 !

Не самый читаемый, но и не слишком ужасный.

Удивлен тем, как близко это не быть последним местом.

captncraig
источник
13

Постскриптум 121 107

1 12 moveto{}5 0{0 -5 rmoveto}0 5 0 5 -5 0 0 -5 0 -5 5 0
n{49 eq{rlineto}{rmoveto}ifelse exec}forall stroke

требуется nопределить как строку для обработки, так что вызывать как

gs -g7x14 -sn=1101101 lcd.ps

получить

образ номер два

полный комплект

полный набор символов

Джефф Риди
источник
11

Mathematica: 135 129 118, отображение изображения

Image[MorphologicalComponents@Import@"http://goo.gl/j3elE" /. 
      Thread[Range@7 -> IntegerDigits[#, 2, 7][[{7, 2, 6, 1, 3, 5, 4}]]]] &

пробелы добавлены "для наглядности"

введите описание изображения здесь

редактировать

Для требовательных пользователей сайта: без использования внешней маски:

Image[MorphologicalComponents[ColorNegate@Rasterize@8, CornerNeighbors -> False] /. 
    Thread[Range@7 ->IntegerDigits[#, 2, 7][[{7, 2, 6, 1, 3, 5, 4}]]]] &
Доктор белисарий
источник
Код представляется неполным. Я не думаю, что вы хотели, чтобы ваша программа заканчивалась &.
DavidC
@DavidCarraher Это функция , поэтому она заканчивается &.
Доктор Велизарий
Да, но это ни к чему не относится. Как получить выход?
DavidC
2
@belisarius Мне все еще не нравится тот факт, что вы встраиваете внешние ресурсы.
FUZxxl
1
Я думаю, что нет смысла удалять мой предыдущий комментарий, так как это усложнит кому-то еще следить за этим обсуждением. Вы импортируете внешние данные, которые забавны как шутка, но не являются частью серьезного кода. -1
FUZxxl
10

APL, 58 55

' _|'[1+3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]]

Пример ввода:

1101101

Выход:

 _ 
 _|
|_ 

⍞='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, C

0,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] преобразовать в матрицу 3x3

1+3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3] преобразует в индексирование на основе 1

Наконец, использует строку ' _|'для преобразования указателей в символы


редактировать

' _|'[1+3 3⍴(0,1 2 2 1 2 2 1×⍞='1')[1 2 1 7 8 3 6 5 4]]

Срезал 3 символа, конкатенируя a 0перед массивом и используя дублированные знаки, предотвращая присвоение переменной

TwiNight
источник
Если ваш APL это поддерживает, я думаю, что функция from на{ 1 символ короче индексации скобок [].
Люсер Дрог
9

PHP 66 байт

<?for(;11>$i;)echo++$i&3?$argv[1][md5(¡æyÚ.$i)%8]?$i&1?~ƒ:_:~ß:~õ;

Небольшое улучшение , используя md5волшебную формулу, но требует 3 дополнительных двоичных байт:
¡, æи Úявляются символы 161, 230 и 218 соответственно. Он должен работать как есть, если непосредственно скопирован и сохранен в формате ANSI.


PHP 73 (70) байт

<?for($s=327638584;3<$s;)echo++$i&3?$argv[1][7&$s/=8]?$i&1?'|':_:' ':'
';

Если вы позволите мне три двоичных символа, это может быть уменьшено до 70 байт :

<?for($s=327638584;3<$s;)echo++$i&3?$argv[1][7&$s/=8]?$i&1?~ƒ:_:~ß:~õ;

где ƒ, ßи õэто символы 131, 223 и 245 соответственно.

Получает входные данные в качестве аргумента командной строки. Пример использования:

$ php seven-seg.php 1101101
 _
 _|
|_

$ php seven-seg.php 0111011

|_|
 _|
Примо
источник
Я пытался запустить ваш код, но получаю
массу
1
@ D34dman Единственные сообщения, которые он выдаст, - это уведомления (неопределенные переменные и т. Д.). Их можно либо отключить в php.ini(по умолчанию они уже есть), либо для тестирования вы можете добавить в скрипт следующий код:<? error_reporting(E_ALL & ~E_NOTICE); ?>
primo
здорово! Я получил это работает: D Naice!
D34dman
7

JavaScript + jQuery + HTML + CSS ( 210 201)

Это решение использует спрайты CSS и изображение, представленное в качестве примера :

HTML (3)

<a>

CSS ( 82 71)

Спасибо xem за трюк " background: url ":

a{background:url(//bit.ly/VesRKL);width:13px;height:23px;display:block}

JavaScript (125 после удаления новых строк добавлено здесь для удобства чтения)

i=prompt();
x=-parseInt(i.substr(0,3),2)*23;
y=-parseInt(i.substr(3),2)*13.75;
$('a').css('background-position',y+'px '+x+'px');

Онлайн тест: http://jsfiddle.net/zhqJq/3/

Кристиан Лупаску
источник
1
Эй, а как насчет 17,937 байт изображения ?? ;)
Томас В.
@ThomasW. Я не знаю, стоит ли это учитывать. Давайте оставим это на усмотрение ОП.
Кристиан Лупаску,
Вы можете использовать <p>тег и избегать display:blockCSS для экономии места
Роберто Мальдонадо
background-image: url ( bit.ly/VesRKL ); => background: url (// bit.ly/VesRKL);
xem
@ xem спасибо за совет; Я отредактировал свой ответ
Кристиан Лупаску
6

R (65 символов):

plot((3^(1i*1.5:-4.5)*(1:7!=7)),col=strsplit(readline(),'')[[1]])

Полагается на некоторые свободные приближения для некоторых трансцендентных чисел ...

Патрик Калдон
источник
6

Python 2 - 65

s=raw_input()+'0\n'
for i in`0x623C239E38D2EAA1`:print s[int(i)],

Пример:

echo 1101101|python2 7seg.py
0 1 0 
0 0 1 
0 1 0 
1 0 0 
0 1 0
aditsu
источник
5

PostScript: 53 двоичных, 87 ASCII 52 двоичных, 86 ASCII

Hexdump программы с использованием бинарных токенов:

$ hexdump -C lcd_binary.ps 
00000000  28 34 34 30 34 30 38 30  34 30 34 30 30 30 30 34  |(440408040400004|
00000010  30 34 30 34 34 34 34 34  38 34 38 30 38 29 7b 7d  |0404444484808){}|
00000020  92 49 6e 7b 92 70 31 92  04 92 96 92 6b 92 63 92  |.In{.p1.....k.c.|
00000030  a7 7d 92 49                                       |.}.I|
00000034

Загрузите этот файл, чтобы опробовать его.

Использование токенов ASCII:

(4404080404000040404444484808){}forall
n{not 1 and setgray moveto lineto stroke}forall

Первый forallцикл помещает все необходимые координаты в стек. Координаты хранятся в строке, чтобы минимизировать требуемое пространство. Координаты в обратном порядке, то есть последние 4 символа для сегмента А. Мы рисуем линию из(0,8) до(4,8) для этого сегмента (на самом деле, мы должны добавить 48 ко всем координатам, потому чтоforall все ASCII-коды помещаются в стек).

Вторая forallперебирает все 0s и 1s во входной строке и превращает их в значение серого. 0s отображаются белым (значение серого 1) и1 s - черным (значение серого 0). Затем мы используем координаты, что первыйforall цикл оставил в стеке, чтобы нарисовать линии.

Вызовите программу, используя Ghostscript, как у Джеффа Риди:

gs -sn=1101101 lcd.ps

Это отображает: Образец вывода

Томас В.
источник
Я думаю, что вы можете заменить neg 49 add(что удивительно, кстати) с 1 and.
Люсер Дрог
@luserdroog: Блестящие побитовые операторы, не думали о них. Но это должно быть not 1 and, верно? Сохраняет один байт как в ASCII, так и в двоичном формате.
Томас В.
Я чувствую, что должен быть аккуратный способ с 1-битным растровым изображением. но bitshiftэто такое длинное слово.
Люсер Дрог
Но это всего лишь двухбайтовый двоичный токен
Томас В.
Да. Но это все равно похоже на читерство для меня. :) Я чувствую, что мне нужно сделать как можно больше с читаемым источником, прежде чем прибегнуть к бинарному.
luser droog
4

APL 101 86 73 69

m←45⍴' '⋄m[¯40+⎕av⍳(⍎∊3/' ',¨⍕⍞)/')*+16;EJOQRSAFK-27=>?']←'⎕'⋄9 5⍴m

Ввод с экрана через ⍞

1101101

Который производит матрицу символов 9x5, состоящую из пробелов и ⎕, следующим образом:

 ⎕⎕⎕
     ⎕
     ⎕
     ⎕
 ⎕⎕⎕
⎕
⎕
⎕
 ⎕⎕⎕

Семизначное число преобразуется в вектор разделения для выбора ⎕ координат.

Грэхем
источник
Моя голова болит ...
Роб
4

Mathematica 112 103 100 96 88, используя графики

HighlightGraph[z=GridGraph@{3,2},Pick[EdgeList[z][[{3,4,1,2,6,7,5}]],Characters@#,"1"]]&

введите описание изображения здесь

Using it to show a calculator display

l = {7-> 7, 1-> 6, 0-> 63, 8-> 127, 9-> 111,3 -> 79, 5-> 109,  2-> 91, 4-> 102, 6-> 125}; 
GraphicsRow[
  HighlightGraph[z = GridGraph[{3,2}, EdgeStyle-> {White}, GraphHighlightStyle-> {"Thick"}], 
    EdgeList[z][[{3, 4, 1, 2, 6, 7, 5}]][[IntegerDigits[#, 2, 7] Range@7]]] & /@
            (IntegerDigits[8736302] /. l)]

Математическая графика

Доктор белисарий
источник
Какой вклад вы ожидаете? Ни [123][123], ни IntegerDigits[123]работа для меня. Я получаю только zбез выделения.
DavidC
@dude Try `HighlightGraph [z = GridGraph @ {3, 2}, Pick [EdgeList [z] [[{3, 4, 1, 2, 6, 7, 5}]], символы @ #," 1 "] ] & @ "1111111" `` :)
Доктор Белизарий
3

Python (107)

Определенно более пригодный для игры в гольф.

a=map(int,raw_input())
for i in(0,6,3):print' .. '*a[i]+('\n'+' .'[a[5-i/6]]+'  '+' .'[a[1+i/6]])*(2*(i!=3))

Выход:

1101101
 .. 
   .
   .
 .. 
.   
.   
 .. 

Объяснение:

a is a list of booleans extracted from the input.
When you multiply a string with a number, it will return the string repeated (number) times.
If that number happens to be zero, it returns an empty string.
i is iterated through 0 (pos A), 6 (pos G), and 3 (pos D).
' .. ' will print either section A, G, or D, depending on the value of i.
([string here])*(2*(i!=3)) will print [string here] twice only if i!=3.
Breaking down [string here]:
 - '\n' will print a newline for each repetition.
 - '  ' is the null space between horizontal sections.
 - ' .'[(bool)] will return either ' ' if (bool) is 0, and '.' if (bool) is 1.
 - 5-i/6 will return 5 if i=0 and 4 if i=6. a[5] is section F and a[4] is section E.
 - 1+i/6 will return 1 if i=0 and 2 if i=6. a[1] is section B and a[2] is section C.
beary605
источник
3

Python 2.7 (93 символа):

print (' {0}\n{5} {1}\n {6}\n{4} {2}\n {3}').format(*map(lambda x:int(x)and'*'or' ',raw_input()))

Объяснение:

С вводом stdin используйте импровизированный троичный оператор, чтобы задать *для true и пробел для false. Возьмите эти значения и вставьте их в оператор формата в формате 7-значного дисплея. Было бы не более 83 символов, если бы дисплей работал так:

 a
b c
 d
e f
 g

но заказ делает это дольше. У кого-нибудь есть способ обойти это?

Пример:

$ ./7seg.py
111000

 *
  *

  *

$ ./7seg.py


1111111

 *
* *
 *
* *
 *
разбойник
источник
1
Хорошо, но эта лямбда кажется ненужной:; print' {0}\n{5} {1}\n {6}\n{4} {2}\n {3}'.format(*[' *'[i=='1']for i in raw_input()])) Нет необходимости в скобках и месте для оператора print.
Даниеро
Вот Это Да! Я не знал, что вы можете поместить логические значения в индексаторы. Спасибо :-)
Разбойник
Np. Кроме того, >'0'вместо =='1'и input()(с галочкой вокруг, но это не будет отображаться из-за форматирования здесь) вместо raw_input().
Даниеро
к вашему сведению, вы можете использовать тройные обратные кавычки, если вам нужны обратные кавычки в кодеx = `input()`
Brigand
Круто. Тогда я тоже кое-что узнал сегодня :)
daniero
3

Я думал, что нам нужен нерешительный ответ ...

Clojure, 159 символов

(print(apply str(flatten(interpose\newline(partition 3(map(fn[x](if(= x\1)\o" "))(str" "(apply str(interpose" "(map(vec(read-line))[0 5 1 6 4 2 3])))" ")))))))

Выше будет работать в REPL и даст правильный ответ. Например:

1111111
 o 
o o
 o 
o o
 o 

Кидаю цифры в него с небольшими модификациями:

(doseq [i ["1111110" "0110000" "1101101" "1111001" "0110011" "1011011" "1011111" "1110000" "1111111" "1111011"]]
(println (apply str(flatten(interpose\newline(partition 3(map(fn[x](if(= x\1)\o" "))(str" "(apply str(interpose" "(map(vec i)[0 5 1 6 4 2 3])))" "))))))) 
(println))

выходы:

 o 
o o

o o
 o 


  o

  o


 o 
  o
 o 
o  
 o 

 o 
  o
 o 
  o
 o 


o o
 o 
  o


 o 
o  
 o 
  o
 o 

 o 
o  
 o 
o o
 o 

 o 
  o

  o


 o 
o o
 o 
o o
 o 

 o 
o o
 o 
  o
 o 

nil

Не легко читать, но они есть!

Joanis
источник
3

Javascript 123

s=prompt(i=o='');for(m=' 0516423';i++<15;i%3==0?o+='\n':1)o+=' ─│'[~i%2&(A=+s[+m[~~(i/2)]])+(A&+'110'[i%3])];console.log(o)

Я могу уменьшить количество символов (101), если мы используем только один символ для состояния «включено», но оно менее разборчиво:

s=prompt(i=o='');for(m=' 0516423';i++<15;i%3==0?o+='\n':1)o+=' ■'[~i%2&s[+m[~~(i/2)]]];console.log(o)
Shmiddty
источник
+1 Это впечатляет. Я все еще пытаюсь реконструировать его. Это уже научило меня нескольким вещам!
guypursey
2

Постскриптум 136

Не победитель, но другой подход.

15 string exch{1 and 255 mul}forall
[7 3 9 13 11 5 1]{count 1 sub index 3 1 roll exch put}forall
3 5 8[.02 0 0 .05 0 0]{}image showpage

Ожидается, что входная строка будет в стеке:

$ echo '(1101101)'|cat - 7seg.ps |gs -sDEVICE=png16 -sOutputFile=6c.png -

Это еще хуже. 294, чтобы сделать «двоичное» растровое изображение. Мне потребовалось некоторое время, чтобы вспомнить, что каждый ряд дополняется четным байтом. Таким образом, битовая карта 3x5 составляет пять байтов со значительными битами 3 мсек.

2#1101101
(12345)exch
2 copy 64 and 0 exch put %A
2 copy 2 and 6 bitshift 2 index 32 and or 1 exch put %F B
2 copy 1 and 6 bitshift 2 exch put %G
2 copy 4 and 5 bitshift 2 index 16 and 1 bitshift or 3 exch put %E C
2 copy 8 and 3 bitshift 4 exch put
pop
3 5 1[.02 0 0 .02 0 0]{}image showpage

Вывод такой же уродливый, как и другой. :(

Хорошо, вот тот, который выглядит хорошо. 190

Изменить: это было вверх ногами и назад. Исправлено сейчас.

(1101101)
{neg 49 add 255 mul
1 string dup 0 4 3 roll put}forall
(\377){@/g/f/e/d/c/b/a}{exch def}forall
@ a a @
b @ @ f
b @ @ f
@ g g @
c @ @ e
c @ @ e
@ d d @
4 7 8[.01 0 0 .01 0 0]{}image showpage
Люзер Дрог
источник
Это показывает мне несколько забавных моделей. Где-то еще есть ошибка?
Томас В.
хмм. Да. (1111110) не выглядит как ноль. Это просто увеличенная карта байтов. Я предполагаю, что коробки упрощены. :(
luser droog
Я думаю, что это своего рода растровый подход. Я не уверен, как сделать это не уродливым.
Люсер Дрог
Некоторые легкие комментарии доступны здесь .
Люсер Дрог
2

Mathematica 264

Чтобы вывод выглядел правильно, потребовалось много байтов, так что на этот раз не было сигары. Но в любом случае вот подробный код (264 символа).

{a, b, c, d, e, g} = {{-1, 5}, {1, 5}, {1, 3}, {1, 1}, {-1, 1}, {-1, 3}};
f@n_ := Graphics[{Yellow, Thickness[.1], CapForm["Round"],
   Line /@ {{g, c}, {g, a}, {g, e}, {e, d}, {d, c}, {c, b}, {b, a}}[[Flatten@
   Position[IntegerDigits[n, 2, 7], 1]]]}, 
   Background -> Blue, PlotRange -> {{-1, 1}, {1, 5}}, PlotRangePadding -> 1]

Полный набор символов:

GraphicsGrid[Partition[Table[f[p], {p, 0, 128}], 16]]

characteris

Цифры:

{f[63], f[6], f[91], f[79], f[102], f[109], f[125], f[7], f[127], f[111]}

введите описание изображения здесь

DavidC
источник
2

PHP - 155 символов

<?php
$y=array("   \n"," - \n","   \n","  |\n","|  \n","| |\n"); $x = $argv[1]; echo $y[$x[0]].$y[2*$x[6]+$x[2]+2].$y[$x[7]].$y[2*$x[5]+$x[3]+2].$y[$x[4]];

это будет 150 символов, если мы используем декларацию массива php 5.4, но у меня не установлено это на моем ноутбуке, поэтому я не смог его протестировать.

Образец ставит.

введите описание изображения здесь

Объяснение:

Сначала я разделил 7-сегментный дисплей на пять строк и 3 столбца. С 1-й, 3-й и 5-й строкой havimg '-' в средней колонке и пробел в противном случае.

Во 2-м и 4-м ряду есть труба '|' символ в первом и последнем столбце. Теперь наличие этих символов следует ориентировать на вводимые значения.

Я создал справочную таблицу, которая в основном состоит из двух справочных таблиц. Первый для расчета значений для 1-го, 3-го и 5-го ряда. И еще один со смещением 2 (3-й элемент) для расчета строк 2-го и 4-го.

D34dman
источник
2

Java - 204 символа

class A{public static void main(String[]a){char[]c=new char[7];for(int i=0;i<7;i++)c[i]=a[0].charAt(i)==49?i%3==0?95:'|'):32;System.out.printf(" %c %n%c%c%c%n%c%c%c",c[0],c[5],c[6],c[1],c[4],c[3],c[2]);}}

Образец вывода:

 _ 
 _|
|_ 

Отформатировано правильно:

class A {
    public static void main(String[] a) {
        char[] c = new char[7];
        for (int i = 0; i < 7; i++)
            c[i] = a[0].charAt(i) == 49 ? (i % 3 == 0 ? 95 : '|') : 32;
        System.out.printf(" %c %n%c%c%c%n%c%c%c", c[0], c[5], c[6], c[1], c[4], c[3], c[2]);
    }
}

Жаль, что я мог бы избежать этого для цикла, но я попробовал несколько других вещей, и все они были дольше. Вероятно, есть лучший способ сделать это, но это моя первая попытка кода в гольф. (И Java для меня как худший язык, поэтому я подумал, что это будет интересно.) Даже Brainfuck заставил меня победить, но, по крайней мере, мой результат выглядит лучше.

РЕДАКТИРОВАТЬ: может избавиться от "общественности" на уроке, экономит мне 7 символов!

И спасибо, Даниеро, за показ мне printf! (18 символов сохранены)

Переписан формат вывода, изменены литералы символов на десятичные, сохранены 12 символов.

нарушитель закона
источник
Добро пожаловать на codegolf.se! Java представила printfметод несколько версий назад, который в основном printlnи formatв одной (как функция C); Это спасет вас от некоторых персонажей,
daniero
Вот еще один трюк: вы можете объединить «тело» forцикла и часть обновления в один, сохранив один символ:for(int i=7;i>0;c[--i]=a[0].charAt(i)==49?(i%3==0?95:'|'):32);
daniero
1

VBA - 263

Это некрасиво, но это работает, я думаю. У меня проблемы с просмотром правильного порядка бит, поэтому я делаю выводы из ответов других. Даже если этот фрагмент неправильный, длина кода должна оставаться неизменной.

Sub d(b)
Dim c(1 To 7)
For a=1 To 7
c(a)=Mid(b,a,1)
Next
x=" - "
y="|"
z=" "
w="   "
v=vbCr
MsgBox IIf(c(1)=1,x,w) & v & IIf(c(6)=1,y,z) & z & IIf(c(2)=1,y,z) & v & IIf(c(7)=1,x,w) & v & IIf(c(5)=1,y,z) & z & IIf(c(3)=1,y,z) & v & IIf(c(4)=1,x,w)End Sub
Gaffi
источник
1

VBScript - 178 символов

m=Split("2 7 11 10 9 5 6")
s=" _ "&vbCr&"|_|"&vbCr&"|_|"
For x=1 To 7
If Mid(WScript.Arguments.Item(0),x,1)=0 Then r=m(x-1):s=Left(s,r-1)&" "&Right(s,Len(s)-r)
Next
MsgBox s
Коминтерн
источник
Благодарность! Пара глупых ошибок обошлась мне в 6 символов. Я могу почти довести это до размера VBA даже с абсурдно длинным вызовом, чтобы получить аргумент строки функции.
Коминтерн
Если ваш код не работает без символов новой строки, вы должны их тоже посчитать. По моим подсчетам, это 178 символов.
Манатворк
1

CJam - 29

l0N]s7078571876784728737Ab\f=

CJam - это новый язык, который я разрабатываю, похожий на GolfScript - http://sf.net/p/cjam . Вот объяснение:

lсчитывает строку из ввода
0является число 0
Nявляется переменной preinitialized к новой строки строки
]собирает элементы на стеке в массив
sпреобразует значение (массив) в строку, таким образом , добавление нулевого и перевод строки к данному входу
7078571876784728737является число (то же число, которое я использовал в python, но там было шестнадцатеричное число)
A- переменная, предварительно инициализированная до 10,
bвыполняет базовое преобразование, генерируя массив [7 0 7 8 ... 3 7],
\меняющий последние два значения в стеке
f=применяет =оператор (здесь, доступ к индексированному массиву) к входной строке (плюс ноль и новая строка) и каждому числу 7, 0, 7, ...
Индекс 7 соответствует добавленному нулю, а 8 соответствует добавленной новой строке.

Мое решение на Python делает то же самое (за исключением разделения цифр с помощью преобразования строк)

aditsu
источник
Что я здесь смотрю? Хотите предложить краткое объяснение кода?
daniero
@daniero Я добавил объяснение
aditsu
1

VBA, 188 символов

Обратите внимание, что необходимо набрать 188 символов, если только они включают обязательные пробелы - IDE расширяет его, когда вы копируете его в редактор VBA.

Sub f(i)
Dim c() As Byte
m=Split("1 6 10 9 8 4 5")
c=StrConv(" _  |_| |_|",128)
c(3)=10
c(7)=10
For x=1 To 7
If Mid(i,x,1) = 0 Then c(m(x-1))=32
Next
MsgBox StrConv(c,64)
End Sub

К сожалению, VBScript не имеет строго типизированного байтового массива, или этот метод может быть намного короче.

Коминтерн
источник
1

Javascript (ECMAScript 2016) - 108 байт

console.log(([a,b,c,d,e,f,g]=[...prompt()].map((x,i)=>+x?'_||'[i%3]:' '),` ${a}
${f}${g}${b}
${e}${d}${c}`))

Это, вероятно, может быть дальше, но я не могу думать ни о чем.

М Дирр
источник
Добро пожаловать на сайт! Это хорошая первая запись :)
Даниеро
1

JavaScript, 148 байт

e=>(e[0]==1?" #\n":"\n")+(e[5]==1?"#":" ")+(e[1]==1?" #\n":"\n")+(e[6]==1?" #\n":"\n")+(e[4]==1?"#":" ")+(e[2]==1?" #\n":"\n")+(e[3]==1?" #\n":"\n")

Попробуйте онлайн! (Нижний колонтитул Node.js для чтения .input.tio)

Принимает ввод ABCDEFG в двоичных флагах и возвращает:

 #
# #
 #
# #
 #
facepalm42
источник
0

SmileBASIC, 136 байт

DIM A[7,2]COPY A,@L@L?DATA.,1,1,3,4,3,6,1,4,0,1,0,3,1INPUT X$FOR I=0TO 6M=I MOD 3GBOX A[I,1],A[I,0],A[I,1]+!M,A[I,0]+!!M,-VAL(X$[I])NEXT

Вывод графический.

12Me21
источник
0

05AB1E , 4 байта

C₄+ç

Попробуйте онлайн или проверьте все возможные входы .

См проверить все возможные входы ссылку выше, чтобы увидеть отображение, используемое для каждого входа.

Объяснение:

Это нарушает правила, где говорится:

То, как вы представляете дисплей, зависит от вас - один символ Unicode или ASCII , графическое изображение ASCII или что угодно, что вы можете придумать. Однако каждый вход должен иметь свой собственный выход.

C       # Convert the (implicit) input from binary to integer
 ₄+     # Increase it by 1000
   ç    # Convert it to a unicode character with this value (and output implicitly)

Альтернатива больше в духе задачи с использованием выходного формата:

 -
| |
 -
| |
 -

38 байт :

Σ•L7וNè}εi" -| | "14∍2ôNèëðº]J24S5∍£»

Можно определенно играть в гольф ..

Попробуйте онлайн или проверьте все возможные входы .

Объяснение:

Σ       }          # Sort the (implicit) input-digits by:
 L7וNè           #  The digit at the same index in the compressed integer 1367524
                   #   i.e. "1101101" → ["1","0","1","1","1","0","1"]
ε                  # Then map each digit to:
 i                 #  If it's a 1:
  " -| | "         #   Push string " -| | "
          14      #   Lengthen it to size 14: " -| |  -| |  -"
             2ô    #   Split it into parts of 2: [" -","| ","| "," -","| ","| "," -"]
               Nè  #   Index into it
 ë                 #  Else (it's a 0):
  ðº               #   Push "  " (two spaces) instead
    ]              # Close both the if-else and map
                   #  i.e. ["1","0","1","1","1","0","1"]
                   #   → [" -","  ","| "," -","| ","  "," -"]
J                  # Join everything together to a single string
                   #  i.e. [" -","  ","| "," -","| ","  "," -"] → " -  |  -|    -"
 24S               # Push [2,4]
    5             # Lengthened to size 5: [2,4,2,4,2]
      £            # Split the string into parts of that size
                   #  i.e. " -  |  -|    -" → [" -","  | "," -","|   "," -"]
       »           # Join by newlines (and output implicitly)
                   #  i.e. [" -","  | "," -","|   "," -"] → " -\n  | \n -\n|   \n -"

Посмотрите эту подсказку 05AB1E ( раздел Как сжать большие целые числа? ), Чтобы понять, почему •L7וэто так 1367524.

Кевин Круйссен
источник
0

PHP 5.6, 65 байтов обычного ASCII

for(;$p++<9;)echo$argn[_707561432[$p]]?"||_"[$p%3]:" ","\n"[$p%3];

или, без завершающего переноса строки, но с немного побитовой забавой:

for(;$p++<11;)echo$argn[_70785618432[$p]]?L|Sx[$p&1]:a^kAAA[$p&3];

Запустите как трубу с -nRили попробуйте их онлайн .

разбивка 1

for(;$p++<9;)echo           # loop through positions
    $argn[_707561432[$p]]   # map position to input bit
        ?"||_"[$p%3]            # if set: underscore in 2nd column, pipe symbol else
        :" "                    # else space
    ,"\n"[$p%3]             # add newline every 3 columns
;

разбивка 2

for(;$p++<11;)echo          # loop through positions
    $argn[_70785618432[$p]] # map position to input bit (bit 8 for EOL, never set)
        ?L|Sx[$p&1]             # if set: underscore in the middle, pipe symbol else
        :a^kAAA[$p&3]           # else: newline in 4th column, space else
Titus
источник
1
Новый или старый язык уже не имеет значения с лета 2017 года . Так что вам не придется упоминать не конкурирующих.
Кевин Круйссен
@KevinCruijssen Спасибо, я пропустил это. Но это также хороший вызов для восстановления старых версий PHP; он также иногда дает другое представление о более поздних функциях: я обнаружил, что «старый» способ более эффективен (по размеру, производительности, удобочитаемости и иногда по всем трем), чем использование вещей, которые были добавлены в PHP позже В этом случае нет преимущества для игры в гольф: первый подход потребует 8 дополнительных байтов, второй
Тит