मदद! मेरे कैलकुलेटर की खराबी!


28

परिचय

मेरा कैलकुलेटर अजीब व्यवहार कर रहा है। कभी-कभी जब मैं इसमें टाइप 8करता हूं तो एक प्रदर्शित करता है 2। और कभी-कभी जब मैं इसमें टाइप 6करता हूं तो एक प्रदर्शित करता है +। कुछ बटन मिश्रित हैं!
किसी ने मुझे जो निर्धारित करने में मदद कर सकता है?

चुनौती:

इनपुट: सही परिणामों के साथ गलत समीकरणों की सूची ।

आउटपुट: स्वैप किए गए दो बटन।

उदाहरण के लिए:
एक इनपुट हो सकता है:

123    = 3
8423   = 252
4+4    = 8
4*7-10 = 417
9/3    = 3
42-9   = -36

जिसके लिए अपेक्षित आउटपुट हैं: 2और *

क्यूं कर? क्योंकि सभी समीकरण सही होंगे यदि हम 2 का स्वैप करते हैं और *

1*3    = 3
84*3   = 252
4+4    = 8
427-10 = 417
9/3    = 3
4*-9   = -36

चुनौती नियम:

  • इनपुट किसी भी उचित प्रारूप में हो सकता है। अंतरिक्ष सीमांकित के साथ एक एकल तार हो सकता है; एक स्ट्रिंग-सूची या -अरे; समीकरणों के साथ एक सूची और सही परिणामों के साथ एक अन्य सूची। तुम्हारा कॉल। कृपया बताएं कि आपने कौन सा इनपुट प्रारूप प्रयोग किया है!
    नोट: यह भी मतलब है कि आप इनपुट करने के लिए परीक्षण का मामला अनुमति दी जाती है -5--15के रूप में -5- -15या -5 - -15। हालांकि, एक संख्या जिसके परिणामस्वरूप --या तो रिक्त स्थान के बिना या हर अंक के बीच एक स्थान के साथ इनपुट किया जाना चाहिए। इसलिए परीक्षण मामले 9119को इनपुट किया जा सकता है 9119या 9 1 1 9(कारण 91 19की अनुमति नहीं है क्योंकि आप तब खोज के लिए स्थान द्वारा निर्देशित हो सकते हैं - -)। तो रिक्त स्थान (कुछ) वैकल्पिक और अनुमत हैं।
  • आउटपुट प्रारूप किसी भी उचित प्रारूप में भी हो सकता है। दो वर्ण हो सकते हैं; एक एकल दो-वर्ण स्ट्रिंग; एक स्ट्रिंग-सूची जिसमें दो वर्ण हैं। तुम्हारा कॉल। फिर से, कृपया बताएं कि आपने कौन सा आउटपुट फॉर्मेट इस्तेमाल किया है!
  • आपको किसी भी विशिष्ट 14 आउटपुट का उपयोग करने की अनुमति है जो कि नक्शे के लिए है 0123456789+-*/। इसलिए आपको दो अलग-अलग पूर्णांक आउटपुट करने की भी अनुमति है यदि आप (फिर से, कृपया जो मानचित्रण आप उपयोग करते हैं, यदि कोई हो) निर्दिष्ट करें।
  • आपको केवल पूर्णांकों का समर्थन करना होगा। इसलिए किसी भी तरह के परीक्षण मामले 1/8=0.125या नहीं होंगे 1/8=0
  • अंकगणितीय ऑपरेंड्स का आपको समर्थन करना होगा: जोड़ ( +); घटाव ( -); गुणा ( *या ×या ·); विभाजन ( /या ÷)। (नोट: कोष्ठक के बीच वर्ण केवल स्पष्टीकरण के रूप में जोड़े जाते हैं।)
  • आपको नकारात्मक संख्याओं का समर्थन करना होगा। इसका अर्थ -समीकरण में गणितीय संचालक या ऋणात्मक सूचक दोनों के रूप में किया जा सकता है।
  • आप दिए गए गलत समीकरणों को मान सकते हैं और माना जाता है कि सही समीकरण हमेशा मान्य होते हैं (इसलिए इसमें कुछ चीजें नहीं होंगी 4-/2या 9+-+8उदाहरण के लिए)।
  • गलत इनपुट-समीकरणों में 0 से एक विभाजन हो सकता है, लेकिन सही और अपेक्षित समीकरणों में 0 से विभाजन कभी नहीं होगा।
  • गलत इनपुट-समीकरण पहले से ही सही हो सकते हैं भले ही आप इच्छित बटन वापस स्वैप कर लें।
  • एक दिया गया इनपुट समीकरण बटन को स्वैप करने के लिए अप्रासंगिक हो सकता है (जैसे कि स्वैप किए गए बटन के साथ 4+4=8और 9/3=3समीकरण ) 2और *
  • आप मान सकते हैं कि हमेशा केवल एक संभव स्वैप होगा जो दिए गए परीक्षण मामलों के साथ किया जा सकता है।
  • स्वैप करने के लिए दोनों बटन हमेशा कम से कम एक गलत समीकरण में मौजूद होंगे।

