Cat a mouse: pointer seni ASCII

Sep 25 2020

The Xerox Alto , awalnya dirilis pada tahun 1973, adalah pertama komputer untuk fitur sekarang-akrab siku pointer mouse. Penunjuk bitmap Alto tampak seperti ini (digambar ulang dari Gambar 2 di sini ):

Tugas Anda dalam tantangan kode-golf ini adalah menulis program / fungsi yang menghasilkan representasi seni ASCII dari penunjuk mouse yang digambarkan di atas. Aturan:

  1. Input adalah bilangan bulat positif \$n\$, yang merupakan faktor penskalaan untuk keluaran.
  2. Mewakili setiap piksel hitam sebagai \$n\times{}n\$blok dari setiap karakter yang dapat dicetak. (Kasus uji digunakan @, yang secara samar-samar menyerupai mouse dilihat dari atas.)
  3. Demikian pula, mewakili setiap piksel kosong di bagian bawah / kiri penunjuk sebagai \$n\times{}n\$blok karakter kedua yang dapat dicetak. (Spasi digunakan dalam kasus uji.)
  4. Secara opsional, keluaran Anda juga dapat menyertakan piksel kosong di bagian atas / kanan penunjuk, yang diwakili oleh karakter yang sama yang dipilih di bawah Aturan 3.
  5. Semua format output yang masuk akal (mis. String multi-baris, deretan string, matriks karakter) dapat diterima.
  6. Baris baru jejak tunggal di akhir keluaran diizinkan.

Kasus uji

\$n = 1\$

@
@@
@@@
@@@@
@@@@@
@@@@@@
@@@@@@@
@@@@
@@ @@
@  @@
    @@
    @@
     @@
     @@
      @@
      @@

\$n = 2\$

@@
@@
@@@@
@@@@
@@@@@@
@@@@@@
@@@@@@@@
@@@@@@@@
@@@@@@@@@@
@@@@@@@@@@
@@@@@@@@@@@@
@@@@@@@@@@@@
@@@@@@@@@@@@@@
@@@@@@@@@@@@@@
@@@@@@@@
@@@@@@@@
@@@@  @@@@
@@@@  @@@@
@@    @@@@
@@    @@@@
        @@@@
        @@@@
        @@@@
        @@@@
          @@@@
          @@@@
          @@@@
          @@@@
            @@@@
            @@@@
            @@@@
            @@@@

\$n = 3\$

@@@
@@@
@@@
@@@@@@
@@@@@@
@@@@@@
@@@@@@@@@
@@@@@@@@@
@@@@@@@@@
@@@@@@@@@@@@
@@@@@@@@@@@@
@@@@@@@@@@@@
@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@
@@@@@@@@@@@@
@@@@@@@@@@@@
@@@@@@   @@@@@@
@@@@@@   @@@@@@
@@@@@@   @@@@@@
@@@      @@@@@@
@@@      @@@@@@
@@@      @@@@@@
            @@@@@@
            @@@@@@
            @@@@@@
            @@@@@@
            @@@@@@
            @@@@@@
               @@@@@@
               @@@@@@
               @@@@@@
               @@@@@@
               @@@@@@
               @@@@@@
                  @@@@@@
                  @@@@@@
                  @@@@@@
                  @@@@@@
                  @@@@@@
                  @@@@@@

Jawaban

10 Arnauld Sep 25 2020 at 08:16

JavaScript (ES6),  92 91  90 byte

Disimpan 1 byte berkat @Neil

Mengembalikan string dengan \$0\$untuk piksel transparan dan \$1\$untuk piksel hitam.

n=>(g=k=>--k?(x=k/n%8,y=k/n/n/8,(~1<<(y>9?y-9:13-y)|3<<y/2)>>x&1)+[`
`[x]]+g(k):1)(n*n<<7)

Cobalah secara online!

atau Cobalah dengan karakter yang digunakan dalam tantangan untuk perbandingan yang lebih mudah

Bagaimana?

