Wyświetlanie n za pomocą n

18

Czego chcę:

Po prostu chcę wyświetlacz tekstowy, który prosi o dane wejściowe n, a następnie pokazuje tę wartość na wyświetlaczu! Ale jest haczyk. Każdy z „prawdziwych” pikseli (tych wypełnionych) musi być reprezentowany przez tę liczbę n.

Przykład:

Otrzymałeś wkład n. Możesz założyć n, że będzie to jedna cyfra

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

Wyzwanie:

Wykonaj powyższe czynności w jak najmniejszej liczbie bajtów.

Przyjmę tylko odpowiedzi, które spełniają wszystkie wymagania.

Otaczanie białych znaków jest opcjonalne, o ile cyfra jest wyświetlana poprawnie.

Ponadto <75 bajtów to mój głos, najniższy poziom akceptacji, ale zawsze mogłem zmienić przyjętą odpowiedź, więc nie zniechęcaj się do odpowiedzi.

VortexYT
źródło
Powiązane
Emigna
Z pewnością jest to duplikat. Jest to z pewnością bardzo blisko do tego
Kudłaty
Możliwy duplikat Golf mi alfabetu ASCII
towarzysz SparklePony
2
Nie sądzę, że to dupek. Chociaż pytania są bardzo podobne, myślę, że zmniejszony zestaw znaków (0–9) da kilka zupełnie innych odpowiedzi.
Cyfrowa trauma

Odpowiedzi:

8

SOGL V0.12 , 30 bajtów

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

Wypróbuj tutaj! Skompresowany ciąg ■'τč▲Β►║⁰ΡāQšJ┘tXdnοO¹‘to

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

czyli (zaczynając od 1, kończąc na 0) liczby, linia po linii, liczba do liczby. Reszta

...‘             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
źródło
Jestem pod wrażeniem tego, jak udało ci się to zrobić za 35 bajtów za jednym razem! Chociaż nigdy wcześniej nie korzystałem z SOGL, użyłem testera online i działa!
VortexYT 27.04.17
Dane kształtu liczb to tak naprawdę tylko 17 bajtów (6 utraconych bajtów to dane długości i że to `` i -), a reszta jest łatwa. Jestem ciekawy, jakiego testera online użyłeś? Nie zrobiłem ani nie widziałem.
dzaima 27.04.17
Och, po prostu kliknij SOGL powyżej! Musisz pobrać coś takiego jak 1 MB lub coś takiego. Natychmiast usunąłem. : /
VortexYT
Jak to zrobiłeś?
VortexYT 27.04.17
Och, wow! Gratulacje dla ciebie! Wygląda na to, że masz w nim wiele plików. Może trochę to oddzielnie
VortexYT 27.04.17
13

JavaScript (ES6), 88 bajtów

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>

Liczby kodują, które kwadraty zawierają spacje dla danej cyfry, np. Lewy dolny róg ma wartość 146, ponieważ 1, 4 i 7 go nie używają, a 146 = 2¹ + 2⁴ + 2⁷.

Neil
źródło
11

05AB1E , 40 39 38 bajtów

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

Wypróbuj online!

Wyjaśnienie

•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
źródło
11

Japt , 43 bajty

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

Zawiera niektóre niedrukowalne. Wypróbuj online!

Tallies: 13 bajtów skompresowanych danych, 9 bajtów na dekompresję i 21 bajtów na dane wyjściowe.

Wyjaśnienie

Nieskluczony kod:

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

Istnieją dokładnie 4 różne możliwości wierszy: ( #reprezentuje cyfrę)

#  
  #
# #
###

W ten sposób każda liczba może być zapisana jako zestaw pięciu cyfr podstawowych 4. Ponieważ każda liczba może być następnie zapisana w 10 bitach, w sumie jest to 100 bitów, co odpowiada 13 bajtom. Pominę proces kompresji i wyjaśnię dekompresję.

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.

Po dekompresji 13-bajtowy skompresowany ciąg wygląda następująco:

3131332333332111200122213333313321011121213133133133

Zauważ, że to się nie powiedzie, jeśli którykolwiek z 4-cyfrowych przebiegów zacznie się od 0, ponieważ zera wiodące byłyby pominięte podczas s4uruchamiania. Możemy to naprawić poprzez 0reprezentację #  , która pojawia się tylko trzy razy i żadna z nich nie spada na początku 4-cyfrowego przebiegu.

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

Ok, więc aby nasz 50-cyfrowy ciąg ładnie kompresował się w kawałkach po 4, musieliśmy dodać dwie dodatkowe cyfry. Dodanie ich na początku sznurka oznacza, że ​​możemy je odciąć pojedynczo ¤.

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

Żenujące jest to, że Japt nie ma wbudowanej funkcji dzielenia łańcucha na plasterki o długości X. Ma jednak wbudowaną funkcję pobierania co X znaku, więc możemy przechowywać wszystkie dane, najpierw kodując wszystkie górne rzędy, a następnie wszystkie drugie rzędy itp.

Więc teraz mamy 5-cyfrowy ciąg kodujący cyfrę, którą chcemy utworzyć, np . 32223Dla 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.

Aby wyjaśnić magiczną liczbę, powróć do czterech różnych rzędów. Jeśli zastąpi #się 1i  z 0, masz

100
001
101
111

Przełożenie tego, a następnie połączenie w pojedynczy ciąg daje nam 101100010111. Konwertuj na dziesiętne i, voilà, masz 2839. Odwrócenie procesu odwzorowuje cyfry0123 na cztery pokazane powyżej wiersze binarne.

Prawie skończone! Teraz pozostaje tylko dodać spacje i cyfry:

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

A presto, niejawna produkcja zajmuje się resztą. Przykro mi, że to wyjaśnienie jest tak długie, ale nie widzę żadnego prawdziwego sposobu na grę w golfa bez uczynienia go mniej zrozumiałym (jeśli jest zrozumiałe ...)

ETHprodukcje
źródło
9

JavaScript (ES6), 115 111 bajtów

Pobiera dane wejściowe jako ciąg.

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)+`
`)

