Codegolf — Отображение N С Помощью N

  • Автор темы PullyRex
  • Обновлено
  • 23, Oct 2024
  • #1

Чего я хочу:

Проще говоря, мне нужен текстовый дисплей, который запрашивает ввод,

 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
 
, then shows that value on the display! But there's a catch. Each of the 'true' 'pixels' (the ones filled in) has to be represented by that number n ..

Пример :

Вам предоставлен ввод n . You can assume n будет одна цифра

n

Испытание:

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

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

Пробелы вокруг не являются обязательными. пока цифра отображается правильно.

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

#код-гольф #ascii-art #kolmogorov-complexity

PullyRex


Рег
01 Oct, 2006

Тем
65

Постов
188

Баллов
533
  • 26, Oct 2024
  • #2

JavaScript (ES6), 88 байт

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

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

 

Evro


Рег
17 Mar, 2020

Тем
71

Постов
172

Баллов
527
  • 26, Oct 2024
  • #3

05AB1E, 40 39 38 байт

$_=sprintf"b",0xf79ef7dee492f3def39eb792e79ee7ce4924f6de>>16*$_&65535;eval"y/01/ @F/";s/...\K/\n/g

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

Объяснение

-Mbigint -pa ||answer||

Япт, 43 байта

Ṿ⁶,“SÐ~ẈoI9Ẇ¦Y./,0&Ƥɓ€ọ’ṃs15ị@s3

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

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

Объяснение

Негольфированный код:

3

Существует ровно 4 различных варианта строк: ( TT represents a digit)

→↓←↑

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

+

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

→↓←

Обратите внимание, что это не удастся, если какой-либо из 4-значных прогонов начнется с T , as the leading zeroes would be left off when ↓← запущен. Мы можем исправить это, имея ¬ represent ↑→ , который появляется только три раза, и ни один из них не попадает в начало 4-значного ряда.

L

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

⟦...⟧ 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

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

Итак, теперь у нас есть 5-значная строка, кодирующая цифру, которую мы хотим создать, например. GH✳✳§⟦⟦↑L↓¬⟧⟦↓↓⟧⟦T↓→⟧⟦T→¬⟧⟦↑↑¬↑⟧⟦←↓T⟧⟦T↑L⟧⟦→↓↓⟧⟦+L↓⟧⟦+↓T⟧⟧N³θ for ?421⎇&IιIλθ .

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

Чтобы объяснить магическое число, вернемся к четырем различным рядам. Если вы замените E§⪪”{⊞¶↙⬤\→*'K«-aRQ¹νÀ⁰”⁵N?421⎇&IιIλθ with param($n);$a="$n$n$n";$b="$n $n";$c=" $n";$d="$n ";$r="abbbadddddacadaacacabbaccadacaadabaaccccababaabaca";0..4|%{gv $r[$_+($n*5)]-v} и с $a , you get

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

Транспонирование этого и последующее объединение в одну строку дает нам lambda n:'\n'.join('xxx x x'[int(i):][:3]for i in oct(0x3028000adba93b6b0000c0ad36ebac30180c0)[:-1][n::10]).replace('x',`n`) . Convert to decimal and, voilà, you have 2839. Reversing the process maps the digits String в четыре двоичные строки, показанные выше.

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

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]"," ")

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

 

NICSCOONSMAZY


Рег
04 Mar, 2013

Тем
65

Постов
189

Баллов
544
  • 26, Oct 2024
  • #4

JavaScript (ES6), 115 111 байт

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

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

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

Кодирование шаблонов

Четыре различных шаблона $n="$args" -split"ϽэϿ ͱ`0Ο ͽͼϿ Ņ`0ϻ ?эϿ"|%{-join($_[0..2]|%{"$n "[!($_-band1-shl$n)]})} , $n="$args" -split'ϽэϿ·ͱ Ο·ͽͼϿ·Ņ ϻ·ээϿ'|%{-join($_[0..2]|%{"$n·"[!($_-band1-shl$n)]})} , . 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]
and for(;$i<5;) echo strtr( sprintf("b\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 можно сжать как for(;$i<5;)echo strtr(sprintf("b\n","1754"[[425,0,465,273,26,285,413,1,409,281][$argn]/4**$i++%4]),[" ",$argn]); and extracted this way:

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]

Подставив входную цифру ->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]}} for 19 0 19 1 17 2 19 3 19 4 17 5 17 6 19 7 19 8 19 9 Total - 184 и используя фактические пробелы, это дает выражение:

@type %1

Кодировка цифр

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

Например:

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

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

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} $+¶

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

'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

Демо

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

СОГЛ V0.12, 30 байты

x

Попробуйте здесь! Сжатая строка x is

sed

который представляет собой (начиная с 1 и заканчивая 0) числа, построчно, от числа к числу.

fold ||answer||

Остальные

  • Bash + утилиты GNU, 114

Сэкономлено 2 байта благодаря @SophiaLechner

EAC00CDF33AC373DEF00EEFB3

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

Объяснение

dc

