রোমান সংখ্যাগুলিতে 1 থেকে 100 পর্যন্ত গণনা করুন


29

রোমান অঙ্কগুলিতে 1 থেকে 100 পর্যন্ত গণনা করা একটি প্রোগ্রাম লিখুন এবং মানগুলি আউটপুট দ্বারা মুদ্রণ করুন। প্রতিটি সংখ্যার ফাঁক দিয়ে আলাদা করতে হবে।

আপনি রোমান সংখ্যায় রূপান্তর করতে বা বাহ্যিক অ্যাপ্লিকেশন বা লাইব্রেরিতে এটি করতে কোনও বিল্ট ইন ফাংশন ব্যবহার করতে পারবেন না।

কাঙ্ক্ষিত ফলাফল

I II III IV V VI VII VIII IX X XI XII XIII XIV XV XVI XVII XVIII XIX XX XXI XXII XXIII XXIV XXV XXVI XXVII XXVIII XXIX XXX XXXI XXXII XXXIII XXXIV XXXV XXXVI XXXVII XXXVIII XXXIX XL XLI XLII XLIII XLIV XLV XLVI XLVII XLVIII XLIX L LI LII LIII LIV LV LVI LVII LVIII LIX LX LXI LXII LXIII LXIV LXV LXVI LXVII LXVIII LXIX LXX LXXI LXXII LXXIII LXXIV LXXV LXXVI LXXVII LXXVIII LXXIX LXXX LXXXI LXXXII LXXXIII LXXXIV LXXXV LXXXVI LXXXVII LXXXVIII LXXXIX XC XCI XCII XCIII XCIV XCV XCVI XCVII XCVIII XCIX C

এটি একটি কোড গল্ফ চ্যালেঞ্জ হিসাবে, সংক্ষিপ্ততম কোড জিতেছে


4
39 একটি এক্স অনুপস্থিত
থর

); @Thor ফিক্সড, ধন্যবাদ
Averroes

1
আমি সত্যিই এইটির জন্য ইন্টারকল ব্যবহার করতে চাই।
ওয়েইজুন চাউ

এটি কি নিউলাইন দ্বারা পৃথক করা যেতে পারে? এছাড়াও পিছনে / শীর্ষস্থানীয় স্থান / নিউলাইনগুলি সম্পর্কে কী?
ফানটাসি

উত্তর:


68

পার্ল 69 বাইট

s;.;y/XVI60-9/CLXVIX/dfor$a[$_].="32e$&"%72726;gefor 1..100;print"@a"

যাদু সূত্র মাধ্যমে কাজ করে। অভিব্যক্তি "32e$&"%72726নিম্নলিখিত পদ্ধতিতে প্রতিটি অঙ্ক রূপান্তরিত:
0⇒32, 1⇒320, 2⇒3200, 3⇒32000, 4⇒29096, 5⇒56, 6⇒560, 7⇒5600, 8⇒56000, 9⇒50918

অনুবাদ প্রয়োগের পরে y/016/IXV/, আমাদের পরিবর্তে এটি রয়েছে:
0-32, 1⇒32 I , 2⇒32 II , 3⇒32 III , 4⇒29 I 9 V , 5⇒5 V , 6⇒5 VI , 7⇒5 VII , 8⇒5 অষ্টম , 9⇒5 আই 9 এক্স 8

বাকি অঙ্কগুলি ( 2-57-9) সরিয়ে ফেলা হয়েছে। নোট যে এই একটি সূত্র অনুবাদ যা ব্যবহার করে এক বাইট দ্বারা উন্নত করা যেতে পারে 012পরিবর্তে 016, সরল /XVI60-9/করার /XVI0-9/। আমি একটি খুঁজে পেতে সক্ষম ছিল না, তবে সম্ভবত আপনার ভাগ্য ভাল হবে।

