বেশ রোমান তার্নারি নয়


23

একটি পূর্ণসংখ্যা n ≥ 0 দেওয়া হয়েছে, এটি একটি অ-অবস্থানীয় বেস -3 স্বরলিপিতে অঙ্কগুলি 139ABCDE…এবং 1-বর্ণ বিভাজক ব্যবহার করে আউটপুট দেয় । প্রতিটি অঙ্ক 3 টির ধারাবাহিক শক্তি এবং বিভাজকের বাম দিকে অঙ্কগুলি উপেক্ষা করা হয় , যেমন A931 | বি → 81− (1 + 3 + 9 + 27) → 41 । একটি অঙ্ক কেবল একবার উপস্থিত হতে পারে।

কঠোরভাবে, একটি সংখ্যার মান হতে দিন:

  • অঙ্কটি 1, 3 বা 9 হয় তবে এর মান
  • 27 সংখ্যাটি হলে A
  • অঙ্কটির ঠিক তিনগুণ আগে তার আগে B..Z

আপনার আউটপুটে সমষ্টিটি (ডানদিকে অঙ্কের মান |) - যোগ করতে হবে (বামে অঙ্কের মান |) == ইনপুট

উদাহরণ

input     output
----------------
0         |
1         |1
7         3|91
730       |D1
9999      FEDC|GA9

আপনি বিভাজক হিসাবে পৃথক অ-স্থানের অক্ষর ব্যবহার করতে পারেন । আপনার কোনও বিভাজনকারীও থাকার অনুমতি নেই, সেক্ষেত্রে বৃহত্তম সংখ্যাটি ইতিবাচক ক্রম শুরু করে। আপনাকে 2 32 −1 ( PMIGDCBA9|RQNLH3) এর চেয়ে বড় কিছু হ্যান্ডেল করার দরকার নেই ।

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

এটি , সুতরাং আপনার উত্তরটি যত কম সংক্ষিপ্ততর হবে!


2
(সম্পর্কিতটির অর্থ সদৃশ নয়, শান্ত হও)
লিকি নুন

8
আমি কি এখানেই জিজ্ঞাসা করা হচ্ছে তার কোন ক্লু নেই?
শেগি

3
@ শেগি 3 এবং তাদের নেতিবাচক সংখ্যার যোগফল হিসাবে ইনপুটটি প্রকাশ করুন। একটি এর বামে negative |ণাত্মক এবং এর ডানদিকে ধনাত্মক রাখুন ।
মার্টিন ইন্ডার

2
@ কেভিন ক্রুইজসেন "না, আদেশটি নিখরচায়"। - ওপি
ব্যবহারকারী 202729

3
@ ব্যবহারকারী202729 আহ, মন্তব্যটি মিস করেছেন। ধন্যবাদ। নিয়মগুলি যখন চ্যালেঞ্জটিতে সম্পাদনার পরিবর্তে মন্তব্যগুলিতে থাকে তখনই এটি ঘটে থাকে .. ( ফ্রেউনিফ্রাগ , আপনি কি সেই নিয়মটিকে চ্যালেঞ্জের সাথে যুক্ত করতে পারেন: ডিলিমিটারের উভয় পক্ষের অর্ডারটি ঠিক আছে?)
কেভিন ক্রুইজসেন

উত্তর:


5

জাভা 10, 120 113 112 109 107 102 বাইট

n->{var r="|";for(char c=49;n++>0;c=(char)(c+=c>64?1:c*4%22%9),n/=3)r=n%3<1?c+r:n%3>1?r+c:r;return r;}

-3 এর কৌতুক অংশ ব্যবহার করে বাইট @Arnauld এর জাভাস্ক্রিপ্ট (ES6) উত্তর ,
পরিবর্তন i=0এবং i++<1?49:i<3?51:i<4?57:i+61করতে i=4এবং ++i>9?i+55:i>8?57:++i+43
-6 বাইটস সরাসরি অ্যারনল্ডকে মুক্তি দেওয়ার মাধ্যমে ধন্যবাদ জানায় i

আউটপুট অর্ডার: সর্বোচ্চ-থেকে-সর্বনিম্ন, |-ডেলিমিটার, সর্বনিম্ন-থেকে-সর্বোচ্চ।

ব্যাখ্যা:

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

