Отображение n с n

18

Что я хочу:

Проще говоря, я хочу текстовый дисплей, который запрашивает ввод n, а затем показывает это значение на дисплее! Но есть подвох. Каждый из «истинных» «пикселей» (заполненных) должен быть представлен этим числом n.

Пример :

Вам дают вход n. Можно предположить, nбудет одна цифра

Input: 0
Output:
000
0 0
0 0
0 0
000

Input: 1
Output:
  1
  1 
  1
  1
  1

Input: 2
Output:
222
  2
222
2
222

Input: 3
Output:
333
  3
333
  3
333

Input: 4
Output:
4 4
4 4
444
  4
  4

Input: 5
Output:
555
5  
555
  5
555

Input: 6
Output:
666
6    
666
6 6
666

Input: 7
Output:
777
  7
  7
  7
  7

Input: 8
Output:
888
8 8
888
8 8
888

Input: 9
Output:
999
9 9
999
  9
999

Вызов:

Сделайте это как можно меньше байт.

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

Окружающий пробел необязателен, если цифра отображается правильно.

Кроме того, <75 байт - это мой голос, самый низкий показатель, но я всегда могу изменить принятый ответ, поэтому не отчаивайтесь отвечать.

VortexYT
источник
Связанные
Эмигна
Конечно, это дубликат. Это определенно очень близко к этому
Shaggy
Возможный дубликат Гольфа мне Алфавит ASCII
Товарищ SparklePony
2
Я не думаю, что это обман. Хотя вопросы очень похожи, я думаю, что сокращенный набор символов (0-9) даст несколько совершенно разных ответов.
Цифровая травма

Ответы:

8

SOGL V0.12 , 30 байтов

■'τč▲Β►║⁰ΡāQšJ┘tXdnοO¹‘'¹n.w3n

Попробуй здесь! Сжатый строка ■'τč▲Β►║⁰ΡāQšJ┘tXdnοO¹‘является

  ŗ  ŗ  ŗ  ŗ  ŗŗŗŗ  ŗŗŗŗŗ  ŗŗŗŗŗŗ  ŗŗŗŗ  ŗŗŗŗŗ ŗŗ ŗŗŗŗ  ŗ  ŗŗŗŗŗ  ŗŗŗ  ŗŗŗŗŗŗŗŗ  ŗŗŗŗ ŗŗŗŗŗŗŗ  ŗ  ŗ  ŗ  ŗŗŗŗŗ ŗŗŗŗŗ ŗŗŗŗŗŗŗŗ ŗŗŗŗ  ŗŗŗŗŗŗŗŗ ŗŗ ŗŗ ŗŗŗŗ

который (начиная с 1, заканчивая 0) числа, строка за строкой, число к номеру. Остальные

...‘             push the compressed string, replacing the ŗs with pop - the input
    '¹n          split into chunks of 15
       .w        push the (1-indexed, wrapping) input-th item of that array
             3n  split into chunks of 3
                 implicitly output the array, line by line
dzaima
источник
Я впечатлен тем, как вам удалось сделать это за 35 байт за один раз! Хотя я никогда не использовал SOGL, я использовал онлайн-тестер, и он работает!
VortexYT
Данные числовой формы на самом деле составляют всего 17 байтов (потеряно 6 байтов, есть данные длины и что это `` и -), а все остальное легко. Мне интересно, каким онлайн-тестером вы пользовались? Я не сделал ни видел.
Дзайма
О, просто нажмите на SOGL выше! Вы должны загрузить что-то вроде 1 МБ или что-то. Я удалил это немедленно. : /
VortexYT
Как ты сделал это?
VortexYT
Ух ты! Поздравляю вас! Кажется, в нем много файлов. Может быть, это немного
отделить
13

JavaScript (ES6), 88 байт

f=
n=>`019
2 3
459
6 7
889`.replace(/\d/g,c=>[2,18,142,96,130,131,698,4,146][c]>>n&1?` `:n)
<input type=number min=0 max=9 oninput=o.textContent=f(this.value)><pre id=o>

Числа кодируют, какие квадраты содержат пробелы для данной цифры, например, нижний левый угол имеет значение 146, потому что 1, 4 и 7 не используют его, а 146 = 2¹ + 2⁴ + 2⁷.

Нил
источник
11

05AB1E , 40 39 38 байт