Mengingat faktor skala \$n\$sebagai masukan, kita mengeluarkan bit \$\lfloor x\rfloor\bmod 8\$dari bitmask yang sesuai dengan baris \$\lfloor y\rfloor\$untuk setiap \$k\$, \$0\le k <128\times n^2\$, dengan \$x=k/n\$dan \$y=k/(8\times n^2)\$.

Untuk menghasilkan bitmask dari baris tertentu, kami menggunakan dua ekspresi kecil yang hasilnya adalah OR bersama-sama. Hanya 8 bit paling signifikan yang ditampilkan di bawah ini. Yang lainnya tetap diabaikan.

floor(y) -> A(y)  OR  B(y)   =  result
   15     10000000  10000000   10000000    with:
   14     11000000  10000000   11000000
   13     11100000  11000000   11100000    A(y) = ~1 << (y > 9 ? y - 9 : 13 - y)
   12     11110000  11000000   11110000    B(y) = 3 << y / 2
   11     11111000  01100000   11111000
   10     11111100  01100000   11111100
    9     11111110  00110000   11111110
    8     11100000  00110000   11110000
    7     11000000  00011000   11011000
    6     10000000  00011000   10011000
    5     00000000  00001100   00001100
    4     00000000  00001100   00001100
    3     00000000  00000110   00000110
    2     00000000  00000110   00000110
    1     00000000  00000011   00000011
    0     00000000  00000011   00000011

Sebuah linefeed ditambahkan ke output setiap kali \$k/n\$adalah kelipatan dari \$8\$.

5 KevinCruijssen Sep 25 2020 at 08:05

05AB1E , 33 31 byte

•4CîιZ›ÚAôçè~]ß4ÿ•Ƶāвε2в¦I×JIF=

Keluaran dengan 1untuk @dan 0untuk spasi.

-1 byte dengan tidak mengeluarkan jejak 0/ spasi.

Cobalah secara online atau verifikasi semua kasus pengujian .

Penjelasan:

•4CîιZ›ÚAôçè~]ß4ÿ• # Push compressed integer 5077310163681960509504474007720499199
 Ƶā                # Push compressed integer 260
   в               # Convert the larger integer to base-260 as list:
                   #  [3,7,15,31,63,127,255,31,59,51,67,67,131,131,259,259]
    ε              # Foreach over the integers in this list:
     2в            #  Convert it to a binary-list
       ¦           #  Remove the leading 1
        I×         #  Repeat each character the input amount of times
          J        #  Join it together to a single string
           IF      #  Inner loop the input amount of times:
             =     #   Print the line with trailing newline (without popping the string)

Lihat ini 05AB1E ujung tambang (bagian Cara kompres bilangan bulat besar? Dan Cara daftar bilangan bulat kompres? ) Untuk memahami mengapa •4CîιZ›ÚAôçè~]ß4ÿ•adalah 5077310163681960509504474007720499199; Ƶāadalah 260; dan •4CîιZ›ÚAôçè~]ß4ÿ•Ƶāвadalah [3,7,15,31,63,127,255,31,59,51,67,67,131,131,259,259].

5 Bubbler Sep 25 2020 at 09:17

APL (Dyalog Extended) , 31 byte

{⍵/⍵⌿⌽⍉⊤⎕AV⍳'⍞§):┼|¨:┴│⍫⍫⍀⍀¢¢'}

Cobalah secara online!

Saya kira ini adalah APLer terbaik yang dapat dilakukan untuk saat ini. Mengeluarkan matriks numerik dari nol dan satu, sesuai klarifikasi .

Pada dasarnya pendekatan yang sama dengan jawaban Razetime , digunakan ⎕IO←0untuk menghindari tidak tercetak.

Hei, itu terikat dengan Jelly DAN 05AB1E! Hampir...

4 Razetime Sep 25 2020 at 08:47

APL (Dyalog Extended) , 41 byte

{⎕A[1+⍵/⍵⌿⍉⊤(⎕AV⍳'⌷⊤└¶⍝ ⎕¶"í'),2/12 6 3]}

