ये कौन सी संख्या हैं?


22

जब मैं नंबर लिख रहा था तो मैंने थोड़ी देर बाद देखा कि मेरे कीबोर्ड में Shiftकुंजी दबाया और अवरुद्ध किया गया था और मैंने जो लिखा था वह सभी $%&तरह के अक्षर थे। और इससे भी बदतर, मैं अंग्रेजी और स्पेनिश कीबोर्ड लेआउट के बीच स्विच कर रहा था इसलिए मुझे नहीं पता कि मैं प्रत्येक नंबर के लिए किसका उपयोग करता हूं।

चुनौती

प्रतीक पात्रों से युक्त एक स्ट्रिंग को देखते हुए, यह अनुमान लगाने की कोशिश करें कि मैंने कौन सी संख्या लिखी है। मेरा कीबोर्ड Shiftदबाए जाने पर संख्याओं के लिए निम्न वर्ण बनाता है:

1234567890
----------
!"·$%&/()=  Spanish layout
!@#$%^&*()  English layout
  • इनपुट ऊपर के प्रतीकों से बना एक गैर-अशक्त, गैर-रिक्त स्ट्रिंग होगा।
  • यदि कीबोर्ड लेआउट स्ट्रिंग से बांधा जा सकता है (यानी यदि स्ट्रिंग में @अंग्रेजी लेआउट है, और यदि स्ट्रिंग में "स्पेनिश लेआउट का उपयोग किया गया है, तो आउटपुट एक सिंगल नंबर होगा ) या यदि संख्या समान है दोनों लेआउट (यानी इनपुट !$जो 14दोनों लेआउट के लिए अनुवाद है ); अन्यथा आउटपुट दोनों लेआउट के लिए दो संभावित नंबर होंगे यदि यह अनुमान नहीं लगाया जा सकता है और परिणामी संख्या अलग हैं।
  • इनपुट स्ट्रिंग हमेशा एक लेआउट में लिखी जाएगी। इसलिए आपको "@इनपुट के रूप में अपेक्षा करने की आवश्यकता नहीं है ।

उदाहरण

Input  -->  Output
------------------
/()         789        (Spanish layout detected by the use of /)
$%&         456,457    (Layout cannot be inferred)
!@#         123        (English layout detected by the use of @ and #)
()&!        8961,9071  (Layout cannot be inferred)
((·))       88399      (Spanish layout detected by the use of ·)
!$          14         (Layout cannot be inferred but the result is the same for both)
!!$$%%      114455     (Layout cannot be inferred but the result is the same for both)
==$"        0042/42    (Spanish layout, if a number starts with 0 you can choose to
                       omit them in the result or not)

Single character translations:
------------------------------
!   1    
"   2
·   3
$   4
%   5
&   6,7
/   7
(   8,9
)   9,0
=   0
@   2
#   3
^   6
*   8

यह , इसलिए प्रत्येक भाषा की जीत के लिए सबसे छोटा कोड हो सकता है!


इसे डांग, यह ·चुनौतीपूर्ण है ...
एरिक आउटगॉल्फर

2
@EriktheOutgolfer वास्तव में ·स्पेनिश के लिए बेकार है, यह केवल कैटलन भाषा में उपयोग किया जाता है।
चार्ली

आउटपुट {(8, 9, 6, 1), (9, 0, 7, 1)}(4 वें परीक्षण मामले के लिए) स्वीकार्य है?
लिन

@ लियोन हाँ, यह है।
चार्ली

2 नंबर आउटपुट करते समय, ऑर्डर मायने रखता है?
झबरा

जवाबों:


6

जेली , 32 31 बाइट्स

O“=!"Ṣ$%&/()“)!@#$%^&*(‘iⱮ€PƇ’Q

इसे ऑनलाइन आज़माएं!

  • -1 बाइट्स एग्री द आउटग्रॉफ़र के लिए धन्यवाद