•Y¤ŸèK'¦ú’ò™^N•4B5ô¹èvð¹«5714yè8+b¦Sè,

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

объяснение

•Y¤ŸèK'¦ú’ò™^N•            # the compressed string "318975565561233953387608032537"

4B                         # convert to base-4
  5ô                       # split into strings of size 5
    ¹è                     # get the string at index <input>
      v                    # for each digit y in string
          5714yè           # get the digit in 5714 at index y
                8+         # add 8
                  b        # convert to binary
                   ¦       # remove the leading 1
       𹫠         Sè     # with each digit in the binary number, 
                           # index into the string " <input>"   
                      ,    # print with newline
Emigna
источник
11

Japt , 43 байта

"Ýûÿ©ÿßY÷ß"®c s4äëAU ¬£2839¤ë4X÷d0S1U

Содержит некоторые непечатные. Попробуйте онлайн!

Подсчет: 13 байт сжатых данных, 9 байт для его распаковки и 21 байт для формирования выходных данных.

объяснение

Ungolfed код:

"Ýûÿ©ÿßY÷ß"®   c s4à ¤  ëAU ¬ £  2839¤  ë4Xà ·  d0S1U
"Ýûÿ©ÿßY÷ß"mZ{Zc s4} s2 ëAU q mX{2839s2 ë4X} qR d0S1U

Существует ровно 4 разных варианта строки: ( #представляет цифру)

#  
  #
# #
###

Таким образом, каждое число может быть сохранено как набор из пяти цифр от 4 до 4. Поскольку каждое число может быть затем сохранено в 10 битах, общее количество составляет 100 битов, что соответствует 13 байтам. Я пропущу процесс сжатия и вместо этого объясню декомпрессию.

mZ{Zc s4} 

mZ{     }  // Replace each character Z in the compressed string with the following:
   Zc      //   Take the char-code of Z.
      s4   //   Convert to a base-4 string.

После распаковки сжатая 13-байтовая строка выглядит следующим образом:

3131332333332111200122213333313321011121213133133133

Обратите внимание, что это не получится, если начнется любой из 4-значных циклов 0, так как начальные нули будут s4пропущены при запуске. Мы можем исправить это с помощью 0представления #  , которое появляется только три раза, и ни один из них не выпадает в начале запуска из 4 цифр.

s2         // Slice off the first two chars of the result.

Итак, для того, чтобы наша строка из 50 цифр хорошо сжималась кусками по 4, нам нужно было добавить две дополнительные цифры. Добавление их в начало строки означает, что мы можем отрубить их одним байтом ¤.

ëAU        // Take every 10th (A) char in this string, starting at index <input> (U).

Смущает то, что у Japt нет встроенной функции для разбиения строки на куски длиной X. Однако у него есть встроенная функция для получения каждого X-го символа, поэтому мы можем хранить все данные, сначала кодируя все верхние строки, а затем все вторые ряды и т. д.

Итак, теперь у нас есть 5-значная строка, кодирующая цифру, которую мы хотим создать, например, 32223для 0.

q mX{2839s2 ë4X} qR
q                    // Split the resulting string into chars.
  mX{          }     // Replace each char X with the result of this function:
     2839s2          //   Convert the magic number 2839 to a binary string.
            ë4X      //   Take every 4th char of this string, starting at index X.
                 qR  // Join the result with newlines.

Чтобы объяснить магическое число, вернитесь к четырем отдельным строкам. Если вы замените #на 1и  с 0, вы получите

100
001
101
111

Транспонирование этого и затем объединение в одну строку дает нам 101100010111. Преобразование в десятичное число и, вуаля, у вас есть 2839. Обратный процесс отображает цифры 0123в четыре двоичные строки, показанные выше.

Почти сделано! Теперь осталось только добавить пробелы и цифры:

d0S1U      // In the resulting string, replace 0 with " " (S) and 1 with <input> (U).

И прежде всего, неявный вывод заботится обо всем остальном. Извините, это объяснение такое длинное, но я не вижу реального способа сыграть в него, не сделав его менее понятным (если оно понятно ...)

ETHproductions
источник
9

JavaScript (ES6), 115 111 байт

Принимает ввод в виде строки.

n=>'02468'.replace(/./g,c=>(n+n+n+`   ${n} `+n).substr([126,341,36,68,327.5,66,98,340,102,70][n]*4>>c&6,3)+`
`)

Как это устроено

Кодировка паттернов

Четыре различных моделей "XXX", "X..", "..X"и "X.X"могут быть сжаты , как "XXX...X.X"и экстрагируют следующим образом:

XXX...X.X
^^^        --> XXX  (id = 0 / pointer = 0)
  ^^^      --> X..  (id = 1 / pointer = 2)
    ^^^    --> ..X  (id = 2 / pointer = 4)
      ^^^  --> X.X  (id = 3 / pointer = 6)

Подставив ввода цифр nдля "X"и с использованием реальных пространств, это дает выражение:

n+n+n+`   ${n} `+n

Цифровое кодирование

Используя идентификаторы шаблона, определенные выше, каждая цифра может быть представлена ​​5 * 2 = 10-битной величиной.

Например:

XXX  -->  0 *   1 =   0
X.X  -->  3 *   4 =  12
XXX  -->  0 *  16 =   0
..X  -->  2 *  64 = 128
XXX  -->  0 * 256 =   0
                    ---
                    140

Полный список:

[252, 682, 72, 136, 655, 132, 196, 680, 204, 140]

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

[126, 341, 36, 68, 327.5, 66, 98, 340, 102, 70]

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

Arnauld
источник
6

Утилиты Bash + GNU, 114

  • 2 байта сохранены благодаря @SophiaLechner

Вероятно, здесь есть еще несколько возможностей для сжатия, но вот для начала:

dc<<<4o16iEAC00CDF33AC373DEF00EEFB3p|fold -5|sed "$[$1+1]!d
s/0/  x\n/g
s/1/x\n/g
s/2/x x\n/g
s/3/xxx\n/g
y/x/$1/"

объяснение

Каждый ряд каждой цифры является одним из этих четырех шаблонов:

  x
x
x x
xxx

Обозначая эти 0-3, каждая цифра может быть представлена ​​5-ю цифрами от 4 до 4. Например, 0 32223, и полный список цифр закодирован в base-4 как 32223000003031330303223003130331323300003232332303. Это закодировано в шестнадцатеричном видеEAC00CDF33AC373DEF00EEFB3 .

  • dc преобразует гекс EAC00CDF33AC373DEF00EEFB3 в базу-4.
  • fold ставит 5 цифр по 4 в каждой строке
  • sed:
    • удаляет все входные строки, кроме номера строки n + 1 (строки sed 1-indexes)
    • переводит основание 4 цифры в шаблон (из x ы) для каждой строки данной цифры вместе с новой строкой в ​​конце каждой строки
    • транслитерирует xes на цифру n.

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

Цифровая травма
источник
1
Хорошая идея! Сохранить пару байт, заменяя s/1/x \n/gс s/1/x\n/g, так как эти места не будут визуально влияют на выход.
София Лехнер
5

MATL , 45 43 байта

'V~4;LR`I-D2q (z%eI)P-nc'F TFZa15eiZ)5eGV*c

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