Cobalah secara online!

Huruf Buntuk piksel berwarna, Auntuk piksel transparan.

Menggunakan tip APL dari Andriy Makukha untuk mengompresi bilangan bulat.

Penjelasan

{⎕A[1+⍵/⍵⌿⍉⊤(⎕AV⍳'⌷⊤└¶⍝ ⎕¶"í'),2/12 6 3]} ⍵ → n
                               2/12 6 3   12, 6 and 3 repeated in place
                 '⌷⊤└¶⍝ ⎕¶"í'             String of compressed values
            (⎕AV⍳            )            The SBCS codepoints of the string
                              ,           Join them
          ⍉⊤                              convert to binary & transpose
      ⍵/⍵⌿                                replicate each element n times along both axes
    1+                                    Add 1 to each for getting 1-based indices
 ⎕A[                                   ]  Index the grid into the alphabet
4 ovs Sep 25 2020 at 08:56

05AB1E , 29 byte

Piksel putih diwakili oleh 0, piksel hitam oleh 1.

•ˆ‰₃%ʒ„úVð“£Xfóó”•b8ôεSI×JIF=

Cobalah secara online!

Berkomentar :

Bagian IF=tersebut diambil dari jawaban Kevin .

•ˆ‰₃%ʒ„úVð“£Xfóó”•              # long compressed integer, encodes the 16x8 cursor
                  b             # convert to binary
                   8ô           # split into chunks of 8 digits (rows)
                     ε          # map over the rows ...
                      S         #   split into characters
                       I×       #   multiply each with the input
                         J      #   join into a single string
                          I     #   push the input
                           F    #   for loop in the range [0, input)
                            =   #   print row without popping

05AB1E , 27 byte

Ini menghasilkan tujuh baris pertama secara lebih manual tetapi memiliki beberapa spasi yang tidak konsisten. Jika X7L×diganti dengan ₁7LRo-b, jaraknya konsisten lagi pada 30 byte.

X7LוùΛh‡Wgÿ™Œ•b8ô«εSI×JIF=

Cobalah secara online!


05AB1E , 31 byte

Format keluaran yang sama, menggunakan pengkodean panjang proses.

TÞ•€¶àĆαL0šDž¬тq•8вÅΓ8ôεSI×JIF=

Cobalah secara online!

Berkomentar :

T                        # push 10
 Þ                       # cycle indefinitely
                         # produces 10101..., the characters used for RLE
  •€...q•8в              # compressed list of lengths [1,7,2,6,3,5,4,4,5,3,6,2,7,1,4,4,2,1,2,3,1,2,2,7,2,6,2,7,2,6,2,7,2,6,2]
           ÅΓ            # run length decode
             8ô          # split into chunks of 8
               εSI×JIF=  # the same as above
3 DomHastings Sep 25 2020 at 10:22

Perl 5 + -a -M5.10.0, 66 byte

Keluaran 1untuk hitam dan 0untuk piksel kosong.

Catatan : Skrip ini menggunakan unprintable, yang direpresentasikan menggunakan escapes di bawah ini. Verifikasi untuk 66 byte.

s/./$&x"@F"/ge,eval"say;"x"@F"for unpack"(B8)*","................"

Cobalah secara online!

Penjelasan

Menggunakan -anomor input disimpan (sebagai satu-satunya indeks) di @F, yang dapat diinterpolasi menjadi string ( "@F") menghemat satu byte menggunakan $F[0]notasi, untuk mengontrol pengulangan karakter dan garis, karena menggunakan -nhanya akan menyimpan nomor di $_, yaitu ditimpa di badan for. String di bagian akhir mewakili data biner untuk piksel hitam atau kosong yang unpackpanjangnya adalah 8. Di badan forloop postfix , setiap blok yang terdiri dari 8 bit, direpresentasikan sebagai string 0s dan 1s, disimpan di $_. Pertama, setiap karakter dalam string direplikasi "@F"times ( s/./$&x"@F"/ge) kemudian evaldipanggil pada string yang berisi "@F"pengulangan "say;"keluaran $_jumlah waktu yang diinginkan.

