간단한 DTMF 디코딩 : 전화 키를 찾으십시오!


11

이것은 약간의 창의적인 도전으로 이어질 수있는 간단한 도전입니다.

Quoting Wikipedia : "DTMF (Dual-tone Multi-frequency Signaling)는 전화 장비와 다른 통신 장치 및 교환 센터 사이의 전화선을 통해 음성 주파수 대역을 사용하는 대역 내 통신 신호 시스템입니다."

직무

다음 표에서 열과 행 빈도를 나타내는 두 개의 정수가 주어지면 해당 키를 출력해야합니다.

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

  • 입력이 [ 1209, 852 ]인 경우 예상 출력은 "7"입니다.
  • 입력이 [ 1477, 941 ]인 경우 예상 출력은 "#"입니다.

규칙

  • 두 개의 개별 변수 또는 두 개의 변수 배열과 같이 합리적인 형식 으로 정수 로 입력해야합니다 . 프로그램이 원하는 순서를 지정하십시오 ( column_freq, row_freq 또는 row_freq, column_freq ).
  • 입력이 유효합니다.
  • 문자를 인쇄하거나 출력해야합니다 . 그러나 숫자 키의 정수도 출력 할 수 있습니다.
  • 이것은 이므로 바이트 단위의 최단 답변이 이깁니다!

답변:


2

젤리 , 19 바이트

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

온라인으로 사용해보십시오!

로 입력을 받아 row, column두 개의 인수에.

이는 3*<first digit of row> + <column> + 6 % 14각각에 대해 다른 값을 제공하는 데 사용 됩니다. 이것은 [1,2,3,4,5,6,7,8,9,"*","0","#"," "," "]출력을 제공하기 위해 색인화됩니다 . 공백은 실제로 모든 문자가 될 수 있습니다. 암시 적 모드 14를 작성하기위한 버퍼 일뿐입니다.

저수준

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

자바 스크립트 (ES6), 39 35 바이트

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

다음 [0, 13)을 계산 하여 두 입력을 범위의 숫자로 매핑합니다
col % row % 83 % 16 % 13.
카레 구문 ( f(col)(row))으로 입력을 받아서 단일 문자 문자열을 반환합니다.

테스트 사례

역사

의 범위 시작 [0, 20)계산을 col % row % 29 % 20매핑 8 개 낭비 문자가 필요합니다.


4

하스켈, 42 37 바이트

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

문자열을 인덱싱하는 수학. 입력 순서는 <column> # <row>예를 들어 1336 # 697입니다.

온라인으로 사용해보십시오!

편집 : @flawr은 짧은 문자열에서 작동하는 수식을 찾았습니다. 전체 -5 바이트 감사!


1
방금 접근 방식을 최적화하는 작은 프로그램을 작성했으며 몇 바이트를 절약 할 수 있습니다.x#y="_1425__#9__*70836"!!mod(2*x+y)18
flawr

3

MATL , 23 바이트

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

입력은 열 빈도와 행 빈도입니다.

온라인으로 사용해보십시오!

설명

열 주파수에 13을 곱하고 행 주파수를 추가하고 모듈로 79를 계산하면 12 쌍의 입력 각각에 대해 서로 다른 값이 제공됩니다.

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 바이트

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

온라인으로 사용해보십시오!

설명:

&"~"/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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.