सरल DTMF डिकोडिंग: फ़ोन कुंजी ढूंढें!


11

यह एक सरल चुनौती है जो उम्मीद है कि कुछ रचनात्मक जवाब दे सकती है।

कोटिंग विकिपीडिया : "ड्यूल-टोन मल्टी-फ्रीक्वेंसी सिग्नलिंग (DTMF) एक इन-बैंड टेलीकम्युनिकेशन सिग्नलिंग सिस्टम है, जो टेलीफोन उपकरणों और अन्य संचार उपकरणों और स्विचिंग केंद्रों के बीच टेलीफोन लाइनों पर वॉइस-फ्रीक्वेंसी बैंड का उपयोग करता है।"

कार्य

निम्नलिखित तालिका में स्तंभ और पंक्ति आवृत्तियों का प्रतिनिधित्व करने वाले दो पूर्णांकों को देखते हुए, आपका कार्य संबंधित कुंजी को आउटपुट करना है:

       | 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 ], तो अपेक्षित आउटपुट "#" है।

नियम

  • आपको किसी भी उचित प्रारूप में पूर्णांक के रूप में इनपुट लेना होगा , जैसे दो अलग-अलग चर या दो चर। कृपया निर्दिष्ट करें कि आपका कार्यक्रम किस क्रम में उनसे ( स्तंभ_फ्रेक, पंक्ति_फ्रेक या पंक्ति_फ्रेक, कॉलम_फ्रेक ) की अपेक्षा कर रहा है
  • इनपुट मान्य होने की गारंटी है।
  • आपको किसी वर्ण को प्रिंट या आउटपुट करना होगा । हालाँकि, आपको अंकीय कुंजियों के लिए पूर्णांक आउटपुट करने की भी अनुमति है।
  • यह , इसलिए बाइट्स में सबसे कम जवाब जीतता है!

जवाबों:


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

जावास्क्रिप्ट (ईएस 6), 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
त्रुटी

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.