Нарисуй мне домино

35

Вызов

Учитывая две цифры 0-9 в качестве входных данных, выведите домино (из набора домино двойной девяти ) с этим количеством точек (точек) на двух гранях. Десять возможных граней выглядят так (разделены трубками):

     |     |    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
  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

Форматы ввода

Вы можете принять участие в любом разумном формате, включая, но не ограничиваясь:

  • Два отдельных целых числа, строки или одноэлементные массивы;
  • Одно целое число от 0 до 99;
  • Массив из двух целых чисел;
  • Строка из двух цифр.

Выходные форматы

  • Две грани могут быть выровнены по горизонтали, разделены трубами так:
    o|o   o
     |  o  
o    |o   o
  • Или они могут быть выровнены вертикально, разделены дефисами так:
    o
     
o    
-----
o   o
  o  
o   o
  • Вы можете вывести границу вокруг домино, если хотите.
  • Вы можете также выбрать вывод списка линий, списка двух граней или их комбинации.
  • Вы можете использовать любой непробельный символ для пунктов (я использовал o).
  • Если вы действительно хотите, вы можете использовать 0для пробелов и 1для пипсов, или False/ True(или эквивалент вашего языка) при выводе массива.
  • Вы можете удалить пробел между столбцами; это верный вывод для 7, 7:
ooo|ooo
 o | o 
ooo|ooo
  • Любое лицо может быть повернуто на 90 градусов. Это также допустимый вывод для 7, 7:
o   o|o o o
o o o|  o  
o   o|o o o
  • Вы можете иметь столько пустых мест в начале / конце, сколько захотите, при условии, что основная часть вывода по-прежнему соответствует другим ограничениям.
  • Каждое лицо должно быть 3 линии в высоту, даже если линии пусты. Для 0, 1 вы не могли бы вывести это:
-----

  o

Но вы могли бы вывести это:




-----

  o

Точно так же, если вы выводили список из двух списков строк, вы могли бы сделать [["", "", ""], ["", " o", ""]], но не [[""], [" o "]].

счет

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

ETHproductions
источник
Итак, для ввода [2, 1]я мог бы вывести [[[0,0,1],[0,0,0],[1,0,0]],[[0,0,0],[0,1,0],[0,0,0]]]?
Деннис
@ Денис Верный.
ETHproductions
2
Должен ли разделитель между гранями быть тире, или это может быть какое-то другое непротиворечивое значение?
Джо Кинг,
@JoKing Я скажу, что вы можете использовать любой непротиворечивый символ, кроме тех, которые вы уже используете.
ETHproductions
[0,5,21,29,31]Все важные цифры здесь, мои друзья.
Волшебная урна осьминога

Ответы:

14

Python 2 , 101 97 92 68 64 байта

lambda*a:[[[n>3,n>5,n>1],[n>7,n%2,n>7],[n>1,n>5,n>3]]for n in a]

Попробуйте онлайн!

кредиты

Нил
источник
@ Mr.Xcoder Обновлено снова.
Нил
1
Форматирование не является обязательным. Возвращение пары матриц экономит не менее 22 байтов.
Деннис
1
68 байт без форматирования (обратите внимание, что 0и Falseв Python они равны, поэтому все должно быть в порядке).
Джонатан Аллан
@JonathanAllan Очень умный, обновленный.
Нил
64 байта. Если вам нужно сделать лямбду, понимание списка, возможно, будет короче.
полностью человек
12

C (gcc) , 252 242 269 262 241 235 220 байт

Я был на переполнение стека для сокетов в Python, когда это всплыло, сказал, почему нет? Первый код гольф, так что я не совсем уверен, что я полностью следовал правилам (а если нет, и кто-то хочет украсть мое общеизвестное печенье и исправить его, пусть будет так). С 'o' и '' 255 245 272 265 244 238 228 байт. заменить +48 на * 79 + 32.

#define Q(P,R)(R>>P&1)+48
char a[11];i=0;f(char*c){char b=c[0];a[3]=a[7]='\n';a[5]=Q(0,b);a[1]=a[9]=Q(3,b);a[2]=a[8]=Q(2,b)|a[1];a[0]=a[10]=Q(1,b)|a[2];a[4]=a[6]=a[1]|Q(2,b)&Q(1,b);puts(a);if(i++<1){puts("---");f(c+1);}}

Попробуйте онлайн!

Как это работает:
я использую битовое смещение и побитовое отображение, чтобы определить, должна ли точка быть чистой или в пипсах, затем сместить 0 или 1 до правильного значения ASCII. это портит 4 и 5, поэтому они нуждались в некотором исправлении. на самом деле добавлено несколько байтов. был в состоянии удалить несколько байтов, удалив маску и просто используя 1 (doh)

Особая благодарность г-ну Xcoder за 7 меньших байтов за счет удаления лишнего #define
Изменения: удален memset -21 байт. переделать битовую логику на 6, 4, 2, чтобы они зависели от 8 | 4 & 2, 8 | 4, 8 | 4 | 2 соответственно. -6 байт. убрал лишние переводы строк, используя put вместо printf, что также короче. сократил массив до 11, удалив лишнее присваивание. -15 байт. Теперь я думаю, что это лучшее, что я могу сделать.

Эндрю Баумер
источник
7
Добро пожаловать в PPCG!
Лохматый
Привет, добро пожаловать в PPCG! Вы можете сократить свой код немного дальше, до 245 байт
Mr. Xcoder
'\n'можно заменить на 10. (потому что в C типы данных char также являются целочисленными типами данных) Некоторые из них, charвероятно, могут быть заменены на int. (или опустить полностью)
user202729
Вплоть до 184 байт здесь , но это все еще больше , чем текущий гр гольф, так.
Эндрю Баумер
173
Эндрю Баумер
10

Желе , 20 байт

“¤o.ƤẸʠṚ’B¬s5ŒBị@s€3

Попробуйте онлайн!

Альтернативная версия, оригинальный вывод, 33 32 31 байт

“¤o.ƤẸʠṚ’ṃ⁾ os5ŒBị@s€3K€€Zj€”|Y

Спасибо @ user202729 за вывод 1 байта!

Попробуйте онлайн!

Как это работает

Во-первых, “¤o.ƤẸʠṚ’- целочисленный литерал в биективной базе 250 - устанавливает возвращаемое значение равным 1086123479729183 .

Затем преобразует возвращаемое значение в двоичное и принимает логическое НЕ каждой цифры, получая массив

00001001000010110100101011110011101111101111100000

Далее, s5ŒBразбивает этот массив на куски длиной 5 , а затем подпрыгивает каждый кусок, превращая ABCDE в abcdedcba , получая

000010000 001000100 001010100 101000101 101010101

111000111 111010111 111101111 111111111 000000000

Теперь ị@извлекает j- й и k- й элемент этого массива, где j, k - первый аргумент программы. Обратите внимание, что индексирование основано на 1 и является модульным, поэтому нулевой элемент также является десятым.

Наконец, s€3разбивает каждый кусок длиной девять на три фрагмента длины три.

Деннис
источник
1
По-прежнему выглядит для меня как волшебство, но я ценю попытку объяснения. Я признаю, что ошибка, вероятно, моя, так как я просто скромный веб-разработчик PHP
ArtisticPhoenix
3Используется 0для пипсов, а не 1как все остальные.
Джонатан Аллан
“¤o.ƤẸʠṚ’должно сработать.
Джонатан Аллан
@JonathanAllan Спасибо! Не уверен, как это случилось ...
Деннис
8

Желе , 13 байт

⁽½ÑD<;ḂŒBs3µ€

Попробуйте онлайн!

Объединяя идею Денниса об использовании ŒB(bounce) в этом ответе и наблюдение Xcali в этом ответе, чтобы получить 13 байтов.


Желе , 28 байт

(с красивой печатью)

Только теперь я знаю, что строковый литерал Jelly автоматически завершается ...

⁽½ÑD<;ḂŒBị⁾o Ks6Yµ€j“¶-----¶

Попробуйте онлайн!

user202729
источник
Очевидно, мой подход ⁽½ÑDприводит к меньшему количеству участников, чем ответ “¤¦¢¬‘
EriktheOutgolfer
Разве не лучше было бы переупорядочить функции, чтобы 13 байтов (обгоняя Денниса) были на вершине и их было легче увидеть?
Захари
@ Zacharý Временное решение. Исправлю это позже.
user202729
6

PHP 155 , 150 байт