सामान्य नियम:

  • यह , इसलिए बाइट्स जीत में सबसे छोटा जवाब है।
    कोड-गोल्फ भाषाओं को गैर-कोडगॉल्फिंग भाषाओं के साथ उत्तर पोस्ट करने से हतोत्साहित न करें। 'किसी भी' प्रोग्रामिंग भाषा के लिए यथासंभव संक्षिप्त उत्तर के साथ आने का प्रयास करें।
  • मानक नियम आपके उत्तर के लिए लागू होते हैं , इसलिए आपको उचित पैरामीटर और रिटर्न-टाइप, पूर्ण कार्यक्रमों के साथ STDIN / STDOUT, फ़ंक्शन / विधि का उपयोग करने की अनुमति दी जाती है। तुम्हारा कॉल।
  • डिफ़ॉल्ट ढीले निषिद्ध हैं।
  • यदि संभव हो, तो कृपया अपने कोड के लिए एक परीक्षण के साथ एक लिंक जोड़ें।
  • इसके अलावा, यदि आवश्यक हो तो एक स्पष्टीकरण जोड़ें।

परीक्षण के मामलों:

Input:
123    = 3
8423   = 252
4+4    = 8
4*7-10 = 417
9/3    = 3
42-9   = -36

Output: 2 *

Input:
4/2   = 6
3/0   = 3
0/8+2 = 4
95-5  = 90
4+2   = 2

Output: + /

Input:
7+4    = 11
5-15   = 46
212-23 = -2121

Output: 1 -

Input:
4+8/2-9*1 = -5
99/3-13   = 20
1+2+3+4   = 10
4-3-2-1   = -6

Output: 2 4

Input:
18/18  = 1
98-8   = 90
55*88  = 4840
-5--15 = 10

Ouput: 5 8

Input:
9119    = 18
5-3     = 513
8*-9    = 152
13116/3 = -1

Output: 1 -
code-golf  number  arithmetic  integer  code-golf  math  number  geometry  code-golf  grid  code-golf  math  number  sequence  primes  code-golf  sequence  kolmogorov-complexity  code-golf  string  ascii-art  alphabet  code-golf  math  sequence  integer  code-golf  number-theory  integer  natural-language  code-golf  date  code-golf  function  code-golf  ascii-art  code-golf  math  number-theory  primes  classification  code-golf  array-manipulation  decision-problem  matrix  code-golf  number  code-golf  code-golf  ascii-art  matrix  code-golf  string  code-golf  sequence  base-conversion  code-golf  code-golf  math  number-theory  combinatorics  integer-partitions  code-golf  integer  binary  base-conversion  code-golf  integer  base-conversion  palindrome  code-golf  code-golf  integer-partitions  code-golf  math  ascii-art  matrix  code-golf  number  sequence  number-theory  matrix  code-golf  interpreter  code-golf  graph-theory  code-golf  ascii-art  decision-problem  code-golf  division  code-golf  array-manipulation  primes  code-golf  string  ascii-art  code-golf  primes  counting  code-golf  matrix  unicode  code-golf  source-layout  code-golf  grammars  code-golf  string  cops-and-robbers  regular-expression  obfuscation  string  code-challenge  cops-and-robbers  regular-expression  code-golf  kolmogorov-complexity  game  card-games  code-golf  kolmogorov-complexity  code-golf  array-manipulation  matrix  code-challenge  cops-and-robbers  code-challenge  decision-problem  cops-and-robbers  code-golf  permutations 