3 GalenIvanov Sep 25 2020 at 09:33

J , 55 50 49 byte

-1 byte berkat xash!

##"1&(16 8$#:96x#._32+3 u:'#dppv6SI=Hz`rW~|%1rc')

Cobalah secara online!

Ouptus adalah matriks 1 dan 0.

3 JonathanAllan Sep 25 2020 at 11:48

Jeli , 25 byte

7Żx2r‘$Ṭ
3Ėr7,1FRoÇṠz0xɗ⁺

Tautan monadik yang menerima faktor penskalaan yang menghasilkan daftar daftar bit piksel (1s adalah panah, 0s adalah latar belakang)

Cobalah secara online! (footer memanggil tautan, bergabung dengan baris baru dan mencetak versi yang dihancurkan dari daftar yang dihasilkan)

Bagaimana?

3Ėr7,1FRoÇṠz0xɗ⁺ - Link: positive integer, n
3                - three
 Ė               - enumerate -> [1,3]
   7,1           - [7,1]
  r              - inclusive range (vectorises) -> [[1,2,3,4,5,6,7],[3,2,1]]
      F          - flatten -> [1,2,3,4,5,6,7,3,2,1]
       R         - range -> [[1],[1,2],...,[1,2,3,4,5,6,7],[3,2,1],[2,1],[1]]
         Ç       - call Link 1 as a monad - f(n)
        o        - logical OR (vectorises)
          Ṡ      - sign (i.e. convert all the positive integers to 1s)
               ⁺ - do this twice:
              ɗ  -   last three links as a dyad - f(matrix, n)
            0    -     zero
           z     -     transpose (matirix) with filler (0)
             x   -     repeat elements (n) times

