ตั้งโปรแกรมโปรแกรมเรียกเลขหมายอัตโนมัติของฉัน


16

ย้อนกลับไปในวันนั้นผู้เรียกเลขหมายอัตโนมัติโทรศัพท์ใช้บัตร punched กับหนึ่งคอลัมน์สำหรับแต่ละหลักของหมายเลขที่จะโทรออก คอลัมน์มีเจ็ดแถว สามแถวแรกแสดงหมายเลข (1,2,3), (4,5,6) และ (7,8,9) ตามลำดับ สามแถวสุดท้ายหมุนการจัดเรียงนี้ 90 °: (1,4,7), (2,5,8) และ (3,6,9) แถวกลางใช้สำหรับ 0 หลักใด ๆ ที่ 1-9 จะมีการเจาะสองรู - หนึ่งในสามแถวแรกและหนึ่งในสามแถวด้านล่าง ศูนย์จะมีการเจาะแถวกลางเท่านั้น ลองจินตนาการถึงคอลัมน์ที่ถูกเจาะสำหรับหมายเลข 6 ( .ไม่ได้xถูกเจาะ, ถูกกด, คำแนะนำทางด้านซ้ายเป็นเพียงเพื่อแสดงการเข้ารหัส):

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

เรามองหาแถวที่มีหมายเลขที่เราพยายามโทรออก สำหรับ 6 นี่คือแถวที่สองและแถวที่เก้า สองแถวเหล่านี้ถูกเจาะส่วนที่เหลืออีกห้าแถวจะไม่ถูกยกเลิก นี่คือรูปแบบการเจาะสำหรับตัวเลขทั้งหมด 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

เป้าหมายของคุณคือ (เขียนโปรแกรมหรือฟังก์ชั่น) เจาะการ์ดเหล่านี้ให้ฉัน

อินพุต: ตัวเลขที่ถ่ายในรูปแบบที่เหมาะสม (สตริง, จำนวนเต็ม, รายการจำนวนเต็ม & c.) ไม่เกิน 9999999999999

เอาท์พุท: ตารางของคอลัมน์เจาะที่สอดคล้องกับการป้อนตัวเลข คุณไม่ต้องการส่วนหัวหรือระยะห่างพิเศษที่แสดงด้านบนเพียงคอลัมน์เจาะเอง ชั้นนำ / การขึ้นบรรทัดใหม่ต่อท้ายจะตกลงที่เป็นช่องว่างระหว่างแถว / คอลัมน์ตราบเท่าที่มันมีความสอดคล้อง การพูดตราบเท่าที่พวกเขามีความสอดคล้องกันคุณอาจใช้อักขระใด ๆ (ไม่ใช่ช่องว่าง) เพื่อต่อยและตัวละครอื่น ๆ ที่ไม่ได้พูดถึง

นี่คือรหัส - กอล์ฟดังนั้นรหัสที่สั้นที่สุดจึงชนะ ช่องโหว่มาตรฐานไม่ได้รับอนุญาต

กรณีทดสอบ (ใช้.สำหรับการ Unpunched xเพื่อเจาะ):

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
ทั้งหมดที่ไม่จำเป็นสำหรับการแก้คำถาม แต่มีน้อยเรียบร้อยแกลเลอรีของบัตรเหล่านี้ / อุปกรณ์ที่นี่
brhfl

คุณสามารถใช้ตัวละครตัวใดตัวหนึ่งต่อยได้และตัวละครตัวอื่นสำหรับการไม่ได้พูดถึงคุณหมายถึงตัวละครที่ไม่ใช่ช่องว่าง?
Erik the Outgolfer

ใช่ฉันคิดว่าน่าจะดีกว่าเพราะพื้นที่ว่างได้รับอนุญาตที่อื่น และเพื่อความสามารถในการมองเห็น จะแก้ไขในขอบคุณ
brhfl

1
ความท้าทายที่ยอดเยี่ยม ... ล่อลวงให้เขียนคำตอบของ FORTRAN 77 แต่ให้ IDK ทำอย่างไรถึงจะเล่นกอล์ฟได้
qwr

@qwr รู้สึกฟรีเพื่อสร้างโพสต์ "เคล็ดลับสำหรับการเล่นกอล์ฟใน Fortran"
mbomb007

คำตอบ:



3

Pyth, 25 ไบต์

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

ใช้0สำหรับการชกและ"เพื่อไม่ถูกสับเปลี่ยน
ลองที่นี่

คำอธิบาย

.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 ไบต์

รับอินพุตเป็นอาร์เรย์ของจำนวนเต็ม ส่งคืนเมทริกซ์ไบนารีที่มี0 = ไม่ได้สับเปลี่ยน / 1 = เจาะ

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

ลองออนไลน์!


3

05AB1E , 16 15 ไบต์

ใช้0และ1

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

ลองออนไลน์!

คำอธิบาย

ε           }     # 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 ไบต์

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

ลองออนไลน์!


บางสิ่งบางอย่างดูเหมือนขี้ขลาดกับแถวที่ห้าและหกของคุณ (ดูเหมือนจะพลิก) [1,2,3] ควรสร้างเส้นทแยงมุมลงเช่น
brhfl

ขอบคุณ @brhfl บอกฉันคงมัน
OVS

2

C (เสียงดังกราว) , 108 107 ไบต์

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

ลองออนไลน์!

ใช้หมายเลขอินพุตเป็นสตริง พิมพ์เอาต์พุตใน.และXตัวอย่าง

เครดิต

-1 ไบต์ขอบคุณ @ ASCII- เท่านั้น


1
107และนำส่วนหัวออกมิฉะนั้นคุณจะต้องรวมส่วนหัวใน bytecount
ASCII เท่านั้น

คุณช่วยชี้แนะฉันไปยังฉันทามติทั่วไปได้หรือไม่ว่าการรวมส่วนหัวจะต้องนับเป็นจำนวนไบต์ต่อการแก้ปัญหาฟังก์ชั่น (ไม่ใช่โปรแกรมเต็ม)
GPS


แนะนำputchar(".X"[(c--?16<<c%3|1<<c/3:8)>>i&1]))c-=48แทนc-=48,putchar(".X"[(c--?16<<c%3|1<<c/3:8)>>i&1]))
ceilingcat

2

J , 31 20 ไบต์

-11 ไบต์ขอบคุณ FrownyFrog!

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

ลองออนไลน์!

J , 31 ไบต์

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

ลองออนไลน์!

รับอินพุตเป็นรายการของตัวเลข

0 - ไม่ถูกแทนที่ 1 - ถูกชก

คำอธิบาย:

   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 ขอขอบคุณ! คุณยอดเยี่ยมเช่นเคย!
Galen Ivanov



1

ถ่าน 28 ไบต์

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

ลองออนไลน์!การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด ใช้ 0/1 แต่สามารถรองรับอักขระที่กำหนดเองที่ราคา 1 ไบต์: ลองออนไลน์! . คำอธิบาย:

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.