একবার এই অঙ্কে একটি ডিজিট রূপান্তরিত হয়ে গেলে, প্রক্রিয়াটি পরবর্তী অঙ্কের জন্য পুনরাবৃত্তি করে ফলাফল সংযোজন করে এবং পূর্ববর্তী XVIগুলি CLXএকই সময়ে অনুবাদ করে নতুন অঙ্কের জন্য অনুবাদ ঘটে।

আপডেট
এক্সহসিউটিভ অনুসন্ধানের ফলে কিছু ছোট হয় নি। তবে আমি একটি বিকল্প 69 বাইট সমাধান খুঁজে পেয়েছি:

s;.;y/XVI0-9/CLXIXV/dfor$a[$_].="57e$&"%474976;gefor 1..100;print"@a"

এটির 0-2জন্য একটি বিকল্প ব্যবহার করে IXVতবে এর একটি মডুলো রয়েছে যা এক ডিজিট দীর্ঘ।


আপডেট: 66 65 বাইট

এই সংস্করণটি উল্লেখযোগ্যভাবে পৃথক, সুতরাং আমার এটি সম্পর্কে সম্ভবত কয়েকটি শব্দ বলা উচিত। সূত্র এটি ব্যবহার করে আসলে এক বাইট দীর্ঘ!

সূত্রটি তার চেয়ে আর সংক্ষিপ্ত করতে অক্ষম, আমি আমার যা ছিল তা গল্ফ করার সিদ্ধান্ত নিয়েছি। আমার পুরনো বন্ধুর কথা মনে না হওয়া পর্যন্ত খুব বেশিদিন হয়নি $\। যখন কোনও printস্টেটমেন্ট জারি $\করা হয় তখন আউটপুট শেষে স্বয়ংক্রিয়ভাবে যুক্ত হয়। আমি $a[$_]দুটি বাইট উন্নতির জন্য বিশ্রী নির্মাণ থেকে মুক্তি পেতে সক্ষম হয়েছি :

s;.;y/XVI60-9/CLXVIX/dfor$\.="32e$&"%72726;ge,$\=!print$"for 1..100

আরও ভাল, কিন্তু এটি $\=!print$"এখনও কিছুটা ভারবস লাগছিল। আমি তখন একটি বিকল্প, সমান দৈর্ঘ্যের সূত্রটি মনে করেছিলাম যা 3এর কোনও সংখ্যার রূপান্তরগুলিতে নম্বর ধারণ করে না । সুতরাং, $\=2+printপরিবর্তে এটি ব্যবহার করা এবং ফলাফলটিকে 3একটি স্থানের সাথে স্থান দেওয়া সম্ভব হবে:

s;.;y/XVI0-9/CLXIIX V/dfor$\.="8e$&"%61535;ge,$\=2+print for 1..100

এছাড়াও 67 বাইট, মধ্যে প্রয়োজনীয় হোয়াইটস্পেস কারণে printএবং for

সম্পাদনা : printসামনের দিকে সরানোর মাধ্যমে এটি একটি বাইট দ্বারা উন্নত করা যেতে পারে :

$\=2+print!s;.;y/XVI0-9/CLXIIX V/dfor$\.="8e$&"%61535;gefor 1..100

যেহেতু বিকল্পটির সম্পূর্ণরূপে মূল্যায়ন করা দরকার আগে print, এর কার্যভারটি $\এখনও শেষ পর্যন্ত থাকবে। এর মধ্যে শ্বেতস্পেস সরিয়ে ফেলা geএবং forহ্রাসের সতর্কতা জারি করবে তবে তা অন্যথায় বৈধ।

কিন্তু, যদি সেখানে একটি সূত্র যা ব্যবহার করেননি ছিল 1যে কোন স্থানে, $\=2+printহয়ে $\=printসঞ্চয় অন্য মূল্য দুই বাইট জন্য। এমনকি যদি এটি এক বাইট দীর্ঘ হয় তবে এটি এখনও উন্নতি হতে পারে।