Каждая строка каждой цифры представляет собой один из этих четырех шаблонов: EAC00CDF33AC373DEF00EEFB3 , and the full list of digits is encoded in base-4 as 32223000003031330303223003130331323300003232332303 Обозначив эти числа 0–3, каждая цифра может быть представлена ​​пятью цифрами по основанию 4. Например. 0 было бы 32223 .

  • x x x x xxx converts hex 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/" . Это закодировано в шестнадцатеричном формате как
  • ...‘ 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 puts 5 base-4 digits on each line
  • ŗ ŗ ŗ ŗ ŗŗŗŗ ŗŗŗŗŗ ŗŗŗŗŗŗ ŗŗŗŗ ŗŗŗŗŗ ŗŗ ŗŗŗŗ ŗ ŗŗŗŗŗ ŗŗŗ ŗŗŗŗŗŗŗŗ ŗŗŗŗ ŗŗŗŗŗŗŗ ŗ ŗ ŗ ŗŗŗŗŗ ŗŗŗŗŗ ŗŗŗŗŗŗŗŗ ŗŗŗŗ ŗŗŗŗŗŗŗŗ ŗŗ ŗŗ ŗŗŗŗ :
    • по основанию-4.
    • удаляет все входные строки, кроме строки с номером n+1 (строки с 1-индексами sed) ■'τč▲Β►║⁰ΡāQšJ┘tXdnοO¹‘ es) for each line of the given digit, along with a newline for the end of each row
    • переводит цифры по основанию 4 в шаблон (из ■'τč▲Β►║⁰ΡāQšJ┘tXdnοO¹‘'¹n.w3n es to digit n.

транслитерирует.

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

 

Thespotru


Рег
01 Jan, 2011

Тем
83

Постов
207

Баллов
662
  • 26, Oct 2024
  • #5
МАТЛ let f = 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)+` `) console.log(f('0')) console.log(f('1')) console.log(f('2')) console.log(f('3')) console.log(f('4')) console.log(f('5')) console.log(f('6')) console.log(f('7')) console.log(f('8')) console.log(f('9'))

, 45 43 байта

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

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

Объяснение

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

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

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

Попробуйте онлайн! Улучшенная версия @Okx's

решение

 

OvadsMepevedy91


Рег
25 Oct, 2024

Тем
71

Постов
190

Баллов
605
  • 26, Oct 2024
  • #6
XXX --> 0 * 1 = 0 X.X --> 3 * 4 = 12 XXX --> 0 * 16 = 0 ..X --> 2 * 64 = 128 XXX --> 0 * 256 = 0 --- 140

Пиф 82 85 91 100 байт

Вероятно, возможно много играть в гольф, это моя первая задача.

 

Peendyinism


Рег
08 Nov, 2019

Тем
79

Постов
211

Баллов
616
  • 26, Oct 2024
  • #7

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

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

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

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

"X"

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

Все еще побеждаю Яву.

 

Yankole


Рег
09 Jul, 2007

Тем
74

Постов
195

Баллов
585
  • 26, Oct 2024
  • #8
n

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

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

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

"XXX...X.X"

PHP, 115 байт

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

"X.X"

Расширенный Кодирование

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

 

Rusas86


Рег
02 Jun, 2020

Тем
80

Постов
205

Баллов
635
  • 26, Oct 2024
  • #9
сетчатка "..X"

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

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

 

NEVECCC


Рег
13 Oct, 2011

Тем
79

Постов
188

Баллов
613
  • 26, Oct 2024
  • #10
"X.."

PowerShell, 126 120 113 109 101

"XXX"

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

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

 

KLee


Рег
27 Sep, 2015

Тем
60

Постов
170

Баллов
480
  • 26, Oct 2024
  • #14
PowerShell 100 001 101 111

,159 135 128 118 байт

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

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

Мне нужно будет посмотреть, смогу ли я получить некоторые трюки из других ответов: P РЕДАКТИРОВАТЬ

Становимся умнее с вызовом мегастроки Переключился на использование строки чисел для индексации 0 to save 7 bytes. Although I liked my previous dynamic variable name calls in the below code (135 bytes)

1 ||answer||

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

#

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

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.

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

0

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

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

32223

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

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

Каждый путь указывается с помощью списка направлений ( ¤ ). Four usable shortcuts save bytes: s2 // Slice off the first two chars of the result. представляет # , 0 представляет s4 , 0 представляет 3131332333332111200122213333313321011121213133133133 while 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. представляет # # # # ### , although at least one arrow must remain for the list to be recognised as a direction list (so for instance # не может быть использован для "Ýûÿ©ÿßY÷ß"® c s4à ¤ ëAU ¬ £ 2839¤ ë4Xà · d0S1U "Ýûÿ©ÿßY÷ß"mZ{Zc s4} s2 ëAU q mX{2839s2 ë4X} qR d0S1U ).

 

Gonechek


Рег
19 Jan, 2006

Тем
77

Постов
211

Баллов
616
  • 26, Oct 2024
  • #16

Перл 5 •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 , 101 bytes

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

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

 

Andre_DVD


Рег
18 Oct, 2004

Тем
79

Постов
197

Баллов
622
  • 26, Oct 2024
  • #17

Питон 3, 119 байт

<input type=number min=0 max=9 oninput=o.textContent=f(this.value)><pre id=o>

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

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

При этом используется тот факт, что три правых угла всегда являются цифрами.

 

Wooden world


Рег
25 Dec, 2007

Тем
70

Постов
198

Баллов
608
  • 26, Oct 2024
  • #18
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)
 

Alexey3503


Рег
14 Oct, 2019

Тем
64

Постов
223

Баллов
573
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно