আর [ওমান | evers] পোলিশ স্বরলিপি


11

এটি এমন এক বছরের এমডিএলএক্সভিআইভিআই বছর যেখানে রোমান সাম্রাজ্য কখনই পতিত হয়নি এবং অন্ধকার যুগে কখনও পতিত হয়নি। প্যাক্স রোমানার বর্ধিত সময়কালের কারণে, সাম্রাজ্যের অর্থনৈতিক স্থিতিশীলতা দ্রুত হারে প্রযুক্তির উন্নতি করতে সক্ষম করেছিল।

রোমানরা সার্কিটরি নিয়ে ছলছল করা শুরু করেছে এবং এমন একটি কল্পিত ক্যালকুলেটর আবিষ্কার করেছে যার জন্য "সমান" বোতাম ব্যবহারের প্রয়োজন হয় না। তারা এটিকে "রোমান পোলিশ স্বরলিপি" বলে ডাকে

একটি গণনা করতে, তারা প্রথমে তাদের ক্রিয়াকলাপগুলি প্রবেশ করে, তারপরে অপারেশন।

উদাহরণস্বরূপ, 100 + 11 * 20 হবে C XI XX * +

উপরন্তু

রোমানরা খুঁজে পেয়েছে যে তাদের প্রায়শই একই সময়ে একাধিক গণনা করা প্রয়োজন, এবং পদ্ধতিটি পছন্দ করে প্রতিটি স্তরের "স্ট্যাকের" কোনও ধরণের অ্যারে / তালিকা / টুপলের মতো কাঠামোতে ফেরত দেওয়া। (যেমন X I + X I - CC II +[11, 9, 202] ফিরে আসবে)


চ্যালেঞ্জ হ'ল এই গণনা তৈরি করতে সক্ষম একটি ক্যালকুলেটর প্রোগ্রাম বিকাশ করা।

স্পষ্টকরণ : বিয়োগফল চিহ্নিতকরণ প্রয়োজন Not আমি বুঝতে পারি নি যে এটি প্রাচীন রোমান সাম্রাজ্যের কোনও বৈশিষ্ট্য নয়। কাজটি তাই অস্পষ্ট ছিল, এবং আমি ক্ষমা চেয়ে নিচ্ছি।

ন্যূনতম নির্দেশিকা

  • আপনার আউটপুট আরবি সংখ্যায় হবে।
  • আপনার কেবলমাত্র রোমান অঙ্ক থেকে 5000 এ রূপান্তর করতে হবে।
  • আপনাকে +, -, /, * ক্রিয়াকলাপগুলি সমর্থন করতে হবে (সংযোজন, বিয়োগ, ভাগ এবং গুণ)।
  • বিভাগটি ভাসমান পয়েন্ট ভিত্তিক বা পূর্ণসংখ্য ভিত্তিক বাস্তবায়ন নির্দিষ্ট Whether হয় এই চ্যালেঞ্জ জন্য কাজ করে।
  • আপনার আউটপুট 4 বিলিয়ন পর্যন্ত সংখ্যা সমর্থন করা প্রয়োজন।
  • সংক্ষিপ্ত উত্তর সামগ্রিকভাবে এবং প্রতিটি ভাষায় জয়ী হয়। এটি একটি কোড গল্ফ চ্যালেঞ্জ তবে আমি বিভিন্নটি পছন্দ করি।

টাই হওয়ার ক্ষেত্রে 5000 এর উপরে রোমান সংখ্যার জন্য সমর্থন বা অতিরিক্ত ক্রিয়াকলাপগুলিকে প্রাথমিকতম জমা দেওয়ার বিষয়টি বিবেচনা করা হবে।


1
স্ট্রিংগুলির তালিকা হিসাবে আমরা কী ইনপুট নিতে পারি, প্রত্যেকেরই রয়েছে রোমান নম্বর বা অপারেটর?
ব্যবহারকারী 202729

ইনপুট ছোট হাতের মধ্যে নেওয়া যেতে পারে, বা এটি বড় হাতের হতে হবে?
dzaima

1
@ জেসিডানিয়েলমিশেল একটি দ্রষ্টব্য হিসাবে ... নিয়ম পরিবর্তন না করার এবং বিদ্যমান উত্তরগুলিকে অকার্যকর করার চেষ্টা করুন । এছাড়াও, (যথারীতি) আমি স্যান্ডবক্সে পোস্ট করার পরামর্শ দিই ।
ব্যবহারকারী 202729

উত্তর:


6

পাইথন 2 + রোমান , 118 বাইট

from roman import*
s=[]
for i in input().split():s+=[eval(s.pop(-2)+i+s.pop())if i in"+-/*"else`fromRoman(i)`]
print s

ডেমো