দেখা যাচ্ছে যে এই জাতীয় সূত্রটি বিদ্যমান, তবে এটি মূল থেকে এক বাইট দীর্ঘ, ফলে final৫ বাইটের চূড়ান্ত স্কোর হবে :

$\=print!s;.;y/XVI60-9/CLXXI V/dfor$\.="37e$&"%97366;gefor 1..100

প্রণালী বিজ্ঞান

প্রশ্নটি জিজ্ঞাসা করা হয়েছিল যে কীভাবে কেউ এই জাতীয় সূত্রটি সন্ধান করতে পারেন। সাধারণভাবে, ডেটাগুলির কোনও সেটকে সাধারণীকরণের জন্য একটি যাদু ফর্মুলা সন্ধান করা সম্ভাবনার বিষয়। এটি হ'ল আপনি এমন একটি ফর্ম চয়ন করতে চান যা কাঙ্ক্ষিত ফলাফলের অনুরূপ কিছু উত্পাদন করার সম্ভাবনা রয়েছে।

প্রথম কয়েকটি রোমান সংখ্যার বহির্গমন:

0:
1: I
2: II
3: III
4: IV
5: V
6: VI
7: VII
8: VIII
9: IX

কিছু নিয়মিততা দেখতে হবে। বিশেষতঃ ০-৩ থেকে এবং তারপরে আবার 5-8 থেকে প্রতিটি ধারাবাহিক শব্দটি দৈর্ঘ্যে এক সংখ্যা দ্বারা বৃদ্ধি পায়। আমরা যদি সংখ্যাসমূহ করার ডিজিটের থেকে একটি ম্যাপিং তৈরী করতে চান, আমরা একটি অভিব্যক্তি আছে চাইবেন এছাড়াও প্রত্যেক ক্রমানুযায়ী মেয়াদে একটি ডিজিট দ্বারা দৈর্ঘ্য বৃদ্ধি পায়। একটি লজিক্যাল পছন্দটি k • 10 d যেখানে d একই অঙ্ক হয় এবং কে কোনও সংখ্যার ধ্রুবক।

এটি 0-3-র জন্য কাজ করে তবে 4 টি প্যাটার্নটি ভেঙে ফেলতে হবে। আমরা এখানে যা করতে পারি তা হল একটি মডুলো:
ক • 10 ডি % মি , যেখানে মিটার কোথাও কে • 10 3 এবং কে • 10 4 এর মধ্যে রয়েছে । এটি 0-3 রেঞ্জটি ছোঁয়া ছাড়বে এবং 4 টি এমন পরিবর্তন করবে যে এতে চারটি থাকবে না I। আমরা অতিরিক্ত আমাদের অনুসন্ধানের অ্যালগোরিদমের যেমন যে এর মডুলার অবশিষ্টাংশ সীমাবদ্ধ তাহলে 5 , আসুন একে ডাকতে , কম মিঃ / 1000 , এই নিশ্চিত করবে যে আমরা থেকে নিয়মানুবর্তিতা আছে 5-8 পাশাপাশি। ফলাফলটি এরকম কিছু:

0: k
1: k0
2: k00
3: k000
4: ????
5: j
6: j0
7: j00
8: j000
9: ????

যেহেতু আপনি দেখতে পারেন, যদি আমরা প্রতিস্থাপন 0সঙ্গে I, 0-3 এবং 5-8 সব সঠিকভাবে ম্যাপ করা নিশ্চিত করা হয়! 4 এবং 9 এর মানগুলি অবশ্যই জোর করে জোর করা দরকার। বিশেষত, 4 টির মধ্যে একটি 0এবং একটি j(সেই ক্রমে) থাকা দরকার এবং 9 টিতে 0একটিতে অন্য একটি সংখ্যা থাকা দরকার যা অন্য কোথাও প্রদর্শিত হবে না। অবশ্যই, আরও অনেকগুলি সূত্র রয়েছে, যা কাকতালীয়ভাবে কিছুটা ফলস দ্বারা কাঙ্ক্ষিত ফলাফল আনতে পারে। তাদের কিছু এমনকি সংক্ষিপ্ত হতে পারে। তবে আমি মনে করি না যে এর মধ্যে সফল হওয়ার সম্ভাবনা রয়েছে এমন কোনও আছে।

আমি Iএবং / বা Vকিছু সাফল্যের জন্য একাধিক প্রতিস্থাপনের সাথেও পরীক্ষা করেছিলাম । তবে হায়, আমার যা কিছু ছিল তার চেয়ে ছোট কিছুই নয়। আমি যে সংক্ষিপ্ততম সমাধানগুলির সন্ধান পেয়েছি তার একটি তালিকা এখানে রয়েছে (1-2 বাইটের চেয়ে বেশি ভারী সমাধানগুলির সংখ্যা তালিকাবদ্ধ করার জন্য অনেক বেশি):

y/XVI60-9/CLXVIX/dfor$\.="32e$&"%72726
y/XVI0-9/CLXIXV/dfor$\.="57e$&"%474976
y/XVI0-9/CLXIVXI/dfor$\.="49e$&"%87971

y/XVI0-9/CLXIIXIV/dfor$\.="7e$&"%10606  #
y/XVI0-9/CLXIIXIV/dfor$\.="7e$&"%15909  # These are all essentially the same
y/XVI0-9/CLXIIXIV/dfor$\.="7e$&"%31818  #

y/XVI0-9/CLXIIX V/dfor$\.="8e$&"%61535  # Doesn't contain 3 anywhere

y/XVI60-9/CLXXI V/dfor$\.="37e$&"%97366 # Doesn't contain 1 anywhere

3
আপনি কীভাবে ম্যাজিক সূত্রটি খুঁজে পেলেন?
রুবেন ভেরবার্গ

1
@ রুবেনবার্গ আমি শিগগিরই পদ্ধতি সম্পর্কিত আরও তথ্যের সাথে আমার পোস্টটি আপডেট করব।
প্রিমো

15

এইচটিএমএল + জাভাস্ক্রিপ্ট + সিএসএস (137)

এইচটিএমএল (9)

<ol></ol>

জাভাস্ক্রিপ্ট (101)

for(i=1;i<=100;i++){document.getElementsByTagName('ol')[0].appendChild(document.createElement('li'))}

সিএসএস (২ 27)

ol{list-style:upper-roman​}

আউটপুট

রোমান সংখ্যা সহ সংখ্যাযুক্ত তালিকা

...

জেএসবিনে ডেমো


1
81 বাইট জেএস-কেবল সংস্করণ: document.write('<ol>'+"<li style='list-style:upper-roman'/>".repeat(100)+'</ol>')(ES6)
পেপারজাম

বা Chrome এ 66document.write("<li style='list-style:upper-roman'/>".repeat(100))
স্লাই

10

পাইথন 116

স্ক্লেভারের উত্তরের আরও গল্ফযুক্ত কোড:

r=lambda a,b,c:('',a,2*a,3*a,a+b,b,b+a,b+a+a,b+3*a,a+c);print' '.join(i+j for i in r(*'XLC')for j in r(*'IVX'))+' C'

8

পাইথন, 139

print' '.join(' '.join(i+j for  j in ' _I_II_III_IV_V_VI_VII_VIII_IX'.split('_'))for i in ' _X_XX_XXX_XL_L_LX_LXX_LXXX_XC'.split('_'))+' C'

6

সি, 177 160 147 অক্ষর

সংক্ষিপ্ত সমাধানগুলি রয়েছে, তবে সি তে কোনওটি নেই, তাই এখানে আমার চেষ্টা।

নতুন সমাধান, আমার আগেরটির থেকে সম্পূর্ণ পৃথক:

