Penguraian DTMF sederhana: temukan kunci telepon!

11

Ini adalah tantangan sederhana yang mudah-mudahan dapat mengarah pada beberapa jawaban kreatif.

Mengutip Wikipedia : "Pensinyalan multi-nada ganda-nada (DTMF) adalah sistem pensinyalan telekomunikasi in-band menggunakan pita frekuensi suara melalui saluran telepon antara peralatan telepon dan perangkat komunikasi lainnya dan pusat-pusat switching."

Tugas

Dengan dua bilangan bulat yang mewakili frekuensi kolom dan baris dalam tabel berikut ini, tugas Anda adalah menampilkan kunci yang sesuai:

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

Contohnya

  • Jika inputnya adalah [ 1209, 852 ], output yang diharapkan adalah "7".
  • Jika inputnya adalah [ 1477, 941 ], output yang diharapkan adalah "#".

Aturan

  • Anda harus mengambil input sebagai bilangan bulat dalam format apa pun yang wajar, seperti dua variabel terpisah atau array dua variabel. Silakan tentukan dengan urutan apa program Anda mengharapkannya (baik itu_pre_freq, row_freq atau row_freq, column_freq ).
  • Masukan dijamin valid.
  • Anda harus mencetak atau menampilkan karakter . Namun, Anda juga diizinkan untuk mengeluarkan bilangan bulat untuk tombol angka.
  • Ini adalah , jadi jawaban tersingkat dalam byte menang!
Arnauld
sumber

Jawaban:

2

Jelly , 19 byte

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

Cobalah online!

Mengambil input sebagai row, columndalam dua argumen.

Ini digunakan 3*<first digit of row> + <column> + 6 % 14untuk memberikan nilai yang berbeda untuk masing-masing. Ini diindeks [1,2,3,4,5,6,7,8,9,"*","0","#"," "," "]untuk memberikan output. Ruang bisa benar-benar karakter apa pun; mereka hanya buffer untuk membuat mod 14 implisit.

Level rendah

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#  "
fireflame241
sumber
8

JavaScript (ES6), 39 35 byte

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

Memetakan dua input ke nomor dalam kisaran [0, 13)dengan menghitung:
col % row % 83 % 16 % 13.
Mengambil input dalam sintaks currying ( f(col)(row)) dan mengembalikan string char-tunggal.

Uji Kasus

Sejarah

Dimulai dengan rentang [0, 20)dengan perhitungan col % row % 29 % 20, yang membutuhkan 8 karakter terbuang dalam pemetaan.

Justin Mariner
sumber
4

Haskell, 42 37 byte

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

Hanya beberapa matematika untuk mengindeks string. Urutan input adalah <column> # <row>, mis 1336 # 697.

Cobalah online!

Sunting: @ flawr menemukan rumus yang berfungsi pada string yang lebih pendek. Keseluruhan -5 byte. Terima kasih!

nimi
sumber
1
Saya baru saja menulis sebuah program kecil untuk mengoptimalkan pendekatan Anda, dan tampaknya Anda dapat menyimpan beberapa byte:x#y="_1425__#9__*70836"!!mod(2*x+y)18
flawr
3

MATL , 23 byte

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

Inputnya adalah: frekuensi kolom, kemudian frekuensi baris.

Cobalah online!

Penjelasan

Mengalikan frekuensi kolom dengan 13, menambahkan frekuensi baris, dan menghitung modulo 79 memberikan nilai yang berbeda untuk masing-masing dari 12 pasang input.

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

Befunge , 34 byte

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

Cobalah online!

Penjelasan:

&"~"/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

sumber