রোমান সংখ্যায় রূপান্তর করুন!


13

আপনার কাজটি হ'ল আরবি সংখ্যার থেকে রোমান সংখ্যায় কোনও ধনাত্মক পূর্ণসংখ্যাকে রূপান্তর করা ।

আপনি 4000 গণনা করার সময় জিনিসগুলি কঠিন হয়ে যায়।

রোমানরা একটি চিহ্নের উপরে একটি লাইন যুক্ত করে সেই চিহ্নটি দ্বারা গুণিত করতে পারে 1 000। তবে ওভারলাইনগুলি ASCII এ হুবহু প্রদর্শনযোগ্য নয়। এছাড়াও, একটি চিহ্ন দ্বারা গুণিত করার জন্য ডাবল ওভারলাইনগুলি রয়েছে 1 000 000এবং তারপরে চিহ্ন দ্বারা গুণিত করতে ট্রিপল ওভারলাইন 1 000 000 000ইত্যাদি ...

অতএব, আমি ওভারলাইনগুলি প্রতিস্থাপনের জন্য বন্ধনী ব্যবহার করার সিদ্ধান্ত নিয়েছি ।

প্রতীকগুলি পৃথক পৃথকভাবে প্রথম বন্ধনীতে স্থাপন করা যেতে পারে । উদাহরণস্বরূপ, উভয় (VI)এবং (V)(I)এর বৈধ উপস্থাপনা 6 000(V)Mএছাড়াও 6000 এর বৈধ উপস্থাপনা।

(I)প্রতিনিধিত্ব করার জন্য একটি বৈধ উপায় 1 000

Testcases

Input: 1
Output: I
Input: 2
Output: II
Input: 3
Output: III
Input: 4
Output: IV
Input: 15
Output: XV
Input: 40
Output: XL
Input: 60
Output: LX
Input: 67
Output: LXVII
Input: 400
Output: CD
Input: 666
Output: DCLXVI
Input: 3000
Output: MMM
Input: 3999
Output: MMMCMXCIX
Input: 4000
Output: M(V)
Input: 4999
Output: M(V)CMXCIX
Input: 6000
Output: (VI)
Input: 6000000
Output: ((VI))
Input: 6006000
Output: ((VI)VI)
Input: 6666666666
Output: (((VI)DCLXVI)DCLXVI)DCLXVI

স্কোরিং

এটি । বাইট জিতে সংক্ষিপ্ত কোড।


1
এটি কেন একটি সদৃশ ছড়িয়ে ছিটিয়ে থাকা কারণ অনুমানযোগ্যতা। এটি আইএমও না থাকলে ভাল হবে।
মেগো

কোথায় যুক্তি যুক্ত করব?
লিকি নুন

1
ছেড়ে দাও। কেউ যদি এটি নকল কিনা তা নিয়ে প্রশ্ন করে, মন্তব্যগুলিতে বা আড্ডায় আলোচনা করুন।
মেগো

@ মেগো সম্পন্ন :-)
লিকি নুন

(IV)4000 এর গ্রহণযোগ্য উপস্থাপনা কি ?
নীল

উত্তর:


9

গণিত, 67 বাইট