char*c;
f(n){
    printf("%.*s",n%5>3?2:n%5+n/5,c+=n%5>3?n%4*4:2-n/5);
}
main(i){
        for(;i<100;putchar(32))
                c="XLXXXC",f(i/10),
                c="IVIIIX",f(i++%10);
        puts("C");
}

পূর্ববর্তী সমাধান (160 টি অক্ষর):

লজিক:
1. fকপি করে প্রিন্ট একটি সংখ্যা 1 থেকে 10 cব্যবহৃত সংখ্যা, যা হতে পারে IVXবা XLC। দশজনের জন্য একবারের জন্য একবার কল করা হয়েছিল।
2. যদি n%5==0- মুদ্রণ কিছুই বা c[n/5]যা Iবা V(অথবা Lঅথবা C)।
3. যদি n%4==4- 4বা 9- মুদ্রণ I(বা X), দ্বারা n+1
৪. যদি n>4- তবে মুদ্রণ 5(অর্থাত্ ) Vবা । 5. যদি - মুদ্রণ তারপর (অর্থাত বার )।Ln-5
n<4In-1nI

char*c;
p(c){putchar(c);}
f(n){
        n%5?
                n%5>3?
                        f(1),f(n+1):
                        n>4?
                                f(5),f(n-5):
                                f(n-1,p(*c)):
                n&&p(c[n/5]);
}
main(i){
        for(;++i<101;p(32))
                c="XLC",f(i/10),
                c="IVX",f(i%10);
        p(10);
}

137:f(c,n){printf("%.*s",n%5>3?2:n%5+n/5,"XLXXXCIVIIIX "+c+(n%5>3?n%4*4:2-n/5));}main(i){for(;i<100;f(12,4))f(0,i/10),f(6,i++%10);puts("C");}
গ্যাস্ট্রোপনার

5

জাভাস্ক্রিপ্ট, 123

একটি দীর্ঘ সংস্করণ দ্বারা অনুপ্রাণিত হয়ে আমি একটি পোলিশ নিউজগোষ্ঠে এসে পৌঁছলাম (কমপক্ষে, ক্রোম মনে হয়েছিল এটি পোলিশ)।

for(i=100,a=[];n=i--;a[i]=r)
  for(r=y='',x=5;n;y++,x^=7)
    for(m=n%x,n=n/x^0;m--;)
      r='IVXLC'[m>2?y+n-(n&=-2)+(m=1):+y]+r;
alert(a)

5

প্রশ্ন ( 81 80)

2 য় কাটা:

1_,/'[($)``X`XX`XXX`XL`L`LX`LXX`LXXX`XC cross``I`II`III`IV`V`VI`VII`VIII`IX],"C"

1 ম কাটা:

1_,/'[$:[``X`XX`XXX`XL`L`LX`LXX`LXXX`XC cross``I`II`III`IV`V`VI`VII`VIII`IX]],"C"

4

পাইথন, 168

r=lambda n,l,v:(r(n,l[1:],v[1:])if n<v[0]else l[0]+r(n-v[0],l,v))if n else''
for i in range(1,101):print r(i,'C XC L XL X IX V IV I'.split(),[100,90,50,40,10,9,5,4,1]),

ব্যাখ্যা

এই মানগুলি ব্যবহার করে, বৃহত্তম মানটি n এর চেয়ে বেশি নয় এবং এটি এন থেকে বিয়োগ করুন। এন 0 না হওয়া পর্যন্ত পুনরাবৃত্তি করুন।

'C'  = 100
'XC' = 90
'L'  = 50
'XL' = 40
'X'  = 10
'IX' = 9
'V'  = 5
'IV' = 4
'I'  = 1

1
r=lambda n,l,v:n and(n<v[0]and r(n,l[1:],v[1:])or l[0]+r(n-v[0],l,v))or""দুটি অক্ষর সংরক্ষণ করে নাহলে খুব সুন্দর।
cemper93

4

রুবি 1.9, 140 132