Jak to działa

Kodowanie wzorca

Cztery różne wzory "XXX", "X..", "..X"i "X.X"mogą być skompresowane, jak "XXX...X.X"i ekstrahuje się w ten sposób:

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

Podstawiając cyfrę wejścia ndo "X"i korzystania rzeczywiste przestrzenie, daje wyraz:

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

Kodowanie cyfrowe

Używając zdefiniowanych powyżej identyfikatorów wzorów, każdą cyfrę można przedstawić za pomocą 5 * 2 = 10-bitów.

Na przykład:

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

Pełna lista to:

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

Jednak podzielenie tych wartości przez 2 pozwala zaoszczędzić dwa bajty. Zamiast tego przechowujemy:

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

Próbny

Arnauld
źródło
6

Narzędzia Bash + GNU, 114

  • 2 bajty zapisane dzięki @SophiaLechner

Prawdopodobnie jest tutaj więcej możliwości kompresji, ale oto początek:

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

Wyjaśnienie

Każdy rząd każdej cyfry jest jednym z tych czterech wzorów:

  x
x
x x
xxx

Oznaczając je cyframi 0-3, każdą cyfrę można przedstawić za pomocą 5 cyfr podstawowych 4. Np. 0 byłoby 32223, a pełna lista cyfr jest zakodowana w bazie-4 jako 32223000003031330303223003130331323300003232332303. To zakodowane w postaci szesnastkowej jako EAC00CDF33AC373DEF00EEFB3.

  • dckonwertuje hex EAC00CDF33AC373DEF00EEFB3na base-4.
  • fold umieszcza 5 cyfr podstawowych 4 w każdej linii
  • sed:
    • usuwa wszystkie linie wejściowe oprócz numeru linii n + 1 (linie sed 1 indeksuje)
    • tłumaczy 4 podstawowe cyfry na wzór ( xes) dla każdej linii danej cyfry, wraz z nową linią na końcu każdego wiersza
    • transliteruje xes na cyfrę n.

Wypróbuj online .

Cyfrowa trauma
źródło
1
Dobry pomysł! Zaoszczędź kilka bajtów, zastępując s/1/x \n/gje s/1/x\n/g, ponieważ te spacje nie wpłyną wizualnie na wynik.
Sophia Lechner
5

MATL , 45 43 bajtów

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

Wypróbuj online!

Wyjaśnienie

'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
Luis Mendo
źródło
3

Retina, 166 164 163 bajtów

Dwa spacje w trzeciej linii od dołu

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

Wypróbuj online!

Ulepszona wersja @ Okx w roztworze

ćpun matematyki
źródło
2

Pyth 82 85 91 100 bajtów

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

Prawdopodobnie dużo golfa, moje pierwsze wyzwanie.

Mark Perryman
źródło
Witamy w PPCG!
Martin Ender
2

Plik wsadowy, 8 + 184 bajtów

Oto moje obowiązkowe rozwiązanie partii. Niestety standardowa metoda osiągnięcia tego celu to ponad 300 bajtów wsadowo, dlatego stosujemy znacznie tańszą taktykę.

@type %1

W bieżącym katalogu mam 10 plików o nazwach od 0 do 9. W każdym z nich znajduje się odpowiednia siatka pikseli 5x3. Na przykład:

enter image description here

Liczby bajtów są następujące:

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

Nadal pokonałem Javę.

BDM
źródło
1

Rubinowy, 94 bajty

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

Niegolfowany w programie testowym

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]
Level River St
źródło
1

PHP, 115 bajtów

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

Wypróbuj online!

Rozszerzony

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

Kodowanie Wypróbuj online!

