চেহারা এবং বলার ক্রম: রোমান সংখ্যার সংস্করণ


20

চ্যালেঞ্জের বিবরণ

আমাদের চেহারা এবং বলার ক্রম জড়িত কয়েকটি চ্যালেঞ্জ ছিল । দ্রুত অনুস্মারক:

  • ক্রমটি শুরু হয় 1,
  • এই ক্রমের পরবর্তী শর্তাদি পূর্ববর্তী পদে পুনরাবৃত্তি সংখ্যাগুলির প্রতিটি গোষ্ঠী গণনা করে উত্পন্ন হয়,

সুতরাং প্রথম কয়েকটি পদটি হ'ল:

1        "one"
11       "one one" (we look at the previous term)
21       "two ones"
1211     "one two, one one"
111221   "one one, one two, two ones"
312211   "three ones, two twos, one one"

এখন একই জিনিসটি করা যাক, তবে এর পরিবর্তে রোমান সংখ্যার ব্যবহার করুন। আমরা দিয়ে শুরু Iএবং একই নিয়ম অনুসরণ (আমরা, পরিবর্তে অক্ষর অঙ্ক-কাউন্টিং নিয়ম প্রযোজ্য তাই আমরা পড়তে IVXযেমন one one, one five, one tenপরিবর্তে one four, one tenঅথবা অন্য কোনো উপায়):

I           "one"
II          "one one"
III         "two ones" = "II" + "I"
IIII        "three ones" = "III" + "I"
IVI         "four ones" = "IV" + "I"
IIIVII      "one one, one five, one one"
IIIIIVIII   "three ones, one five, two ones" = ("III" + "I") + ("I" + "V") + ("II" + "I")

ধনাত্মক পূর্ণসংখ্যা দেওয়া হয়েছে N:

  • Nএই অনুক্রমের প্রথম সংখ্যাগুলি আউটপুট (কোনও যুক্তিসঙ্গত বিভাজক ঠিক আছে, পাশাপাশি)["I", "II", "III", ...]
  • Nএই অনুক্রমের আউটপুট th মেয়াদ (এটি 0-সূচকযুক্ত হতে পারে)।

আপনার কোডটি যতটা সম্ভব সংক্ষিপ্ত করে রাখার কথা মনে রাখবেন, যেহেতু এটি একটি চ্যালেঞ্জ!

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

EDIT2: @PeterTaylor এবং @GregMartin উল্লেখ করেছে যে শুধুমাত্র সংখ্যা কম বা সমান 5, ক্রম মধ্যে প্রদর্শিত যাতে আপনি রোমান সংখ্যাসমূহ এর অস্পষ্টতা সম্পর্কে চিন্তা করতে হবে না (নম্বর 1- 8হয় I, II, III, IV, V, VI, VII, এবং VIII)


প্রতিটি পূর্ণসংখ্যার জন্য একটি অনন্য রোমান অঙ্ক প্রকাশ হয় না। কোন সংখ্যাটি প্রকাশের প্রয়োজন হতে পারে এবং এই সংখ্যার কোন এক্সপ্রেশনটি বৈধ?
পিটার টেলর

"প্রতিটি পূর্ণসংখ্যার জন্য কোনও স্বতন্ত্র রোমান সংখ্যার প্রকাশ নেই" বলতে কী বোঝায়? পছন্দ 4/ IV/ IIII? বা 95/ XCV/ VC? কোনও পূর্ণসংখ্যার প্রকাশের জন্য সর্বদা অনন্য উপায় নাও থাকতে পারে তবে আমি নিশ্চিত যে সর্বদা একটি পছন্দকৃত (মানক) আছে - আমি ভুল হলে আমাকে সংশোধন করুন।
shooqie

1
আমাদের রোমান সংখ্যা সহ আমাদের কতদূর যেতে হবে?
মালটিসেন