n->{              // Method with integer parameter and String return-type
  var r="|";      //  Result-String, starting at the delimiter "|"
  for(char c=49;  //  Character, starting at '1'
      n++>0       //  Loop as long as `n` is larger than 0
                  //  Increasing it by 1 with `n++` at the start of every iteration
      ;           //    After every iteration:
       c=(char)(  //     Change character `c` to:
          c+=c>64?//      If the current `c` is an uppercase letter:
              1   //       Simpy go to the next letter using `c+1`
             :    //      Else:
              c*4%22%9),
                  //       Change '1' to '3', '3' to '9', or '9' to 'A' 
       n/=3)      //     Integer-divide `n` by 3
     r=           //     Change the result to:
       n%3<1?     //      If `n` modulo-3 is 0:
        c+r       //       Prepend the character to the result
       :n%3>1?    //      Else-if `n` modulo-3 is 2:
        r+c       //       Append the character to the result
       :          //      Else:
        r;        //       Leave `r` unchanged
   return r;}     //  Return the result-String

1
আমি মনে করি এটি কাজ করে: 103 বাইট
Arnauld

@ আরনাউল্ড ভাল লাগছে! এবং -1 আরও বাইট rলুপের শরীরে রেখে। ধন্যবাদ!
কেভিন ক্রুজসসেন

@ আর্নল্ড কৌতূহলের বাইরে, নিষ্ঠুর-বাহিনী কী দেখতে দেখতে আপনি এই শেষ দুটি যাদু সংখ্যার জন্য ব্যবহার করেছেন (যখন আপনি এখনও ব্যবহার করেছেন i, এবং আবার ব্যবহার করবেন c)?
কেভিন ক্রুইজসেন

1
আমি ইতিমধ্যে এটা দূরে নিক্ষিপ্ত করেছি ...: - / কিন্তু এখানে শেষ এক । (। খুব অদক্ষ, কিন্তু যে এত ছোট মানের জন্য ঠিক আছে)
Arnauld

(এছাড়াও, আমার কোডটি p=1কোডটিতে অন্তর্ভুক্ত না করা উচিত কিনা তা আমার সত্যিই পরীক্ষা করা উচিত *1- যদিও এটির ক্ষেত্রে এটি আরও ভাল সূত্রের দিকে না
আর্নল্ড


5

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

ছোট হাতের আউটপুট, যা আশা করি ভাল হবে।

f=(n,s=(k=4,'|'),c=++k>8?k.toString(36):++k-5)=>n?f(++n/3|0,[c+s,s,s+c][n%3]):s

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

অনুরূপ লিকি "নিনজা মাস্টার" নূনের এর উত্তর এবং এর উপর ভিত্তি করে xnor এর উত্তর

ডিজিট রূপান্তর

আমরা কে = 4 দিয়ে শুরু করি । যখন কে 9 এর চেয়ে কম , আমরা এটি প্রতিটি পুনরাবৃত্তিতে দুবার বৃদ্ধি করি এবং 5 টি বিয়োগ করি । এর পরে, আমরা এটি একবারে বৃদ্ধি করি এবং এটিকে বেস -36 এ রূপান্তর করি।

  k  | ++k > 8       | k.toString(36) | ++k - 5  | result
-----+---------------+----------------+----------+--------
  4  | k=5  -> false |                | k=6 -> 1 | 1
  6  | k=7  -> false |                | k=8 -> 3 | 3
  8  | k=9  -> true  | '9'            |          | '9'
  9  | k=10 -> true  | 'a'            |          | 'a'
  10 | k=11 -> true  | 'b'            |          | 'b'
 ... | ...           | ...            | ...      | ...



2

স্ট্যাক্স , 30 29 বাইট

£└≤☻╘pÿ╖╡A[ô%æτ⌐}►ºôßHl4⌡π%^ 

এটি চালান এবং এটি ডিবাগ করুন

ব্যালেন্সড টার্নারি কনভার্টারে আমার স্ট্যাক্স উত্তরটির পোর্ট ।

ব্যাখ্যা

ব্যাখ্যা করার জন্য আনপ্যাক করা সংস্করণ ব্যবহার করে।

139$VA+cz{;3%+,^3/~;wY1|I@'|ay2|I@L
139$VA+c                               "139AB...Z", make a copy
        z                              Empty array to store the digits
          {         w                  Do the following until 0.
           ;3%+                           Append `b%3` to the digits
                                          Originally, `b` is the input
              ,^3/                        `b=(b+1)/3`
                  ~;                       Make a copy of `b` which is used as the condition for the loop

                     Y                 Save array of digits in `y` for later use
                      1|I              Find index of 1's
                         @             Find the characters in "139AB...Z" corresponding to those indices
                          '|           A bar
                            ay2|I@     Do the same for 2's
                                  L    Join the two strings and the bar and implicit output

1

সি #। নেট, 103 বাইট

n=>{var r="|";for(var c='1';n++>0;c=(char)(c>64?c+1:c+c*4%22%9),n/=3)r=n%3<1?c+r:n%3>1?r+c:r;return r;}

আমার জাভা 10 উত্তর পোর্ট । সরাসরি পোর্ট (ছাড়া এমন n->করতে n=>) সম্ভব হত, আমি এই বহুভাষিক সঙ্গে আমার জাভা উত্তর সম্পাদিত হবে। তবে দুর্ভাগ্যক্রমে, c+=অক্ষরগুলিতে বা c=49সি # তে সম্ভব নয়, সুতরাং এই আলগা পোড়ানো উত্তর।

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


1

পার্ল 5 -p , 71 69 বাইট

কোন বিভাজক ব্যবহার করে। নেতিবাচক এবং ধনাত্মক অংশগুলি "রোমান অর্ডার" এ রয়েছে (বৃহত্তম অঙ্কটি প্রথম)

#!/usr/bin/perl -p
$n=$_}{s/@{[$n++%3]}\K/]/,$n/=3,y/?-]/>-]/for($_=21)x31;y/>?@12/139/d

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