r=" "
100.times{r+=?I
0while[[?I*4,"IV"],["VIV","IX"],[?X*4,"XL"],["LXL","XC"],[/(.)((?!\1)[^I])\1/,'\2']].any?{|q|r.sub! *q}
$><<r}

এটি আক্ষরিকভাবে রোমান সংখ্যায় 1 থেকে 100 পর্যন্ত গণনা করা হয়। একটি ফাঁকা স্ট্রিং দিয়ে শুরু হয়, তারপরে "I" যুক্ত করে এবং তারপরে বারবার প্রতিস্থাপনের নিয়ম প্রয়োগ করে কার্যকরভাবে 1 যুক্ত করে।

সম্পাদনা করুন: সংযুক্ত সংস্করণ নম্বর, যেহেতু ?Iকেবল 1.9 এ কাজ করে এবং কিছু অক্ষর ছাঁটাইতে @ হাওয়ার্ডের পরিবর্তনগুলি ব্যবহার করেছে।


আপনি দুটি চর সংরক্ষণ করতে পারেন: r while-> 0while, r.sub!(*q)-> r.sub! *q। আপনি মুদ্রণের ভিতরে মুদ্রণটি টেনে আনতে পারেন এবং 100.times{...}মানচিত্রের স্টেটমেন্টের পরিবর্তে ব্যবহার করতে পারেন ।
হাওয়ার্ড

(%w[IIII VIV XXXX LXL]<</(.)((?!\1)[^I])\1/).zip(%w(IV IX XL XC)<<'\2')7 টি অক্ষর সাশ্রয় করে।
স্টেনস্লাগ

4

রুবি 112 চর

101.times{|n|r=' ';[100,90,50,40,10,9,5,4,1].zip(%w(C XC L XL X IX V IV I)){|(k,v)|a,n=n.divmod k;r<<v*a};$><<r}

মূলত এখানে বর্ণিত to_romanপদ্ধতিটি ব্যবহার করে তবে ব্রেভিটির জন্য একটি জিপড অ্যারে ব্যবহার করছেন।


4

গণিত 159 150 142

c = {100, 90, 50, 40, 10, 9, 5, 4, 1};
Table["" <> Flatten[ConstantArray @@@ Thread@{StringSplit@"C XC L XL X IX V IV I", 
  FoldList[Mod, k, Most@c]~Quotient~c}], {k, 100}]

রোমান সংখ্যাসমূহ


বিল্ট-ইন সমাধান : IntegerString38 টি অক্ষর

IntegerString[k, "Roman"]~Table~{k, 100}

2

205 পার্ল

@r = split //, "IVXLC";
@n = (1, 5, 10, 50, 100);

for $num (1..100) {
  for($i=@r-1; $i>=0; $i--) {
    $d = int($num / $n[$i]);
    next if not $d;
    $_ .= $r[$i] x $d;
    $num -= $d * $n[$i];
  }
  $_ .= " ";
}
s/LXXXX/XC/g;
s/XXXX/XL/g;
s/VIIII/IX/g;
s/IIII/IV/g;
print;

Golfed:

@r=split//,"IVXLC";@n=(1,5,10,50,100);for$num(1..100){for($i=@r-1;$i>=0;$i--){$d=int($num/$n[$i]);next if!$d;$_.=$r[$i]x$d;$num-=$d*$n[$i];}$_.=" ";}s/LXXXX/XC/g;s/XXXX/XL/g;s/VIIII/IX/g;s/IIII/IV/g;print;

2

এমএমপিএস 184

S V(100)="C",V(90)="XC",V(50)="L",V(40)="XL",V(10)="X",V(9)="IX",V(5)="V",V(4)="IV",V(1)="I" F I=1:1:100 S S=I,N="" F  Q:'S  S N=$O(V(N),-1) I S&(S'<N ) S S=S-N W V(N) S N="" w:'S " "