এটি মডিউলটি ব্যবহার করে বলে এটি অনলাইনে পরীক্ষা করা যায় না, তবে আপনি দেখতে পাবেন কীভাবে এখানে এটি চালানো যায় (একটি সম্পূর্ণ প্রোগ্রাম এসটিডিআইএন থেকে ইনপুট গ্রহণ করে - কোটস সহ একটি এক্সপ্রেশন - এবং আউটপুটটি এসটিডিআউট-এ মুদ্রণ - তালিকার আকারে) , স্ট্যাক)। কিছুটা পুরানো সংস্করণ ব্যবহার করুন, কারণ আমি কেবল কয়েকটি বাইটের জন্য একটি নতুন জিআইএফ তৈরি করতে বিরক্ত করব না:

ডেমো জিআইএফ

প্যাকেজটি ইনস্টল করতে, আপনি টার্মিনাল / কমান্ড লাইনে নিম্নলিখিতটি চালাতে পারেন:

pip install roman

2
pyTester/Py.pyಠ_ಠ
সম্পূর্ণরূপে

@ টোটালিহুমান এটি কেবল একটি ডামি প্রকল্প যা আমি এই জন্য তৈরি করেছি ...
মিঃ এক্সকোডার

6

হাস্কেল , 217 বাইট

-13 বাইট ব্রুস ফোর্টের ধন্যবাদ। -73 বাইট ধন্যবাদ আর্জন জোহানসেনকে।

foldl(!)[].words
s@ ~(x:y:z)!n=last$(a n:s):[y`f`x:z|(f,c)<-zip[(+),(-),(*),(/)]"+-*/",n==[c]]
a s=last$0:[n+a(drop(length x)s)|(n,x)<-zip l$words"I IV V IX X XL L XC C CD D CM M",x<=s,x++"Y">s]
l=[1,4,5,9]++map(10*)l

এটি অনলাইন চেষ্টা করুন!

ম্যানুয়াল বাস্তবায়ন, হ্যাঁ!



1
পাইথনটিও কেটে গেল। তবে যদি তার যুক্তি যে বিয়োগাত্মক স্বরলিপিটি সমর্থন করার দরকার নেই তা যদি সমর্থন করে তবে এখানেও বেশি সঞ্চয় রয়েছে।
janrjan জোহানসেন

1
যে কোনও ক্ষেত্রে, আরও 3 বাইট বন্ধ রয়েছে l=1:4:5:9:map(10*)l
ბიმო

আমি একবারে রোমান সংখ্যা রূপান্তর করার জন্য খুঁজে পেয়েছিলাম এমন একটি অবশিষ্ট কৌশলটি স্মরণ করেছি, যা স্বয়ংক্রিয়ভাবে বিয়োগের যত্ন নেয়। এটি অনলাইন চেষ্টা করুন!
janrjan জোহানসেন


2

জাভাস্ক্রিপ্ট (নোড) + + রোমানস্ + + stk-ল্যাঙ , 74 বাইট

s=>(R=require)("stk-lang")(s.replace(/\w+/g,R("romans").deromanize)).stack

বিগেইনগারদের একটি তালিকা ফেরত দেয়।

ফাঁসি

নিম্নলিখিত চালান:

npm install romans
npm install stk-lang
node

তারপরে ফাংশনটি পেস্ট করুন। উদাহরণ:

C:\Users\conorob\Programming\golf-new\roman
λ npm install romans
npm WARN saveError ENOENT: no such file or directory, open 'C:\Users\conorob\Programming\package.json'
npm WARN enoent ENOENT: no such file or directory, open 'C:\Users\conorob\Programming\package.json'
npm WARN Programming No description
npm WARN Programming No repository field.
npm WARN Programming No README data
npm WARN Programming No license field.

+ romans@1.0.0
added 1 package in 0.801s

C:\Users\conorob\Programming\golf-new\roman
λ npm install stk-lang
npm WARN saveError ENOENT: no such file or directory, open 'C:\Users\conorob\Programming\package.json'
npm WARN enoent ENOENT: no such file or directory, open 'C:\Users\conorob\Programming\package.json'
npm WARN Programming No description
npm WARN Programming No repository field.
npm WARN Programming No README data
npm WARN Programming No license field.

+ stk-lang@1.0.0
added 1 package in 0.847s

C:\Users\conorob\Programming\golf-new\roman
λ node
> s=>(R=require)("stk-lang")(s.replace(/\w+/g,R("romans").deromanize)).stack
[Function]
> f=_
[Function]
> f("X I + X I - CC II +").map(e => e.toString())
[ '11', '9', '202' ]
> f("C XI XX * +").map(e => e.toString())
[ '320' ]
> f("MMMM M I - +").map(e => e.toString())
[ '4999' ]

প্রম্পট হিসাবে কত লোক ল্যাম্বডা ব্যবহার করেন?
স্টান স্ট্রাম