Fold["("<>#<>")"<>#2&,RomanNumeral[#~IntegerDigits~1000]/."N"->""]&

Mইনপুটটি বেস 1000 এ রূপান্তর করে এবং প্রতিটি অঙ্ক পৃথকভাবে রূপান্তর করে সমস্ত সমস্যা এড়ায় RomanNumeral। তারপরে আমরা (...)বাম থেকে সন্নিবেশ করে এগুলি ভাঁজ করি ।

দুর্ভাগ্যক্রমে, ম্যাথামেটিকা ​​শূন্যগুলিকে প্রতিনিধিত্ব করে Nতাই আমাদের সেগুলি থেকে মুক্তি পাওয়া দরকার।


1
গাণিতিক সকল কিছুর জন্য তার বিল্টিন সহ> :(
OldBunny2800

1
@ ওল্ডবুনি ২৮০০ আমি যদি অবাক হয়ে যাই তবে যদি গল্ফিংয়ের কোনও ভাষা এটি না মারে তবে আমি অবাক হব।
মার্টিন এন্ডার

@ OldBunny2800 এবং এটি পেতে সত্যিকারের অর্থ ব্যয় হয়। এটা খারাপ.
এরিক আউটগল্ফার

@ মার্টিনব্যাটনার আমি ভেবেছিলাম কি সহজভাবে RomanNumeralএটি করতে পারবেন?
লিকি নুন

1
@KennyLau এটা আউটপুট MMMMজন্য 4000, এটি শুধুমাত্র এ বৈশিষ্ট করার জন্য কাজ শুরু 5000(এবং তারপর তোমার জন্য একই সমস্যা পান 4000000ইত্যাদি)। তারপরেও, এটি বন্ধনীগুলির পরিবর্তে ওভারবার ব্যবহার করে। যদি আপনি এটির সাথে ভাল থাকেন তবে আপনার চ্যালেঞ্জের বিবরণে তাই বলা উচিত।
মার্টিন এন্ডার

7

জাভাস্ক্রিপ্ট (ES6), 136 বাইট

f=n=>n<4e3?"M1000CM900D500CD400C100XC90L50XL40X10IX9V5IV4I1".replace(/(\D+)(\d+)/g,(_,r,d)=>r.repeat(n/d,n%=d)):`(${f(n/1e3)})`+f(n%1e3)

4000 বছরের কম সংখ্যার জন্য, রোমান "অক্ষর" এবং তাদের দশমিক মানগুলির তালিকা ব্যবহার করে প্রতিটি রোমান "চিঠি" যতবার সম্ভব পুনরাবৃত্তি করে। অন্যথায় পুনরাবৃত্তভাবে 1000 টি দিয়ে বিভাগ এবং মডুলো থেকে উত্তর তৈরি করে Fort ভাগ্যক্রমে repeatকেটে যায় তাই আমার নিজের এটি করার দরকার নেই।


3

কমন লিস্প, 108

(defun p(n)(if(> n 0)(if(< n 4000)(format()"~@R"n)(format()"(~A)~@[~A~]"(p(floor n 1000))(p(mod n 1000))))))

Ungolfed

(defun p(n)
  (if (> n 0)
      (if (< n 4000)

          ;; Built-in Roman formatter (between 1 and 3999)
          (format () "~@R" n)

          ;; Divide N by 1000, as 1000*Q + R.
          ;; First print (p Q) in parentheses (recursively)
          ;; Then, if it is not NIL, the remainder R.
          (format () "(~A)~@[~A~]"
                  (p (floor n 1000))
                  (p (mod n 1000))))))

টেস্ট

দুটি পরীক্ষাগুলি প্রশ্ন থেকে আলাদা আউটপুট দেয়:

(loop for (in out) in '((1 "I")
                        (2 "II")
                        (3 "III")
                        (4 "IV")
                        (15 "XV")
                        (40 "XL")
                        (60 "LX")
                        (67 "LXVII")
                        (400 "CD")
                        (666 "DCLXVI")
                        (3000 "MMM")
                        (3999 "MMMCMXCIX")
                        (4000 "M(V)")
                        (4999 "M(V)CMXCIX")
                        (6000 "(VI)")
                        (6000000 "((VI))")
                        (6006000 "((VI)VI)")
                        (6666666666 "(((VI)DCLXVI)DCLXVI)DCLXVI"))
   for computed = (p in)
   unless (string= out computed)
   collect (list in out computed))

=> ((4000 "M(V)" "(IV)")
    (4999 "M(V)CMXCIX" "(IV)CMXCIX"))

2

আর, 134

m=1000;x=scan();while(x[1]>=m)x=c(floor(x[1]/m),x[1]%%m,x[-1]);cat(rep("(",length(x)),sep="");cat(as.character(as.roman(x)),sep=")")

এটি বেশিরভাগ ক্ষেত্রে সেরা বিকল্প নয়, তবে আমি মনে করি ধারণাটি এর সাথে মিলিত হওয়া উচিত।


1

পাইথন, 188 194

কিছু সাদা জায়গা থেকে মুক্তি থেকে বাইট

আমি যখন প্রথম প্রোগ্রাম শিখছিলাম তখন এই চ্যালেঞ্জটি আমাকে ফিরিয়ে এনে ...

def f(x,s=zip("M CM D CD C XC L XL X IX V IV I".split(),[1e3,900,500,400,100,90,50,40,10,9,5,4,1])):
 r=""if x<4e3else"("+f(x/1e3)+")";x%=1e3
 for a,b in s:
    while x>=b:r+=a;x-=b
 return r

এটি সংক্ষিপ্ততম সমাধান নাও হতে পারে তবে আমি এই সমস্যাটি গল্ফ করে মজা পেয়েছি।

চেষ্টা কর!


1

রুবি, 137 134 130 বাইট

পুনরাবৃত্ত ফাংশন যা স্ট্রিংটি দেয়। আমি যদি সম্ভব হয় তবে সংখ্যার এনকোডিংগুলি গল্ফ দেওয়ার চেষ্টা করছি, তবে কীভাবে তা নিশ্চিত আমি তা জানি না।

উফফ, এটি এখন @ নীল এর ES6 উত্তরের প্রত্যক্ষ পোর্ট port

f=->x{(x<t=1e3)?"CM900D500CD400C100XC90L50XL40X10IX9V5IV4I1".gsub(/(\D+)(\d+)/){v=$2.to_i;s=x/v;x%=v;$1*s}:"(#{f[x/t]})#{f[x%t]}"}

1

রুবি, 185 161 144 বাইট

r=->i{i>(t=1e3)? "(#{r[i/t]})"+r[i%t]:(s=?I*i;"IVXXLCCDM".scan(/(.)(.)(.)/){|x,y,z|{x*5=>y,x*4=>x+y,y*2=>z,y+x+y=>x+z}.map{|x,y|s.gsub!x,y}};s)}

মূল পোস্টের এক বছর পরে, আমি মনে করি আমি গল্ফিং সম্পর্কে কিছু শিখেছি।

আপনার মূল্যবান মন্তব্যের জন্য মান কালি ধন্যবাদ।


gsubস্ট্রিংটিকে প্রথম আর্গুমেন্ট হিসাবে গ্রহণ করতে পারে, পরিবর্তনের পরিবর্তে প্রয়োজনটিকে রিজেক্স প্যাটার্নে সরানো হয় যেহেতু s.gsub! x,yএটি স্বয়ংক্রিয়ভাবে হয়। এগুলি ব্যতীত, আপনি সম্ভবত কেবল আপনার aঅ্যারের অ্যাসাইনমেন্টটি এড়িয়ে যেতে পারেন যেহেতু আপনি কেবল একবার এটি ব্যবহার করেন, এবং সরাসরি each_sliceকলটিতে রেখে দেন।
মূল্য কালি

"IVXXLCCDM".scan(/(.)(.)(.)/){|x,b,c|...খুব কাজ করে
মান কালি

এছাড়াও r[x]বৈশিষ্ট্যগুলি সমতূল্য r.(x)যখনই stabby lambdas জড়িত হয়
মূল্য কালি

@ ভ্যালিউইঙ্ক আপনাকে ধন্যবাদ সেই r[x]কৌশলটি আমার সকল ফুটার रिकর্সিভ গল্ফ রুবিতে কার্যকর হতে চলেছে!
মেগাটম

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