1

রুবি , 87 84 82 বাইট

@ বেনজ 2240 কে 2 বাইট সংরক্ষণ করা হয়েছে।

->n,s=[?1,?3,?9,*?A..?Z],r=[""]*3{r[-m=n%3]+=s.shift
n=n/3+m/2
n>0?redo:r[1,2]*?|}

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


আমি যদি মিথ্যা বলি যে আমি এই কোডটি পুরোপুরি অনুসরণ করছি তবে আমি জানি আপনি এই redoকৌশলটি 2 বাইট শেভ করেছেন: অনলাইনে চেষ্টা করুন!
benj2240

1

জে , 129 বাইট

f=:3 :0
a=.'139',u:65+i.26
s=.'|'while.y>0 do.if.1=c=.3|y do.s=.s,{.a end.y=.<.y%3
if.c=2 do.s=.s,~{.a 
y=.1+y end.a=.}.a end.s
)

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

খুব দীর্ঘ, বিশেষত একটি জে প্রোগ্রামের জন্য ...

ব্যাখ্যা:

f =: 3 : 0
   a =. '139',u:65+i.26   NB. a list '139ABC...Z'
   s =. '|'               NB. initialize the list for the result  
   while. y>0 do.         NB. while the number is greater than 0
      c =. 3|y            NB. find the remainder (the number modulo 3)
      y =. <.y%3          NB. divide the number by 3 
      if. c = 1 do.       NB. if the remainder equals 1
         s =. s,{.a       NB. Append the current power of 3 to the result
      end.
      if. c = 2 do.       NB. if the remainder equals 2 
         s =. s,~{.a      NB. prepends the result with the current power of 3
         y =. 1+y         NB. and increase the number with 1
      end.
      a =. }.a            NB. next power of 3 
   end.
   s                      NB. return the result  
)

1

সি int,: 138 123 বাইট long,: 152 131 বাইট

আমি এর দুটি সংস্করণ তৈরি করেছি, কারণ চ্যালেঞ্জগুলির সর্বাধিক কার্যকর ইনপুটটির সীমাটি 0x100000000কিছুটা বিশ্রী মনে হয়েছিল। একটি সংস্করণ 32 বিট পূর্ণসংখ্যার সাথে কাজ করে (যা স্পষ্ট কারণে সীমা ব্যর্থ করে), অন্য সংস্করণটি 64 বিট (যা প্রদত্ত সীমা ছাড়িয়ে যায়, 14 8 অতিরিক্ত বাইটের ব্যয়ে ) নিয়ে কাজ করে।

32 বিট সংস্করণ:

char b[22],*r=b;f(v,l)char*l;{v%3>1?*r++=*l,v++:0;v&&f(v/3,l+1);v%3?*r++=*l:0;}g(v){f(v,"139ABCDEFGHIJKLMNOPQR");*r=0;r=b;}

Bit৪ বিট সংস্করণ:

char b[22],*r=b;f(long v,char*l){v%3>1?*r++=*l,v++:0;v&&f(v/3,l+1);v%3?*r++=*l:0;}g(long v){f(v,"139ABCDEFGHIJKLMNOPQR");*r=0;r=b;}

এটি ইন্টিজার ভেরিয়েবল হিসাবে ঘোষণা করে long(যা লিনাক্সের 64 বিট)।

অবারিত longসংস্করণ:

char buffer[22],*result=buffer;
f(long value,char*letter){
    if(value%3>1){
        *result++=*letter,value++;
    }
    if(value){
        f(value/3,letter+1);
    }
    if(value%3){
        *result++=*letter;
    }
}
g(long value){
    f(value,"139ABCDEFGHIJKLMNOPQR");
    *result=0;
    result=buffer;
}

