내 자동 다이얼러 프로그램


16

그 당시 전화 자동 다이얼러는 다이얼 할 번호의 각 숫자에 대해 하나의 열이있는 펀치 카드를 사용했습니다. 열에는 7 행이있었습니다. 처음 세 행은 각각 (1,2,3), (4,5,6) 및 (7,8,9)를 나타냅니다. 마지막 3 열은이 배열을 (1,4,7), (2,5,8) 및 (3,6,9)로 90 ° 회전 시켰습니다. 가운데 행은 0에 사용되었습니다. 1-9 숫자는 두 개의 구멍이 뚫린 것입니다. 첫 세 행에 하나씩, 아래쪽 세 행에 하나씩 있습니다. 0은 가운데 줄만 펀칭합니다. 의는 숫자 6의 펀치 열을 시각화 보자는 ( ., unpunched되어 x왼쪽에 가이드가 인코딩을 설명하기 그냥, 펀칭) :

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

전화를 걸려는 번호가 포함 된 행을 찾습니다. 6의 경우, 이것은 두 번째 행과 아홉 번째 행입니다. 이 두 행은 펀칭되고 나머지 5 개의 행은 펀칭되지 않습니다. 모든 숫자 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

당신의 목표는 나를 위해이 카드들을 펀칭하는 것 (프로그램이나 기능을 작성하는 것)입니다.

입력 : 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

천공에는 문자를 사용할 수 있고 천공 되지 않은 다른 문자는 공백이 아닌 문자를 의미합니까?
Outgolfer Erik

예, 다른 곳에서 공백이 허용되기 때문에 바람직하다고 생각합니다. 그리고 볼 수 있도록. 감사합니다.
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

05AB1E , 16 15 바이트

01을 사용합니다 .

ε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

파이썬 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예제 와 같이 .

크레딧

@ASCII 전용 -1 바이트 감사


1
107 , 헤더를 제거하지 않으면
바이트 수에

기능 솔루션 (전체 프로그램이 아님)에 대한 바이트 수를 계산하기 위해 헤더 포함을 계산해야한다는 일반적인 의견을 말씀해 주실 수 있습니까?
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]))
천장 고양이

2

J , 31 20 바이트

FrownyFrog 덕분에 -11 바이트!

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