Programkan autodialer saya

16

Kembali pada hari itu, autodialer telepon menggunakan kartu berlubang dengan satu kolom untuk setiap digit nomor yang akan dihubungi. Kolom memiliki tujuh baris. Tiga baris pertama mewakili angka (1,2,3), (4,5,6), dan (7,8,9) masing-masing. Tiga baris terakhir memutar pengaturan ini sebesar 90 °: (1,4,7), (2,5,8), dan (3,6,9). Baris tengah digunakan untuk 0. Setiap digit 1-9 akan memiliki dua lubang menekan - satu di tiga baris pertama, dan satu di tiga baris terbawah. Nol hanya akan membuat barisan tengah ditinju. Mari kita visualisasikan kolom yang dilubangi untuk angka 6 ( .tidak dilubangi, xdilubangi, panduan di sebelah kiri hanya untuk menggambarkan pengkodean):

123 .
456 x
789 .
 0  .
147 .
258 .
369 x

Kami mencari baris mana yang berisi nomor yang kami coba panggil. Untuk 6, ini adalah baris kedua, dan baris kesembilan. Dua baris ini dilubangi, lima baris sisanya tidak dilubangi. Berikut adalah pola menekan untuk semua angka 0-9:

    0 1 2 3 4 5 6 7 8 9
123 . x x x . . . . . .
456 . . . . x x x . . .
789 . . . . . . . x x x
 0  x . . . . . . . . .
147 . x . . x . . x . .
258 . . x . . x . . x .
369 . . . x . . x . . x

Tujuan Anda adalah (menulis program atau fungsi) untuk membuat kartu ini untuk saya.

Input: Angka, diambil dalam format apa pun yang wajar (string, integer, daftar integer, & c.), Tidak melebihi 9999999999999.

Output: Kisi kolom berlubang yang sesuai dengan input nomor. Anda tidak perlu tajuk atau spasi tambahan yang ditunjukkan di atas, cukup kolom yang dilubangi sendiri. Leading / trailing newlines tidak apa-apa, seperti spasi di antara baris / kolom selama konsisten . Ngomong-ngomong, selama mereka konsisten, Anda dapat menggunakan karakter (non-spasi putih) untuk menekan, dan karakter lain untuk tidak ditinju (walaupun harus jelas, harap tentukan karakter apa yang Anda gunakan).

Ini kode-golf, jadi kode terpendek menang. Celah standar tidak diijinkan.

Kasus uji (semua digunakan .untuk tidak ditinju, xuntuk ditinju):

In: 911
Out: .xx
     ...
     x..
     ...
     .xx
     ...
     x..

In: 8675309
Out: ....x..
     .x.x...
     x.x...x
     .....x.
     ..x....
     x..x...
     .x..x.x

In: 5553226
Out: ...xxx.
     xxx...x
     .......
     .......
     .......
     xxx.xx.
     ...x..x
brhfl
sumber
2
Sama sekali tidak perlu untuk menyelesaikan pertanyaan, tetapi ada galeri kecil yang rapi dari kartu / perangkat ini di sini .
brhfl
Anda dapat menggunakan karakter apa pun untuk menekan, dan karakter lain apa pun untuk tidak ditinju maksud Anda karakter non-spasi putih?
Erik the Outgolfer
Ya, saya kira itu lebih disukai karena spasi putih diizinkan di tempat lain. Dan demi bisa melihat. Akan mengedit, terima kasih.
brhfl
1
tantangan keren ... tergoda untuk menulis jawaban FORTRAN 77, tetapi idk bagaimana cara membuatnya
qwr
@qwr Jangan ragu untuk membuat pos "Tips untuk bermain golf di Fortran".
mbomb007

Jawaban:

3

Pyth, 25 byte

.tm?djNmX*3NkZ.Dtd3X*7N3Z

Penggunaan 0untuk dipukul dan "untuk tidak ditinju.
Coba di sini

Penjelasan

.tm?djNmX*3NkZ.Dtd3X*7N3Z
  m                      Q  For each number in the (implicit) input...
   ?d                       ... if the number is nonzero...
              .Dtd3         ... get (n - 1) divmod 3...
       mX*3NkZ              ... replace each position in `"""` with `0`...
     jN                     ... and stick them together with `"`. ...
                   X*7N3Z   ... Otherwise, `"""0"""`.
.t                          Transpose the result.

sumber
3

JavaScript (ES6), 60 54 byte

Mengambil input sebagai array bilangan bulat. Mengembalikan matriks biner, dengan 0 = unpunched / 1 = menekan.

a=>[14,112,896,1,146,292,584].map(n=>a.map(i=>n>>i&1))

Cobalah online!

Arnauld
sumber
3

05AB1E , 16 15 byte

Menggunakan 0 dan 1 .

ε9ÝÀ3ôD¨ø«¢O}ø»

Cobalah online!

Penjelasan

ε           }     # apply to each digit in input                
 9Ý               # push the range [0 ... 9]
   À              # rotate left
    3ô            # split into pieces of 3
      D¨          # duplicate and remove the last digit (0)
        ø         # transpose
         «        # append
          ¢O      # sum the counts of each in the current digit     
             ø    # transpose
              »   # format output
