এএসসিআইআই মায়া নাম্বার


21

একটি প্রোগ্রাম বা ফাংশন লিখুন যা ইনপুট হিসাবে ধনাত্মক পূর্ণসংখ্যার দেওয়া হয়, মায়া সংখ্যায় সেই পূর্ণসংখ্যার প্রতিনিধিত্ব করে ।

মায়ার সংখ্যা

মায়ার সংখ্যাগুলি একটি ভিজিমেসাল সিস্টেম (বেস 20) মাত্র 3 টি প্রতীক ব্যবহার করে:

  • < >জিরোর জন্য (সঠিক চিহ্নটি হ'ল এক ধরণের শেল যা সহজেই ASCII ব্যবহার করে উপস্থাপন করা যায় না)।
  • .এক জন্য
  • ----পাঁচ জন্য

সংখ্যাগুলি 20 টির ক্ষমতায় উল্লম্বভাবে লেখা হয় এবং 0 এবং 19 এর মধ্যে সংখ্যাগুলি পাঁচটি এবং তার স্ট্যাক হিসাবে লেখা হয় । আরও তথ্যের জন্য আপনি উইকিপিডিয়া নিবন্ধটি পড়ুন ।

উদাহরণস্বরূপ, এখানে 0 এবং 25 এর মধ্যে নম্বরগুলি কমা দ্বারা পৃথক করা হয়েছে:

                                                                                 .    ..  ...  ....
                                                        .    ..  ...  .... ---- ---- ---- ---- ----  .    .    .    .    .    .
                               .    ..  ...  .... ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
<  >, .  , .. ,... ,....,----,----,----,----,----,----,----,----,----,----,----,----,----,----,----,<  >, .  , .. ,... ,....,----

ইনপুট

  • ইনপুটগুলি সর্বদা 0 এবং 2147483647 (2 ^ 31 - 1) এর মধ্যে ইতিবাচক পূর্ণসংখ্যার হয়।
  • কমান্ড লাইন আর্গুমেন্ট, ফাংশন প্যারামিটার বা অনুরূপ কিছু হিসাবে আপনি STDIN থেকে ইনপুট নিতে পারেন।

আউটপুট

  • প্রতিটি লাইন সর্বাধিক 4 টি অক্ষর দীর্ঘ। < >এবং ----সর্বদা এখানে দেওয়া হিসাবে মুদ্রণ করা উচিত (প্রতিটি 4 টি অক্ষর দীর্ঘ)।
  • ওনস ( .) অবশ্যই লাইনকে কেন্দ্র করে থাকতে হবে। যদি 1 বা 3 থাকে ., যেহেতু নিখুঁত অনুভূমিক প্রান্তিককরণ অসম্ভব, সেগুলি ডান বা কেন্দ্রের বামে একটি কলাম বা একটি কলাম হোক তা বিবেচনা করে না।
  • 20 এর পাওয়ারে স্ট্যাকের উচ্চতা নির্বিশেষে 20 এর বিভিন্ন শক্তির মধ্যে ঠিক একটি ফাঁকা রেখা থাকতে হবে। উদাহরণস্বরূপ, 25 এবং 30 এর জন্য সঠিক আউটপুটটি হ'ল:

            .
     .
           ----
    ----   ----
    
  • কোনও নেতৃস্থানীয় বা চলমান লাইনের অনুমতি নেই।

  • আউটপুটগুলি অবশ্যই প্রদত্ত উদাহরণগুলিতে যেমন মুদ্রিত করতে হবে।

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

  • উপরের উদাহরণ হিসাবে প্রদত্ত 0 এবং 25 এর মধ্যে প্রতিটি পৃথক নম্বর।

  • ইনপুট: 42

আউটপুট:

 .. 

 .. 
  • ইনপুট: 8000

আউটপুট:

 .  

<  >

<  >

<  >
  • ইনপুট: 8080

আউটপুট:

 .  

<  >

....

<  >
  • ইনপুট: 123456789

আউটপুট:

 .  

... 
----
----
----

 .  
----
----

 .. 
----
----

 .  

....
----
----
----

....
----
  • ইনপুট: 31415

আউটপুট:

... 

... 
----
----
----

----
----

----
----
----
  • ইনপুট: 2147483647

আউটপুট:

 .  

... 
----
----

 .  
----
----

 .  

----
----
----

....
----

 .. 

 .. 
----

স্কোরিং

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।


15 এবং 20 টি অভিন্ন বলে মনে হচ্ছে।
isaacg

@ আইসাক ধন্যবাদ, আমার আসলে 15 টি সঠিক জায়গায় এবং 19 এবং 20 এর মধ্যে উপস্থিত ছিল ed স্থির।
সময়স্বরূপ

@ ফ্যাটালাইজ আউটপুটটি কি মুদ্রণ করা দরকার (অর্থাত STDOUT) বা আমার ফাংশনটি কেবল আউটপুটটি ফিরিয়ে দিতে পারে?
rink.attendant.6

@ rink.attendant.6 অবশ্যই পোস্টে যেমন ঠিক তেমন মুদ্রিত হতে হবে।
অগস্ট

1 টি ডানদিকে একটি কলাম, তবে 3 বামে একটি কলাম কি ঠিক আছে?
আরগের

উত্তর:


3

পাইথ, 41 বাইট

j+bbm|jb_m.[\ 4kc:*d\.*5\.*4\-4"<  >"jQ20

অনলাইনে চেষ্টা করুন: বিক্ষোভ

ব্যাখ্যা:

                                     jQ20   convert input to base 20
    m                                       map each value d to:
                  *d\.                         string of d points
                 :    *5\.*4\-                 replace 5 points by 4 -s
                c             4                split into groups of 4
         m.[\ 4k                               center each group
        _                                      invert order
      jb                                       join by newlines
     |                         "<  >"          or if 0 use "<  >"
j+bb                                        join by double newlines

5

পার্ল, 125 117 বাইট

$-=<>;{$_=($-%20?(""," .
"," ..
","...
","....
")[$-%5]."----
"x($-/5&3):"<  >
").$_;($-/=20)&&($_=$/.$_,redo)}print

আমাকে 8 বাইট সংরক্ষণ করতে সাহায্য করার জন্য ডম হেস্টিংসকে ধন্যবাদ।


1
আরে সামগাক, redo,if(int($i/=20))আপনি ব্যবহার না করার পরিবর্তে আরও কয়েকজন বাইট সংরক্ষণের পরিবর্তন ~~($i/=20)&&redo~~ইন্টে রূপান্তর করে - আপনি 0|শুরুতে (বা |0শেষে) ব্যবহার করতে পারেন । এর substr(".... ... .. . ",20-$i%5*5,5)সাথে প্রতিস্থাপন করা (' .', ' ..','...','.'x4)[$i%5-1].$/ঠিক আছে বলে মনে হচ্ছে, তবে আমি সমস্ত পরীক্ষার কেসগুলি পরীক্ষা করে দেখিনি ... যদি সেগুলি কাজ করে তবে আপনি 114 এ নেমে গেছেন ... আমি যদি অন্য কিছু ভাগ করে নেওয়ার চিন্তা করি আমি আপনাকে জানাব!
ডম হেস্টিংস

1
এ সম্পর্কে ভাবনা, আপনি যদি কেবলমাত্র কোনও পূর্ণসংখ্যক থাকতে চান এবং বাকী অংশটিকে উপেক্ষা করতে চান তবে আপনি যাদু ভেরিয়েবলটি ব্যবহার করতে পারেন $-যা সর্বদা একটি আন্তঃকে কাটা হবে ... আরও কিছুটা বাঁচাতে পারে!
ডম হেস্টিংস

1
@ ডোমহাস্টিংস ধন্যবাদ, অন্তর্গত রূপান্তর কৌশলটি কয়েকটা বাইট সংরক্ষণ করে এবং সাবস্ট্রাস্ট থেকে মুক্তি পেয়ে অন্য 4 টি সাশ্রয় করে The
সামগাক

1
@ ডোমহাস্টিংস আসলে এটি করে, আবারও ধন্যবাদ! আমি অনুমান করি যে এর অর্থ আমাকে বিশ্বের রসিকতা থেকে
মুক্তি দিতে হবে

4

জাভাস্ক্রিপ্ট ES6, 143 বাইট

লোড বাইট যুক্ত হওয়ায় এটি প্রয়োজনে console.logআরও 23 বাইট সংরক্ষণ করতে পারে।

n=>console.log((d=(x,s='',l=1,j=x/l|0)=>s+(j>19?d(x,s,l*20)+`

`:'')+((j=j%20)?(' '+`.`.repeat(j%5)).slice(-4)+`
----`.repeat(j/5):'<  >'))(n))

4

গাণিতিক 185 182 171 153

বেনামে ফাংশন ব্যবহার করার জন্য আর্কিন্ডের পরামর্শকে 18 বাইট সংরক্ষণ করে,

c=Column;c[If[#>0,{q,r}=#~QuotientRemainder~5;c@{{""," ."," .."," ...","...."}[[r+1]],c@{{""},{d="----"},{d,d},{d,d,d}}[[q+1]]},"< >"]&/@#~IntegerDigits~20]&

উদাহরণ

c[If[# > 0, {q, r} = #~QuotientRemainder~5; c@{{"", " .", " ..", " ...", "...."}[[r + 1]], c@{{""}, {d = "----"}, {d, d}, {d, d, d}}[[q + 1]]}, "< >"] & /@ #~IntegerDigits~20] &[31415]

আউটপুট


পরীক্ষা করা হচ্ছে

দশমিক সংখ্যা, 31415, বেস 20 তে প্রকাশ করা হয়েছে M

BaseForm[31415, 20]

বেস 20


উপরের বেস 20 সংখ্যার সাথে দশমিক সংখ্যা।

IntegerDigits[31415,20]

{3, 18, 10, 15


আরেকটি উদাহরণ

IntegerDigits[2147483607, 20]

{1, 13, 11, 1, 15, 9, 0, 7}

c[If[# > 0, {q, r} = #~QuotientRemainder~5;c@{{"", " .", " ..", " ...","...."}[[r + 1]], c@{{""}, {d = "----"}, {d, d}, {d, d, d}}[[q + 1]]},"< >"] & /@ #~IntegerDigits~20] &[2147483607]

ex2


c=Column;c[If[#>0,{q,r}=#~QuotientRemainder~5;c@{{""," ."," .."," ...","...."}[[r+1]],c@{{""},{d="----"},{d,d},{d,d,d}}[[q+1]]},"< >"]&/@#~IntegerDigits~20]&বেনামী ফাংশন ব্যবহার করে।
jcai

@ আর্কিন্দে, ধন্যবাদ পুরানো বেনাম ফাংশন।
ডেভিডসি

3

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

নতুন লাইনগুলি তাৎপর্যপূর্ণ এবং প্রতি 1 টি বাইট হিসাবে গণনা করা হয়। যেহেতু STDOUT এ মুদ্রণ প্রয়োজন, console.logসেখানে আমাকে কয়েক বাইট খরচ করতে হবে।

f=i=>console.log([...i.toString(20)].map(j=>(!(j=parseInt(j,20))||j%5?[`<  >`,` .`,` ..`,`...`,`....`][j%5]+`
`:'')+`----
`.repeat(j/5)).join`
`.slice(0,-1))

ডেমো

প্রদর্শনের উদ্দেশ্যে আমি একটি ES5 সংস্করণ লিখব যাতে এটি সমস্ত ব্রাউজারে কাজ করে:

// Snippet stuff
console.log = function(x) {
  O.innerHTML = x;
}
document.getElementById('I').addEventListener('change', function() {
  f(this.valueAsNumber);
}, false);

// Actual function
f = function(i) {
  console.log(i.toString(20).split('').map(function(j) {
    return (! (j = parseInt(j, 20)) || j % 5 ? ['<  >', ' .', ' ..', '...', '....'][j % 5] + '\n' : '') + '----\n'.repeat(j / 5);
  }).join('\n').slice(0,-1));
}
<input type=number min=0 max=2147483647 value=0 id=I>

<pre><output id=O></output></pre>


শেষের কি প্রথম .joinবন্ধনী দরকার?
ডাউনওয়েট

137 বাইট: পেস্টবিন.
com

@ভিহান এটি কোনও ফলাফল দেয় না, এটি কেবল ফিরে আসে just
rink.attendant.6

কোনও ফাংশনের মাধ্যমে ইনপুট হতে পারে বলে এটি জানত না। পেস্টবিন.কম / পিপিএস0 এক্সটিজে 3 বাইট সংক্ষিপ্ত
Downgoat

2

পাইথন 2.x, 142 বাইট:

def m(n):
 h=[[""," "*(2-n%5/2)+"."*(n%5)+"\n"][n%5!=0]+"----\n"*(n%20/5),"<  >\n"][n%20==0]
 n/=20
 if n>0:
  h=m(n)+"\n\n"+h
 return h[:-1]

উদাহরণ:

>>> print m(2012)
----

<  >

 ..
----
----
>>> 

সম্পাদনা করুন: চলমান লাইন ...


আমার পরামর্শ দেওয়ার জন্য কয়েকটি উন্নতি আছে। প্রথমত, পরিবর্তন [n%20==0]করার জন্য [n%20<1]। দ্বিতীয়ত, পরিবর্তন [[""," "*(2-n%5/2)+"."*(n%5)+"\n"][n%5!=0]করার h=[(" "*(2-a/2)+"."*a+"\n")*(a>0)+"----\n"*(n%20/5),"< >\n"][n%20<1]সঙ্গে a=n%5, যা চলে আসে সব n%5আউট গুলি, এবং শর্তাধীন পরিবর্তন *(a>0)যা একটি খালি স্ট্রিং ফেরৎ a==0একই প্রভাবের জন্য।
শার্লক 9

অবশেষে, করা a, hএবং nএক লাইনে, তাই মত: a=n%5;h=[(" "*(2-a/2)+"."*a+"\n")*(a>0)+"----\n"*(n%20/5),"< >\n"][n%20<1];n/=20। এই সবগুলি আপনাকে 131 বাইটের সাথে ছেড়ে দেওয়া উচিত।
শার্লক 9

2

সিজেম, 82 76 বাইট

li{_K%[""" .
"" ..
""...
""....
"]1$5%='-4*N+2$5/3&*+"<  >
"?N+L+:L;K/}h;L);

আমার প্রথম সিজেএম প্রোগ্রামটি মূলত আমার পার্ল উত্তরের সিজেএম-র প্রতিলিপি।

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

মন্তব্য সহ বহু-লাইন:

li            # read input
{             # start of do-while loop
  _K%         # check if this base-20 digit is a zero
    [""" .
    "" ..
    ""...
    ""....
    "]1$5%=   # push dots for 1s onto stack
    '-4*N+2$5/3&*+    # push lines for 5s onto stack

    "<  >
    "         # push zero on stack
  ?           # ternary if test (for digit equals zero)
  N+L+:L;     # pre-concatenate string with output plus newline
  K/          # divide by 20
}h            # end of do while loop
;L);          # push output string on stack, chop off trailing newline

1

পিএইচপি, 220 বাইট

আমার জাভাস্ক্রিপ্ট উত্তর হিসাবে একই পদ্ধতির। পিএইচপি সবকিছুর জন্য অন্তর্নির্মিত ফাংশন রয়েছে।

কমান্ড লাইন থেকে (যেমন STDIN) 1 টি ইনপুট নেয়, যা এর সাথে দেখা হয়েছে $argv[1]:

<?=rtrim(implode("\n",array_map(function($j){return(!($j=base_convert($j,20,10))||$j%5?['<  >', ' .', ' ..', '...', '....'][$j%5]."\n":'').str_repeat("----\n",$j/5);},str_split(base_convert($argv[1],10,20)))));

1

সি - 149

f(v){v/20&&(f(v/20),puts("\n"));if(v%=20)for(v%5&&printf("%3s%s","...."+4-v%5,v/5?"\n":""),v/=5;v--;v&&puts(""))printf("----");else printf("<  >");}

প্রথমে সর্বাধিক উল্লেখযোগ্য সংখ্যা মুদ্রণের জন্য পুনরাবৃত্তি ব্যবহার করে। তারপর পারেন শূন্য ছাপে অথবা এক সঙ্গে সব বিন্দু ছাপে চালাক printf এবং সমস্ত পাঁচটি একটি লুপে । আমি নিশ্চিত যদি আমি অন্যথায় এখানে ব্যবহার করা এড়াতে পারি কিনা তা নিশ্চিত নই।

চতুর প্রিন্টফের অবক্ষয়টি হ'ল 1 এবং 3 একে অপরের সাথে সংযুক্ত নয়:

23 এর ফলাফল হ'ল:

  .

...

119 ভুল সমাধান - নতুন লাইনের পিছনে

f(v){v/20&&(f(v/20),puts(""));if(v%=20)for(v%5&&printf("%3s\n","...."+4-v%5),v/=5;v--;)puts("----");else puts("<  >");}


1

পিএইচপি, 202 192 বাইট

function m($n){return(($c=($n-($r=$n%20))/20)?m($c)."\n":"").
($r?(($q=$r%5)?substr(" .   .. ... ....",$q*4-4,4)."\n":"").
str_repeat("----\n",($r-$q)/5):"<  >\n");}
echo rtrim(m($argv[1]),"\n");

এটি প্রথম কমান্ড লাইনের যুক্তি থেকে ইনপুট পায়।

মন্তব্য এবং পরীক্ষা সহ সম্পূর্ণ উত্স কোডটি গিথুবে উপলভ্য ।


\nদুটি অক্ষর - তবে একটি স্ট্রিংয়ের মাঝখানে একটি নিউলাইন কেবল একটি।
ফিশারবেস্ট

1

পাইথন 2, 114 বাইট

এই উত্তরটি জাকুবের পাইথ উত্তর এবং লোকোলুইসের পাইথন 2 উত্তরের উপর ভিত্তি করে।

def f(n):d,m=divmod(n%20,5);h=[" "*(2-m/2)+"."*m+"\n----"*d,"<  >"][n%20<1];n/=20;return(f(n)+"\n\n"if n else"")+h

0

জেলি , 50 49 47 বাইট

b5µṪ”.x⁶;$L<3Ɗ¡ṭ⁾--;UW¤ẋ$Ẏ$L¡Ṛø“<  >”WµẸ?
b20Ç€

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

... এখন ব্যবহারকারী 202729 এর পয়েন্টের জন্য সারিবদ্ধভাবে রেখে দেওয়া হয়েছে।

আপনি যখন নিজেকে ভাবতে বাধ্য করেন তখন < >একটি প্যালিনড্রোম ...


আপনি কেন ডান-সারিবদ্ধ করেন ......
ব্যবহারকারী 202729

@ ব্যবহারকারী202729 এর জন্য . এবং ..একটি স্থান থাকা দরকার তাই আমি ...খুব একটা রাখি put একটি ছোট উপায় আছে?
dylnan

আমি মনে করি চ্যালেঞ্জ অনুযায়ী অনুমান ... ডান-প্রান্তিক হওয়া উচিত নয়। শুধু পরিবর্তন <4করতে <3?
ব্যবহারকারী 202729

@ user202729 আপনি ঠিক বলেছেন, আমি মনে করি আমি অনুমানটি ভুলভাবে লিখেছি। আমি মনে করি না যে এটি এর জন্য নির্দিষ্ট করে ... তবে আমি এটিকে <2
dylnan
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.