объяснение

'V~4;LR`I-D2q (z%eI)P-nc' % Compressed string using printable ASCII except '
F TFZa                    % Decompress (change of base) into alphabet [1 0]
15e                       % Reshape into 15-row matrix. Each column contains the
                          % art for one digit, packed in column-major order
iZ)                       % Take input number and pick the corresponding column.
                          % Indexing is 1-based and modular, so 0 is at the end
5e                        % Reshape into a 5-row matrix. This already looks like
                          % the number, with active pixels as 1 and inactive as 0
GV                        % Push input number again. Convert to string, of one char
*                         % Multiply, element-wise. The previous char is
                          % interpreted as its ASCII code. This changes 1 into the 
                          % ASCII code of the input digit, and leaves 0 as is
c                         % Convert to char. Implicitly display. Char 0 is shown as
                          % a space
Луис Мендо
источник
3

Сетчатка, 166 164 163 байта

Два пробела на третьей строке снизу

0
0addda
d
0 0
1
1b1b1b1b1b1
2
2ab2a2b222
3
3ab3ab3a
4
44 44 4ab4b4
5
55ab555b5a
6
66ab6a 6a
7
7ab7b7b7b7
8
88a 8a8 8a
9
99a 9ab9a
(\d)a
$1$1$1$1
^.

b
  
.{3} $+¶

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

Усовершенствованный вариант @ Okx в растворе

математик наркоман
источник
2

Pyth 82 85 91 100 байт