@ কার্ডবোর্ড_বক্স হিসাবে একই অ্যালগরিদম, যার কাছ থেকে আমি ব্যাখ্যাটি ভারব্যাটিয়াম নিয়েছি -

ব্যাখ্যা

এই মানগুলি ব্যবহার করে, বৃহত্তম মানটি n এর চেয়ে বেশি নয় এবং এটি এন থেকে বিয়োগ করুন। এন 0 না হওয়া পর্যন্ত পুনরাবৃত্তি করুন।

'C'  = 100
'XC' = 90
'L'  = 50
'XL' = 40
'X'  = 10
'IX' = 9
'V'  = 5
'IV' = 4
'I'  = 1

2

আর , 85 বাইট

R=.romans
for(r in 1:100){while(r>0){cat(names(R[I<-R<=r][1]))
r=r-R[I][1]}
cat(" ")}

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

রোমান সংখ্যার মান পেতে এলোমেলো utilsপ্যাকেজ ভেরিয়েবল ব্যবহার করে তবে রূপান্তরটি নিজেই করে; অন্তর্নির্মিত পদ্ধতি 20 বাইট হবে:.romanscat(as.roman(1:100))


আশ্চর্যের বিষয় হল, আপনি যে বিল্ট-ইন পদ্ধতির কথা উল্লেখ করছেন তা তেমন কার্যকর হয় না ... একটি টাইপ করতে হবে cat(paste(as.roman(1:100)))বা সহজভাবে as.roman(1:100)। রহস্যময়।
জাইসি

@ জয়সি বিজোড়; আমার অবশ্যই এটি পরীক্ষা করা উচিত নয় ... এর জন্য ডকসগুলি catইঙ্গিত করে যে এটি ভেক্টরগুলির চেয়ে কম রূপান্তর সম্পাদন করে printএবং কেবল atomicভেক্টরগুলিতেই কাজ করে - যাতে এটি ব্যাখ্যা করে!
জিউসেপে

1

এপিএল 128

আমি এপিএলে একটি সূচক সমাধান চেষ্টা করেছি:

r←⍬                                                                             
i←1                                                      
l:r←r,' ',('   CXI LV CX'[,⍉((1+(4 4 2 2⊤0 16 20 22 24 32 36 38 39 28)[;1+(3⍴10)⊤i])×3)-4 3⍴2 1 0])~' '
→(100≥i←i+1)/l                                                                  
r              

এটি 1 এর পরিবর্তে 0 সূচক মূল্যে 4 বাইট সংক্ষিপ্ত হতে পারে তবে আসল স্পেস হগটি সূচক ম্যাট্রিক্সের মাধ্যমে প্রজন্মের মাধ্যমে:

4 4 2 2⊤0 16 20 22 24 32 36 38 39 28

এখন পর্যন্ত আমি উড়তে সূচকগুলি তৈরি করতে সক্ষম হইনি!




1

পিএইচপি, 38 37 বাইট

<ol type=I><?=str_repeat("<li>",100);

-1 বাইট @ মান্যাটওয়ার্ককে ধন্যবাদ thanks

প্যাট্রিকের উত্তর হিসাবে একই ধারণা , তবে আরও সংক্ষিপ্ত ভাষায়। বিটস ম্যাথমেটিকাকে !

অনলাইনে চেষ্টা করে দেখুন!


বিবৃতি দিয়ে শেষ করুন ;, তারপরে কোনও প্রয়োজন নেই ?>
manatwork

1

ভিবিএ (এক্সেল), 245 বাইট

পুনরাবৃত্তি এবং প্রতিস্থাপনের জন্য ফাংশন তৈরি করা হয়েছে - 91 বাইট

Function s(a,b):s=String(a,b):End Function Function b(x,y,z):b=Replace(x,y,z):End Function

তাত্ক্ষণিক উইন্ডো ব্যবহার করে ( 154 বাইট )