@ স্ট্যানস্ট্রুম আমার পছন্দ হয়েছে, এবং এটি সেমিডারের
কনর ও'ব্রায়ান

তা জানতাম না। Guess আমি থেকে কখনোই বিচ্যুত করে থাকেন $এবং >। সত্যি বলতে, আমি এটি পছন্দ করি
স্ট্যান স্ট্রাম

2

ডায়ালগ এপিএল , 93 বাইট

CY'dfns'
a←⍬⋄{0::{a,←⍵}roman⍵⋄f←⍎'+-÷×'⌷⍨'+-/*'⍳⍵⋄rf2aa↓⍨←¯2a,←r}¨{1↓¨⍵⊂⍨⍵∊' '}' ',⍞⋄a

এটি অনলাইন চেষ্টা করুন!

রোমান অন্তর্নির্মিত ছাড়া 116 বাইট



@ Zachary এটা একমাত্র উপায় আমি তার dfns পরিধি একটি পরিবর্তনশীল আউট পরিবর্তন করতে জানি, তাই এটি ছিল এখানে ব্যবহার করা হয়।
dzaima

আমার অজ্ঞতা ক্ষমা করুন, তবে পরিবর্তিত দায়িত্ব কি?
কেয়ার্ড কোইনারিংহিংহিং

@ কেয়ারডকোইনরিঙ্গিং var fn←arr- এটি সমতুল্য var ← var fn arr। এখানে এটি একাধিক স্থানে ব্যবহৃত হয়েছে, a,←⍵যা ভেরিয়েবলের সাথে যুক্ত হয়a
জাই 1'18

1

পাইথন 3 , 280 206 বাইট

N=dict(I=1,V=5,X=10,L=50,C=100,D=500,M=1000)
def d(s):
	n=0
	for v in map(N.get,s):n+=v-n%v*2
	return n
def c(w):
	s=[]
	for t in w.split():s+=[str(d(t)if t[0]in N else eval(s.pop(-2)+t+s.pop()))]
	return s

এটি অনলাইন চেষ্টা করুন!

এবার সাবটেক্টিভ স্বরলিপি সমর্থন সহ। পদ্ধতিটি cমূল প্রবেশের পয়েন্ট; অন্যটি সমর্থন।

লগ সম্পাদনা করুন:


আপনার পরে ifএবং পরে ইন্ডেন্টেশন ব্লকের দরকার নেই else
janrjan জোহানসেন

আসলে, আমি আপনাকে একবার এই কৌশলটি অফার করে দেখি:n+=v-n%v*2
janrjan জোহানসেন

1
আপনি দুটি strব্যবহার একত্রিত করতে পারেন । এটি অনলাইন চেষ্টা করুন!
janrjan জোহানসেন

0

জাভাস্কিপ্ট (ES6), 152 151 বাইট

ব্যবহারকারী 202729 ধন্যবাদ 1 বাইট সংরক্ষণ করা

p=>p.split` `.map(c=>s.push(eval("+-/*".indexOf(c)+1?(T=s.pop(),s.pop())+c+T:c.replace(/./g,c=>"+"+{I:1,V:5,X:10,L:50,C:100,D:500,M:1e3}[c]))),s=[])&&s

পরীক্ষার মামলা

ব্যাখ্যা (কম গল্ফড)

V={I:1,V:5,X:10,L:50,C:100,D:500,M:1e3}     // Values of the roman numerals
p=>(
 s=[],                                      // Initialize the stack
 p.split` `.map(c=>                         // For every part in the input:
  "+-/*".indexOf(c)+1?                      //   If the input is an operator:
   s.push(eval((T=s.pop(),s.pop())+c+T))    //     Evaluate the operator on the top of the stack
  :                                         //   Else (if it is a roman numeral):
   s.push(eval(c.replace(/./g,c=>"+"+V[c])))//     Push the sum of the characters' values
 ),s)                                       // return the stack

আমি নিশ্চিত যে 1e3এটিও কাজ করে এবং কিছু বাইট সংরক্ষণ করে।
ব্যবহারকারী 202729

0

জেলি , 82 বাইট

ị“+-×÷”;”/v®ṫ-¤®ṖṖ¤;©
4Ḷ⁵*p1,5P€
“IVXLCDM”iЀị¢µIN‘Ṡæ.µ®;©
Ḳµ“+-*/”W€i⁸Ñ⁸Ǥ¹?µ€ṛ®Ḋ

এটি অনলাইন চেষ্টা করুন!

মূলত চ্যাট পোস্ট


ব্যাখ্যা:

জেলি স্ট্যাক না থাকায় আমি স্ট্যাকটি রেজিস্টারে রেখেছি।

প্রোগ্রামটি শুরু হওয়ার সাথে সাথে নিবন্ধকের মান ®হ'ল 0যা [0]এই প্রোগ্রামের উদ্দেশ্যে বিবেচিত হয় ।