আপনি দেখতে পাচ্ছেন, এটি পুনরাবৃত্তিমূলক শালীন দ্বারা কাজ করে: বাকিটি যদি 1 হয় তবে পুনরাবৃত্তির কল হওয়ার পরে সংশ্লিষ্ট চরিত্রটি আউটপুট স্ট্রিংয়ে সংযুক্ত করা হয়। যদি বাকি 2 হয়, আউটপুট পুনরাবৃত্তি করার আগে সঞ্চালিত হয়। এই ক্ষেত্রে, আমি নেতিবাচক অঙ্কটি সঠিকভাবে পরিচালনা করতে মান এক করে বাড়িয়েছি। এটির বাকীটি শূন্যে পরিবর্তনের অতিরিক্ত সুবিধা রয়েছে, যদি আমাকে value%3পুনঃ-পুনরাবৃত্তির শর্ত হিসাবে ব্যবহার করতে দেয় ।

রূপান্তর ফলাফল বিশ্বব্যাপী বাফার মধ্যে স্থাপন করা হয়। g()মোড়কের ফলে স্ট্রিং সঠিকভাবে সসীম, এবং পুনরায় সেট করতে শূন্য কাজ হয়েছে resultতার শুরুর পয়েন্টার (যা হল কিভাবে g()"আয়" ফলাফলের)।

longএই কোড সহ সংস্করণটি পরীক্ষা করুন :

#include <stdio.h>

char b[22],*r=b;f(long v,char*l){v%3>1?*r++=*l,v++:0;v&&f(v/3,l+1);v%3?*r++=*l:0;}g(long v){f(v,"139ABCDEFGHIJKLMNOPQR");*r=0;r=b;}

void printConversion(long value) {
    g(value);
    printf("%ld: %s\n", value, r);
}

int main() {
    for(long i = 0; i <= 40; i++) {
        printConversion(i);
    }
    printConversion(0x7fffffff);
    printConversion(0xffffffffu);
    printConversion(0x100000000);
}

আরও সম্ভাব্য তবে ধ্বংসাত্মক গল্ফিং:

  • -4 বাইট: ইন পয়েন্টার রিসেটটি সরিয়ে ফাংশনটিকে একটি শট করুন g()

  • -5 বাইট: স্ট্রিং পরিসমাপ্তি সম্পাদন করতে আহ্বানকারী জোর, এ পরিসমাপ্তি ছাড়া স্ট্রিং ফিরে buffer, এবং স্ট্রিংয়ের শেষ প্রান্ত result


1

কাঠকয়লা , 36 বাইট

NθF³⊞υ⟦⟧F⁺139α«⊞§υθι≔÷⊕θ³θ»F²«×|ι↑⊟υ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

Nθ

ইনপুট মান।

F³⊞υ⟦⟧

পূর্বনির্ধারিত খালি তালিকায় তিনটি খালি তালিকা চাপুন।

F⁺139α«

অক্ষর 139এবং বড় হাতের বর্ণমালা দিয়ে লুপ করুন ।

⊞§υθι

চক্রের সাথে মানগুলির সাথে তালিকাগুলির তালিকাটি সূচী করুন এবং বর্তমান অক্ষরটিকে এটিতে চাপ দিন।

≔÷⊕θ³θ»

মানটি 3 দ্বারা ভাগ করুন তবে প্রথমে 1 যোগ করে এটি বৃত্তাকার করুন।

F²«×|ι

দুবার লুপ। দ্বিতীয় বার, একটি মুদ্রণ |

↑⊟υ

প্রতিটি লুপ আমরা তালিকা থেকে শেষ এন্ট্রি পপ; প্রথমবার এটি আমাদের এন্ট্রি দেয় যা এর একটি অবশিষ্টাংশ ছিল 2(যা একটি ভারসাম্য ত্রৈমাসিক অঙ্কের সাথে মিল রাখে -1), যখন দ্বিতীয় বার এটি আমাদের সুষম ত্রৈমাসিক সংখ্যার সাথে সম্পর্কিত এন্ট্রি দেয় 1। ফলস্বরূপ অ্যারে সাধারণত উল্লম্বভাবে মুদ্রণ করত তবে মুদ্রণের দিকটি উপরের দিকে ঘোরানো এটিকে বাতিল করে দেয়।



0

পার্ল 5 , 92 89 বাইট

জাভা এবং অজগর উত্তর দ্বারা অনুপ্রাণিত।

sub n{($n,$r,$c,@a)=(@_,'|',1,3,9,'A'..'Z');$n?n(int++$n/3,($c.$r,$r,$r.$c)[$n%3],@a):$r}

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

কিছু সাদা স্থান সহ:

sub n {
  ($n, $r, $c, @_) = (@_, "|", 1, 3, 9, 'A' .. 'Z');
  $n ? n( int++$n/3, ($c.$r, $r, $r.$c)[$n%3], @_)
     : $r
}

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