Jörg Hülsermann
źródło
1

Siatkówka , 125 bajtów

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

Wypróbuj online! (Usuń pakiet testowy w nagłówku, aby przetestować poszczególne cyfry wejściowe.) Ostatni wiersz zawiera dwie spacje.

Neil
źródło
1

PowerShell, 126 120 113 109 101

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

Unicode jest fajny. Znaki są również znacznie krótsze niż cyfry. Powyższy kod zawiera U + 0000 dwa razy, dlatego nie można go skopiować bezpośrednio (ale działa dobrze w pliku). Można skopiować następujący kod:

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

Tracimy trzy bajty, ponieważ na początku potrzebujemy podpisu UTF-8. W przeciwnym razie ciąg nie będzie działać.

Joey
źródło
1

Siatkówka , 190 bajtów

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
  

W ostatnim wierszu znajdują się dwie spacje, ale SE nie chce tego renderować: / Naprawiono!

Wypróbuj online!

Okx
źródło
Mam wrażenie, że istnieje sposób na połączenie powtarzającego się zastępowania atrzema cyframi i nową linią. (Może używasz lookaheads?)
ćpun matematyki
@mathjunkie Tak: /
Okx,
1

Java 8, 278 214 210 204 bajtów

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

Port odpowiedzi Retina @Neil . Pobiera dane wejściowe jakoString .

Wypróbuj tutaj.

Kevin Cruijssen
źródło
1

Python 2 , 174 125 bajtów

lambda n:'\n'.join('xxx  x x'[int(i):][:3]for i in oct(0x3028000adba93b6b0000c0ad36ebac30180c0)[:-1][n::10]).replace('x',`n`)

Wypróbuj online!

TFeld
źródło
1

PowerShell , 159 135 128 118 bajtów

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

Aktualna odpowiedź: usunięto nazewnictwo zmiennych zewnętrznych

Wypróbuj online!

Muszę sprawdzić, czy uda mi się zdobyć jakieś sztuczki z innych odpowiedzi: P.

EDYTOWAĆ Usprawnienie dzięki wywołaniu mega ciągu

EDIT2 Przełączono na użycie ciągu liczb do indeksowania w $acelu zapisania 7 bajtów. Chociaż podobały mi się moje poprzednie wywołania nazw zmiennych dynamicznych w poniższym kodzie (135 bajtów)

param($n);$a="$n$n$n";$b="$n $n";$c="  $n";$d="$n  ";$r="abbbadddddacadaacacabbaccadacaadabaaccccababaabaca";0..4|%{gv $r[$_+($n*5)]-v}
Sinusoid
źródło
0

Węgiel drzewny , 61 38 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Uwaga: końcowe miejsce. Wyjaśnienie:

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

Podziel (skompresowany) ciąg na grupy po 5, weź ten pod indeksem podanym przez dane wejściowe i zamapuj znaki w grupie (które zawsze wynoszą 1, 4, 5 lub 7).

⭆421⎇&IιIλθ 

Przekształć znak z podstawy 10 na 3-cyfrową podstawę 2, używając znaku wejściowego i spacji jako cyfr. 5 wyników jest następnie domyślnie drukowanych na osobnych wierszach.

Ogólny port jest nieco nudny, więc oto bardziej idiomatyczna 61-bajtowa odpowiedź:

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

Wypróbuj online! Brak pełnej wersji, ponieważ deverbosifier nie rozumie list kierunków, a nawet wielokierunkowych wewnątrz zwykłych wielokątów. Wyjaśnienie:

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

Każda ścieżka jest określona za pomocą listy kierunków ( ←↑→↓). Cztery użyteczne skróty zapisują bajty: Lreprezentuje ↑→, ¬reprezentuje ↓←, Treprezentuje →↓←while +reprezentuje →↓←↑, chociaż przynajmniej jedna strzałka musi pozostać, aby lista została rozpoznana jako lista kierunkowa (więc na przykład TTnie można jej użyć 3).

Neil
źródło
0

Perl 5 -Mbigint -pa , 101 bajtów

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

Wypróbuj online!

Xcali
źródło
0

Python 3 , 119 bajtów

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

Wypróbuj online!

Każdy „piksel” jest reprezentowany jako liczba całkowita, przy czym każda potęga dwóch wskazuje, czy piksel jest stały. Wykorzystuje to fakt, że trzy prawe rogi są zawsze cyfrą.

Matthew Jensen
źródło
-1

JavaScript (ES8), 87 bajtów

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
źródło
2
To jest dokładnie taka sama odpowiedź, jak odpowiedź JavaScript @Neil z 27 kwietnia. Jeśli masz coś, co może poprawić, powinieneś skomentować jego odpowiedź, zamiast publikować nową, która jest taka sama (EDYCJA: I tak, rozumiem nie masz jeszcze wystarczającej reputacji, aby komentować ...)
Kevin Cruijssen