Km?dC+48Q\ m.&C@"w$kn<^_d\x7f~"Qdj1906486293414135453684485070928 128V5p.)Kp.)K.)K

Возможно, много игры в гольф, мой первый вызов.

Марк Перриман
источник
Добро пожаловать в PPCG!
Мартин Эндер
2

Пакетный файл, 8 + 184 байта

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

@type %1

В текущем каталоге у меня установлено 10 файлов с именами от 0 до 9. В каждом из них есть соответствующая сетка пикселей 5x3. Например:

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

Количество байтов для них:

19 0
19 1
17 2
19 3
19 4
17 5
17 6
19 7
19 8
19 9
Total - 184

Все еще бить Java.

БДМ
источник
1

Рубин, 94 байта

->n{20.times{|i|print i%4>2?$/:[" ",n]["_Q_@@_]UWUU_GD_WU]_U]AA__U_WU_"[n*3+i%4].ord>>i/4&1]}}

Неуправляемый в тестовой программе

f=->n{
  20.times{|i|                           #4 characters * 5 rows = 20
    print i%4>2?$/:                      #If i%4=3 print a newline else
    [" ",n][                             #either a space if the expression below is 0 or the digit n if 1.
      "_Q_@@_]UWUU_GD_WU]_U]AA__U_WU_"[  #bitmap data for digits, one character for each column
        n*3+i%4].ord>>i/4&1              #Select the correct character for the column, convert to ascii code,
    ]                                    #rightshift to find the correct bit for the row, 
  }                                      #use & to isolate the bit: 0 or 1
}

f[gets.to_i]
Уровень реки St
источник
1

PHP, 115 байт

for(;$i<5;)echo strtr(sprintf("%03b\n","1754"[[425,0,465,273,26,285,413,1,409,281][$argn]/4**$i++%4]),[" ",$argn]);

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

расширенный

for(;$i<5;)
  echo strtr(
    sprintf("%03b\n",  # make a binary
      "1754"[[425,0,465,273,26,285,413,1,409,281][$argn]/4**$i++%4])
    ,[" ",$argn]); # replace 0 with space and 1 with the input

Кодировка Попробуйте онлайн!

Йорг Хюльсерманн
источник
1

Сетчатка , 125 байт

.
A$&¶B$&¶C$&¶D$&¶E$&
([ACE][235689]|A0|E0|C4|A7)(?<=(.))
$2$2$2
(B[0489]|D[068]|A4|C0)(?<=(.))
$2 $2
D2
2
B5
5
B6
6
[A-E]
  

Попробуйте онлайн! (Удалите набор тестов в заголовке, чтобы проверить отдельные входные цифры.) Последняя строка содержит два пробела.

Нил
источник
1

PowerShell, 126 120 113 109 101

$n="$args"
-split'ϽϭϿ·ͱ Ο·ͽͼϿ·Ņ ϻ·ͭͭϿ'|%{-join($_[0..2]|%{"$n·"[!($_-band1-shl$n)]})}

Юникод это весело. Символы также намного короче, чем цифры. Приведенный выше код содержит U + 0000 дважды, поэтому его нельзя скопировать напрямую (хотя и отлично работает в файле). Следующий код может быть скопирован:

$n="$args"
-split"ϽϭϿ ͱ`0Ο ͽͼϿ Ņ`0ϻ ͭͭϿ"|%{-join($_[0..2]|%{"$n "[!($_-band1-shl$n)]})}

Мы теряем три байта, потому что нам нужна подпись UTF-8 в начале. В противном случае строка не будет работать.

детеныш
источник
1

Сетчатка , 190 байт

0
000¶aaa000
a
0 0¶
1
aaaaa
a
b1¶
2
ab2¶a2¶a
a
222¶
3
ab3¶ab3¶a
a
333¶
4
4 4¶4 4¶444¶b4¶b4
5
a5b¶ab5¶a
a
555¶
6
a6¶a6 6¶a
a
666¶
7
777aaaa
a
¶b7
8
a8 8¶a8 8¶a
a
888¶
9
a9 9¶ab9¶a
a
999¶
b
  

В последней строке есть два пробела, но SE не хочет их отображать: / Исправлено!

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

Okx
источник
У меня есть ощущение, что есть способ объединить повторную замену aс тремя цифрами и новой строкой. (Может быть, с помощью lookaheads?)
математика наркоман
@mathjunkie Да: /
Okx
1

Java 8, 278 214 210 204 байта