হ্যাঁ, উভয় ক্ষেত্রে। দ্বিতীয় ক্ষেত্রে, আমি মনে করি এটি অত্যন্ত মতের বিষয় যা পছন্দনীয়।
পিটার টেলর

9
@ শুকী যদি এই বিবরণগুলি ব্যাখ্যা না করা হয় তবে আপনি উত্তরগুলি কীভাবে তুলনা করবেন? যদি এমন কিছু প্রান্তের কেস থাকে যা ব্যাখ্যা করতে থাকে তবে প্রকৃত স্কোর অর্থহীন হয়ে যায় কারণ তারা যে কোনও গল্ফিং ট্রিকস নিয়ে আসতে পারে তার চেয়ে বড় পার্থক্য করতে পারে।
মার্টিন ইন্ডার

উত্তর:


17

পার্ল, 49 বাইট

এর জন্য +1 অন্তর্ভুক্ত -p

STDIN- তে 0-ভিত্তিক সূচক দিয়ে চালান, উদাহরণস্বরূপ

ecce.pl <<< 14

ecce.pl:

#!/usr/bin/perl -p
s,(.)\1*,$&/$1%182 .$1,eg for($_=/$/)x$`;y;19;IV

যাদু সূত্রগুলি তাই যাদু।

সাধারণত আমি ($_=//)x$'লুপ নিয়ন্ত্রণটি একটি বাইটকে আরও সংক্ষিপ্ত করতে ব্যবহার করব তবে এই সাইটে স্কোর করা 2 এর একটি প্রতিবন্ধকতা দেয় যাতে এটি 1 বাইট বেশি দীর্ঘ হয়। পুরানো পার্লগুলিতে আপনি আগে জায়গাটি ড্রপ করতে পারেন for। পার্লের কিছু সংস্করণ আপনাকে লিখিত লিপি রচনা ;বন্ধ করতে চূড়ান্ত যোগ করতে বাধ্য করে। তবে উপরে দেওয়া কোডটি আমার সিস্টেমে কাজ করে।

ব্যাখ্যা

সমাধান থেকে কোডে পিছনে কাজ করা:

আমাদের যে স্ট্রিং ট্রান্সফর্মেশনগুলি প্রয়োজন:

I     -> II
II    -> III
III   -> IIII
IIII  -> IVI
IIIII -> VI

V     -> IV
VV    -> IIV

প্রতিটি প্রতিস্থাপন পুনরাবৃত্তি অক্ষর দিয়ে শেষ হয়। আমি একই চরিত্রগুলির রেঞ্জেক্স ব্যবহার করে একটি ক্রম পাব /(.)\1*/, যাতে এটি যুক্ত করে করা যায় $1। অংশটি আগে ->রয়েছে $&। তার সাথে আমার এখনও দরকার:

I     -> I
II    -> II
III   -> III
IIII  -> IV
IIIII -> V

V     -> I
VV    -> II

9 Iহিসাবে 1এবং Vহিসাবে লিখুন :

1     -> 1
11    -> 11
111   -> 111
1111  -> 19
11111 -> 9

9     -> 1
99    -> 11

পূর্বে ->বারবার অঙ্ক দ্বারা ভাগ করে এটি হয়ে যায়:

1     -> 1
11    -> 11
111   -> 111
1111  -> 19
11111 -> 9

1     -> 1
11    -> 11

সুতরাং এখন পুনরাবৃত্তি আসল Vআর ব্যতিক্রম নয়। সুতরাং আমি এমন একটি অভিব্যক্তি চাই যা এটি ঘটায়:

1     -> 1
11    -> 11
111   -> 111
1111  -> 19
11111 -> 9

এবং এটি একটি সাধারণ মডুলো 182 দ্বারা করা যেতে পারে:

1     % 182 = 1
11    % 182 = 11
111   % 182 = 111
1111  % 182 = 19
11111 % 182 = 9

(এই এমনকি পায় IIIIIIকরার VIযদিও তা এখানে প্রয়োজন হয় না ডান)

সব কিছু ফেলে রেখে যে কাজ পরিবর্তনশীল শুরু হচ্ছে 1সূচক 0, একটি লুপ এই রূপান্তর পুনরাবৃত্তি এবং শেষে প্রতিস্থাপন 1দ্বারা Iএবং 9দ্বারাV

1, 9এবং 182একমাত্র পরামিতি সংমিশ্রণের জন্য যা এই সাধারণ সূত্রটি কাজ করে।


2
এই প্রতিভা! :)
লিন

10

গণিত, 113 90 83 বাইট

দৈর্ঘ্য 25% এর চেয়ে কমিয়ে এমন পরামর্শের জন্য মার্টিন ইন্ডারকে ধন্যবাদ!

ম্যাথমেটিকায় উচ্চ-স্তরের কমান্ডগুলি দেখানো হচ্ছে।

Nest[Flatten[Characters@{RomanNumeral@#,#2}&@@@Reverse@@@Tally/@Split@#]&,{"I"},#]&

একটি খাঁটি ফাংশন, একটি আর্গুমেন্ট N গ্রহণ করে এবং অক্ষরের তালিকা হিসাবে এই (0-indexed) অনুক্রমের Nth উপাদান আউটপুট করে। কিছুটা ছড়িয়ে দিন:

Nest[
  Flatten[
    Characters @ {RomanNumeral@#,#2}& @@@
      Reverse @@@ Tally /@ Split@ #
    ]& ,
  {"I"}, #]&

বাহ্যিক Nestমধ্যবর্তী চার-লাইনের ক্রিয়াকলাপ পুনরাবৃত্তি করে {"I"}এন বার করে। লাইন 4 ইনপুট রোমান সংখ্যার চরিত্রের তালিকার মতো অক্ষরগুলিকে বিভক্ত করে, প্রতিটি রানকে গণনা করে Tallyএবং তারা যে অক্ষরগুলি গণনা করছে তার আগে গণনা রাখে। লাইন 3 গণনাগুলিকে রোমান সংখ্যার হিসাবে উপস্থাপন করে, তারপর সেই রোমান সংখ্যাগুলিকে অক্ষরের তালিকায় বিভক্ত করে। Flattenকমান্ড এক মাত্রিক লিস্টে পুরো তালিকা অফ তালিকা হ্রাস করা হয়।

প্রাথমিক সংস্করণটি এখানে:

Nest[
  "" <> Flatten[{RomanNumeral@#[[1]], #[[2]]} & /@
    (Reverse@#[[1]] & /@ 
      Tally /@
        Split@Characters@#)] &,
  "I", #] &

3
গ্রার ম্যাথমেটিকা;)
বিটা ক্ষয়

আপনি ব্যবহার করেন তাহলে @@@পরিবর্তে /@আপনি ব্যবহার করতে পারেন #এবং #2পরিবর্তে #[[1]]এবং #[[2]]। এছাড়াও, অক্ষরের তালিকাগুলি গ্রহণযোগ্য স্ট্রিংয়ের ধরণের, তাই আপনি সেগুলির সাথে কাজ করতে এবং ব্যবহার এড়াতে পারেন Characters@
মার্টিন ইন্ডার

@ মার্টিনেন্দর আহা, আমি জানতাম যে এখানে অবশ্যই একটি @@@শর্টকাট থাকতে হবে ! অক্ষরের তালিকাগুলি গ্রহণযোগ্য স্ট্রিংয়ের ধরণের (যা আমি সম্মত করি কোডটি সংক্ষিপ্ত করে দেবে): এই সাইটে এমন কোনও পোস্ট আছে যা আপনি আমাকে সম্প্রদায়ের মান (গুলি) বর্ণনা করার জন্য নির্দেশ করতে পারেন?
গ্রেগ মার্টিন


1
আরো কয়েক সঞ্চয়ী: Charactersথ্রেড স্বয়ংক্রিয়ভাবে যাতে আপনি ব্যবহার করতে পারেন @, Reverse@#&প্লেইন হিসাবে অবশ্যই একই হয় Reverseযে ক্ষেত্রে আপনি সেই প্রথম বন্ধনী প্রয়োজন হবে না। এবং প্রিফিক্স স্বরলিপি (এর ক্ষেত্রে Flatten) কোনও কাজ সংরক্ষণ করে না যদি এটি কাজ করার জন্য আপনার প্রথম বন্ধনী যুক্ত করতে হয়। এই সমস্তটির সংমিশ্রণ:Nest[Flatten[Characters@{RomanNumeral@#,#2}&@@@Reverse@@@Tally/@Split@#]&,{"I"},#]&
মার্টিন ইন্ডার

8

সিজেএম ( 33 30 বাইট)

"I"{e`{(4md1$^'I*\'V*@}%e_}ri*

অনলাইন ডেমো

বাস্তবায়নের নির্ভুলতার মূল চাবিকাঠিটি হল নিম্নলিখিত উপপাদ্য:

প্রথম প্রজন্মটি যদি হয় তবে Iকোনও রান দৈর্ঘ্য পাঁচটির চেয়ে বেশি হবে না

লেমা: যদি প্রথম প্রজন্ম হয় তবে Iকোনও স্ট্রিং থাকে না VVV। প্রমাণ বৈপরীত্য দ্বারা হয়। মনে করুন যে সেখানে একটি প্রথম সূচক রয়েছে nযার জন্য nথিম প্রজন্মটি এতে রয়েছে VVV। যদি তা VVVভেঙে যায় (a)V VVতবে পূর্ববর্তী প্রজন্মের রূপান্তর খারাপ: এটি হওয়া উচিত ছিল (a+5)V। সুতরাং এটি অবশ্যই হতে হবে VV V(d), এবং পূর্ববর্তী প্রজন্মটি এতে থাকা নির্বাচনের VVVVVবিরোধিতা করবে n

এখন, ধরুন যে কোনও প্রথম সূচক রয়েছে mযার জন্য mথিম প্রজন্মটি রয়েছে ...IIIIII...। নোট করুন যে স্ট্রিং ব্যতীত Iআর কোনও সংখ্যা থাকতে পারে না V, কারণ আগের কোনও প্রজন্মের নয়টি নয় Iবা নয় Vসেকেন্ড হয়েছে। IS এর বেশিরভাগ চারটি Iপূর্ববর্তী স্ট্রিংয়ের একটি রান থেকে আসে , সুতরাং আগের স্ট্রিংয়ের সংশ্লিষ্ট বিভাগটি অবশ্যই ...IIIVV...প্রদান করবে ... IIII IIV ...VVপ্রজন্ম যেহেতু m-1আসে না VVVVV(লিমা দেখুন), দ্বিতীয়টি Vঅবশ্যই অঙ্কের একটি দৈর্ঘ্যের দৈর্ঘ্য হওয়া উচিত I, সুতরাং প্রজন্মের মধ্যে m-1আমাদের ...IIIVVI...। যেহেতু আমরা চাই প্রাথমিক Iদিতে গুলি IIIIএবং IVIবাVI, এটি স্ট্রিংয়ের শুরু দ্বারা বা একটি দ্বারা পূর্ববর্তী হয় V

আমাদের যদি (...V)?IIIVVI...প্রজন্ম m-1থাকে তবে প্রজন্মে আমাদের m-2কী আছে ? আমরা ইতিমধ্যে জেনের দেখেছি VVm-1হিসাবে পার্স করা আবশ্যক (a)V V(I)

ধরুন আমরা গ্রহণ করি a=2: (...V)?I IIV VI...আসলে এটি অবশ্যই হওয়া উচিত ...VI IIV VI..., যদিও নেতৃত্বের Vঅংশ হতে পারে IV; সুতরাং আগের প্রজন্মের মধ্যে আমরা হয় (...V)? IIII VV IIIII...বা হয় (...V)? IIIII VV IIIII। যে কোনও উপায়ে আমরা সমস্যায় পড়ি VVIIIII: দ্বিতীয়টি Vঅবশ্যই একটি দৈর্ঘ্যের দৈর্ঘ্যের হতে হবে তবে তার পরে ...VI IIII...একই অঙ্কের সাথে একটি নিম্নলিখিত (রান-দৈর্ঘ্য, অঙ্ক) জোড়া দরকার।

সুতরাং এটি হতে হবে a=1: (...V)?II IV VI...। যেহেতু প্রজন্ম mছয় একটি রান দিয়ে প্রথম Iগুলি, যে হতে হবে (...V)? II IV VI..., প্রজন্ম যাতে m-2হয় (...V)? I V IIIII......VIVIIIII...অসম্ভব: তবে আমরা দ্বিতীয়টি ব্যাখ্যা করতে বেছে Vনিই একই সংখ্যার সাথে পরপর দুটি (রান-দৈর্ঘ্য, অঙ্ক) জোড়া দিয়ে শেষ করি।

অতএব প্রজন্ম m-2হবে ^IVIIIII..., যেমন পার্স ^IV IIII I(V)...বা ^IV III II(V)...। এই যথাক্রমে প্রজন্ম দিতে m-3যেমন ^V III V ...বা ^V II VV...

তবে আমরা যদি প্রথমটি দিয়ে শুরু হওয়া স্ট্রিংগুলির শুরুটি দেখি তবে আমরা Vএকটি চক্র পাই:

    VI IV I...
    IV III IV ...
    II IV IVI ...
    IIII IV II IV ...

এবং তাই কোনও প্রজন্ম আর কখনও VIIIVবা এর সাথে শুরু হয় না VIIVV। আমরা এই উপসংহারে হবে যে কোন ধরনের m

ব্যবচ্ছেদ

"I"          e# Initial generation
{            e# Loop...
  e`         e#   Run-length encode
  {          e#   Foreach [run-length char] pair...
    (        e#     Extract the run-length r
    4md1$^   e#     Get the number of Vs and the number of Is
             e#     The number of Vs is r/4 ; the number of Is is (r%4)^(r/4)
    'I*\'V*@ e#     Repeat strings the appropriate number of times and reorder
  }%
  e_         e#  Flatten to a simple string
}ri*         e# ... n times, where n is taken from stdin

6

পাইথন 3, 195 বাইট

রোমান সংখ্যাগুলিতে প্রচুর বাইট অপচয় হয়, সুতরাং সেখানে কিছু গল্ফ হওয়ার সম্ভাবনা রয়েছে।

@ এল'এন্ডিয়াস্টারম্যান, @ শার্লক ৯ এবং @ শুকিকে ধন্যবাদ জানাই

import re
def f(x,r=""):
 for v,i in(5,"V"),(4,"IV"),(1,"I"):a,x=divmod(x,v);r+=i*a
 return r
s="I"
for i in[0]*int(input()):print(s);s=re.sub(r'(.)\1*',lambda m:f(len(m.group()))+m.group()[0],s)

আইডিয়ন!


আপনি স্কোয়ার বন্ধনীগুলি বাদ দিতে পারেন:for v,i in(5,"V"),(4,"IV"),(1,"I")
shooqie

@ শুকির আমার ধারণা ছিল না যে আপনি এটি করতে পারেন: ডি
বিটা

for v,i in(5,"V"),(4,"IV"),(1,"I"):a,x=divmod(x,v);r+=i*aএকটি বাইট সংরক্ষণ করে।
শার্লক 9

@ βετѧΛєҫαγ: এছাড়াও, আপনি ব্যবহার করছেন বলে মনে হয় না i(যেমন রয়েছে for i in range(...))। আমি ছোটাছুটি করার চেষ্টা করেছি execতবে এই 1'সাব' পদ্ধতিতে পালিয়ে গেছে মনে হচ্ছে কোডটি গণ্ডগোল করছে, আমি কোনও কাজ খুঁজে পাইনি।
shooqie

@ শুকী আমি এ থেকে মুক্তি পেয়ে কিছুটা সংক্ষিপ্ত করে রেখেছিrange
বেটা ডেকে

4

আর, 110 107 বাইট

as.romanএকত্রিত rleএটি সহজ করে তোলে। স্কোপিং অপব্যবহার এবং বিড়ালের আচরণে নির্মিত <<-কয়েকটি বাইট সংরক্ষণ করে।

x="I"
replicate(scan(),{r=rle(strsplit(x,"")[[1]])
x<<-paste(rbind(paste(as.roman(r$l)),r$v),collapse="")})

কনসোল থেকে এন নেয়। অনুক্রমের প্রথম 2 থেকে N পদগুলিকে আউটপুট দেয় (যা আমি বিশ্বাস করি যা অনুমানের মধ্যে ...)

 [1] "II"                                                                                                                                                                                                                                     
 [2] "III"                                                                                                                                                                                                                                    
 [3] "IIII"                                                                                                                                                                                                                                   
 [4] "IVI"                                                                                                                                                                                                                                    
 [5] "IIIVII"                                                                                                                                                                                                                                 
 [6] "IIIIIVIII"                                                                                                                                                                                                                              
 [7] "VIIVIIII"                                                                                                                                                                                                                               
 [8] "IVIIIIVIVI"                                                                                                                                                                                                                             
 [9] "IIIVIVIIVIIIVII"                                                                                                                                                                                                                        
[10] "IIIIIVIIIVIIIIVIIIIIVIII"                                                                                                                                                                                                               
[11] "VIIVIIIIIVIVIIVVIIVIIII"                                                                                                                                                                                                                
[12] "IVIIIIVVIIVIIIVIIIIIVIIIIVIVI"                                                                                                                                                                                                          
[13] "IIIVIVIIIVIIIIVIIIIIVVIIVIVIIVIIIVII"                                                                                                                                                                                                   
[14] "IIIIIVIIIVIIIIIVIVIIVVIIIVIIIIVIIIVIIIIVIIIIIVIII"                                                                                                                                                                                      
[15] "VIIVIIIIIVVIIVIIIVIIIIIVIIIIIVIVIIVIIIIIVIVIIVVIIVIIII"                                                                                                                                                                                 
[16] "IVIIIIVVIIIVIIIIVIIIIIVVIIVVIIVIIIVIIIIVVIIVIIIVIIIIIVIIIIVIVI"                                                                                                                                                                         
[17] "IIIVIVIIIVIIIIIVIVIIVVIIIVIIIIIVIIIIVIIIIIVIVIIIVIIIIVIIIIIVVIIVIVIIVIIIVII"                                                                                                                                                            
[18] "IIIIIVIIIVIIIIIVVIIVIIIVIIIIIVIIIIIVVIIVIVIIVVIIVIIIVIIIIIVIVIIVVIIIVIIIIVIIIVIIIIVIIIIIVIII"                                                                                                                                           
[19] "VIIVIIIIIVVIIIVIIIIVIIIIIVVIIVVIIIVIIIIVIIIVIIIIIVIIIIVIIIIIVVIIVIIIVIIIIIVIIIIIVIVIIVIIIIIVIVIIVVIIVIIII"                                                                                                                              
[20] "IVIIIIVVIIIVIIIIIVIVIIVVIIIVIIIIIVIIIIIVIVIIVIIIIIVVIIVIVIIVVIIIVIIIIVIIIIIVVIIVVIIVIIIVIIIIVVIIVIIIVIIIIIVIIIIVIVI"                                                                                                                    
[21] "IIIVIVIIIVIIIIIVVIIVIIIVIIIIIVIIIIIVVIIVVIIVIIIVIIIIVVIIIVIIIIVIIIVIIIIIVIIIIIVIVIIVVIIIVIIIIIVIIIIVIIIIIVIVIIIVIIIIVIIIIIVVIIVIVIIVIIIVII"                                                                                             
[22] "IIIIIVIIIVIIIIIVVIIIVIIIIVIIIIIVVIIVVIIIVIIIIIVIIIIVIIIIIVIVIIIVIIIIIVIVIIVIIIIIVVIIVVIIVIIIVIIIIIVIIIIIVVIIVIVIIVVIIVIIIVIIIIIVIVIIVVIIIVIIIIVIIIVIIIIVIIIIIVIII"                                                                      
[23] "VIIVIIIIIVVIIIVIIIIIVIVIIVVIIIVIIIIIVIIIIIVVIIVIVIIVVIIVIIIVIIIIIVVIIVIIIVIIIIVVIIIVIIIIIVIIIIVIIIIIVVIIVVIIIVIIIIVIIIVIIIIIVIIIIVIIIIIVVIIVIIIVIIIIIVIIIIIVIVIIVIIIIIVIVIIVVIIVIIII"                                                   
[24] "IVIIIIVVIIIVIIIIIVVIIVIIIVIIIIIVIIIIIVVIIVVIIIVIIIIVIIIVIIIIIVIIIIVIIIIIVVIIIVIIIIVIIIIIVIVIIIVIIIIIVVIIVIVIIVVIIIVIIIIIVIIIIIVIVIIVIIIIIVVIIVIVIIVVIIIVIIIIVIIIIIVVIIVVIIVIIIVIIIIVVIIVIIIVIIIIIVIIIIVIVI"                             
[25] "IIIVIVIIIVIIIIIVVIIIVIIIIVIIIIIVVIIVVIIIVIIIIIVIIIIIVIVIIVIIIIIVVIIVIVIIVVIIIVIIIIIVIVIIVVIIVIIIVIIIIIVVIIIVIIIIVIIIVIIIIIVIIIIIVVIIVVIIVIIIVIIIIVVIIIVIIIIVIIIVIIIIIVIIIIIVIVIIVVIIIVIIIIIVIIIIVIIIIIVIVIIIVIIIIVIIIIIVVIIVIVIIVIIIVII"

1

জাভাস্ক্রিপ্ট (ES6), 107

পুনরাবৃত্তির ক্রিয়াকলাপ নবম পদটি 0 ভিত্তিক করে ফেরত

f=(n,r='I')=>n?f(n-1,r.match(/I+|V+/g).map(x=>((n=x.length)-4?'VIII'.slice(n<5,1+n%5):'IV')+x[0]).join``):r

পরীক্ষা

f=(n,r='I')=>n?f(n-1,r.match(/I+|V+/g).map(x=>((n=x.length)-4?'VIII'.slice(n<5,1+n%5):'IV')+x[0]).join``):r

function update() {
  O.textContent=f(I.value)
}

update()
<input id=I value=25 type=number oninput='update()'><pre id=O></pre>


1

পার্ল 6 , 62 বাইট

{("I",{S:g/(.)$0*/{<I II III IV V>[$/.chars-1]~$0}/}...*)[$_]}

বেনামে ফাংশন যা শূন্য-ভিত্তিক সূচক গ্রহণ করে।

5 টিরও বেশি বেশি রোমান সংখ্যার প্রয়োজন হয় না এই বিষয়টি ব্যবহার করে, কারণ কেবলমাত্র পুনরাবৃত্তি সংখ্যাগুলির গ্রুপ যা ঘটতে পারে, তারা হ'ল:

I     -> II
II    -> III
III   -> IIII
IIII  -> IVI
IIIII -> VI

V     -> IV
VV    -> IIV

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

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