Proste dekodowanie DTMF: znajdź klucz telefonu!


11

To proste wyzwanie, które, miejmy nadzieję, może doprowadzić do kreatywnych odpowiedzi.

Cytując Wikipedię : „Dwutonowa sygnalizacja wieloczęstotliwościowa (DTMF) to wewnątrzzakresowy system sygnalizacji telekomunikacyjnej wykorzystujący pasmo częstotliwości głosowej przez linie telefoniczne między sprzętem telefonicznym a innymi urządzeniami komunikacyjnymi i centrami przełączającymi”.

Zadanie

Biorąc pod uwagę dwie liczby całkowite reprezentujące częstotliwości kolumn i wierszy w poniższej tabeli, Twoim zadaniem jest wyprowadzenie odpowiedniego klucza:

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

Przykłady

  • Jeśli wejście jest [ 1209, 852 ], oczekiwanym wyjściem jest „7”.
  • Jeśli wejście jest [ 1477, 941 ], oczekiwanym wyjściem jest „#”.

Zasady

  • Dane wejściowe należy przyjmować jako liczby całkowite w dowolnym rozsądnym formacie, takim jak dwie oddzielne zmienne lub tablica dwóch zmiennych. Proszę określić, w jakiej kolejności ich program się spodziewa ( częstotliwość_kolumny, częstotliwość_fałszowania lub częstotliwość_freq, częstotliwość_kolumny ).
  • Dane wejściowe są gwarantowane.
  • Musisz wydrukować lub wydrukować znak . Jednak możesz również wypisać liczbę całkowitą dla klawiszy cyfr.
  • To jest , więc wygrywa najkrótsza odpowiedź w bajtach!

Odpowiedzi:


2

Galaretka , 19 bajtów

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

Wypróbuj online!

Staje jako wejście row, columnw dwóch argumentów.

To służy 3*<first digit of row> + <column> + 6 % 14do podania innej wartości dla każdego. Jest to indeksowane w [1,2,3,4,5,6,7,8,9,"*","0","#"," "," "]celu uzyskania wyniku. Przestrzenie mogą być naprawdę dowolnymi postaciami; są tylko buforem, aby utworzyć domyślny mod 14.

Niski poziom

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 bajtów

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

Odwzorowuje dwa wejścia na liczby w zakresie [0, 13)obliczając:
col % row % 83 % 16 % 13.
Pobiera dane wejściowe w składni currying ( f(col)(row)) i zwraca łańcuch jednoznakowy.

Przypadki testowe

Historia

Zaczęło się od zakresu [0, 20)obliczeń col % row % 29 % 20, które wymagały 8 zmarnowanych znaków w mapowaniu.


4

Haskell, 42 37 bajtów

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

Tylko matematyka do zindeksowania łańcucha. Kolejność wprowadzania wynosi <column> # <row>np 1336 # 697.

Wypróbuj online!

Edycja: @flawr znalazł formułę, która działa na krótszym ciągu. Ogółem -5 bajtów. Dzięki!


1
Właśnie napisałem mały program do optymalizacji twojego podejścia i wydaje się, że możesz zaoszczędzić kilka bajtów:x#y="_1425__#9__*70836"!!mod(2*x+y)18
flawr

3

MATL , 23 bajty

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

Dane wejściowe to: częstotliwość kolumny, a następnie częstotliwość wiersza.

Wypróbuj online!

Wyjaśnienie

Pomnożenie częstotliwości kolumny przez 13, dodanie częstotliwości wiersza i obliczenie modułu 79 daje inną wartość dla każdej z 12 par danych wejściowych.

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 bajty

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

Wypróbuj online!

Wyjaśnienie:

&"~"/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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.