function d($a){foreach($a as$n){$o="---";for($i=0;$x=2**$i,$i<9;++$i)$o.=([0,16,68,84,325,341,365,381,495,511])[$n]&$x?0:' ';echo chunk_split($o,3);}}

Он принимает массив целых чисел в качестве входных данных. Для тестирования:

d([1,2]);

echo "=========\n";

d([0,1,2,3,4,5,6,7,8,9]);

Выходной формат:

---

 0 

---
  0

0  

Проверьте это в прямом эфире здесь

Мое решение

Для своего решения я использовал матрицу, состоящую из побитовых чисел (степени 2). Это можно представить так:

 1  |  2  |  4
 8  | 16  | 32
 64 | 128 | 256

И затем массив хранения, состоящий из битовых позиций для пипсов каждого домино, коррелированных с пронумерованным индексом:

[0,16,68,84,325,341,365,381,495,511]

Так что просто уточнить:

  • Пример 0: индекс 0или значение 0будет пустым домино, которое всегда ложно.
  • Пример 1: индекс 1или значение 16будет домино номер один и в матрице, которая находится в центре 16.
  • Пример 2: индекс 2или значение 68будет домино номер два и в матрице, которая находится вверху справа 4и внизу слева 64 или4|64
  • Пример 3: индекс 5или значение 341будет номер пять домино и в матрице, которая1|4|16|64|256
  • Пример 4: индексом 9или значением 511будет номер девять домино, а в матрице - комбинация всех битов.

Как только это будет установлено , что это довольно простой вопрос зацикливания на 9 позиций в матрице, а также создание $xв 2к власти в$i

for($i=0;$x=2**$i,$i<9;++$i)

Затем мы делаем побитовый И, &как мы перебираем эти места. Так что для примера сакэ будет использовать пример 2 сверху, и я буду использовать xвместо этого пробелы для наглядности:

  • итерация 1, 68 & 1 ? 0 : 'x'которая приводит к'x'
  • итерация 2, 68 & 2 ? 0 : 'x'которая приводит к'x'
  • итерация 3, 68 & 4 ? 0 : 'x'которая приводит к0
  • итерация 4, 68 & 8 ? 0 : 'x'которая приводит к'x'
  • итерация 5, 68 & 16 ? 0 : 'x'которая приводит к'x'
  • итерация 6, 68 & 32 ? 0 : 'x'которая приводит к'x'
  • итерация 7, 68 & 64 ? 0 : 'x'которая приводит к0
  • итерация 8, 68 & 128 ? 0 : 'x'которая приводит к'x'
  • итерация 9, 68 & 256 ? 0 : 'x'которая приводит к'x'

Когда цикл завершен, мы получаем эту строку "xx0xxx0xx".

Затем мы добавляем "---xx0xxx0xx"к нему границу (я на самом деле начинаю с границы, но что угодно) .

И, наконец, мы chunk_split () на 3 для:

---
xx0
xxx
0xx

Не стесняйтесь, дайте мне знать, что вы думаете.

ArtisticPhoenix
источник
Вы можете сократить его еще больше, используя оператор возведения в степень, **представленный в PHP 5.6 вместо pow() php.net/manual/en/language.operators.arithmetic.php
Даниэль
@Daniel - Спасибо, сэкономили 5 байт! Я не знал, что они добавили это, я всегда стараюсь использовать, ^но это битовый XOR ... LOL
ArtisticPhoenix
Я не думаю, что вам разрешено печатать дополнительную рамку.
12Me21
покажи мне, где это даже отдаленно намекает на это в ОП.
ArtisticPhoenix
Я думаю, что это будет короче, работая на $argv. Служебная функция в PHP обычно составляет 13 байт.
Тит
6

Perl 5 , 107 76 70 + 1 ( -a) = 70 байт

Perl 5 , 70 байт

$,="
---
";say map{$_='351
7 7
153'=~s/\d/$_>$&||0/ger=~s/ /$_%2/er}<>

Попробуйте онлайн!

Использует 0 для пробелов и 1 для пипсов. Довольно простой метод: обратите внимание, что при увеличении цифры, когда пипс «включен», он никогда не гаснет, за исключением одного в середине. В средней позиции он включен для всех нечетных чисел. Таким образом, для каждой позиции просто проверить, является ли цифра больше последней цифры, для которой она выключена. ||0Создает выходной сигнал, когда условие ложно. В Perl false это то, undefчто выводит как ноль.

