একটি সংখ্যা প্রসারিত করুন


11

একটি সংখ্যা প্রসারিত করুন

আপনার টাস্কটি নিম্নলিখিত পদ্ধতিতে 0 এর চেয়ে বেশি পূর্ণসংখ্যার প্রসারিত করা:

দশমিক সংখ্যায় বিভক্ত করুন এবং প্রতিটি অঙ্কের জন্য এই নিয়ম অনুসারে একটি তালিকা তৈরি করুন:

  • অঙ্কটি বিজোড় হলে তালিকাটি অঙ্কের সাথে শুরু হয় এবং নীচে 1 এ চলে যায়;
  • অঙ্কটি যদি সমান হয় তবে তালিকাটি অঙ্কের সাথে শুরু হয় এবং 9 পর্যন্ত যায়।
  • যদি সংখ্যা 0 হয় তবে তালিকাটি খালি থাকে।

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

34607 এর জন্য প্রয়োগ করা উপরের বিধিগুলির একটি উদাহরণ এখানে:

 9          
 8          
 79         
 68         
 57         
346 7 ->  399 7 -> 3997 -> 9418
2   6     288 6    2886
1   5     177 5    1775
    4      66 4     664
    3      5  3      53
    2      4  2      42 
    1         1       1

এখানে পরীক্ষার মামলাগুলি রয়েছে:

1: 1
2: 44
3: 6
44: 429
217: 1270
911: 947
2345: 26114
20067: 3450
34875632: 70664504
9348765347634763: 18406119382875401

এটি , তাই প্রতিটি ভাষার জিতে বাইটের সংক্ষিপ্ত উত্তরগুলি।


1
আমরা কি স্ট্রিং হিসাবে ইনপুট নিতে পারি? বা অঙ্কের অ্যারে হিসাবে?
Arnauld

@ আরনাউল্ড এটি অবশ্যই একটি পূর্ণসংখ্যা হতে হবে এবং এটি আপনার প্রোগ্রাম / ফাংশন দিয়ে অঙ্কগুলিতে ভাগ করার জন্য
গ্যালেন ইভানভ

@ গ্যালেনিভানভ তবে যদি ইনপুটটি স্টিডিনের থেকে থাকে তবে আমি মনে করি এটি ঠিক আছে (যদিও প্রযুক্তিগতভাবে একটি স্ট্রিং রয়েছে), তাই না?
অ্যাডম

@ অ্যাডম হ্যাঁ, প্রযুক্তিগতভাবে এটি একটি স্ট্রিং, সুতরাং এটি ঠিক।
গ্যালেন ইভানভ

এবং এখানে আমি ভেবেছিলাম এটা মতো সম্প্রসারণ হবে এই
ইঞ্জিনিয়ার টোস্ট

উত্তর:


8

জেলি , 13 বাইট

Dḟ0RrḂ?€9UZḌS

ইতিবাচক পূর্ণসংখ্যার গ্রহণ এবং প্রত্যাবর্তন করে এমন এক একক লিঙ্ক

এটি অনলাইন চেষ্টা করুন! অথবা পরীক্ষা-স্যুট দেখুন

কিভাবে?

Dḟ0RrḂ?€9UZḌS - Link: positive integer           e.g. 702
D             - cast to a decimal list                [7,0,2]
  0           - literal zero                          0
 ḟ            - filter discard                        [7,2]
        9     - literal nine
       €      - for each:
      ?       -   if:
     Ḃ        -   ...condition: bit (modulo by 2)      1              ,0
   R          -   ...then: range ([1,...n])            [1,2,3,4,5,6,7],n/a
    r         -   ...else: inclusive range ([n,...9])  n/a            ,[2,3,4,5,6,7,8,9]
         U    - upend                                 [[7,6,5,4,3,2,1],[9,8,7,6,5,4,3,2]]
          Z   - transpose                             [[7,9],[6,8],[5,7],[4,6],[3,5],[2,4],[1,3],2]
           Ḍ  - cast from decimal lists               [79,68,57,46,35,24,13,2]
            S - sum                                   324

4

পার্ল 6 ,  68  66 বাইট

{sum roundrobin(.comb».&{$_%2??($_...1)!!(9...+$_) if +$_})».join}

চেষ্টা করে দেখুন

{sum roundrobin(.comb».&{[R,] $_%2??1..$_!!$_..9 if +$_})».join}

চেষ্টা করে দেখুন

সম্প্রসারিত:

{  # bare block lambda with implicit parameter 「$_」

  sum

    roundrobin( # grab from the sub lists in a round robin fashion

      .comb\             # split the input into digits
      ».&{               # for each digit do this

        [R,]             # reduce with reversed &infix:«,» (shorter than reverse)

              $_ % 2     # is the digit not divisible by 2?
          ??  1  .. $_   # from 1 to the digit
          !!  $_ ..  9   # from the digit to 9

        if +$_           # only do the above if the current digit isn't 0
                         # (has the effect of removing 0 from the list)
     }

    )».join     # join each of the sub-lists from roundrobin
}

3

এপিএল (ডায়ালগ) , 39 বাইট