p="I":for x=1to 100:?b(b(b(b(b(b(b(b(s(x,p),s(100,p),"C"),s(90,p),"XC"),s(50,p),"L"),s(40,p),"XL"),s(10,p),"X"),s(9,p),"IX"),s(5,p),"V"),s(4,p),"IV"):next


0

জাভা (ওপেনজেডিকে 8) , 152 বাইট

a->{String[] t=",X,XX,XXX,XL,L,LX,LXX,LXXX,XC,,I,II,III,IV,V,VI,VII,VIII,IX".split(",");for(int i=1;i<100;i++){a+=t[i/10]+t[i%10+10]+" ";}return a+"C";}

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

ব্যাখ্যা:

String[] t=",X,XX,XXX,XL,L,LX,LXX,LXXX,XC,,I,II,III,IV,V,VI,VII,VIII,IX".split(",");
//Create an array of numerals, first half represents tens place, second half represents ones place
    for(int i=1;i<100;i++){             
//Loop 99 times
        a+=t[i/10]+t[i%10+10]+" ";   
//Add tens place and ones place to the string
    }return a+"C";                         
//Add numeral for 100 and return the string

0

টেক্স, 354 বাইট

\let~\let~\d\def~\a\advance~\b\divide~\x\expandafter~\f\ifnum{~~\newcount~\n~\i~\j~\k~\u~\v}~~\or\d\p#1{\ifcase#1C~2~L~5~X~2~V~5~I\fi}\d\q#1{\p{#1~}}\d\r{\j0
\v100\d\m{\d\w{\f\n<\v\else\p\j\a\n-\v\x\w\fi}\w\f\n>0\k\j\u\v\d\g{\a\k2\b\u\q\k}\g\f\q\k=2\g\fi\a\n\u\f\n<\v\a\n-\u\a\j2\b\v\q\j\else\p\k\fi\x\m\fi}\m}\i1\d\c{
\f\i<101 \n\i\r\a\i1 \x\c\fi}\c\bye

কিছু ব্যাখ্যা: টেক্সটি \romannumeralরোমান সংখ্যাগুলিতে রূপান্তর করার জন্য একটি অন্তর্নির্মিত কমান্ড সরবরাহ করে । যেহেতু প্রশ্নটি অন্তর্নির্মিত ফাংশনগুলি ব্যবহার করার অনুমতি দেয় না, উপরের কোডটি একই অ্যালগরিদম নুথের মূল টেক্স সংকলক টেক্সটিতে পুনরায় প্রয়োগ করা হয়েছে \romannumeral( টেক্স দেখুন: প্রোগ্রাম , § 69, দেখুন print_roman_int) একই গল্ফযুক্ত সংস্করণ ।

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

\newcount\n
\newcount\j
\newcount\k
\newcount\u
\newcount\v

\def\chrnum#1{\ifcase#1m\or 2\or d\or 5\or c\or 2\or l\or 5\or x\or 2\or v\or 5\or i\fi}
\def\chrnumM#1{\chrnum{#1\or}}

\def\roman#1{%
    \n=#1\relax
    \j=0\relax
    \v=1000\relax
    \def\mainloop{%
        \def\while{%
            \ifnum\n<\v
            \else
                \chrnum\j
                \advance\n -\v
                \expandafter\while
            \fi
        }\while
        \ifnum\n>0\relax
            \k=\j \advance\k 2\relax
            \u=\v \divide\u \chrnumM\k
            \ifnum\chrnumM\k=2\relax
                \advance\k 2\relax
                \divide\u \chrnumM\k
            \fi
            \advance\n \u
            \ifnum\n<\v
                \advance\n -\u
                \advance\j 2\relax
                \divide\v \chrnumM\j
            \else
                \chrnum\k
            \fi
            \expandafter\mainloop
        \fi
    }\mainloop
}

\newcount\i \i=1
\def\countloop{%
    \ifnum\i<100\relax
        \roman\i\ 
        \advance\i 1
        \expandafter\countloop
    \fi
}\countloop
\bye
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.