2
"वास्तविक विभाजन" का अर्थ है कि हमें तैरने का समर्थन करना है?
आउटगॉल्फ

@EriktheOutgolfer उफ़ .. कि मेरी एक पिछली अंकगणितीय चुनौती से नकल की। हटाया गया, और आपके प्रश्न के उत्तर के रूप में, नहीं, आपको केवल पूर्णांकों से निपटना होगा।
केविन क्रूज़सेन

1
मैं एक परीक्षण मामले का सुझाव दूंगा जहां एक सही समीकरण होता है --। उदाहरण के लिए 1991 = 2, -/3 = 3। (कई भाषाएं इसे
परिशोधन

1
समस्या यह है कि 91 19यदि समाधान है 9--9और परीक्षण के मामलों को बनाते समय समाधान के बारे में ज्ञान 9119की 9229आवश्यकता है तो कोई स्थान नहीं जोड़ना है । यदि यह अनुमति दी गई थी, तो मैं केवल स्वैप किए गए वर्णों से पहले केवल एक स्थान जोड़ सकता हूं और समाधान को परीक्षण के मामले से तुरंत निकाला जा सकता है।
nwellnhof 19

1
मूल्यांकन बाएँ-से-ठीक है, या है *और /इससे पहले कि +और बाइनरी -?
22

जवाबों:


5

पर्ल 6 , 132 113 बाइट्स

-19 बाइट्स के लिए जो किंग को धन्यवाद।

->\e,$r {first {($!=e.trans($_=>.flip))ne e&&try "all {$!.&{S:g/\-/- /}} Z==$r".EVAL},[X~] (|^10,|<+ - * />)xx 2}

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

इनपुट समीकरणों का एक अल्पविराम-पृथक स्ट्रिंग और परिणामों का अल्पविराम-पृथक स्ट्रिंग है (आशा है कि यह ठीक है)। आउटपुट एक स्ट्रिंग है जिसमें दो स्वैप किए गए बटन होते हैं।

सही ढंग से संभालता है --। हो सकता है उत्पाद झूठे सकारात्मक के लिए ---, ++, **, या //, लेकिन मैं नहीं अप एक टेस्ट केस के साथ आ सकता है।


आपको संभालना नहीं है ---; ++; **; //; या अन्य चीजें जैसे *+आदि। केवल दोहरे आसन्न गैर-अंकों का आपको समर्थन करना होगा --। इसके अलावा, अगर मैं आपके कोड को सही ढंग से समझता हूं, तो आपको इसकी आवश्यकता नहीं होगी .subst('-','- ', क्योंकि -5--15किसी स्थान के साथ परीक्षण मामले को इनपुट करने की अनुमति है। आप इस स्थान को प्रोग्रामेटिक रूप से जोड़ने के लिए कोड जोड़ने वाले पहले नहीं हैं, इसलिए मैं इसे चुनौती विवरण में अधिक स्पष्ट रूप से निर्दिष्ट करूंगा।
केविन क्रूज़सेन

2
@ केविनक्रूजसेन मुझे चीजों को संभालना पड़ सकता है **क्योंकि उनके पास पर्ल 6 अभिव्यक्तियों के रूप में अर्थ है और गलत सकारात्मकता पैदा कर सकता है। उदाहरण के लिए, या 1992 = 1हो सकता है । उन मामलों के लिए है जिनमें सही समीकरण समाहित है , उदाहरण के लिए आपके द्वारा जोड़े गए नए परीक्षण मामले। 1**2 = 11//2 = 1subst--
nwellnhof

आपका जवाब वर्तमान में बाइट्स के साथ कम से कम एक है, इसलिए मैं इसे अभी के लिए स्वीकार करूंगा। यदि कोई व्यक्ति कुछ छोटा करता है, तो चेक फिर से बदल सकता है।
केविन क्रूज़सेन


11

जावास्क्रिप्ट (ईएस 7), 159 158 बाइट्स

संपादित करें: --@Shaggy के लिए सहेजे गए 1 बाइट के लिए अद्यतन नियमों के अनुपालन के लिए नया संस्करण

करी सिंटैक्स में इनपुट लेता है (e)(r)जहां समीकरणों का सरणी है और आर अपेक्षित परिणाम का सरणी है। वर्णों की एक सरणी देता है।

e=>r=>(l=[...2**29+'4+-*/']).filter(x=>l.some(y=>eval("try{eval((S=(s=`[${e}]`).replace(/./g,c=>c==x?y:c==y?x:c)).split`--`.join`+`)+''==r&S!=s}catch(e){}")))

परीक्षण के मामलों

प्रारूपित और टिप्पणी की गई

e => r =>                                  // given e and r
  (l = [...2 ** 29 + '4+-*/'])             // generate l = [...'5368709124+-*/']
  .filter(x =>                             // for each character x of l
    l.some(y =>                            // for each character y of l
      eval("try {                          // we need to 'try', because we don't know
        eval(                              // whether the following expression is valid
          (S = (s = `[${e}]`).             // s = list of equations coerced to a string
            replace(/./g, c =>             // S =
              c == x ? y : c == y ? x : c  //   s with x and y exchanged
            )                              // end of replace()
          ).split`--`.join`+`              // replace '--' with '+'
        ) + '' == r                        // does the resulting list match r?
        & S != s                           // and was at least one character modified?
      } catch(e){}")                       // if we try, we oughta catch
    )                                      // end of some()
  )                                        // end of filter()

1
मुझे लगता है कि आप एक बाइट को evalआईएनजी से बचा सकते हैं try / catch: codepen.io/anon/pen/rzRrLp
झबरा

@ शगगी आह हां, अच्छा है। धन्यवाद!
अरनुलद

ऐसा लगता है कि यह 139 बाइट्स के लिए काम कर सकता है।
झबरा

हाँ, मैं बस एक पूर्ण परीक्षण सूट चला गया और यह देखा।
झबरा

के लिए काम नहीं करता है 1991 = 2। समाधान के 1--1 = 2साथ 9और -अदला - बदली होनी चाहिए ।
nwellnhof

4

पायथन 2 , 204 , 199 , 193 , 173 , 165 बाइट्स

  • 199 बाइट्स से 193 बाइट्स के लिए मिस्टर एक्सकोड को धन्यवाद
  • 193 बाइट्स से लेकर 173 बाइट्स तक Halvardamm की बदौलत
s=input()
r=str.replace
t=set(''.join(zip(*s)[0]))
for i in t:
 for j in t:
	try:
	 if all(eval(r(r(r(e,i,'$'),j,i),'$',j))==v*(i<j)for e,v in s):print i,j
	except:0

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



@ Mr.Xcoder थैंक्स इस टिप्पणी के लिए, मैं इसे ठीक कर रहा हूँ ..
mdahmoune

1
@ Mr.Xcoder यहाँ का सही संस्करण है
mdahmoune



4

Oracle SQL और PL / SQL, 458 बाइट्स

इनपुट किसी भी उचित प्रारूप में हो सकता है। [...] समीकरणों वाली एक सूची और सही परिणामों के साथ एक अन्य सूची।

PL / SQL फ़ंक्शन (210 बाइट्स) संकलित करें:

CREATE FUNCTION f(x CHAR,y CHAR)RETURN NUMBER IS o NUMBER;BEGIN EXECUTE IMMEDIATE 'BEGIN :1:='||REPLACE(x,'--','- -')||';END;'USING OUT o;RETURN CASE o WHEN y THEN 1 END;EXCEPTION WHEN OTHERS THEN RETURN 0;END;

SQL (248 बाइट्स) चलाएँ:

WITH r(v)AS(SELECT SUBSTR('1234567890-+*/',LEVEL,1)FROM DUAL CONNECT BY LEVEL<15)SELECT r.v,s.v FROM T,r,r s WHERE r.v<>s.v GROUP BY r.v,s.v HAVING SUM(f(TRANSLATE(x,r.v||s.v,s.v||r.v),y))=(SELECT COUNT(1)FROM T)AND SUM(INSTR(x,r.v)+INSTR(x,s.v))>0

Tपरीक्षण डेटा के साथ एक तालिका बनाने के बाद :

CREATE TABLE T(X,Y) AS
  SELECT '123',    3     FROM DUAL UNION ALL
  SELECT '8423',   252   FROM DUAL UNION ALL
  SELECT '4+4',    8     FROM DUAL UNION ALL
  SELECT '4*7-10', 417   FROM DUAL UNION ALL
  SELECT '9/3',    3     FROM DUAL UNION ALL
  SELECT '42-9',   -36   FROM DUAL

आउटपुट:

V V_1
- ---
2 *
* 2

पिछला संस्करण :

जैसे एक स्ट्रिंग इनपुट माना जाता है '123 = 3':

समान PL / SQL फ़ंक्शन और SQL (322 बाइट्स):

WITH r(v)AS(SELECT SUBSTR('1234567890-+*/',LEVEL,1)FROM DUAL CONNECT BY LEVEL<15),y(x,y)AS(SELECT REGEXP_SUBSTR(t,'[^=]+'),REGEXP_SUBSTR(t,'-?\d+$')FROM T)SELECT r.v,s.v FROM y,r,r s WHERE r.v<>s.v GROUP BY r.v,s.v HAVING SUM(f(TRANSLATE(x,r.v||s.v,s.v||r.v),y))=(SELECT COUNT(1)FROM T)AND SUM(INSTR(x,r.v)+INSTR(x,s.v))>0

Tपरीक्षण डेटा के साथ एक तालिका बनाने के बाद :

CREATE TABLE T(T) AS
  SELECT '123    = 3'   FROM DUAL UNION ALL
  SELECT '8423   = 252' FROM DUAL UNION ALL
  SELECT '4+4    = 8'   FROM DUAL UNION ALL
  SELECT '4*7-10 = 417' FROM DUAL UNION ALL
  SELECT '9/3    = 3'   FROM DUAL UNION ALL
  SELECT '42-9   = -36' FROM DUAL;

आउटपुट:

V V_1
- ---
2 *
* 2

अद्यतन - परीक्षण :

एसक्यूएल फिडल

Oracle 11g R2 स्कीमा सेटअप :

CREATE FUNCTION F(x CHAR,y CHAR)RETURN NUMBER IS o NUMBER;BEGIN EXECUTE IMMEDIATE 'BEGIN :1:='||REPLACE(x,'--','- -')||';END;'USING OUT o;RETURN CASE o WHEN y THEN 1 END;EXCEPTION WHEN OTHERS THEN RETURN 0;END;
/

CREATE TABLE A(X,Y) AS
  SELECT '123',    3     FROM DUAL UNION ALL
  SELECT '8423',   252   FROM DUAL UNION ALL
  SELECT '4+4',    8     FROM DUAL UNION ALL
  SELECT '4*7-10', 417   FROM DUAL UNION ALL
  SELECT '9/3',    3     FROM DUAL UNION ALL
  SELECT '42-9',   -36   FROM DUAL
/

CREATE TABLE B(X,Y) AS
  SELECT '4/2',    6     FROM DUAL UNION ALL
  SELECT '3/0',    3     FROM DUAL UNION ALL
  SELECT '0/8+2',  4     FROM DUAL UNION ALL
  SELECT '95-5',   90    FROM DUAL UNION ALL
  SELECT '4+2',    2     FROM DUAL
/

CREATE TABLE C(X,Y) AS
  SELECT '7+4',    11    FROM DUAL UNION ALL
  SELECT '5-15',   46    FROM DUAL UNION ALL
  SELECT '212-23', -2121 FROM DUAL
/

CREATE TABLE D(X,Y) AS
  SELECT '4+8/2-9*1', -5 FROM DUAL UNION ALL
  SELECT '99/3-13',   20 FROM DUAL UNION ALL
  SELECT '1+2+3+4',   10 FROM DUAL UNION ALL
  SELECT '4-3-2-1',   -6 FROM DUAL
/

CREATE TABLE E(X,Y) AS
  SELECT '18/18',  1     FROM DUAL UNION ALL
  SELECT '98-8',   90    FROM DUAL UNION ALL
  SELECT '55*88',  4840  FROM DUAL UNION ALL
  SELECT '-5--15', 10    FROM DUAL
/

CREATE TABLE G(X,Y) AS
  SELECT '9119',    18   FROM DUAL UNION ALL
  SELECT '5-3',     513  FROM DUAL UNION ALL
  SELECT '8*-9',    152  FROM DUAL UNION ALL
  SELECT '13116/3', -1   FROM DUAL
/

क्वेरी 1 :

WITH r(v)AS(SELECT SUBSTR('1234567890-+*/',LEVEL,1)FROM DUAL CONNECT BY LEVEL<15)SELECT r.v,s.v FROM A,r,r s WHERE r.v<>s.v GROUP BY r.v,s.v HAVING SUM(f(TRANSLATE(x,r.v||s.v,s.v||r.v),y))=(SELECT COUNT(1)FROM A)AND SUM(INSTR(x,r.v)+INSTR(x,s.v))>0

परिणाम :

| V | V |
|---|---|
| 2 | * |
| * | 2 |

क्वेरी 2 :

WITH r(v)AS(SELECT SUBSTR('1234567890-+*/',LEVEL,1)FROM DUAL CONNECT BY LEVEL<15)SELECT r.v,s.v FROM B,r,r s WHERE r.v<>s.v GROUP BY r.v,s.v HAVING SUM(f(TRANSLATE(x,r.v||s.v,s.v||r.v),y))=(SELECT COUNT(1)FROM B)AND SUM(INSTR(x,r.v)+INSTR(x,s.v))>0

परिणाम :

| V | V |
|---|---|
| + | / |
| / | + |

प्रश्न 3 :

WITH r(v)AS(SELECT SUBSTR('1234567890-+*/',LEVEL,1)FROM DUAL CONNECT BY LEVEL<15)SELECT r.v,s.v FROM C,r,r s WHERE r.v<>s.v GROUP BY r.v,s.v HAVING SUM(f(TRANSLATE(x,r.v||s.v,s.v||r.v),y))=(SELECT COUNT(1)FROM C)AND SUM(INSTR(x,r.v)+INSTR(x,s.v))>0

परिणाम :

| V | V |
|---|---|
| 1 | - |
| - | 1 |

प्रश्न 4 :

WITH r(v)AS(SELECT SUBSTR('1234567890-+*/',LEVEL,1)FROM DUAL CONNECT BY LEVEL<15)SELECT r.v,s.v FROM D,r,r s WHERE r.v<>s.v GROUP BY r.v,s.v HAVING SUM(f(TRANSLATE(x,r.v||s.v,s.v||r.v),y))=(SELECT COUNT(1)FROM D)AND SUM(INSTR(x,r.v)+INSTR(x,s.v))>0

परिणाम :

| V | V |
|---|---|
| 2 | 4 |
| 4 | 2 |

क्वेरी 5 :

WITH r(v)AS(SELECT SUBSTR('1234567890-+*/',LEVEL,1)FROM DUAL CONNECT BY LEVEL<15)SELECT r.v,s.v FROM E,r,r s WHERE r.v<>s.v GROUP BY r.v,s.v HAVING SUM(f(TRANSLATE(x,r.v||s.v,s.v||r.v),y))=(SELECT COUNT(1)FROM E)AND SUM(INSTR(x,r.v)+INSTR(x,s.v))>0

परिणाम :

| V | V |
|---|---|
| 5 | 8 |
| 8 | 5 |

प्रश्न 6 :

WITH r(v)AS(SELECT SUBSTR('1234567890-+*/',LEVEL,1)FROM DUAL CONNECT BY LEVEL<15)SELECT r.v,s.v FROM G,r,r s WHERE r.v<>s.v GROUP BY r.v,s.v HAVING SUM(f(TRANSLATE(x,r.v||s.v,s.v||r.v),y))=(SELECT COUNT(1)FROM G)AND SUM(INSTR(x,r.v)+INSTR(x,s.v))>0

परिणाम :

| V | V |
|---|---|
| 1 | - |
| - | 1 |

||REPLACE(x,'--','- -')||इनपुट / आउटपुट प्रारूप की कोई आवश्यकता नहीं है, इसलिए आपको इनपुट करने की अनुमति है -5--15जैसे -5- -15आप चाहते हैं। इसके अलावा, सभी परीक्षण मामलों को सत्यापित करने के लिए मेरे लिए सबसे आसान तरीका क्या होगा, विशेष रूप से अंतिम एक? क्या TIO- लिंक किसी तरह संभव है?
केविन क्रूजेसेन

या ||REPLACE(x,'--','- -')||एक सही सही समीकरण के लिए उपयोग किया जाता है, जैसा कि मैंने पिछले परीक्षण मामले में जोड़ा है?
केविन क्रूज़सेन

1
@KevinCruijssen --एसक्यूएल में एक टिप्पणी शुरू करता है, इसलिए या तो परीक्षण मामलों को तैयार करने की आवश्यकता है ताकि --समीकरण (इसे के साथ प्रतिस्थापित - -) में कभी न हो या इसके लिए सैन्यकरण के लिए कुछ रक्षात्मक कोडिंग की आवश्यकता हो।
MT0

इसलिए अंतिम परीक्षण के लिए उस कॉल को हटाने के लिए 13116/3 = -1लिखने की आवश्यकता होगी । 131 16/3 = -1REPLACE
MT0

आह ठीक है, इसलिए प्रतिस्थापित वास्तव में अपेक्षित सही समीकरणों के लिए उपयोग किया जाता है। एसक्यूएल फिडल जोड़ने के लिए धन्यवाद, +1 मुझसे।
केविन क्रूज़सेन

2

पॉवर्सशेल, 222 209 192 बाइट्स

param($x)1..13|%{0..(($i=$_)-1)|%{$a,$b='+-*/0123456789'[$i,$_]
$a+$b|?{!($x|%{$e,$r=$_-split'='
try{$r-(-join$(switch($e|% t*y){$a{$b}$b{$a}default{$_}})-replace'-',' -'|iex)}catch{1}}|gu)}}}

टेस्ट स्क्रिप्ट और स्पष्टीकरण:

$f={

param($x)                               # array of strings with equations
1..13|%{                                #
    0..(($i=$_)-1)|%{                   # $i and $_ contains unique couples of different indecies
        $a,$b='+-*/0123456789'[$i,$_]  # $a and $b contains buttons to swap
        $g=$x|%{                        # for each equation from array
            $e,$r=$_-split'='           # split incorrect expression and correct result
            $e=-join$(switch($e|% t*y){ # swap buttons for each symbol in the expression
                $a{$b}
                $b{$a}
                default{$_}
            })
            $e=$e-replace'-',' -'       # insert a space before each '-'.
                                        # It need to work with negative numbers.
                                        # For example, '4--1' throws an exception, '4 - -1' returns '5'
            try{$r-($e|iex)}catch{1}    # Try to calc $e as powershell expression
                                        # return 0 if the expression result equal to the result of the calculation
                                        # return non zero integer otherwise
        }|gu                            # Get-unique of calculation for each equation
        if(!$g){                        # if $g is 0 or $null
                                        # then all calculations returns true
            $a+$b                       # Ok, return the couple of buttons
        }
    }
}

}

@(
    ,('2*','123=3','8423=252','4+4=8','4*7-10=417','9/3=3','42-9=-36')
    ,('/+','4/2=6','3/0=3','0/8+2=4','95-5=90','4+2=2')
    ,('1-','7+4=11','5-15=46','212-23=-2121')
    ,('42','4+8/2-9*1=-5','99/3-13=20','1+2+3+4=10','4-3-2-1=-6')
    ,('1-','9119=18','5-3=513','8*-9=152','13116/3=-1')
) | % {
    $e,$x=$_
    $r=&$f $x
    "$($e-eq$r): $r : $x"
}

आउटपुट:

True: 2* : 123=3 8423=252 4+4=8 4*7-10=417 9/3=3 42-9=-36
True: /+ : 4/2=6 3/0=3 0/8+2=4 95-5=90 4+2=2
True: 1- : 7+4=11 5-15=46 212-23=-2121
True: 42 : 4+8/2-9*1=-5 99/3-13=20 1+2+3+4=10 4-3-2-1=-6
True: 1- : 9119=18 5-3=513 8*-9=152 13116/3=-1

0

05AB1E , 21 बाइट्स

SÙãʒË_}ʒ¹s‡„--'+:.EQ