ị“+-×÷”;”/v®ṫ-¤®ṖṖ¤;©       Link 1: Given an operator index (an
                            integer in range 1..4), apply it.

ị“+-×÷”                     Index to the string "+-×÷"
       ;”/                  Concatenate with the character "/",
                            which is Jelly splat operator.
          v   ¤             Evaluate with parameter...
           ®                  the register's
            ṫ                 tail
             -                from -1. (2 last items)
               ®  ¤;        Concatenate with the register value,
                ṖṖ            pop twice.
                    ©       Store the result to register.

4Ḷ⁵*p1,5P€          Link 2: Niladic, generate [1,5,10,50,...]
4Ḷ                  Lowered range of 4, gives [0,1,2,3].
  ⁵*                Raise to power of 10. Value = 1,10,100,1000.
    p1,5            Calculate Cartesian product with [1,5].
                      Value = [1,1],[1,5],[10,1],[10,5],...
        P€          Calculate product of each item.

Alternatively, ×þ1,5F would also work instead of p1,5P€.

“IVXLCDM”iЀị¢µIN‘Ṡæ.µ®;©   Link 3: Given roman number, push it
                            to the stack (register).
         i                  Find index of ...
          Ѐ                  each character ...
“IVXLCDM”                     in "IVXLCDM".
            ị¢              Index to last link. (link 2)
              µ             With that value, (consider LIX ->
                            [50,1,10] for example)
               I             
Ḳµ“+-*/”W€i⁸Ñ⁸Ǥ¹?µ€ṛ®Ḋ

[TODO complete explanation]


-1

পাইথন 3 , 216 187 বাইট

from operator import*
N=dict(I=1,V=5,X=10,L=50,C=100,D=500,M=1000)
def f(w):
	s=[]
	for t in w.split():s+=[str(sum(map(N.get,t)))if t[0]in N else str(eval(s.pop(-2)+t+s.pop()))]
	return s

এটি অনলাইন চেষ্টা করুন!

কারণ এটি প্রশ্ন এবং এই উত্তর উভয়ের মন্তব্যে উঠে আসে এবং সম্ভবত ডাউন-ভোটের দিকে পরিচালিত করে: এই জমাটি বিয়োগফলকে স্বাক্ষরিত করে না। যুক্তি: সাবটেক্টিভ স্বরলিপিটি রোমান সাম্রাজ্যে খুব কমই ব্যবহৃত হত এবং কেবল পরে জনপ্রিয় হয়েছিল ( সাবটেক্টিভ নোটেশন , অনুচ্ছেদ 3, শেষ বাক্যটি দেখুন)। এই কার্যটি এমন একটি রোমান সাম্রাজ্যকে ধরে নিয়েছিল যা ত্রয়োদশ শতাব্দীর ইউরোপের মতো সাংস্কৃতিক পরিবর্তন করে না এমন এক নয়, প্রোগ্রামযোগ্যযোগ্য সংহত সার্কিট তৈরি করেছিল uits বর্ণনায় বিয়োগফল চিহ্নিতকরণের উল্লেখ নেই এবং উদাহরণগুলির মধ্যে এটির কোনওটিই এটি ব্যবহার করে না।


এইচএম ... আপনি CIV(104) এর মতো সংখ্যাগুলি সমর্থন করছেন না ।
janrjan জোহানসেন

... সেখানে আপনার যুক্তি ভুল করতে পারে না। : পি
janrjan জোহানসেন

2
আঃ, আপনি ঠিক বলেছেন। আমি সম্ভাব্য অস্পষ্টতা সম্পর্কে ভেবে দেখিনি, আমি জানি না যে প্রাচীন রোমান সাম্রাজ্যের সাবটেক্টিভ স্বরলিপি কোনও সাধারণ বৈশিষ্ট্য নয়।
জেসি ড্যানিয়েল মিচেল 16

1
আমি আসলে ওপির অধীনে বিয়োগাত্মক স্বরলিপি সম্পর্কে জিজ্ঞাসা করার বিষয়টি বিবেচনা করেছি (এবং উদাহরণের অভাবটি লক্ষ্য করেছি), তবে বিভ্রান্ত হয়ে পড়েছি। আপনি যদি ভবিষ্যতের চ্যালেঞ্জগুলির মধ্যে সংজ্ঞা अस्पष्टতার কথা ভাবেন, তবে দ্বিধা করবেন না, কেবল জিজ্ঞাসা করুন (আপনি পোস্ট করতে চাইলে একটি সতর্কতার সাথে উত্তর দিন এবং আপনার মন্তব্যে একটি লিঙ্ক করা উচিত)। এখন একটি রায় আপনার মধ্যে রয়েছে এটি ঠিক করার চেষ্টা করা উচিত :)
জোনাথন অ্যালান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.