O“!"Ṣ$%&/()=“!@#$%^&*()‘iⱮ€PƇ%⁵Q
O                                  ord of each character in the input
 “!"Ṣ$%&/()=“!@#$%^&*()‘           Constant that yields the list:
                                      [[33, 34, 183, 36, 37, 38, 47, 40, 41, 61],
                                       [33, 64, 35, 36, 37, 94, 38, 42, 40, 41]
                          €        For each list of numbers:
                         Ɱ           For each ord of the characters in the input:
                        i              Find the index of the ord of the character
                                       in the list of numbers.
                                       If the number is not found, `i` returns zero
                                       which means it's a character from only one
                                       keyboard.
                                   There are now two lists of numbers 1-10.
                            Ƈ      Keep the list(s) that: 
                           P         have nonzero product.
                             %⁵    Modulo 10. This maps 10->0.
                               Q   Unique elements. This removes duplicates if the two numbers are the same.




3

जावा (JDK) , 173 बाइट्स

golfed

c->{String s="",e=s;var m="21#3457#908###6##12#456389###0#7".split("");for(int l:c){e+=m[l=l%16];s+=m[l+16];}return s.equals(e)|s.contains("#")?e:e.contains("#")?s:s+","+e;}

इसे ऑनलाइन आज़माएं!


Ungolfed

c->{                                                      // Lamdba taking char array as input
    String s="",e=s;                                      // Initialise Spanish and English strings
    var m="21#3457#908###6##12#456389###0#7".split("");   // Create magic hashing lookup array (see below)
    for(int l:c){                                         // Loops through all chars in input
        e+=m[l=l%16];                                     // Get english number from array and append
        s+=m[l+16];                                       // Get Spanish number from array and append
    }
    return s.equals(e)|s.contains("#")?e:                 // If equal or Spanish is invalid return english
        e.contains("#")?s:                                // If English is invalid return Spanish
        s+","+e;                                          // If both are valid but not equal, return both
}


मैजिक हैशिंग लुकअप ऐरे

मूल्यों के साथ कुछ प्रयोग करने के बाद मुझे एहसास हुआ कि अक्षर !"·$%&/()=@#^*16 के ASCII मूल्यों में से प्रत्येक एक अद्वितीय संख्या देता है। 'जादू हैशिंग देखने सरणी' इस सूचकांक में भंडार अंग्रेजी इस अनूठी सूचकांक में प्रत्येक चरित्र के साथ जुड़े नंबर, और स्पेनिश संख्या में से प्रत्येक के 16 की भरपाई, सरणी प्रत्येक भाषा के लिए तुच्छ से अपेक्षित संख्या प्राप्त करने में कठिनाई बना रही है। एक हैश को उन मानों के लिए संग्रहीत किया जाता है जो किसी भी भाषा के लिए अमान्य हैं।


मुझे नहीं लगता कि आप इसे बनाने के लिए कर सकते हैं। (सिर्फ एक विचार, मैंने अभी तक इसकी कोशिश नहीं की है।)
क्विंटेक

@ मैं इसे करने की कोशिश की, लेकिन अतिरिक्त बाइट्स toCharArray()और गणना करने के लिए घातांक को अंतर मान पर लागू किया जाना दोनों .contains()बयानों की तुलना में अधिक लंबा बना ।
ल्यूक स्टीवंस

s.equals(e)|s.contains("#")हो सकता है s.matches(e+"|.*#.*")
केविन क्रूज़सेन

3

जाप, 38 बाइट्स

पहले स्पेनिश लेआउट के साथ तार की एक सरणी आउटपुट करता है।

"=!\"·$%&/())!@#$%^&*("òA £ËXbD
kø'- â

कोशिश करो


2

जेली , 38 बाइट्स

183Ọ“=!"“$%&/()”j,“)!@#$%^&*(”iⱮ€⁸ẠƇ’Q

इसे ऑनलाइन आज़माएं!


अच्छा! बस एक सवाल, मैंने आपके कोड को इनपुट के साथ ()या उसके (())रूप में आज़माया है , लेकिन आपका कोड फिर कुछ नहीं लौटाता। मुझे लगता है कि जेली को इनपुट के रूप में क्या मिला है, इसके साथ एक सीमा है?
चार्ली

1
@ चेरली के साथ '()'और '(())'क्रमशः प्रयास करें । हां, यदि आप तर्क को उद्धृत नहीं करते हैं, तो इसे केवल एक स्ट्रिंग के रूप में इनपुट किया जाता है यदि इसे evalपायथन 3 मान तक नहीं लाया जा सकता है ।
एर्ग आउटफोलर

2

रेटिना 0.8.2 , 60 बाइट्स

.+
$&¶$&
T`=!"·$%&/()`d`^.+
T`)!@#$%^&*(`d`.+$
D`
Gm`^\d+$

