Programmieren Sie meinen Autodialer


16

Früher verwendeten Telefonautodialer Lochkarten mit einer Spalte für jede Ziffer der zu wählenden Nummer. Die Spalten hatten sieben Zeilen. Die ersten drei Zeilen repräsentierten die Zahlen (1,2,3), (4,5,6) bzw. (7,8,9). Die letzten drei Reihen haben diese Anordnung um 90 ° gedreht: (1,4,7), (2,5,8) und (3,6,9). Die mittlere Reihe wurde für 0 verwendet. Bei jeder Ziffer 1-9 wurden zwei Löcher gestanzt - eines in den ersten drei Reihen und eines in den unteren drei Reihen. Null hätte nur die mittlere Reihe gestanzt. Lassen Sie uns die gelochte Spalte für die Nummer 6 visualisieren ( .ist ungelocht, xist gelocht, die linke Anleitung dient nur zur Veranschaulichung der Codierung):

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

Wir suchen nach den Zeilen, in denen sich die Nummer befindet, die wir wählen möchten. Für 6 ist dies die zweite und die neunte Reihe. Diese beiden Reihen werden gestanzt, die restlichen fünf Reihen werden ausgestanzt. Hier sind die Lochmuster für alle Ziffern 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

Ihr Ziel ist es, diese Karten für mich zu lochen (ein Programm oder eine Funktion zu schreiben).

Eingabe: Eine Zahl, die in einem vernünftigen Format (Zeichenfolge, Ganzzahl, Liste von Ganzzahlen usw.) verwendet wird und 9999999999999 nicht überschreitet.

Ausgabe: Das der Zahleneingabe entsprechende Raster aus gelochten Spalten. Die oben gezeigten Überschriften oder zusätzlichen Abstände sind nicht erforderlich, nur die gelochten Spalten. Führende / nachfolgende Zeilenumbrüche sind in Ordnung, ebenso wie Leerzeichen zwischen Zeilen / Spalten, sofern dies konsistent ist . Apropos, solange sie konsistent sind, können Sie ein beliebiges (Nicht-Leerzeichen-) Zeichen für das Lochen und ein beliebiges anderes Zeichen für das Nicht-Lochen verwenden (obwohl dies offensichtlich sein sollte, geben Sie bitte an, welche Zeichen Sie verwenden).

Das ist Code-Golf, also gewinnt der kürzeste Code. Standardlücken sind nicht zulässig.

Testfälle (alle .zum Ausstanzen, xzum Ausstanzen):

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
Völlig unnötig, um die Frage zu lösen, aber es gibt hier eine hübsche kleine Galerie dieser Karten / Geräte .
brhfl

Sie können ein beliebiges Zeichen für das Lochen und ein anderes Zeichen für das Nicht-Leerzeichen verwenden.
Erik der Outgolfer

Ja, ich nehme an, das wäre vorzuziehen, da Leerzeichen an anderer Stelle zulässig sind. Und um sehen zu können. Wird bearbeitet, danke.
brhfl

1
coole Herausforderung ... versucht, eine Antwort auf FORTRAN 77 zu schreiben, aber ich weiß nicht, wie man Golf spielt
qwr

@qwr Fühlen Sie sich frei, einen "Tipps zum Golfen in Fortran" -Post zu erstellen.
mbomb007

Antworten:



3

Pyth, 25 Bytes

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

Verwendet 0für gelochte und "ungelochte.
Probieren Sie es hier aus

Erläuterung

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

Nimmt die Eingabe als Array von Ganzzahlen. Gibt eine binäre Matrix mit 0 = ungelocht / 1 = gelocht zurück.

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

Probieren Sie es online!


3

05AB1E , 16 15 Bytes

Verwendet 0 und 1 .

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

Probieren Sie es online!

Erläuterung

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

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

Probieren Sie es online!


Irgendetwas in deiner fünften und sechsten Reihe scheint irre zu sein (sie scheinen umgedreht zu sein). [1,2,3] sollte zum Beispiel eine diagonale Linie nach unten bilden.
Brhfl

@brhfl danke, dass du es mir gesagt hast, behoben
ovs

2

C (Klirren) , 108 107 Bytes

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

Probieren Sie es online!

Übernimmt die eingegebene Nummer als Zeichenfolge. Druckt die Ausgabe in .und Xwie in den Beispielen.

Credits

-1 Byte danke @ Nur ASCII


1
107 und entfernter Header, andernfalls müssten Sie den Header in den bytecount
ASCII

Können Sie mich bitte auf den allgemeinen Konsens hinweisen, dass Header-Einschlüsse für die Byte-Zählung in Bezug auf Funktionslösungen (nicht vollständige Programme) gezählt werden müssen
GPS

1 , 2 , 3
Nur ASCII

Schlagen Sie putchar(".X"[(c--?16<<c%3|1<<c/3:8)>>i&1]))c-=48anstelle vonc-=48,putchar(".X"[(c--?16<<c%3|1<<c/3:8)>>i&1]))
ceilingcat 23.11.18

2

J , 31-20 Bytes

-11 Bytes dank FrownyFrog!

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

Probieren Sie es online!

J , 31 Bytes

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

Probieren Sie es online!

Übernimmt die Eingabe als Ziffernliste

0 - ungelocht, 1 - gelocht

Erläuterung:

   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 Vielen Dank! Du bist brillant wie immer!
Galen Ivanov



1

Kohle , 28 Bytes

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

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Verwendet 0/1, kann jedoch beliebige Zeichen zu einem Preis von 1 Byte unterstützen: Probieren Sie es online aus! . Erläuterung:

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.