ম্যানহাটনে গণিত


12

আমি নিম্নলিখিত অপারেটরগুলি সংজ্ঞায়িত করি:

একক-অঙ্কের সংখ্যার জন্য ম্যানহাটনের সংযোজন a + এম বি, একটিতে বি-তে কনটেনেটিংয়ের ফলাফল। সুতরাং, একটি + এম বি = 10 এ + বি। সুতরাং, সাধারণ অপারেটর + এম এভাবে সংজ্ঞায়িত করা হয়:

a + M b = 10a + b

ম্যানহাটান বিয়োগ a - এম বি, একক-সংখ্যার জন্য, শেষ খ কে a থেকে সরিয়ে ফেলার ফলাফল। সুতরাং, অপারেটর - এম সিউডোকোডে এভাবে সংজ্ঞায়িত করা হয়েছে:

a - M b = একটি অপসারণ শেষ খ

ম্যানহাটনের বহুগুণ a × M b হ'ল b এর সমস্ত দৃষ্টান্ত b এর উদাহরণের সাথে প্রতিস্থাপনের ফলাফল। এরগো, × এম সিউডোকোড হিসাবে সংজ্ঞায়িত করা হয়:

a × M b = a -> s / b / <b টি কপি </ b> g

ম্যানহাটন বিভাগ একটি ÷ এম বি × এম এর শর্তে সংজ্ঞায়িত করা হয়েছে :

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
কেন তুমি ইউনিকোড প্রতীক ব্যবহার করা হয় ×এবং ÷হওয়া ASCII পরিবর্তে *এবং /?
ASCIIThenANSI

1
232 ×M 23সমান হয় কেন 23232? এটি 23 টির 23পরে ক এর সমান হওয়া উচিত না 2?
সেনশিন

1
আপনি কেন এটি জিজ্ঞাসা করেছেন তা আমি দেখতে পারি that পছন্দটি নির্বিচারে। আমার পছন্দের বিষয়ে যদি কিছু টিপুন সমস্যা থাকে তবে আমি মনে করি না যে আমি এটি পরিবর্তন করব।
কনর ও'ব্রায়েন

4
এটি ইউনিকোডের পক্ষে ভাল ইউনিকোড সমর্থন না করে ভাষা নির্বিচারে শক্ত করে তোলে, যা খুব মজাদার নয়, যদি চ্যালেঞ্জটি ইউনিকোড সম্পর্কে না হয় ।
লিন 21

2
এই প্রশ্নটি যথেষ্ট মনোযোগ পায়নি কারণ সঠিকভাবে নির্দিষ্ট করা হয়নি। আপনি সংক্ষিপ্ত অঙ্কের সংখ্যার জন্য সংযোজনটি সংজ্ঞায়িত করেন, তারপরে আপনার প্রথম উদাহরণে 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←⍕⍺)}

পটভূমি

এটি ম্যানহাটন অপারেটরকে অন্তর্ভুক্ত করতে এপিএল বাড়িয়েছে। এপিএল পরিভাষায় একটি অপারেটর ফাংশনগুলির একটি সংশোধক (যেমন ÷) eg অপারেটরের একটি উদাহরণ যা তাদের তর্কগুলি যাতে অদলবদল করতে ফাংশনগুলিকে পরিবর্তন করে 3 = 2 ÷⍨ 6। এছাড়াও, Mতাদের ম্যানহাটনের আত্মীয় হতে প্রাথমিক গাণিতিক ক্রিয়াকে সংশোধন করে। নোট করুন যেহেতু ফলস্বরূপ ভাষাটি এপিএল একটি বর্ধিত, এপিএল-এর কঠোর ডান থেকে বাম অগ্রাধিকার রয়ে গেছে।

ব্যাখ্যা

সর্বোচ্চ কাঠামো M←{⍎(5|⌊⍺⍺2)⊃... }(ফাংশন প্রযোজ্য যা +বা -বা ×বা ÷) 2 এবং যা স্ট্রিং নির্ণয় করা বেছে নিতে আগ্রহী ফলাফলের ব্যবহার করে। স্ট্রিংগুলি হ'ল:

: -M 3 (('(.*)',b←⍕⍵)⎕R'\1'⊢a←⍕⍺)
 Regex অপসারণ শেষ সংঘটন মধ্যে (STRING প্রতিনিধির অধিকার ARG করুন।।) একটি (STRING প্রতিনিধির বাম ARG করুন।।)

2 + এম এর জন্য: '10⊥⍺⍵'
 আর্গুমেন্টগুলি বেস -10 অঙ্ক হিসাবে মূল্যায়ন করুন

1 মিমি জন্য: বি এর(b⎕R(⍵⍴'&')⊢a)
 সংঘটনগুলি বি- এম্পারস্যান্ডগুলির সাথে প্রতিস্থাপন করুন (অর্থাত্ এর জন্য রেজেেক্স)

0 ÷ এম এর জন্য: খ এর'⍺×M⍣(⍺≠1)⍎⊃b'
⍎⊃b প্রথম সংখ্যাটি প্রয়োগ করুন ⍺ × এম যদি ⍺ ≠ 1 হয়
⍺×M⍣(⍺≠1)

উপরের চারটি স্ট্রিংয়ের মধ্যে, নম্বরটি বেছে নিন:

(5|⌊⍺⍺2)ফাংশনের মেঝেটির Mod-5 2 তে প্রয়োগ হয়েছে, যথা:
 3 = 5 | ⌊-2
 2 = 5 | ⌊+2
 1 = 5 | ⌊×2কারণ × 2 ⇔ sgn (2) ⇔ 1
 0 = 5 | ⌊÷2কারণ ÷ 2 ⇔ 1 ÷ 2 ⇔ 0.5

আশ্চর্যজনক ছাঁটাইয়ের জন্য আমার প্রিয় বন্ধু এনএনগিকে প্রচুর ধন্যবাদ।


1
্রফ. আমি যা চেয়েছিলাম তা এটি ফিট করে।
কনর ও'ব্রায়েন

দুর্দান্ত, আমি তখন পোস্টটি সম্পাদনা করব।
অ্যাডম

@ CᴏɴᴏʀO'Bʀɪᴇɴ আমি বোনাস থেকে হারিয়ে যেতে পারি, তবে এটি এখনই সবচেয়ে সংক্ষিপ্ত।
অ্যাডম

উফ, এই সম্পর্কে ভুলে গেছি
কনর ও'ব্রায়ান

@ CᴏɴᴏʀO'Bʀɪᴇɴ ভুলে গেছেন? আমি আজই সম্পাদনা করেছি, এটি গ্রহণযোগ্যটির চেয়ে ছোট করে তুলছি।
অ্যাডম

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
আরকে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.