Einfache DTMF-Dekodierung: Finden Sie den Telefonschlüssel!


11

Dies ist eine einfache Herausforderung, die hoffentlich zu kreativen Antworten führen kann.

Zitat von Wikipedia : "Dual-Tone Multi-Frequency Signaling (DTMF) ist ein In-Band-Telekommunikationssignalisierungssystem, das das Sprachfrequenzband über Telefonleitungen zwischen Telefongeräten und anderen Kommunikationsgeräten und Vermittlungsstellen verwendet."

Aufgabe

Bei zwei Ganzzahlen, die die Spalten- und Zeilenfrequenzen in der folgenden Tabelle darstellen, müssen Sie den entsprechenden Schlüssel ausgeben:

       | 1209 Hz | 1336 Hz | 1477 Hz
-------+---------+---------+---------
697 Hz |    1    |    2    |    3
770 Hz |    4    |    5    |    6
852 Hz |    7    |    8    |    9
941 Hz |    *    |    0    |    #

Beispiele

  • Wenn der Eingang ist [ 1209, 852 ], ist der erwartete Ausgang "7".
  • Wenn die Eingabe ist [ 1477, 941 ], ist die erwartete Ausgabe "#".

Regeln

  • Sie müssen Eingaben als Ganzzahlen in einem beliebigen vernünftigen Format vornehmen, z. B. zwei separate Variablen oder ein Array mit zwei Variablen. Bitte geben Sie an, in welcher Reihenfolge Ihr Programm sie erwartet (entweder column_freq, row_freq oder row_freq, column_freq ).
  • Die Eingabe ist garantiert gültig.
  • Sie müssen ein Zeichen drucken oder ausgeben . Sie können jedoch auch eine Ganzzahl für Zifferntasten ausgeben.
  • Dies ist , also gewinnt die kürzeste Antwort in Bytes!

Antworten:


2

Gelee , 19 Bytes

DḢ×3++6ị9R;“*0#  ”¤

Probieren Sie es online aus!

Nimmt als Eingabe row, columnin zwei Argumente.

Dies verwendet 3*<first digit of row> + <column> + 6 % 14, um für jeden einen anderen Wert anzugeben. Dies wird indiziert [1,2,3,4,5,6,7,8,9,"*","0","#"," "," "], um die Ausgabe zu erhalten. Die Räume könnten wirklich jeder Charakter sein; Sie sind nur Puffer, um einen impliziten Mod 14 zu erstellen.

Niedriges Niveau

DḢ×3++6ị9R;“*0#  ”¤
D                     - digits (of <row>)
 Ḣ                    - head (get first element)
  ×3                  - multiply by 3
    +                 - add (<column>)
     +6               - add 6
       ị              - index into:
                  ¤   - the nilad:
        9R              - range(9)
          ;             - concatenate
           “*0#  ”      - the string "*0#  "

8

JavaScript (ES6), 39 35 Byte

a=>b=>"310*58# 47269"[a%b%83%16%13]

Ordnet die beiden Eingaben Zahlen im Bereich zu, [0, 13)indem berechnet wird :
col % row % 83 % 16 % 13.
Übernimmt Eingaben in der Curry-Syntax ( f(col)(row)) und gibt eine Zeichenfolge mit einem Zeichen zurück.

Testfälle

Geschichte

Begonnen mit dem Bereich der [0, 20)Berechnung col % row % 29 % 20, für den 8 verschwendete Zeichen in der Zuordnung erforderlich waren.


4

Haskell, 42 37 Bytes

x#y="_1425__#9__*70836"!!mod(2*x+y)18

Nur ein bisschen Mathe, um einen String zu indizieren. Die Eingabereihenfolge ist <column> # <row>z 1336 # 697.

Probieren Sie es online aus!

Bearbeiten: @flawr hat eine Formel gefunden, die für kürzere Zeichenfolgen funktioniert. Insgesamt -5 Bytes. Vielen Dank!


1
Ich habe gerade ein kleines Programm geschrieben, um Ihren Ansatz zu optimieren, und es scheint, dass Sie ein paar Bytes sparen können:x#y="_1425__#9__*70836"!!mod(2*x+y)18
Fehler

3

MATL , 23 Bytes

13*+79\'186#294*3750'w)

Eingaben sind: Spaltenfrequenz, dann Zeilenfrequenz.

Probieren Sie es online aus!

Erläuterung

Das Multiplizieren der Spaltenfrequenz mit 13, das Addieren der Zeilenfrequenz und das Berechnen von Modulo 79 ergibt einen anderen Wert für jedes der 12 Eingangspaare.

13*               % First input (implicit) times 13
+                 % Add to second input (implicit)
79\               % Modulo 79
'186#294*3750'    % Push this string
w                 % Swap
)                 % Index



1

Befunge , 34 Bytes

&"~"/9-4*&"d"/6-+1g,@
147*2580369#

Probieren Sie es online aus!

Erläuterung:

&"~"/9-4*                (Get number / 126 - 9) * 4 = 0, 4, or 8
         &"d"/6-         Get number / 100 - 6 = 0, 1, 2, or 3
                +        Add the above results - this becomes the x-coordinate in the "lookup table"
                 1g,@    Get a value on row 1 column x, output it, and end
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.