Isi Bucket

14

Tugas Anda adalah mengisi ember dengan angka hingga input yang diberikan.

Aturan

Angka menempati posisi paling kiri kemudian paling kanan, lalu paling kiri dan seterusnya.

Setelah meluap, jumlahnya mulai berkumpul di sekitar ember dengan cara yang sama. Mereka menempati posisi secara diagonal.

Contoh-contoh harus memperjelas apa output yang diharapkan (Beberapa aturan disebutkan dalam contoh).

Untuk lebih dari 10, gunakan digit paling kanan

Contoh:

The bucket: 
|      |  or |      | 
|      |     |      | 
|      |     |      |
|      |     |      |
|------|     |______|

input:1  (You can start from either 0 or 1)
output:
|      |  (There can be whitespace to the left even if there is no overflow
|      |  but the bucket must not be distorted.)
|      |
|1     |
|------|

input:6
output:
|      |
|      |
|      |
|135642|
|------|

input:8
output:
|      |
|      |
|7    8|
|135642|
|------|

input:23
output:
|913 20|
|357864|
|791208|
|135642|
|------|

input:27
output:
  |913420|
  |357864|
  |791208|
  |135642|
75|------|6

input:30
output:
  |913420|
  |357864|
  |791208|
 9|135642|0
75|------|68

input:40
output:
    |913420|
    |357864|
   5|791208|6
 939|135642|040
7175|------|6828

input:54   (Maximum input for start=1)
    3|913420|4
   13|357864|42
  915|791208|620
 7939|135642|0408
57175|------|68286

Ini adalah kode-golf sehingga kode terpendek menang.

Vedant Kandoi
sumber
Apa yang Anda maksud dengan "Anda bisa mulai dari 0 atau 1" ? Bisakah urutan digit itu sendiri diindeks 0 (yaitu |024531|untuk ) atau hanya input? n=6
Arnauld
@Arnauld, ya, urutannya mungkin dimulai dari 0
Vedant Kandoi
Ini adalah salah satu tantangan pengkodean yang lebih baik untuk kode golf yang saya lihat di sini!
Michael Karas

Jawaban:

9

JavaScript (Node.js) ,  145  143 byte

Pola hard-kode (lihat di sini untuk lebih banyak matematika).

1-diindeks.

n=>`    g|EGIJHF|h
   e]|?ACDB@|^f
  c[U|9;=><:|V\\d
 aYSO|357864|PTZb
_WQMK|------|LNRX\``.replace(/[3-h]/g,c=>(x=Buffer(c)[0])<n+51?x%10:' ')

Cobalah online!

Disimpan 2 byte berkat @tsh

Arnauld
sumber
1
/[^\s|-]/->/[0-z]/
tsh
@tsh D'oh! Saya sangat merindukan penyederhanaan ini. Terima kasih!
Arnauld
7

JavaScript (ES6),  144 ... 139  137 byte

Pendekatan matematis (lihat sini untuk lebih sedikit matematika).

Diindeks 0.

n=>(y=4,g=x=>~y?(X=x>8?17-x:x,k=X<y?g:X<5?24-(z=4+y-X)*~z+y*2:y*6+X*2-18,~X?X^5?k<0?'-':(k+=x>8)<n?k%10:' ':'|':`
`)+g(~X?-~x:!y--):'')()

Cobalah online!

Bagaimana?

y40x018 pada setiap baris.

Kami mendefinisikan:

X={xjika x817-xjika x>8

Dengan menulis nilai penuh daripada hanya angka satuan, kita mendapatkan tabel berikut:

 x |  0  1  2  3  4  5  6  7  8 |  9 10 11 12 13 14 15 16 17 18
 X |  0  1  2  3  4  5  6  7  8 |  8  7  6  5  4  3  2  1  0 -1
---+----------------------------+-------------------------------
 4 | .. .. .. .. 52 || 18 20 22 | 23 21 19 || 53 .. .. .. .. \n
 3 | .. .. .. 50 42 || 12 14 16 | 17 15 13 || 43 51 .. .. .. \n
 2 | .. .. 48 40 34 || 6  8  10 | 11 9  7  || 35 41 49 .. .. \n
 1 | .. 46 38 32 28 || 0  2  4  | 5  3  1  || 29 33 39 47 .. \n
 0 | 44 36 30 26 24 || -- -- -- | -- -- -- || 25 27 31 37 45 \n

Tabel ini pada dasarnya simetris di sumbu y, kecuali bahwa nilai-nilai di sisi kiri adalah genap dan nilai-nilai di sisi kanan adalah rekan-rekan mereka yang aneh.

Kami mendefinisikan:

k={24+(4+y-X)(5+y-X)+2yjika X<56y+2X-18jika X>5

k={kjika x8k+1jika x>8

Dan untuk setiap sel, kami menambahkan:

  • X=-1
  • X=5
  • k<0
  • X<yk>nn
  • kmod10

Berkomentar

n => (                                // main function taking n
  y = 4,                              // start with y = 4
  g = x =>                            // g = recursive function taking x
    ~y ?                              // if y is not equal to -1:
      ( X = x > 8 ? 17 - x : x,       //   compute X
        k = X < y ?                   //   if X is less than y:
          g                           //     set k to a non-numeric value
        :                             //   else:
          X < 5 ?                     //     if X is less than 5:
            24 - (z = 4 + y - X) * ~z //       apply the 'side numbers' formula
             + y * 2                  //
          :                           //     else:
            y * 6 + X * 2 - 18,       //       apply the 'middle numbers' formula
        ~X ?                          //   if X is not equal to -1:
          X ^ 5 ?                     //     if X is not equal to 5:
            k < 0 ?                   //       if k is less than 0:
              '-'                     //         append a hyphen
            :                         //       else:
              (k += x > 8) < n ?      //         update k to k'; if it's less than n:
                k % 10                //           append the unit digit of k'
              :                       //         else:
                ' '                   //           append a space
          :                           //     else (X = 5):
            '|'                       //       append a pipe
        :                             //   else (X = -1):
          `\n`                        //     append a linefeed
      )                               //
      + g(~X ? -~x : !y--)            //   update x and y, and do a recursive call
    :                                 // else (y = -1):
      ''                              //   stop recursion
)()                                   // initial call to g with x undefined
Arnauld
sumber
3

Python 2 , 170 byte

I=input()
s="    u|SUWXVT|v\n   sk|MOQRPN|lt\n  qic|GIKLJH|djr\n oga]|ACEFDB|^bhp\nme_[Y|------|Z\`fn"
i=1
exec"s=s.replace(chr(64+i),[`i%10`,' '][i>I]);i+=1;"*55
print s

Cobalah online!

TFeld
sumber
3

Java 10, 168 byte

n->"    g|EGIJHF|h\n   e]|?ACDB@|^f\n  c[U|9;=><:|V\\d\n aYSO|357864|PTZb\n_WQMK|------|LNRX`".chars().forEach(c->System.out.print(c<46|c==124?(char)c:c<n+51?c%10:" "))

Port dari jawaban JavaScript @Arnauld (demikian juga 1-diindeks, dan keluaran -sebagai bawah). Jika Anda menyukai jawaban ini, pastikan untuk menghapusnya juga!

Cobalah online.

Penjelasan:

n->                      // Method with integer parameter and no return-type
  "    g|EGIJHF|h\n   e]|?ACDB@|^f\n  c[U|9;=><:|V\\d\n aYSO|357864|PTZb\n_WQMK|------|LNRX`"
                         //  String containing the bucket and magic string
   .chars().forEach(c->  //  Loop over the characters (as integers)
     System.out.print(   //   Print:
       c<46|c==124?      //    If the character is "\n", " ", "-", or "|":
        (char)c          //     Output the character as is
       :c<n+51?          //    Else-if the character value is smaller than the input + 51:
        c%10             //     Output a digit: the character value modulo-9
       :                 //    Else:
        " "))            //     Output a space
Kevin Cruijssen
sumber
1

6502 kode mesin (C64), 130 byte

00 C0 20 9B B7 A9 C0 65 65 85 FB A2 00 BD 2B C0 F0 1A 10 12 C5 FB 90 04 A9 20
D0 0A 69 70 C9 3A 90 04 E9 0A B0 F8 20 D2 FF E8 D0 E1 60 20 20 20 20 F5 7D D3
D5 D7 D8 D6 D4 7D F6 0D 20 20 20 F3 EB 7D CD CF D1 D2 D0 CE 7D EC F4 0D 20 20
F1 E9 E3 7D C7 C9 CB CC CA C8 7D E4 EA F2 0D 20 EF E7 E1 DD 7D C1 C3 C5 C6 C4
C2 7D DE E2 E8 F0 0D ED E5 DF DB D9 7D 2D 2D 2D 2D 2D 2D 7D DA DC E0 E6 EE 00

Ini menggunakan versi modifikasi dari pendekatan "preformatted" dari beberapa jawaban lain. Ini berisi string penuh dari ember, tetapi digit diganti dengan nilai mulai dari 0xC1, sementara karakter untuk pencetakan langsung berada dalam kisaran 0x01-0x7f .

Charset C64 tidak menyertakan karakter pipe ( |), oleh karena itu diganti dengan karakter PETSCII yang serupa 0x7d.

Demo online

Penggunaan: SYS49152,[n](1-diindeks, misalnya SYS49152,54untuk output penuh)

Berkomentar pembongkaran :

         00 C0       .WORD $C000        ; load address
.C:c000  20 9B B7    JSR $B79B          ; get unsigned byte from commandline
.C:c003  A9 C0       LDA #$C0           ; add #$C0 (+ carry = #$C1) ...
.C:c005  65 65       ADC $65            ; ... to parameter
.C:c007  85 FB       STA $FB            ; and store in $FB
.C:c009  A2 00       LDX #$00           ; loop index
.C:c00b   .loop:
.C:c00b  BD 2B C0    LDA .bucket,X      ; loop over encoded string
.C:c00e  F0 1A       BEQ .done          ; null-terminator -> done
.C:c010  10 12       BPL .out           ; positive (bit 7 clear) -> output
.C:c012  C5 FB       CMP $FB            ; compare with parameter+#$C1
.C:c014  90 04       BCC .digit         ; smaller -> convert to digit
.C:c016  A9 20       LDA #$20           ; otherwise load space character
.C:c018  D0 0A       BNE .out           ; and output
.C:c01a   .digit:
.C:c01a  69 70       ADC #$70           ; add offset to '0' (#$30)
.C:c01c   .check:
.C:c01c  C9 3A       CMP #$3A           ; greater than '9' (#$39) ?
.C:c01e  90 04       BCC .out           ; no -> to output
.C:c020  E9 0A       SBC #$0A           ; otherwise subtract 10 (#$a)
.C:c022  B0 F8       BCS .check         ; and check again
.C:c024   .out:
.C:c024  20 D2 FF    JSR $FFD2          ; output character
.C:c027  E8          INX                ; next index
.C:c028  D0 E1       BNE .loop          ; and repeat loop
.C:c02a   .done:
.C:c02a  60          RTS                ; exit ....
.C:c02b   .bucket:
.C:c02b  20 20 20    [...]              ; "encoded" string for bucket
Felix Palmen
sumber
0

Arang , 64 byte

Nθ³↑⁵‖M←F²«‖J⁻³ι±¹F⊘⁺θ¬ι«↖I﹪⁺⊗κ⊕ιχM§”)⊟E≡≦⌈▷⊖ü∕”꧔)⊟&hXτtD(λM”κ

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

Nθ

Masukkan nomor.

³↑⁵‖M←

Gambar setengah dari ember dan kemudian cermin untuk menyelesaikan ember.

F²«

Ulangi untuk setiap sisi ember.

‖J⁻³ι±¹

Refleksikan ember sehingga kita dapat menggambar ke arah yang konsisten pada kedua loop, dan melompat ke posisi digit pertama di sisi ember itu.

F⊘⁺θ¬ι«

Ulangi jumlah digit di sisi ember itu.

↖I﹪⁺⊗κ⊕ιχ

Cetak digit berikutnya dan gerakkan kursor ke atas dan ke kiri.

M§”)⊟E≡≦⌈▷⊖ü∕”꧔)⊟&hXτtD(λM”κ

Sesuaikan posisi kursor dengan membaca offset dari dua string terkompresi, 003003003005203004000500(offset horizontal) dan 11011011011510200300040000(offset vertikal). Offset ini memperhitungkan pergerakan kursor di atas yang dengan mudah berarti bahwa mereka tidak harus negatif.

Neil
sumber