मैनहट्टन में गणित


12

मैं निम्नलिखित ऑपरेटरों को परिभाषित करता हूं:

मैनहट्टन का जोड़ + M- b, एकल-अंकीय संख्याओं के लिए, a पर बी को समाप्‍त करने का परिणाम है। तो, एक + एम बी = 10 ए + बी। इसलिए, सामान्य ऑपरेटर + M को इस प्रकार परिभाषित किया गया है:

ए + एम बी = 10 ए + बी

मैनहट्टन घटाव ए - एम बी, एकल अंकों की संख्या के लिए, अंतिम बी को ए से हटाने का परिणाम है। इसलिए, ऑपरेटर - एम को छद्मकोश में इस प्रकार परिभाषित किया गया है:

a - M b = a last last b

मैनहट्टन गुणन a × M b, b के सभी उदाहरणों को b के b उदाहरणों के साथ प्रतिस्थापित करने का परिणाम है। एर्गो, × एम को छद्मकोड में परिभाषित किया गया है:

a × M b = a -> s / b / <b b / / g की प्रतियां

मैनहट्टन डिवीजन ÷ M b को × M के संदर्भ में परिभाषित किया गया है :

1 1 एम बी = बी का पहला चरित्र
a M b = a × M (1 ÷ M b)

इन सब बातों को ध्यान में रखते हुए, एक दुभाषिया बनाएं जो कि इनफ़िक्स भावों का मूल्यांकन करेगा जो निम्नलिखित ऑपरेटरों का उपयोग करते हैं (जैसे, या a + bनहीं )a b ++ a b

+    Addition
-    Subtraction
/    Division
*    Multiplication
*M   Manhattan Multiplication
/M   Manhattan Division
+M   Manhattan Addition
-M   Manhattan Subtraction

प्रत्येक मैनहट्टन ऑपरेटर के पास अपने सामान्य समकक्ष की तुलना में उच्च क्रम की मिसाल है।

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

> 5 +M 10 + 3
63      // 5*10 + 10 + 3 => 60 + 3
> 10 *M 2
10      // no 2s in 10
> 10 *M 1
10      // one 1 in 10 replaced once
> 23 *M 3
2333    // 23 has one 3, which is replaced with three 3s
> 23 *M 2
223     // 23 has one 2, which is replaced with two 2s
> 232 *M 2
22322   // 232 has two 2s, which are replaced with two 2s
> 232 *M 23
23...(23 times)...232   // ...
> 123 *M 2 * 3
3669    // 1223 * 3 => 3669
> 5 + 3 +M 2
37      // 5 + (3 +M 2) => 5 + 32 => 37
> 150 /M 3
150     // 150 ÷M 3 => 150 ×M 3 => 150
> 150 /M 53
1555550 // 150 ÷M 53 => 150 ×M 5 => 1555550
> 50 -M 0
5
> 500 -M 0
50
> 5234 -M 5
234
> 12 +M 633 *M 3
6333453 // = 12 +M 6333333 = 120 + 6333333 = 6333453

यह एक , इसलिए बाइट्स में सबसे छोटा कार्यक्रम जीत जाता है।

लीडरबोर्ड

यहां एक नियमित लीडरबोर्ड और भाषा के अनुसार विजेताओं का अवलोकन करने के लिए एक स्टैक स्निपेट है।

यह सुनिश्चित करने के लिए कि आपका उत्तर दिखाई दे रहा है, कृपया अपना उत्तर शीर्षक मार्कडाउन टेम्पलेट का उपयोग करके शीर्षक के साथ शुरू करें:

# Language Name, N bytes

Nआपके प्रस्तुत करने का आकार कहां है। यदि आप अपने स्कोर में सुधार करते हैं, तो आप पुराने अंकों को हेडलाइन में रख सकते हैं , उनके माध्यम से स्ट्राइक करके। उदाहरण के लिए:

# Ruby, <s>104</s> <s>101</s> 96 bytes

