Menampilkan n dengan n


18

Apa yang saya inginkan:

Sederhananya, saya ingin tampilan berbasis teks, yang meminta input n,, lalu menunjukkan nilai itu pada tampilan! Tapi ada tangkapan. Setiap piksel 'benar' '(yang diisi) harus diwakili oleh angka itu n..

Contoh:

Anda diberi input n . Anda dapat menganggap nakan menjadi satu digit

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

Tantangan:

Lakukan di atas dalam sesedikit mungkin byte.

Saya hanya akan menerima jawaban yang memenuhi semua persyaratan.

Ruang putih di sekitarnya adalah opsional, asalkan angka ditampilkan dengan benar.

Juga, <75 byte adalah suara dari saya, penerimaan terendah, tapi saya selalu bisa mengubah jawaban yang diterima, jadi jangan berkecil hati untuk menjawab.



Tentunya, ini adalah duplikat. Ini pasti sangat dekat dengan ini
Shaggy


2
Saya tidak berpikir itu dup. Meskipun pertanyaannya sangat mirip, saya pikir kumpulan karakter yang diperkecil (0-9) akan menghasilkan beberapa jawaban yang sangat berbeda.
Trauma Digital

Jawaban:


8

SOGL V0.12 , 30 byte

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

Coba Di Sini! String yang dikompresi ■'τč▲Β►║⁰ΡāQšJ┘tXdnοO¹‘adalah

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

yaitu (dimulai dengan 1, berakhir dengan 0) angka, baris demi baris, angka ke angka. Sisanya

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

Saya terkesan tentang bagaimana Anda berhasil melakukannya dalam 35 byte dalam sekali jalan! Meskipun saya belum pernah menggunakan SOGL sebelumnya, saya menggunakan tester online dan berfungsi!
VortexYT

Data bentuk angka benar-benar hanya 17 byte (6 byte hilang ada data panjang dan itu `` dan -), dan sisanya mudah. Saya ingin tahu, tester online apa yang Anda gunakan? Saya belum membuat atau melihat apa pun.
dzaima

Oh, klik saja pada SOGL di atas! Anda harus mengunduh sesuatu seperti 1MB atau sesuatu. Saya langsung menghapusnya. : /
VortexYT

Bagaimana kamu melakukannya?
VortexYT

Oh wow! Selamat untukmu! Anda sepertinya memiliki banyak file di dalamnya. Mungkin pisahkan sedikit
VortexYT

13

JavaScript (ES6), 88 byte

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>

Angka-angka menyandikan kotak yang berisi spasi untuk digit yang diberikan misalnya sudut kiri bawah memiliki nilai 146 karena 1, 4 dan 7 tidak menggunakannya dan 146 = 2¹ + 2⁴ + 2⁷.


11

05AB1E , 40 39 38 byte

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

Cobalah online!

Penjelasan

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

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

Berisi beberapa unsintables. Cobalah online!

Tallies: 13 byte data terkompresi, 9 byte untuk mendekompresnya, dan 21 byte untuk membentuk output.

Penjelasan

Kode tidak dikunci:

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

