Відображення 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 байт - це голосування від мене, найнижчий рівень прийняття, але я завжди міг змінити прийняту відповідь, тому не перешкоджайте відповідати.



Звичайно, це дублікат. Це, безумовно, дуже близько до цього
Shaggy

Можливий дублікат Golf me 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

Мене вражає те, як вам вдалося це зробити в 35 байт за один раз! Хоча я ніколи раніше не використовував SOGL, я використовував онлайн-тестер і він працює!
VortexYT

Дані форми цифр насправді лише 17 байт (6 байтів, втрачених там, є дані про довжину, і це `` і -), а решта легко. Мені цікаво, яким онлайн-тестером ви користувалися? Я не робив і не бачив жодного.
dzaima

О, просто натисніть на 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

11

Japt , 43 байти

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

Містить деякі недруковані матеріали. Спробуйте в Інтернеті!

Талі: 13 байт стислих даних, 9 байт для їх розпакування та 21 байт для формування результату.

Пояснення

Невикористаний код:

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

Існує рівно 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

Зверніть увагу, що це не вдасться, якщо будь-який із чотирьохзначних запусків розпочався з 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. Перетворити в десятковий і, voilà, у вас є 2839. Повернення процесу відображає цифри 0123у чотири бінарні рядки, показані вище.

Майже зроблено! Тепер все, що вам залишається зробити, це додати пробіли та цифри:

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

І presto, неявний вихід дбає про решту. Вибачте, що це пояснення настільки довго, але я не бачу реального способу пограти в нього, не роблячи його менш зрозумілим (якщо воно зрозуміле ...)


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]

Демо


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 цифрами. Наприклад, 0 було б 32223, а повний список цифр закодований у базі-4 як 32223000003031330303223003130331323300003232332303. Це закодовано в hex як EAC00CDF33AC373DEF00EEFB3.

  • dcперетворює шістнадцяткову EAC00CDF33AC373DEF00EEFB3в базу-4.
  • fold ставить 5 базових-4 цифри в кожному рядку
  • sed:
    • видаляє всі вхідні рядки, крім номера рядка n + 1 (sed 1-індексні рядки)
    • переводить базові-4 цифри у шаблон ( xи) для кожного рядка даної цифри разом з новим рядком для кінця кожного рядка
    • транслітерація xес до цифри 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



2

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

Ось моє обов’язкове пакетне рішення. На жаль, стандартним методом досягнення цього є понад 300 байтів у партії, тому ми вдаємося до набагато дешевших тактик.

@type %1

У поточному каталозі у мене встановлено 10 файлів, названих від 0 до 9. У кожному з них є відповідна сітка пікселів 5x3. Наприклад:

enter image description here

Для цього число байтів:

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

Ungolfed в тестовій програмі

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]


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)]})}

Unicode - це весело. Символи також набагато коротші за цифри. Вищевказаний код містить 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 не хоче виводити його: / Виправлено!

Спробуйте в Інтернеті!


У мене є відчуття, що є спосіб поєднати повторну заміну aтрьома цифрами та новим рядком. (Можливо, використовуйте lookaheads?)
математика наркоман

@mathjunkie Так: /
Okx



1

PowerShell , 159 135 128 118 байт

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

Поточна відповідь: видалено сторонні імена змінної

Спробуйте в Інтернеті!

Мені доведеться дізнатися, чи можу я отримати відповіді з інших відповідей: P

EDIT Станьте розумнішим з викликом мегапотоку

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)

2
Це точно така ж відповідь, як і відповідь JavaScript @Neil від 27 квітня. Якщо у вас є щось, що він може вдосконалити, вам слід прокоментувати його відповідь, а не публікувати нову, яка є такою ж (EDIT: І так, я розумію у вас ще недостатньо репутації для коментарів ..)
Кевін Круїйсен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.