পুরো প্রোগ্রাম বডি। এসটিডিএন থেকে ইনপুট দেওয়ার জন্য অনুরোধ জানানো হয়। প্রিন্টগুলি ফলাফল STDOUT এ।

+/10⊥¨0~⍨¨↓⍉↑{2|⍵:⌽⍳⍵⋄×⍵:⌽⍵,⍵↓⍳9⋄⍬}¨⍎¨⍞

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

সঠিকভাবে শেষ টেস্ট কেস প্রদর্শন করতে, ⎕FR( এফ loating দফা আর epresentation) 128 বিট ডেসিমাল তে সেট করে এবং হয়েছে ⎕PP( পি দ্রণ পি 34 সংখ্যায় পর্যবসিত recision) সেট করা হয়েছে।

 STDIN থেকে পাঠ্য ইনপুট জন্য প্রম্পট

⍎¨ প্রতিটি কার্যকর করুন (প্রতিটি সংখ্যা একটি সংখ্যা হিসাবে পায়)

{...  প্রতিটি উপাদান জন্য, নিম্নলিখিত ফাংশন প্রয়োগ করুন যেখানে যুক্তি দ্বারা প্রতিনিধিত্ব করা হয় :

2|⍵: যদি বিজোড় (লিট। "যদি" বিভাগের অবশিষ্টাংশ 2 দ্বারা বিভাজিত হয়), তবে:

   বিপরীত

  ɩ 1 থেকে ntegers পর্যন্ত

   যুক্তি

 আর

×⍵: যদি যুক্তিটি ইতিবাচক হয় (লিট। "যদি" সাইনাম), তবে:

   বিপরীত

   যুক্তি

  , অনুসরণ করেছে

   যুক্তি

   উপাদান থেকে বাদ

  ⍳9ɩ 9 ntegers 1 থেকে যতক্ষণ না

 আর

   খালি তালিকা

 ডানদিকে শূন্যের সাথে প্যাডিং করে একক ম্যাট্রিক্সে তালিকার এই তালিকাটি মিশ্রণ করুন (একত্রিত করুন)

 TRANSPOSE

 এই ম্যাট্রিক্সকে তালিকার তালিকায় বিভক্ত করুন

0~⍨¨ প্রতিটি তালিকা থেকে সমস্ত শূন্য সরান

10⊥¨ বেস -10 থেকে প্রতিটিকে সাধারণ সংখ্যায় রূপান্তর করুন (এটি অঙ্কগুলি সংগ্রহ করে)

+/ সংখ্যা যোগ


2
আপনার ব্যাখ্যার জন্য ধন্যবাদ. কেবল আপনাকে জানাতে যে এপিএল কোড গল্ফ ভিডিওতে আপনাকে দেখার পরে আমি কোড গল্ফ আবিষ্কার করেছি।
গ্যালেন ইভানভ

3

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

f=(n,k=0)=>k<9&&+[...n+''].map(x=>+x&&(x=x&1?x:9-k<x||9)>k?x-k:'').join``+f(n,k+1)

বিঃদ্রঃ

9 - k < x || 9একটি বাইট ওভার সাশ্রয় করে 9 - k >= x && 9তবে বৈষম্য যাচাই করা হয় এর 1পরিবর্তে উত্পন্ন করে 0। এটি কোনও সমস্যা হবে যদি এটির 1 > kদিকে পরিচালিত হয়, বহির্মুখী অংশের ভুল পথে ট্রিগার করে। তবে এর অর্থ হ'ল k = 0এবং তাই 9 - k = 9, আমরা সম্ভবত 9 - k < xএকই সাথে থাকতে পারি না ।

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

নোট: শেষ পরীক্ষার কেসটি সরিয়েছে যা জেএস নম্বর যথার্থতার চেয়ে বেশি।



3

জাভা 11, 210 209 191 181 বাইট

n->{long r=0;var a="0".repeat(9).split("");for(int d:(n+"").getBytes())for(int k=0,x=d-48,y=9;x>0&(k<1||(d%2<1?y-->x:x-->1));a[k++]+=d%2<1?y:x);for(var q:a)r+=new Long(q);return r;}

ঠিক আছে, এটি বেশ খানিকটা সময় নিয়েছে (মূলত কারণ আমি প্রথমে একটি ভুল করেছি, তাই আমি কী ভুল করেছি তা আরও ভাল করে বুঝতে প্রতিটি পদক্ষেপটি লিখতে হয়েছিল)। সম্ভবত আরও কিছু গল্ফ করা যেতে পারে।

-18 বাইটস @ সিলিংক্যাটকে ধন্যবাদ ।

ব্যাখ্যা:

এখানে চেষ্টা করুন।

n->{                             // Method with long as both parameter and return-type
  long r=0;                      //  Result-long `r`, starting at 0
  var a="0".repeat(9).split(""); //  String array `a`, filled with nine String zeroes
  for(int d:(n+"").getBytes())   //  Cast the input to a String,
                                 //   and loop over its codepoints as integers:
    for(int k=0,                 //   Row-index `k`, starting at
        x=d-48,                  //   Temp integer `x`, set to the current digit
        y=9                      //   Temp integer `y`, set to 9
        ;                        //   Inner loop, if:
         x>0                     //     The current digit is not a 0,
          &(k<1                  //     and if this is the first iteration,
             ||(d%2<1?           //     or if the digit is even:
                 y-->x           //      And `y` is larger than the digit
                                 //      (and afterwards decrease `y` by 1 with `y--`)
                :                //     or if the digit is odd:
                 x-->1));        //      And `x` is larger than 1
                                 //      (and afterwards decrease `x` by 1 with `x--`)
      a[k++]+=                   //    Append the current row with:
                                 //    (and afterwards increase `k` by 1 with `k++`)
       d%2<1?                    //     If the digit is even:
        y                        //      Append the row with `y`
       :                         //     Else (the digit is odd):
        x);                      //      Append the row with `x`
  for(var q:a)                   //  Loop over the String rows in the array:
    r+=new Long(q);              //   Convert it to a long, and add it to the result-sum
  return r;}                     //  Return the result

2

পিপ , 28 বাইট

J_MS(RV{a?a%2?\,aa,tl}Ma)ZDx

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

ব্যাখ্যা

                      Ma      Map this function to the digits of the 1st cmdline arg:
        a?                     If digit != 0:
          a%2?                  If digit is odd:
              \,a                Inclusive-range(digit)
                 a,t            Else (digit is even), range from digit to 10 (exclusive)
                    l          Else (digit is 0), empty list
     RV{             }         Apply reverse to the result before returning it
                              This gives us a list of lists like [9 8 7 6] or [3 2 1]
    (                   )ZDx  Zip, with a default value of empty string
J_MS                          Use map-sum to join each sublist and sum the results
                              Autoprint (implicit)

34607যুক্তি হিসাবে পদক্ষেপগুলি কীভাবে এগিয়ে যায় :

34607
[[1 2 3] [4 5 6 7 8 9] [6 7 8 9] [] [1 2 3 4 5 6 7]]
[[3 2 1] [9 8 7 6 5 4] [9 8 7 6] [] [7 6 5 4 3 2 1]]
[[3 9 9 "" 7] [2 8 8 "" 6] [1 7 7 "" 5] ["" 6 6 "" 4] ["" 5 "" "" 3] ["" 4 "" "" 2] ["" "" "" "" 1]]
[3997 2886 1775 664 53 42 1]
9418



2

আর , 153 146 বাইট

function(n,m=n%/%10^(nchar(n):0)%%10)sum(strtoi(apply(sapply(m[m>0],function(x)c(r<-"if"(x%%2,x:1,9:x),rep("",9-sum(r|1)))),1,paste,collapse="")))

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

কখনও কখনও, আমি বলতে পারি না যে আমি কেবল গল্ফিংয়ের সময় আবর্জনা রেখেছি বা আর যদি হয় .... তবে এটি অবশ্যই আমি পেয়েছি, ব্যবহারকারী 2390246 কে 7 বাইট সংরক্ষণ করেছি, যিনি আমাকে অঙ্কগুলি বের করার আরও একটি উপায় সম্পর্কে স্মরণ করিয়েছিলেন (যে আমি নিজেকে প্রস্তাব দিয়েছি) ।

আপনি প্রতিস্থাপন করতে পারি strtoiসঙ্গে as.doubleপেতে 18406718084351604শেষ টেস্ট ক্ষেত্রে জন্য (যা ভুল); আর কেবলমাত্র 32-বিট পূর্ণসংখ্যা রয়েছে।


আপনি একটি পূর্ণসংখ্যা হিসাবে n গ্রহণ করে এবং আপনার কোনও কৌশল ব্যবহার করে অঙ্কগুলিতে রূপান্তর করে কিছুটা সাশ্রয় করতে পারেন! 146 বাইট
ব্যবহারকারী 2390246

@ ব্যবহারকারী 2390246 আপনি জানেন, আমি এটি চেষ্টা করেছি, তবে আমি মনে করি যে আমি character->intযখন ফোন করেছি :এবং তারপরে strtoiযাইহোক ব্যবহার করা হয়েছিল তখন আমি অন্তর্নিহিত রূপান্তরটি ব্যবহার করে স্থির হয়ে গিয়েছিলাম !
জিউসেপ



1

05 এ বি 1 ই , 16 বাইট

0KεDÈi9ŸëL]íõζJO

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

বা বিকল্পভাবে:

0KεDÈ8*>Ÿ{R}õζJO
0Kε9Ÿ¬L‚yèR}õζJO

ব্যাখ্যা:

0K        # Remove all 0s from the (implicit) input-integer
  ε       #  Map each digit to:
   D      #   Duplicate the digit
    Èi    #   If it's even:
      9Ÿ  #    Pop and push a list in the range [digit, 9]
     ë    #   Else (the digit is odd):
      L   #    Pop and push a list in the range [1, digit]
  ]       # Close both the if-else statement and map
   í      # Reverse each inner ranged list
     ζ    # Zip/transpose, swapping rows and columns,
    õ     # with an empty string as filler
      J   # Join each inner list together
       O  # And sum that list
          # (after which the result is output implicitly)

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