Ada persis 4 kemungkinan baris berbeda: ( #mewakili angka)

#  
  #
# #
###

Dengan demikian, setiap angka dapat disimpan sebagai satu set lima basis-4 digit. Karena setiap angka dapat disimpan dalam 10 bit, totalnya adalah 100 bit, yang sesuai dengan 13 byte. Saya akan melewatkan proses kompresi dan bukannya menjelaskan dekompresi.

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.

Setelah dekompresi, string terkompresi 13 byte terlihat seperti ini:

3131332333332111200122213333313321011121213133133133

Perhatikan bahwa ini akan gagal jika salah satu dari 4 digit yang dijalankan dimulai 0, karena nol yang terdepan akan ditinggalkan saat s4dijalankan. Kita dapat memperbaikinya dengan memiliki 0represent #  , yang hanya muncul tiga kali, dan tidak ada yang jatuh pada awal menjalankan 4 digit.

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

Oke, jadi untuk mendapatkan string 50 digit kami untuk dikompres dengan baik dalam potongan 4, kami harus menambahkan dua digit tambahan. Menambahkannya ke awal string berarti kita dapat memotongnya dengan satu-byter ¤.

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

Yang memalukan, Japt tidak memiliki built-in untuk memisahkan string menjadi irisan panjang X. Namun, ia memiliki built-in untuk mendapatkan setiap char Xth, jadi kami dapat menyimpan semua data dengan mengkodekan semua baris teratas terlebih dahulu, kemudian semua baris kedua, dll.

Jadi sekarang kita memiliki string 5 digit yang mengkodekan digit yang ingin kita buat, misalnya 32223untuk 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.

Untuk menjelaskan angka ajaib, lihat kembali ke empat baris berbeda. Jika Anda mengganti #dengan 1dan  dengan 0, Anda dapatkan

100
001
101
111

Transposing ini dan kemudian bergabung menjadi satu string memberi kita 101100010111. Konversikan ke desimal dan, ya, Anda memiliki 2839. Membalik proses memetakan digit 0123ke dalam empat baris biner yang ditunjukkan di atas.

Hampir selesai! Sekarang yang tersisa untuk dilakukan adalah menambahkan spasi dan digit:

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

Dan presto, keluaran implisit menangani sisanya. Maaf penjelasan ini sangat panjang, tapi saya tidak melihat cara nyata untuk bermain golf tanpa membuatnya kurang dimengerti (jika bisa dimengerti ...)


9

JavaScript (ES6), 115 111 byte

Mengambil input sebagai string.

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

Bagaimana itu bekerja

Pengodean pola

Empat pola yang berbeda "XXX", "X..", "..X"dan "X.X"dapat dikompresi sebagai "XXX...X.X"dan diekstraksi dengan cara ini:

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

Dengan menggantikan digit masukan nuntuk "X"dan menggunakan ruang yang sebenarnya, ini memberikan ekspresi:

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

Pengodean digit

Dengan menggunakan pengidentifikasi pola yang didefinisikan di atas, setiap digit dapat diwakili oleh kuantitas 5 * 2 = 10-bit.

Contohnya:

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

Daftar lengkapnya adalah:

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

Namun, membagi nilai-nilai ini dengan 2 memungkinkan untuk menyimpan dua byte. Jadi alih-alih kami menyimpan:

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

Demo


6

Utilitas Bash + GNU, 114

  • 2 byte disimpan berkat @SophiaLechner

Mungkin ada beberapa peluang untuk kompresi di sini, tapi ini awal:

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

Penjelasan

Setiap baris dari setiap digit adalah salah satu dari empat pola ini:

  x
x
x x
xxx

Dengan memberi label pada 0-3 ini, setiap digit dapat diwakili oleh 5 basis-4 digit. Misalkan 0 akan 32223, dan daftar digit penuh dikodekan dalam basis-4 sebagai 32223000003031330303223003130331323300003232332303. Ini dikodekan dalam hex sebagai EAC00CDF33AC373DEF00EEFB3.

  • dcmengkonversi hex EAC00CDF33AC373DEF00EEFB3ke basis-4.
  • fold menempatkan 5 basis-4 digit pada setiap baris
  • sed:
    • menghapus semua jalur input terpisah dari nomor baris n + 1 (sed 1-indeks garis)
    • menerjemahkan digit basis-4 ke pola ( xes) untuk setiap baris digit yang diberikan, bersama dengan baris baru untuk akhir setiap baris
    • mentransliterasikan xes ke digit n.

Cobalah online .


1
Ide bagus! Simpan pasangan byte dengan mengganti s/1/x \n/gdengan s/1/x\n/g, karena mereka ruang tidak akan secara visual mempengaruhi output.
Sophia Lechner

5

MATL , 45 43 byte

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

Cobalah online!

Penjelasan

'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

Pyth 82 85 91 100 bytes

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

Mungkin banyak bermain golf, tantangan pertama saya.


Selamat datang di PPCG!
Martin Ender

2

File Batch, 8 + 184 byte

Inilah solusi batch wajib saya. Sayangnya metode standar untuk mencapai ini adalah lebih dari 300 byte dalam batch, jadi kami menggunakan taktik yang jauh lebih murah.

@type %1

Dalam direktori saat ini, saya memiliki 10 file yang disiapkan, dinamai dari 0 hingga 9. Dalam masing-masingnya adalah grid piksel masing-masing 5x3. Sebagai contoh:

masukkan deskripsi gambar di sini

Jumlah byte untuk ini adalah:

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

Masih mengalahkan Jawa.


1

Ruby, 94 byte

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

Tidak digabungkan dalam program uji

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

PHP, 115 Bytes

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

Cobalah online!

Diperluas

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

Pengkodean Cobalah online!


1

Retina , 125 byte

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

Cobalah online! (Hapus test suite di header untuk menguji masing-masing digit input.) Baris terakhir berisi dua spasi.


1

PowerShell, 126 120 113 109 101

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

Unicode itu menyenangkan. Karakter juga jauh lebih pendek daripada angka. Kode di atas mengandung U + 0000 dua kali, sehingga tidak dapat disalin secara langsung (berfungsi dengan baik dalam file). Kode berikut dapat disalin:

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

Kami kehilangan tiga byte karena kami membutuhkan tanda tangan UTF-8 di awal. Kalau tidak, string tidak akan berfungsi.


1

Retina , 190 byte

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
  

Ada dua spasi di baris terakhir tetapi SE tidak ingin membuatnya: / Memperbaiki!

Cobalah online!


Saya merasa ada cara untuk menggabungkan penggantian berulang adengan tiga digit dan baris baru. (Mungkin menggunakan lookaheads?)
pecandu matematika

@mathjunkie Ya: /
Okx

1

Java 8, 278 214 210 204 byte

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

Pelabuhan @ Neil 's Retina jawabannya . Mengambil input sebagai a String.

Coba di sini.


1

Python 2 , 174 125 byte

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

Cobalah online!


1

PowerShell , 159 135 128 118 byte

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

Jawaban saat ini: menghapus penamaan variabel asing

Cobalah online!

Saya harus melihat apakah saya bisa mendapatkan beberapa trik dari jawaban lain: P

EDIT Menjadi lebih pintar dengan memanggil string mega

EDIT2 Beralih ke menggunakan serangkaian angka untuk diindeks ke dalam $auntuk menyimpan 7 byte. Meskipun saya menyukai panggilan nama variabel dinamis sebelumnya dalam kode di bawah ini (135 byte)

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

0

Arang , 61 38 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Catatan: Ruang tambahan. Penjelasan:

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

Pisahkan string (terkompresi) menjadi kelompok-kelompok 5, ambil satu pada indeks yang diberikan oleh input, dan petakan di atas karakter dalam grup (yang selalu 1, 4, 5 atau 7).

⭆421⎇&IιIλθ 

Konversikan karakter dari basis 10 ke basis 3 digit menggunakan karakter input dan spasi sebagai digit. Kelima hasil kemudian dicetak secara implisit pada baris yang berbeda.

Porta generik agak membosankan, jadi inilah jawaban 61-byte yang lebih idiomatis:

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

Cobalah online! Tidak ada versi verbose karena deverbosifier tidak memahami daftar arah atau bahkan multidirectional di dalam poligon biasa. Penjelasan:

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

Setiap jalur ditentukan menggunakan daftar arah ( ←↑→↓). Empat cara pintas yang dapat digunakan menyimpan byte: Lmewakili ↑→, ¬mewakili ↓←, Tmewakili →↓←sambil +mewakili →↓←↑, meskipun setidaknya satu panah harus tetap agar daftar tersebut dikenali sebagai daftar arah (jadi misalnyaTT tidak dapat digunakan untuk 3).




0

Python 3 , 119 byte

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

Cobalah online!

Setiap 'piksel' direpresentasikan sebagai bilangan bulat di mana setiap kekuatan dua menunjukkan apakah piksel tersebut solid. Ini mengambil keuntungan dari kenyataan bahwa tiga sudut kanan selalu digit.


-1

JavaScript (ES8), 87 byte

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
Ini adalah persis jawaban yang sama seperti @ Neil 's jawaban JavaScript dari April 27 .. Jika Anda memiliki sesuatu yang dapat meningkatkan, Anda harus komentar untuk jawabannya bukannya posting yang baru yang sama (EDIT: Dan ya, saya menyadari Anda belum memiliki reputasi yang cukup untuk berkomentar ..)
Kevin Cruijssen
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.