इसे ऑनलाइन आज़माएं! लिंक में परीक्षण मामले शामिल हैं। स्पष्टीकरण:

.+
$&¶$&

इनपुट डुप्लिकेट करें।

T`=!"·$%&/()`d`^.+
T`)!@#$%^&*(`d`.+$

एक अलग कीबोर्ड लेआउट के अनुसार प्रत्येक पंक्ति का अनुवाद करने का प्रयास करें।

D`

डेडुप्लिकेट परिणाम।

Gm`^\d+$

केवल उन पंक्तियों को रखें जिनमें केवल अंक हों।


क्या आपको mअपने अंतिम चरण में ज़रूरत है ?
ओवंस

@ हाँ, मैच पहले चलते हैं, और फिर लाइनों को विभाजित किया जाता है और मैच वाले लाइनों को रखा जाता है।
नील


1

05AB1E , 42 41 बाइट्स

•Hhç₁d©u÷^Σ(“ðΣèõĆ
-•184в2äεIÇk}ʒ®å_}>T%Ù

पोर्ट ऑफ @dylnan के जेली उत्तर

इसे ऑनलाइन आज़माएं या सभी परीक्षण मामलों को सत्यापित करें

स्पष्टीकरण:

Hhç₁d©u÷^Σ(“ðΣèõĆ
-•184в           # Compressed list [33,34,183,36,37,38,47,40,41,61,33,64,35,36,37,94,38,42,40,41]
      2ä         # Split into two parts: [[33,34,183,36,37,38,47,40,41,61],[33,64,35,36,37,94,38,42,40,41]]
ε   }            # Map each inner list to:
 IÇ              #  Get the input, and convert each character to its unicode value
   k             #  Then get the index of each unicode value in the current map-list
                 #  (this results in -1 if the item doesn't exist)
     ʒ   }       # Filter the resulting list of indices by:
      ®å_        #  If the inner list does not contain any -1
          >      # Increase each index by 1 to make it from 0-indexed to 1-indexed
           T%    # Take modulo-10 to convert 10 to 0
             Ù   # Uniquify the result-lists (and output implicitly)

मेरा यह 05AB1E टिप देखें (अनुभाग संपीड़ित पूर्णांक सूचियों कैसे? ) को समझने के लिए क्यों •Hhç₁d©u÷^Σ(“ðΣèõĆ\n-•184вहै [33,34,183,36,37,38,47,40,41,61,33,64,35,36,37,94,38,42,40,41])। यह (साथ में ) स्ट्रिंग के यूनिकोड मान लेने से 1 बाइट छोटा है '""!ÿ·$%&/()=""!@#$%^&*()"‚Ç:।


!$और !!$$%%मामलों चाहिए उत्पादन केवल परिणाम के रूप में एक संख्या दोनों लेआउट के लिए एक ही है और वहाँ कोई अस्पष्टता नहीं है।
चार्ली



1

क्लीन , 116 बाइट्स

import StdEnv,Text
$s=removeDup[foldl(<+)""d\\r<-["=!\"·$%&/()",")!@#$%^&*("],d<-[[indexOf{c}r\\c<-s]]|all((<) -1)d]

इसे ऑनलाइन आज़माएं!