यदि आप अपने हेडर में कई संख्याओं को शामिल करना चाहते हैं (जैसे कि आपका स्कोर दो फ़ाइलों का योग है या आप दुभाषिया ध्वज दंड को अलग से सूचीबद्ध करना चाहते हैं), तो सुनिश्चित करें कि हेडर में वास्तविक स्कोर अंतिम संख्या है:

# Perl, 43 + 2 (-p flag) = 45 bytes

आप भाषा के नाम को एक लिंक भी बना सकते हैं जो लीडरबोर्ड स्निपेट में दिखाई देगा:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes


13
आप यूनिकोड प्रतीकों का उपयोग क्यों कर रहे हैं ×और ÷एएससीआईआई के बजाय *और /?
ASCIIThenANSI

1
232 ×M 23बराबर क्यों करता है 23232? यह 23एक के बाद 23 प्रतियां के बराबर नहीं होना चाहिए 2?
सेंसहिन

1
@ASCIIThenANSI मैं देख सकता हूं कि आपने ऐसा क्यों पूछा। चुनाव मनमाना है। जब तक कि मेरी पसंद के साथ कुछ दबाने वाला मुद्दा नहीं है, मुझे नहीं लगता कि मैं इसे बदलूंगा।
कॉनर ओ'ब्रायन

4
यदि यह यूनिकोड के बारे में चुनौती नहीं है, तो भाग लेने के लिए यह अच्छा यूनिकोड समर्थन के बिना भाषाओं के लिए कठिन है, जो बहुत मजेदार नहीं है।
लिन

2
इस प्रश्न पर पर्याप्त ध्यान नहीं दिया गया है क्योंकि यह अच्छी तरह से निर्दिष्ट नहीं है। आप sngle अंको की संख्याओं को जोड़ते हैं, तो आपके पहले उदाहरण में 2 अंको की संख्या होती है। मैं हार गया ...
edc65

जवाबों:


5

डायलॉग एपीएल , 104 81 79 93 75 बाइट्स

संपादित करें: अब संभालती है 4342343 -M 3443423सही ढंग से।

M←{⍎(5|⌊⍺⍺2)⊃'⍺×M⍣(⍺≠1)⍎⊃b'(b⎕R(⍵⍴'&')⊢a)'10⊥⍺⍵'(('(.*)',b←⍕⍵)⎕R'\1'⊢a←⍕⍺)}

पृष्ठभूमि

यह मैनहट्टन ऑपरेटर को शामिल करने के लिए APL का विस्तार करता है। एपीएल शब्दावली में एक ऑपरेटर कार्यों का एक संशोधक (जैसे ÷) है। एक ऑपरेटर का एक उदाहरण है जो अपने तर्कों को बदलने के लिए कार्यों को संशोधित करता है 3 = 2 ÷⍨ 6। इसलिए भी, Mबुनियादी अंकगणितीय कार्यों को उनके मैनहट्टन रिश्तेदारों को संशोधित करता है। ध्यान दें कि चूंकि परिणामी भाषा एपीएल का विस्तार है, इसलिए एपीएल की सख्त दाईं-बाईं प्राथमिकता बनी हुई है।

व्याख्या

व्यापक संरचना है M←{⍎(5|⌊⍺⍺2)⊃... }(समारोह लागू होता है +या -या ×या ÷) 2 करने के लिए और जो स्ट्रिंग का मूल्यांकन करने के लिए चुना है के लिए परिणाम उपयोग करता है। तार हैं:

: -M के लिए 3 (('(.*)',b←⍕⍵)⎕R'\1'⊢a←⍕⍺)
 regex निकालने के अंतिम घटना में (स्ट्रिंग प्रतिनिधि सही आर्ग की।।) एक (स्ट्रिंग प्रतिनिधि बाईं आर्ग की।।)

2 के लिए + M: '10⊥⍺⍵'
 आधार -10 अंकों के रूप में तर्कों का मूल्यांकन करें