n->("A"+n+"\nB"+n+"\nC"+n+"\nD"+n+"\nE"+n).replaceAll("([ACE][235689]|A0|E0|C4|A7)(?<=(.))","$2$2$2").replaceAll("(B[0489]|D[068]|A4|C0)(?<=(.))","$2 $2").replaceAll("D2|B5|B6",n).replaceAll("[A-E]","  ")

Порт ответа @Neil 's Retina . Принимает вход как String.

Попробуй это здесь.

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

PowerShell , 159 135 128 118 байт

param($n);0..4|%{("$n$n$n","$n $n","  $n","$n  ")['01110333330203002020110220302003010022220101001020'[$_+($n*5)]-48]}

Текущий ответ: удалены посторонние имена переменных

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

Я должен посмотреть, смогу ли я получить некоторые хитрости из других ответов: P

РЕДАКТИРОВАТЬ Умнее с вызовом мега строки

EDIT2 Переключено на использование строки чисел для индексации $aдля сохранения 7 байтов. Хотя мне нравились мои предыдущие вызовы имен динамических переменных в приведенном ниже коде (135 байт)

param($n);$a="$n$n$n";$b="$n $n";$c="  $n";$d="$n  ";$r="abbbadddddacadaacacabbaccadacaadabaaccccababaabaca";0..4|%{gv $r[$_+($n*5)]-v}
Синусоида
источник
0

Древесный уголь , 61 38 байт

E§⪪”{⊞¶↙⬤\→*'K«-aRQ¹νÀ⁰”⁵N⭆421⎇&IιIλθ 

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

E§⪪”{⊞¶↙⬤\→*'K«-aRQ¹νÀ⁰”⁵N

Разделите (сжатую) строку на группы по 5, возьмите строку с индексом, заданным входными данными, и сопоставьте символы в группе (которые всегда равны 1, 4, 5 или 7).

⭆421⎇&IιIλθ 

Преобразуйте символ из основания 10 в трехзначное основание 2, используя введенный символ и пробел в качестве цифр. Затем 5 результатов неявно печатаются в отдельных строках.

Общий порт немного скучен, поэтому вот более идиоматичный 61-байтовый ответ:

GH✳✳§⟦⟦↑L↓¬⟧⟦↓↓⟧⟦T↓→⟧⟦T→¬⟧⟦↑↑¬↑⟧⟦←↓T⟧⟦T↑L⟧⟦→↓↓⟧⟦+L↓⟧⟦+↓T⟧⟧N³θ

Попробуйте онлайн! Ни одна подробная версия, так как девербосификатор не понимает списки направлений или даже разнонаправленные внутри обычных многоугольников. Объяснение:

     ⟦...⟧      Array of paths, see below
          N     Input as an integer
    §           Index into the array
  ✳✳            Treat the element as direction data
           ³    Length of each segment (including 1 character overlap)
            θ   Draw using the input character
GH              Draw a path

Каждый путь указывается с использованием списка направлений ( ←↑→↓). Четыре используемых ярлыка сохраняют байты: Lпредставляет ↑→, ¬представляет ↓←, Tпредставляет, в →↓←то время как +представляет →↓←↑, хотя для того, чтобы список был распознан как список направлений, должна оставаться как минимум одна стрелка (поэтому, например, TTее нельзя использовать 3).

Нил
источник
0

Python 3 , 119 байт

lambda n:(3*f"%s%s{n}\n%s %s\n")[:30]%(*[n if i//(2**n)%2else" "for i in[1021,1005,881,927,893,892,325,1019,877,877]],)

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

Каждый «пиксель» представлен как целое число, где каждая степень два указывает, является ли пиксель сплошным. Это использует тот факт, что три правых угла всегда являются цифрами.

Мэтью Дженсен
источник
-1

JavaScript (ES8), 87 байт

n=>`019
2 3
459
6 7
889`.replace(/\d/g,c=>[2,18,142,96,130,131,698,4,146][c]>>n&1?' ':n)
mhmhhmgg
источник
2
Это точно такой же ответ, как и ответ @Neil на JavaScript от 27 апреля. Если у вас есть что-то, что он может улучшить, вы должны прокомментировать его ответ, а не публиковать новый, такой же (РЕДАКТИРОВАТЬ: И да, я понимаю, у вас еще недостаточно репутации, чтобы комментировать ..)
Кевин Круйссен