Xcali
источник
4

JavaScript (ES6), 79 78 байт

Сохранено 1 байт благодаря @ETHproductions

Принимает ввод в синтаксис карри (a)(b)и выводит вертикальное ASCII домино.

a=>b=>(g=n=>`351
707
153`.replace(/./g,d=>' o'[(+d?n>d:n)&1]))(a)+`
---
`+g(b)

демонстрация


Горизонтальная версия, 80 79 байтов

Сохранено 1 байт благодаря @ETHproductions

Принимает входные данные в виде массива из 2 целых чисел и выводит горизонтальное домино ASCII.

a=>`240|351
686|797
042|153`.replace(/\d/g,d=>' o'[(d<8?(x=a[d&1])>(d|1):x)&1])

демонстрация

Arnauld
источник
Хорошо, очень похоже на то, что у меня было. Сохраните байт с помощью n>d|0или(+d?n>d:n)&1
ETHproductions
4

APL (Дьялог) , 25 байт

2∘|(3 3⍴⊢,,∘⌽)¨>∘3 5 1 7¨

Попробуйте онлайн!

-2 благодаря нгн .

Формат вывода немного странный: эта функция возвращает массив, содержащий два массива shape-3,3, каждый из которых содержит 0 и 1.

Эрик Аутгольфер
источник
перезапись на -2 байта:2∘|(3 3⍴⊢,,∘⌽)¨>∘3 5 1 7¨
ngn
@ngn спасибо, это умно: p
Эрик Outgolfer
2

Javascript (ES6), 87 байт

a=>b=>[(s=n=>[[n>3,n>5,n>1],[n>7,n%2,n>7],[n>1,n>5,n>3]].map(c=>c.map(b=>+b)))(a),s(b)]

f=a=>b=>[(s=n=>[[n>3,n>5,n>1],[n>7,n%2,n>7],[n>1,n>5,n>3]].map(c=>c.map(b=>+b)))(a),s(b)]
<div oninput="o.innerText=JSON.stringify(f(a.value)(b.value))"><input id=a type=number min=1 max=9 value=1><input id=b type=number min=1 max=9 value=1><pre id=o>

Герман Л
источник
Хорошие ДОМИНО ...
Esolanging Fruit
2

Хаскель - 88 персонажей

map$zipWith(zipWith($))[[(>4),(>5),(>1)],[(>7),odd,(>7)],[(>1),(>5),(>3)]].repeat.repeat

Принимает список из двух чисел, обозначающих лица, возвращает список из списка списка bool. Не так коротко, но я нахожу решение интересным.

Джефф Риди
источник
Вы можете просто использовать mapвместо repeatи zipWith: map$(<$>[[(>4),(>5),(>1)],[(>7),odd,(>7)],[(>1),(>5),(>3)]]).map.flip($)Попробуйте онлайн!
Лайкони
Non-pointfree сохраняет еще два байта: попробуйте онлайн!
Лайкони
2

Пип , 32 27 24 21 байт

-3 байта благодаря @DLosc

FcgP[Yc>_M3517c%2RVy]

Попробуйте онлайн!

Объяснение:

F                      For each
 c                       character $c
  g                      in the list of inputs:
   P                     Print
    [               ]      an array consisting of
                             an array of bits representing whether
      c>                       $c is greater than
        _M                       each of
          3517                     3, 5, 1, and 7
     Y                       (call this bit array $y),
              c%2            $c mod 2,
                 RV          and the reverse
                   y           of $y.
Esolanging Fruit
источник
1
Поздравляем с выигрышем в награду Pip! Теперь, когда период щедрости закончен, я могу вам сказать: сохраните 3 байта, сопоставив скаляр 3517вместо списка [3 5o7]. ;)
DLosc
1

> <> , 57 + 3 = 60 байт

>{:3)$:5)$:1)$:7)$:2%$\ao \
\?%cl999)3$)5:$)1:$)7:/nnn<rp

Попробуйте онлайн . Выводится как вертикальное домино с 1 с для точек, 0 с для пробелов и 9 с для разделителей следующим образом:

001
000
100
999
111
111
111

Технически это может быть расширено до 12 введенных значений.

Старая версия:

> <> , 76 + 3 = 79 байт

>{:3)$:5)$:1)$a$:7)$:2%$:7)\&?o~?!n\
\?(*a3la"---"a)3$)5:$)1:$a$/$&:)9::<r~p

Попробуйте онлайн . Выводится как вертикальное домино с 1 с для точек и 0 с для пробелов, например:

001
000
100
---
111
111
111
Джо Кинг
источник
1

Древесный уголь , 46 44 43 39 байт

EE²℅§@APQTUVW^_NE⪪E⁹§ o÷ιX²↔⁻⁴λ³⪫λ M⁵↑⁵

Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:

EE²℅§@APQTUVW^_N

Прочитайте два целых числа и отобразите их в таблице поиска. Затем сопоставьте результат. (Это эффективно фиксирует результат во временном.)

  E⁹                Loop `l` (!) from 0 to 8
            ⁻⁴λ     Subtract from 4
           ↔        Absolute value
         X²         Power of 2
       ÷ι           Divide into the looked-up value `i`
    § o             Convert to space or o
 ⪪             ³    Split into (3) groups of 3
E                   Map over each group
                ⪫λ  Join the 3 characters with spaces

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

M⁵↑⁵

Двигайтесь вверх и проведите разделительную линию между гранями.

Предыдущая 43-байтовая горизонтальная версия:

↶P³M⁷←FE²℅§@APQTUVW^_NF⁹«F¬﹪κ³⸿⸿§ o÷ιX²↔⁻⁴κ

Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:

Работать вертикально.

P³

Распечатать разделительную линию.

M⁷←

Положение к началу первого лица.

FE²℅§@APQTUVW^_N

Прочитайте два целых числа и отобразите их в таблице поиска.

F⁹«

Подготовка к выходу до 9 oс.

F¬﹪κ³⸿⸿

Но начинайте новый столбец каждые три oс.

§ o÷ιX²↔⁻⁴κ

Преобразуйте младшие 5 битов кода ASCII в двоичный, а затем отразите выходные данные в течение оставшихся 4 oс.

Нил
источник
Формат вывода довольно либерален, что должно сэкономить несколько байтов.
Деннис
1
Что это за колдовство
ArtisticPhoenix
@Dennis На самом деле оригинальный формат вывода наиболее полезен, так как он автоматически дает мне возможность провести разделительную линию.
Нил
О боже, есть два Нейла.
Захари
2
@ Zacharý На самом деле, согласно странице пользователя, их восемь или 40, если вы включаете людей, в именах которых есть Нил ...
Нил
1

Желе , 16 байт

>⁽¤xb8¤;ḂŒḄs3
Ç€

Попробуйте онлайн!

Использовал стратегию и базовую декомпрессию Нейла для генерации значений; выводит в виде двоичного массива. Принимает список в качестве входных данных.

Объяснение:

Ç€
 € for €ach input,
Ç  execute the previous line.

>⁽¤xb8¤;ḂŒḄs3
 ⁽¤xb8¤       the array [3, 5, 1, 7]
>             1 if the input is greater than each element, 0 otherwise
       ;Ḃ     append input % 2
         ŒḄ   bounce array
           s3 split into chunks of 3
Ellie
источник
0

APL + WIN, 49 47 байт

4⌽'|',⌽⍉6 3⍴,⍉(9⍴2)⊤(+\∊0 241 52 24 114,¨16)[⎕]

Отредактировано согласно комментарию Адама, спасибо, чтобы работать с нулем начала индекса.

Запрашивает ввод с экрана в виде вектора целых чисел, по одному на каждую грань.

Выход имеет вид:

1 1 1 | 0 0 1    0 0 0 | 1 0 1
0 1 0 | 0 1 0    0 0 0 | 0 1 0
1 1 1 | 1 0 0    0 0 0 | 1 0 1

для входов 7 3и0 5

Объяснение:

(+\∊0 241 52 24 114,¨16) create a vector of integers whose binaries
                         represent the dots on the domino faces

[1+⎕] take input integers as indices to select from above vector

⍉6 3⍴,⍉(9⍴2)⊤ convert selected integers to a 9x2 binary matrix and reshape
              to match the orientation of the domino faces