× M के लिए 1: b की(b⎕R(⍵⍴'&')⊢a)
 घटनाओं को b ampersands (यानी regex के साथ बदलें)

M के लिए 0: b'⍺×M⍣(⍺≠1)⍎⊃b'
⍎⊃b का पहला अंक if × M लागू करें यदि:: 1
⍺×M⍣(⍺≠1)

उपरोक्त चार तारों में से, संख्या चुनें:

(5|⌊⍺⍺2)फ़ंक्शन के तल के mod-5 को 2 पर लागू किया गया, अर्थात्:
 3 = 5 | ⌊-2
 2 = 5 | ⌊+2
 1 = 5 | ⌊×2क्योंकि × 2 ⇔ sgn (2) 2 1
 0 = 5 | ⌊÷2क्योंकि ⇔ 2 ÷ 1 ⇔ 2 ⇔ 0.5

अद्भुत छीलन के लिए मेरे प्यारे दोस्त नगन को बहुत-बहुत धन्यवाद।


1
यह ठीक है। यह वही है जो मैंने चाहा था।
कॉनर ओ'ब्रायन

महान, मैं पोस्ट को संपादित करूंगा।
अदम

@ C @O'Bʀɪᴇɴ मैं बोनस पर हार सकता था, लेकिन यह निश्चित है कि अब सबसे कम है।
आदम

उफ़, इस एक के बारे में भूल गया।
कॉनर ओ'ब्रायन

@ C @O'Bʀɪᴇɴ भूल गए? मैंने आज ही इसे संपादित किया है, इसे स्वीकार किए गए की तुलना में छोटा बनाता है।
20

12

पर्ल, 100 99 98 बाइट्स

97 बाइट्स कोड + 1 बाइट कमांड लाइन

s/ |.*\K(\d)(\d*)-M\1|\+M/\2/g+s/(\d+)\*M(.)/$1=~s@$2@$&x$&@erg/e+s#/(M.)\d+#*\1#&&redo,$\=eval}{

उपयोग उदाहरण:

echo "123 *M 2 * 3 + 150 /M 53" | perl -p entry.pl

यह अपने कोड में कम करता है, तो आप केवल उपयोग करने के लिए *Mके लिए xMऔर /Mके लिए <div>M
कॉनर ओ'ब्रायन

इनाम पर बधाई!
कॉनर ओ'ब्रायन

7

पायथन, 644 बाइट्स

import operator as o,re
x,q,t,r,w='*/+-M';mm,md,ma,ms='*M /M +M -M'.split()
n=lambda x:x
a=lambda a,b:str(10*int(a)+int(b))
v=lambda a,b:a[::-1].replace(b,'',1)[::-1]
m=lambda a,b:a.replace(b,b*int(b))
d=lambda a,b:m(a,b[0])if a>0 else b[0]
def p(s):s=s.group();ss=s.split();l=s.split(ss[1]);h={mm:m,md:d,ma:a,ms:v,x:o.mul,q:o.div,t:o.add,r:o.sub}.get(ss[1],n);return str(h(*map(int if h in[o.mul,o.div,o.add,o.sub]else n,map(u,map(str.strip,l)))))
def u(s):z=r'\d+ (?:\{0}{2}|\{1}{2}) \d+';return re.sub(z.format(t,r,''),p,re.sub(z.format(t,r,w),p,re.sub(z.format(x,q,''),p,re.sub(z.format(x,q,w),p,re.sub(r'\((.*)\)',u,s)))))
print u(input())

STDIN (उद्धरण चिह्नों में लिपटे) पर इनपुट स्वीकार करता है। मैच और पार्स संचालन के लिए रेगेक्स का उपयोग करता है। सभी कार्य स्ट्रिंग्स पर किए जाते हैं, और सामान्य गणितीय कार्यों को करते समय और अंदर से कास्टिंग का उपयोग किया जाता है।

मुझे पूरा यकीन है कि इसे और आगे बढ़ाया जा सकता है, इसलिए मैं अगले कुछ दिनों में इस पर काम करूंगा।


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