दो सूचियों के रूप में इनपुट, पहला समीकरण और दूसरा परिणाम। दोनों रोटेशन (यानी [["2","*"],["*","2"]]) के साथ जोड़े की एक फ़िल्टर्ड सूची के रूप में आउटपुट ।

इसे ऑनलाइन आज़माएं या सभी परीक्षण मामलों को सत्यापित करें । (नोट: TIO में 05AB1E की विरासत संस्करण का उपयोग करता है, क्योंकि .ETIO पर नए संस्करण में अक्षम है। इस वजह से, एक अतिरिक्त ï(पूर्णांक के लिए) जोड़ा गया है, क्योंकि 05AB1E 1.0और 1अंदर सूचियों के विरासत संस्करण में समान नहीं थे। ।)

स्पष्टीकरण:

S              # Convert the (implicit) input-list of equations to a list of characters
               # (which implicitly flattens)
               #  i.e. ["18/18","98-8","55*88","-5--15"]
               #   → ["1","8","/","1","8","9","8","-","8","5","5","*","8","8","-","5","-","-","1","5"]
 Ù             # Only leave all unique characters
               #  → ["1","8","/","9","-","5","*"]
  ã            # Cartesian product with itself; creating each possible pair of characters
               #  → [["1","1"],["1","8"],["1","/"],["1","9"],["1","-"],["1","5"],["1","*"],["8","1"],["8","8"],["8","/"],["8","9"],["8","-"],["8","5"],["8","*"],["/","1"],["/","8"],["/","/"],["/","9"],["/","-"],["/","5"],["/","*"],["9","1"],["9","8"],["9","/"],["9","9"],["9","-"],["9","5"],["9","*"],["-","1"],["-","8"],["-","/"],["-","9"],["-","-"],["-","5"],["-","*"],["5","1"],["5","8"],["5","/"],["5","9"],["5","-"],["5","5"],["5","*"],["*","1"],["*","8"],["*","/"],["*","9"],["*","-"],["*","5"],["*","*"]]
    ʒ  }       # Filter it by:
     Ë_        #  Where both characters are unique
               #   i.e. → [["1","8"],["1","/"],["1","9"],["1","-"],["1","5"],["1","*"],["8","1"],["8","/"],["8","9"],["8","-"],["8","5"],["8","*"],["/","1"],["/","8"],["/","9"],["/","-"],["/","5"],["/","*"],["9","1"],["9","8"],["9","/"],["9","-"],["9","5"],["9","*"],["-","1"],["-","8"],["-","/"],["-","9"],["-","5"],["-","*"],["5","1"],["5","8"],["5","/"],["5","9"],["5","-"],["5","*"],["*","1"],["*","8"],["*","/"],["*","9"],["*","-"],["*","5"]]
    ʒ          # Then filter the pairs again by:
     ¹         #  Push the first input-list with equations
      s        #  Swap to take the pair we're filtering
       Â       #  Bifurcate it (short for Duplicate and Reverse)
              #  Transliterate; replacing the characters at the same indices in the input-list
               #   i.e. ["18/18","98-8","55*88","-5--15"] and ["8","5"]
               #    → ["15/15","95-5","88*55","-8--18"]
               #   i.e. ["9119","5-3","8*-9","13116/3"] and ["1","-"]
               #    → ["9--9","513","8*19","-3--6/3"]
      „--'+:  '#  Then replace all "--" with a "+"
               #   → ["15/15","95-5","88*55","-8+18"]
               #   → ["9+9","513","8*19","-3+6/3"]
      .E       #  And evaluate the strings with Python eval
               #   → [1.0,90,4840,10]
               #   → [18,513,152,-1.0]
        Q      #  And then check if this evaluated list is equal to the (implicit) second input
               #   i.e. [1.0,90,4840,10] and [1,90,4840,10] → 1 (truthy)
               #   i.e. [18,513,152,-1.0] and [18,513,152,-1] → 1 (truthy)
               # (and output the result implicitly)
               #   i.e. [["8","5"],["5","8"]
               #   i.e. [["1","-"],["-","1"]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.