Emigna
sumber
2

Python 2 , 84 byte

lambda a:[''.join(`(ord('(1Aa2Bb4Dd'[int(n)])-32)>>k&1`for n in a)for k in range(7)]

Cobalah online!

0/1 digunakan untuk tidak tertinju / menekan.

Chas Brown
sumber
2

Python 3 , 84 80 byte

def f(s):[print(*[int(i in[~-n//3,6--n%3-3*(n<1)])for n in s])for i in range(7)]

Cobalah online!

ovs
sumber
Sesuatu tampak funky dengan baris kelima dan keenam Anda (mereka dibalik). [1,2,3] harus membentuk garis diagonal ke bawah, misalnya.
brhfl
@ brhfl terima kasih sudah memberi tahu saya, perbaiki
ovs
2

C (dentang) , 108 107 byte

c,i;f(*q){char*r;for(i=~0;i++<6;puts(""))for(r=q;c=*r++;c-=48,putchar(".X"[(c--?16<<c%3|1<<c/3:8)>>i&1]));}

Cobalah online!

Mengambil nomor input sebagai string. Mencetak keluaran dalam .dan Xseperti dalam contoh.

Kredit

-1 byte terima kasih @ ASCII saja

GPS
sumber
1
107 , dan menghapus tajuk jika tidak, Anda harus menyertakan tajuk di bytecount
ASCII-only
Tolong tunjukkan saya ke konsensus umum bahwa inklusi header perlu dihitung untuk jumlah byte terhadap solusi fungsi (bukan program lengkap)
GPS
1 , 2 , 3
ASCII
Sarankan putchar(".X"[(c--?16<<c%3|1<<c/3:8)>>i&1]))c-=48alih-alihc-=48,putchar(".X"[(c--?16<<c%3|1<<c/3:8)>>i&1]))
ceilingcat
2

J , 31 20 byte

-11 byte terima kasih kepada FrownyFrog!

(e."1],0,|:)1+i.@3 3

Cobalah online!

J , 31 byte

1*@|:@:#.(a,0,|:a=.1+i.3 3)=/~]

Cobalah online!

Mengambil input sebagai daftar digit

0 - tidak ditinju, 1 - dipukul

Penjelasan:

   a=.1+i.3 3 - generates the matrix and stores it into a
1 2 3
4 5 6
7 8 9

   (a,0,|:a=.1+i.3 3) - generates the entire comparison table 
1 2 3
4 5 6
7 8 9
0 0 0
1 4 7
2 5 8
3 6 9

   ]=/ - creates an equality table between the input and the comparison table

 ((a,0,|:a=.1+i.3 3)=/~]) 9 1 1
0 0 0
0 0 0
0 0 1
0 0 0
0 0 0
0 0 0
0 0 1

1 0 0
0 0 0
0 0 0
0 0 0
1 0 0
0 0 0
0 0 0

1 0 0
0 0 0
0 0 0
0 0 0
1 0 0
0 0 0
0 0 0

  1*@|:@:#. - adds the tables, transposes the resulting table and finds the magnitude

  (1*@|:@:#.(a,0,|:a=.1+i.3 3)=/~])  9 1 1
0 1 1
0 0 0
1 0 0
0 0 0
0 1 1
0 0 0
1 0 0
Galen Ivanov
sumber
@FrownyFrog Terima kasih! Kamu brilian seperti biasa!
Galen Ivanov
1
20
FrownyFrog
1

Kanvas , 27 25 byte

{9+├3÷u4% ×#+#¹╷3%5+1╋]↶↕

Coba di sini!

dzaima
sumber
1

Arang , 28 byte

E⁴⭆θI⁼ι÷﹪⊖λχ³E³⭆θI∧Iλ¬﹪⁻⊖λι³

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Menggunakan 0/1, tetapi dapat mendukung karakter sewenang-wenang dengan biaya 1 byte: Coba online! . Penjelasan:

E⁴              Loop from 0 to 3
  ⭆θ            Loop over input string and join
           λ     Current character
         ⊖      Cast to integer and decrement
        ﹪  χ    Modulo predefined variable 10 (changes -1 to 9)
       ÷    ³   Integer divide by literal 3
     ⁼ι         Compare to outer loop variable
    I           Cast to string
                Implicitly print each outer result on a separate line

E³              Loop from 0 to 2
  ⭆θ            Loop over input string and join
            λ   Current character
           ⊖    Cast to integer and decrement
          ⁻  ι  Subtract outer loop variable
         ﹪    ³ Modulo by literal 3
        ¬       Logical not
       λ        Inner loop character
      I         Cast to integer
     ∧          Logical and
    I           Cast to string
                Implicitly print each outer result on a separate line
Neil
sumber
0

Perl 5 -F , 52 byte

for$i(123,456,789,0,147,258,369){say map$i=~$_|0,@F}

Cobalah online!

Penggunaan 1untuk dipukul dan 0untuk tidak ditinju.

Xcali
sumber