4⌽'|',⌽ rotate, concatenate centre line markers and rotate again to centre 
Грэхем
источник
Почему бы не использовать, ⎕IO←0чтобы спасти себя 1+?
Адам
@ Адам Почему бы и нет - ленивый;)
Грэм
0

Python 2 , 121 байт

lambda x,y,d="001155777702020202570044557777":[("%03d"%int(bin(int(o))[2:]),"---")[o=="3"]for o in d[x::10]+"3"+d[y::10]]

Попробуйте онлайн!

Уменьшено до 121 с использованием лямбды после возвращения и перечитывания правил. Теперь выводит список строк.

Предыдущая версия с красиво отформатированным выводом:

Python 2 , 156 153 147 141 байт

x,y=input()
d="001155777702020202570044557777"
a=["%03d"%int(bin(int(o))[2:])for o in d[x::10]+d[y::10]]
for x in a[:3]+["---"]+a[3:]:print x

Попробуйте онлайн!

-3 с благодарностью @NieDzejkob

Принимает ввод как 2 целых числа и выводит в вертикальном формате с 0 = пробел и 1 = точка.

ElPedro
источник
153 байта
NieDzejkob
0

Пыть , 220 154 байта

Вторая попытка (154 байта)

46281ᴇ8264áĐ9ř3%¬Đ¬2⁵*⇹1ᴇ*+03Ș←Đ3Ș≥Đ6²⁺3**⇹¬2⁵*+⇹9ř5=⇹2%*9²2-*+⇹9ř9<*Ž⇹ŕ⇹9ř3%¬Đ¬2⁵*⇹1ᴇ*+03Ș←Đ3Ș≥Đ6²⁺3**⇹¬2⁵*+⇹9ř5=⇹2%*9²2-*+⇹9ř9<*Ž⇹ŕ5⑴9△*Ƈǰ⇹Ƈǰ64ȘƇǰ6↔ŕ↔ŕ↔

Объяснение:

46281ᴇ8264áĐ                                    Pattern matching for every cell but the middle
9ř3%¬Đ¬2⁵*⇹1ᴇ*+03Ș                              Non-pip characters
←Đ3Ș≥Đ6²⁺3**⇹¬2⁵*+⇹9ř5=⇹2%*9²2-*+⇹9ř9<*Ž⇹ŕ⇹     Make top cell
9ř3%¬Đ¬2⁵*⇹1ᴇ*+03Ș                              Non-pip characters
←Đ3Ș≥Đ6²⁺3**⇹¬2⁵*+⇹9ř5=⇹2%*9²2-*+⇹9ř9<*Ž⇹ŕ      Make bottom cell
5⑴9△*Ƈǰ⇹Ƈǰ64ȘƇǰ6↔ŕ↔ŕ↔                          Make boundary and combine



Первая попытка (220 байт):

2`↔←Đ4≥Đ6²⁺3**⇹¬5«+2⁵⇹3ȘĐ6≥Đ6²⁺3**⇹¬5«+2⁵⇹3ȘĐ2≥Đ6²⁺3**⇹¬5«+1ᴇ⇹3ȘĐ8≥Đ6²⁺3**⇹¬5«+2⁵⇹3ȘĐ2%Đ6²⁺3**⇹¬5«+2⁵⇹3ȘĐ8≥Đ6²⁺3**⇹¬5«+1ᴇ⇹3ȘĐ2≥Đ6²⁺3**⇹¬5«+2⁵⇹3ȘĐ6≥Đ6²⁺3**⇹¬5«+2⁵⇹3Ș4≥Đ6²⁺3**⇹¬5«+1ᴇ9△ĐĐĐĐ1ᴇ↔⁻łŕ↔ŕŕŕŕŕŕáƇǰ

Объяснение:

2                           Push 2 (this is how many 'cells' to make)
`     ... ł                 While the top of the stack is not zero, loop
↔                           Flip the stack (useless at the beginning, undoes the flip at the end of the loop)
←Đ4≥Đ6²⁺3**⇹¬5«+            Set top-left pip
2⁵⇹3Ș                       Space
Đ6≥Đ6²⁺3**⇹¬5«+             Set top-middle pip
2⁵⇹3Ș                       Space
Đ2≥Đ6²⁺3**⇹¬5«+             Set top-right pip
1ᴇ⇹3Ș                       New line
Đ8≥Đ6²⁺3**⇹¬5«+             Set middle-left pip
2⁵⇹3Ș                       Space
Đ2%Đ6²⁺3**⇹¬5«+             Set center pip
2⁵⇹3Ș                       Space
Đ8≥Đ6²⁺3**⇹¬5«+             Set middle-right pip
1ᴇ⇹3Ș                       New line
Đ2≥Đ6²⁺3**⇹¬5«+             Set bottom-left pip
2⁵⇹3Ș                       Space
Đ6≥Đ6²⁺3**⇹¬5«+             Set bottom-middle pip
2⁵⇹3Ș                       Space
4≥Đ6²⁺3**⇹¬5«+              Set bottom-right pip
1ᴇ                          New line
9△ĐĐĐĐ                      Add 5 dashes
1ᴇ                          New line
↔⁻ł                         Decrement counter (if >0, loop; otherwise, exit loop)
ŕ↔ŕŕŕŕŕŕ                    Remove all unnecessary items on the stack
áƇǰ                         Push stack to an array, get characters at unicode codepoints given by values in the array, join characters with empty string


