Chương trình autodialer của tôi


16

Trước đây, những người tự động gọi điện thoại đã sử dụng thẻ đục lỗ với một cột cho mỗi chữ số của số được quay số. Cột có bảy hàng. Ba hàng đầu tiên đại diện cho các số (1,2,3), (4,5,6) và (7,8,9) tương ứng. Ba hàng cuối cùng xoay vòng sắp xếp này theo 90 °: (1,4,7), (2,5,8) và (3,6,9). Hàng giữa được sử dụng cho 0. Bất kỳ chữ số 1-9 nào cũng sẽ có hai lỗ được đục - một ở ba hàng đầu tiên và một ở ba hàng dưới cùng. Zero sẽ chỉ có hàng giữa bị đấm. Chúng ta hãy hình dung cột đục lỗ cho số 6 (không .được bấm, xđược bấm lỗ, hướng dẫn bên trái chỉ để minh họa mã hóa):

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

Chúng tôi tìm kiếm (các) hàng nào chứa số chúng tôi đang cố gắng quay số. Đối với 6, đây là hàng thứ hai và hàng thứ chín. Hai hàng này được đục lỗ, năm hàng còn lại không được đánh dấu. Dưới đây là các mẫu đục lỗ cho tất cả các chữ số 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

Mục tiêu của bạn là (viết một chương trình hoặc chức năng để) đấm những thẻ này cho tôi.

Đầu vào: Một số, được lấy ở bất kỳ định dạng hợp lý nào (chuỗi, số nguyên, danh sách số nguyên, & c.), Không vượt quá 9999999999999.

Đầu ra: Lưới các cột được đục lỗ tương ứng với đầu vào số. Bạn không cần các tiêu đề hoặc khoảng cách thêm được hiển thị ở trên, chỉ cần các cột được đục lỗ. Các dòng mới hàng đầu / theo dõi là ok, cũng như khoảng trắng giữa các hàng / cột miễn là nó phù hợp . Nói về, miễn là chúng nhất quán, bạn có thể sử dụng bất kỳ ký tự (không phải khoảng trắng) nào cho cú đấm và bất kỳ ký tự nào khác để không bị xóa (trong khi nó rõ ràng, vui lòng chỉ định những ký tự bạn đang sử dụng).

Đây là mã golf, vì vậy mã ngắn nhất sẽ thắng. Sơ hở tiêu chuẩn là không được phép.

Các trường hợp thử nghiệm (tất cả sử dụng .cho unpunched, xcho punched):

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

2
Hoàn toàn không cần thiết để giải quyết câu hỏi, nhưng có một bộ sưu tập nhỏ các thẻ / thiết bị này ở đây .
brhfl

bạn có thể sử dụng bất kỳ nhân vật nào để đấm, và bất kỳ nhân vật nào khác để không bị tấn công ý bạn là bất kỳ ký tự không phải khoảng trắng nào?
Erik the Outgolfer

Vâng, tôi cho rằng sẽ tốt hơn vì khoảng trắng được cho phép ở nơi khác. Và vì lợi ích của việc có thể nhìn thấy. Sẽ chỉnh sửa trong, cảm ơn.
brhfl

1
thử thách thú vị ... mong muốn viết một câu trả lời FORTRAN 77, nhưng idk làm thế nào để chơi nó
qwr

@qwr Hãy thoải mái tạo một bài "Mẹo chơi golf trong Fortran".
mbomb007

Câu trả lời:



3

Bình thường, 25 byte

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

Sử dụng 0cho đấm và" cho unpunched.
Hãy thử nó ở đây

Giải trình

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

3

JavaScript (ES6), 60 54 byte

Đưa đầu vào như một mảng các số nguyên. Trả về một ma trận nhị phân, với 0 = unpunched / 1 = punched.

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

Hãy thử trực tuyến!


3

05AB1E , 16 15 byte

Sử dụng 01 .

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

Hãy thử trực tuyến!

Giải trình

ε           }     # 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



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

Hãy thử trực tuyến!


Một cái gì đó có vẻ sôi nổi với hàng thứ năm và thứ sáu của bạn (chúng dường như được lật). [1,2,3] nên tạo một đường chéo xuống, ví dụ.
brhfl

@brhfl cảm ơn vì đã nói với tôi, đã sửa nó
ovs

2

C (tiếng kêu) , 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]));}

Hãy thử trực tuyến!

Lấy số đầu vào dưới dạng chuỗi. In đầu ra trong .Xnhư trong ví dụ.

Tín dụng

-1 byte chỉ cảm ơn @ ASCII


1
107 và loại bỏ tiêu đề nếu không bạn cần bao gồm tiêu đề trong bytecount
ASCII-only

Bạn có thể vui lòng chỉ cho tôi sự đồng thuận chung rằng các vùi tiêu đề cần được tính cho số byte đối với các giải pháp chức năng (không phải chương trình đầy đủ)
GPS


Đề xuất putchar(".X"[(c--?16<<c%3|1<<c/3:8)>>i&1]))c-=48thay vìc-=48,putchar(".X"[(c--?16<<c%3|1<<c/3:8)>>i&1]))
trần mèo

2

J , 31 20 byte

-11 byte nhờ FrownyFrog!

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

Hãy thử trực tuyến!

J , 31 byte

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

Hãy thử trực tuyến!

Lấy đầu vào là một danh sách các chữ số

0 - không chuẩn bị, 1 - đấm

Giải trình:

   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

@FrownyFrog Cảm ơn bạn! Bạn rực rỡ như mọi khi!
Galen Ivanov



1

Than , 28 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Sử dụng 0/1, nhưng có thể hỗ trợ các ký tự tùy ý với chi phí 1 byte: Dùng thử trực tuyến! . Giải trình:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.