इनपुट लेता है और CP437 में इनकोड किया जाता है। टीआईओ केवल यूटीएफ -8 का समर्थन करता है, इसलिए केंद्र कोड के अनुरूप शाब्दिक बाइट मूल्य 250 को प्राप्त करने के लिए डेमो कोड में एक एस्केप का उपयोग किया जाता है (एक बाइट के रूप में गिना जाता है)।


!$%इनपुट चाहिए उत्पादन केवल एक संख्या है, न दो, परिणाम के रूप में दोनों लेआउट के लिए एक ही है।
चार्ली

@ शर्ली ने इसे ठीक किया।
Οurous

1

एपीएल (डायलॉग) , 40 बाइट्स

बेनामी tacit उपसर्ग समारोह। हालांकि अप्रयुक्त, · Dyalog एकल बाइट वर्ण सेट में है । 0-आधारित अनुक्रमणिका ( ⎕IO←0) को मानता है जो कई प्रणालियों पर डिफ़ॉल्ट है।

{∪⍵/⍨~10∊¨⍵}'=!"·$%&/()' ')!@#$%^&*('⍳¨⊂

इसे ऑनलाइन आज़माएं!

 संपूर्ण तर्क

'=!"·$%&/()' ')!@#$%^&*('⍳¨ इनमें से प्रत्येक तार में पात्रों के सूचकांकों

{∪⍵/⍨~10∊¨⍵} निम्नलिखित लंबो लागू करें ( तर्क है):

10∊¨⍵ अंकों की प्रत्येक सूची के लिए, चाहे 10 (संकेत "नहीं मिला") एक सदस्य है

~ स्थानीय नकार (अर्थात केवल वे ही जहाँ सभी अंक पाए जाते हैं)

⍵/⍨ उसके द्वारा तर्क को फ़िल्टर करें

 उस के अद्वितीय तत्वों को खोजें


0

डार्ट , 125 बाइट्स

f(s)=>['=!"·\$%&/()',')!@#\$%^&*('].map((b)=>s.split('').map((e)=>b.indexOf(e)).join()).where((e)=>!e.contains('-')).toSet();

अधूरा:

f(s){
  ['=!"·\$%&/()',')!@#\$%^&*(']
    .map(
      (b)=>s.split('').map((e)=>b.indexOf(e))
      .join()
    ).where(
      (e)=>!e.contains('-')
    ).toSet();
}
  • दो निर्दिष्ट कुंजी मानों के साथ एक सरणी बनाता है, 0 से 9 तक
  • उनमें से प्रत्येक के लिए, वर्णों के अनुक्रमित का उपयोग करके इनपुट स्ट्रिंग को संबंधित संख्या में परिवर्तित करें
  • संख्या बनाने के लिए परिणामी सरणी से जुड़ें
  • किसी भी संख्या को '-' निकालें (डार्ट रिटर्न -1 जब indexOf एक चार्ट नहीं मिल सकता है)
  • डुप्लिकेट को निकालने के लिए सेट के रूप में लौटें

Dartpad पर यह कोशिश करो!


0

टी-एसक्यूएल, 143 बाइट्स

SELECT DISTINCT*FROM(SELECT TRY_CAST(TRANSLATE(v,m,'1234567890')as INT)a
FROM i,(VALUES('!"·$%&/()='),('!@#$%^&*()'))t(m))b
WHERE a IS NOT NULL

इनपुट को पहले से मौजूद तालिका i के माध्यम से लिया जाता है , जिसमें varchar फ़ील्ड v , हमारे IO मानकों के अनुसार लिया जाता है

इनपुट तालिका को दो अलग-अलग वर्ण स्ट्रिंग्स के साथ जोड़ता है, फिर अलग-अलग वर्णों को स्वैप करने के लिए नए SQL 2017 फ़ंक्शनTRANSLATE का उपयोग करता है , और TRY_CASTयह देखने के लिए कि क्या हम किसी संख्या के साथ समाप्त होते हैं। यदि नहीं, तो TRY_CASTलौटाता हैNULL

अंतिम बाहरी SELECT DISTINCTसमान परिणाम को जोड़ती है और बाहर फ़िल्टर करती है NULLS

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