7Żx2r‘$Ṭ - Link 1: positive integer, n
7        - seven
 Ż       - zero-range -> [0,1,2,3,4,5,6,7]
   2     - two
  x      - repeat elements -> [0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
      $  - last two links as a monad - f(that):
     ‘   -   increment     -> [1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8]
    r    - inclusive range -> [[0,1],[0,1],[1,2],[1,2],[2,3],[2,3]...,[7,8]]
       Ṭ - un-truth        -> [[1],[1],[1,1],[1,1],[0,1,1],[0,1,1],...,[0,0,0,0,0,0,1,1]

Juga 25 byte:

“ṚẒỴġị!=gEḃĖT⁴ċṪ ’Bs8Zx¥⁺ - Link: positive integer, n
“ṚẒỴġị!=gEḃĖT⁴ċṪ ’        - base 250 number = 171142666808876275700130073576311489283
                  B       - to binary
                   s8     - split into slices of length (8)
                        ⁺ - do this twice:
                       ¥  -   last two links as a dyad - f(matrix, n)
                     Z    -     transpose
                      x   -     repeat element (n) times

Cobalah secara online!

3 Neil Sep 25 2020 at 09:42

Arang , 35 byte

NθF⪪“∨:[¿θ≡↥χ№pTξ⟧M~▶§×¬‴↥”¶Eθ⭆ι×θμ

Cobalah secara online! Tautan adalah untuk verbose versi kode. Output menggunakan .s dan spasi (baris baru, spasi, dan .s adalah karakter paling golf untuk kompresi Arang). Penjelasan:

Nθ

Masukan n.

F⪪“∨:[¿θ≡↥χ№pTξ⟧M~▶§×¬‴↥”¶

Pisahkan representasi yang dikompresi dari panah menjadi beberapa garis dan putar pada setiap baris.

Eθ⭆ι×θμ

Perluas setiap baris nkali secara vertikal dan horizontal.

Pendekatan alternatif, juga 35 byte:

NθFχEθ×.×⎇‹ι⁷⊕ι⁻χιθJ⁰⊗θF⁷«UO⊗θ.Mθ⊗θ

Cobalah secara online! Tautan adalah untuk verbose versi kode. Output menggunakan .dan spasi meskipun ASCII yang tidak dapat dicetak spasi dapat digunakan. Penjelasan:

Nθ

Masukan n.

Fχ

Mulailah dengan mencetak 10 baris pertama panah.

Eθ×.×⎇‹ι⁷⊕ι⁻χιθ

Cetak tangga dari 1ke 7, lalu turun dari 3ke 1, semua nwaktu yang diperluas .

J⁰⊗θ

Lompat ke awal baris kedua.

F⁷«

Ulangi 7 kali.

UO⊗θ.

Gambarlah ukuran persegi 2n.

Mθ⊗θ

Pindah ke nseberang dan 2nke bawah.

2 LuisMendo Sep 25 2020 at 15:25

Oktaf , 69 byte

@(n)kron([1:8<=(1:7)';dec2bin(['pX'+128 156 ',,&&##'-32])-48],e(n))>0

Fungsi anonim yang memasukkan bilangan bulat positif dan menghasilkan matriks nol-satu.

Cobalah secara online!

2 Gymhgy Sep 25 2020 at 16:37

C # (Visual C # Interactive Compiler) , 97 karakter, 107 byte

n=>{for(int i=0,j;i<n*16;Write("\n"),i++)for(j=n*8;j>0;)Write("€Ààðøüþðؘ"[i/n]>>--j/n&1);}

Cobalah secara online!

2 ElPedro Sep 25 2020 at 10:00

Python 2 , 167.145 byte

i=input()
m='@'*i*2
s=' '*i
for z in[c*i*'@'for c in range(1,8)]+[m*2,m+s+m,m[:i]+s*2+m]+sum([[s*d+m]*2for d in(4,5,6)],[]):print'\n'.join([z]*i)

Cobalah secara online!

Turun ke 145 dengan bantuan besar dari @ovs. Terimakasih banyak!

2 nununoisy Sep 28 2020 at 16:05

brainfuck , 1892 byte

>++++[>+++++<-]>[<<+>++>--]>++++++++[>++++++++<-]>[<<++>+>--]>+[[-]>[-],[+[-----------[>[-]++++++[<------>-]<--<<[->>++++++++++<<]>>[-<<+>>]<+>]]]<]<[>+>+<<-]>>[<<+>>-]<[<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<[<<<<<.>>>>>-]<<<<<<<.>>>>>-]<[>+>+<<-]>>[<<+>>-]<[<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<[<<<<<..>>>>>-]<<<<<<<.>>>>>-]<[>+>+<<-]>>[<<+>>-]<[<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<[<<<<<...>>>>>-]<<<<<<<.>>>>>-]<[>+>+<<-]>>[<<+>>-]<[<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<[<<<<<....>>>>>-]<<<<<<<.>>>>>-]<[>+>+<<-]>>[<<+>>-]<[<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<[<<<<<.....>>>>>-]<<<<<<<.>>>>>-]<[>+>+<<-]>>[<<+>>-]<[<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<[<<<<<......>>>>>-]<<<<<<<.>>>>>-]<[>+>+<<-]>>[<<+>>-]<[<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<[<<<<<.......>>>>>-]<<<<<<<.>>>>>-]<[>+>+<<-]>>[<<+>>-]<[<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<[<<<<<....>>>>>-]<<<<<<<.>>>>>-]<[>+>+<<-]>>[<<+>>-]<[<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<[<<<<<..>>>>>-]<<<[>>+>+<<<-]>>[<<+>>-]>[<<<<.>>>>-]<<<[>>+>+<<<-]>>[<<+>>-]>[<<<<<..>>>>>-]<<<<<<<.>>>>>-]<[>+>+<<-]>>[<<+>>-]<[<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<[<<<<<.>>>>>-]<<<[>>+>+<<<-]>>[<<+>>-]>[<<<<..>>>>-]<<<[>>+>+<<<-]>>[<<+>>-]>[<<<<<..>>>>>-]<<<<<<<.>>>>>-]<[>+>+<<-]>>[<<+>>-]<[<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<[<<<<....>>>>-]<<<[>>+>+<<<-]>>[<<+>>-]>[<<<<<..>>>>>-]<<<<<<<.>>>>>-]<[>+>+<<-]>>[<<+>>-]<[<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<[<<<<....>>>>-]<<<[>>+>+<<<-]>>[<<+>>-]>[<<<<<..>>>>>-]<<<<<<<.>>>>>-]<[>+>+<<-]>>[<<+>>-]<[<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<[<<<<.....>>>>-]<<<[>>+>+<<<-]>>[<<+>>-]>[<<<<<..>>>>>-]<<<<<<<.>>>>>-]<[>+>+<<-]>>[<<+>>-]<[<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<[<<<<.....>>>>-]<<<[>>+>+<<<-]>>[<<+>>-]>[<<<<<..>>>>>-]<<<<<<<.>>>>>-]<[>+>+<<-]>>[<<+>>-]<[<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<[<<<<......>>>>-]<<<[>>+>+<<<-]>>[<<+>>-]>[<<<<<..>>>>>-]<<<<<<<.>>>>>-]<[>+>+<<-]>>[<<+>>-]<[<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<[<<<<......>>>>-]<<<[>>+>+<<<-]>>[<<+>>-]>[<<<<<..>>>>>-]<<<<<<<.>>>>>-]

Cobalah secara online!

Bukan jawaban singkat dengan cara apa pun - itu mungkin bisa dipersingkat sedikit.

2 pxeger Sep 26 2020 at 06:07

Python 3 , 124 145 136 bytes

+21 byte karena saya tidak menyadari kami harus menskalakannya juga secara vertikal

-9 byte dengan menggunakan .untuk padding

lambda n,s='@\n.X'*27,J=''.join:J(n*(l+'\n')for l in J(n*s[m>>4]+n*s[m>>2]+n*s[m]for m in b'DDA@D@D@A@@D@P`R`ZhFjAjhFj`Zj`Zj`').split())

Cobalah secara online!

Penjelasan stringb'DDA@D@D@A@@D@PRZhFjAjhFjZjZj`'

(kode melakukan ini secara terbalik)

ambil senarnya, dan:

  • ganti piksel "on" dengan 0
  • ganti baris baru dengan 1
  • ganti spasi (piksel "off") dengan 2
010010001000010000010000001000000010000100200102200122220012222001222220012222200122222200122222200

konversikan ke biner, dua bit per digit desimal:

000100000100000001000000000100000000000100000000000001000000000000000100000000010000100000010010100000011010101000000110101010000001101010101000000110101010100000011010101010100000011010101010100000

dibagi menjadi kelompok 6:

000100 000100 000001 000000 000100 000000 000100 000000 000001 000000 000000 000100 000000 010000 100000 010010 100000 011010 101000 000110 101010 000001 101010 101000 000110 101010 100000 011010 101010 100000 011010 101010 100000

logis-ATAU setiap grup dengan 01000000 (jadi itu semua ASCII yang dapat dicetak, untuk menghindari karakter pelolosan):

01000100 01000100 01000001 01000000 01000100 01000000 01000100 01000000 01000001 01000000 01000000 01000100 01000000 01010000 01100000 01010010 01100000 01011010 01101000 01000110 01101010 01000001 01101010 01101000 01000110 01101010 01100000 01011010 01101010 01100000 01011010 01101010 01100000

konversikan ke ASCII untuk bytestring Python:

b'DDA@D@D@A@@D@P`R`ZhFjAjhFj`Zj`Zj`'
2 xnor Oct 05 2020 at 05:32

Python 2 , 102 byte

n=input()
for k in range(16*n):print''.join(n*' @'[j<=k/n<max(7,10-j)or-1<k/n/2-j<2]for j in range(8))

Cobalah secara online!

Menghitung apakah koordinat yang diberikan aktif atau tidak dengan rumus yang membatasi bentuk panah melalui pertidaksamaan linier. Untuk memeriksa apakah sel berada di bagian ekor, yang terbuat dari 2 * 2 blok (tidak berskala), kita membagi indeks baris dengan 2 dan memeriksa apakah itu sama dengan indeks kolom atau satu lebih besar dari itu.

Sebagai fungsi yang mengeluarkan daftar baris:

97 byte

lambda n:[''.join(n*' @'[j<=k/n<max(7,10-j)or-1<k/n/2-j<2]for j in range(8))for k in range(16*n)]

Cobalah secara online!

1 Arnauld Sep 25 2020 at 13:28

C (gcc) ,  106105103102  byte

Disimpan 1 byte berkat @Neil

Mencetak penunjuk dengan spasi dan tanda seru. Pada dasarnya metode yang sama seperti dalam jawaban JS saya .

x,y;f(n){for(y=n*16;y--;)for(x=n*8;~x;)putchar(x--?32^(~1<<(y/n>8?y/n-9:12-y/n)|3<<y/n/2)>>x/n&1:13);}

Cobalah secara online!

1 UnrelatedString Sep 25 2020 at 08:51

Jelly , 31 30 byte

5r8ṬƝż`Ẏ
1ẋⱮ7;“ÐñŒ‘B;¢xẎ¥€z0ɗ⁺

Cobalah secara online!

-1 dari jawaban Jonathan Allan yang mengingatkan saya ⁺. Sekarang untuk mencari tahu mengapa dia z0xɗtidak berhasil untuk saya ...

Mengeluarkan larik 2D 1 untuk untuk hidup dan 0 untuk mati. Integer, bukan karakter, jadi +2 untuk program lengkap ( µY) jika itu masalah.

          Dyadic helper link:
   €      Map
x         repeat left right times
 Ẏ¥       and dump internal lists.
    z0    Zip with filler 0.

                             Main link:
1ẋ                           Repeat 1
  Ɱ7                         1, 2, 3, 4, 5, 6, and 7 times.
    ;                        Concatenate with
     “ÐñŒ‘                   [15, 27, 19].
          B                  Vectorized convert to binary
                             (applies to first bit too, but leaves it unharmed).
           ;                 Concatenate with
                Ṭ    ¤       a list with 1s at the given indices
                 Ɲ           for each pair of adjacent numbers in
            5r8¤             the range from 5 to 8 inclusive,
                  ż`         zipped with itself
                    Ẏ        and with each zipped pair dumped.
                      ç      Apply the helper link with input as right argument.
                       ç     Apply the helper link with input as right argument.
1 Noodle9 Sep 25 2020 at 11:48

C (gcc) , 162 \$\cdots\$ 126104 byte

Menyimpan 26 byte kekalahan berkat ceilingcat !!!
Menyimpan lagi 22 byte kekalahan berkat AZTECCO !!!

Catatan: kode berisi tidak bisa dicetak.

j;i;f(n){for(i=16*n;i--;puts(""))
for(j=8*n;j--;)putchar(32|L"˜ØðþüøðàÀ€"[i/n]>>j/n&1);}

Cobalah secara online!

Menggunakan !piksel hitam (karena ini adalah ascii untuk spasi plus \$1\$) dan spasi untuk piksel kosong (hanya jika diawali dengan piksel hitam, jika tidak tidak ada).

1 LegionMammal978 Sep 26 2020 at 19:34

Bahasa Wolfram (Mathematica) , 90 byte

Normal@SparseArray[a_:>36^^4iam2h6stciyoj9kt5169kwfgn4~BitGet~Tr[{8,1}⌈a/#⌉],{16,8}#]&

Cobalah secara online! Fungsi murni. Mengambil integer sebagai input dan mengembalikan matriks dengan entri 0 dan 1.

1 Razetime Nov 04 2020 at 03:18

Kanvas , 32 byte

“┌Wwz‼GZE⁸↘4BUH<U„2┬8n{{⁴+c]]╶╶*

Coba di sini!

Metode kompresi yang lebih baik akan banyak mengurangi ini.