Попробуйте онлайн!

mudkip201
источник
0

05AB1E , 34 байта

•ΩõIº•R2ô¹2÷è¹È-bDg5s-ú.∞3ô»TR„ o‡

Попробуйте онлайн!


Это было сложно, потому что у 05AB1E плохое заполнение.


Основное объяснение:

  • Здесь есть 4 значимых паттерна: 2, 4, 6 и 8.
  • 3,5,7 и 9 - другие шаблоны плюс 1.
  • 1 не имеет значения из-за симметрии, если вход четный, вычтите 1, чтобы переключить средний бит.
  • Переключение LSB позволяет переключать средний бит из-за зеркального отображения.
Урна волшебного осьминога
источник
0

SmileBASIC, 92 69 байт

INPUT N,M
DEF Q?N>3;N>5;N>1?N>7;1AND N;N>7?N>1;N>5;N>3
END
Q?777N=M
Q

Пример:

? 7,2
111
010
111
777
001
000
100

Это то, что происходит, когда ваши правила недостаточно строги.

12Me21
источник
0

ЛОЖЬ, 116 80 78 70 69 66 63 61 59 58 байт

[$3[>_$.\$]$p:!5p;!1p;!"
"7p;!%1&.."
"..."
"]$s:!"---
"s;!

все еще работает над этим ...

12Me21
источник
0

чип ,142 135 байт

! CvDvB
>v-]-x.
|Z-]-]e
|Z]xe|
|ZR(-'
|Zx.AD
|Zxx]x.
|Zx^-]e
|Z<,(-.
|Zx]xe|
|Zx-]-]e
|Zx-]-x'
|Z<C^D^B
|>x~s
|Zx.
|Zx<
|Zxb
|Z+^~f
`zd

Попробуйте онлайн!

Ввод представляет собой строку цифр. Использует нули в качестве пунктов. Рисует точки для одного числа, читает следующий входной байт. Если нет следующего байта, завершите, иначе нарисуйте разделитель и начните.

Каждый Z(или z) соответствует одному символу вывода, они расположены для стрельбы в порядке сверху вниз. Капитализируются A, B, Cи Dсоответствуют низким четыре бита ввода (это все , что мы смотрим на, так "34" == "CD" == "st" ...). В нижнем регистре b, d, e,f соответствуют различным битам выхода.

Может делать домино бесконечной длины тоже; попробуйте дать в 0123456789качестве ввода.

Phlarx
источник
0

PHP, 116 байт

while($i<6)echo strtr(sprintf("%03b",[_011557777,_202020267,_044557777][$i/2][$argv[$i%2+1]]),10,"o "),"|
"[$i++%2];

требует PHP 5.5 или выше. Запустите -nrили попробуйте онлайн .

Titus
источник
0

C (gcc) , 150 146 байт

  • Сохранено четыре байта благодаря потолку .
p(b){printf(" %c",33-b);}P(a){p(a<4),p(a<6),p(a<2),p(23),p(a<8),p(~a&1),p(a<8),p(23),p(a<2),p(a<6),p(a<4),p(23);}f(a,b){P(a),puts(" -----"),P(b);}

Попробуйте онлайн!

Джонатан Фрех
источник
@ceilingcat Спасибо.
Джонатан Фрех