প্রসারিত এবং চুক্তি


19

ইনপুট হিসাবে ধনাত্মক পূর্ণসংখ্যার নিন । সঙ্গে স্টার্ট এবং বারবার বৃদ্ধি দশ বৃহত্তম পূর্ণসংখ্যা শক্তিতে যেমন যে এবং ।এন: =1এনআমিআমিএনআমি+ +এন

পর্যন্ত পুনরাবৃত্তি করুন এবং প্রাথমিক এবং চূড়ান্ত উভয় সহ এর সমস্ত মধ্যবর্তী মানগুলির একটি তালিকা ফেরত দিন ।এন=এন1

এই প্রক্রিয়া চলাকালীন, প্রারম্ভিক পূর্বের বৈষম্য দ্বারা প্রারম্ভিকভাবে বৃদ্ধি সীমিত হবে, এবং কেবলমাত্র পরে পরে দ্বারা; প্রবৃদ্ধিটি প্রাথমিক "সম্প্রসারণ" সময়কালের রূপ ধারণ করবে, যার সময় ক্রমবর্ধমান শক্তি দ্বারা বৃদ্ধি করা হয়, তার পরে একটি "চুক্তি" সময় হয়, যার সময় "জুম ইন" করার জন্য সর্বদা ছোট শক্তি দ্বারা বৃদ্ধি করা হয় সঠিক নম্বর।এনএন

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

1 => [1]
10 => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
321 => [1,  2,  3,  4,  5,  6,  7,  8,  9,
        10, 20, 30, 40, 50, 60, 70, 80, 90,
        100, 200, 300, 310, 320, 321]
1002 => [1,   2,   3,   4,   5,   6,   7,   8,   9,
         10,  20,  30,  40,  50,  60,  70,  80,  90,
         100, 200, 300, 400, 500, 600, 700, 800, 900,
         1000, 1001, 1002]

এটি , তাই সংক্ষিপ্ত উত্তরটি (বাইটে) জেতে।


2
আমরা কি কোনও তালিকা ফিরিয়ে দেওয়ার পরিবর্তে নম্বরগুলি মুদ্রণ করতে পারি?
অ্যাডাম

@ অ্যাডম হ্যাঁ, আপনি পারেন।
ফল 16

উত্তর:


8

হাস্কেল , 72 68 64 63 বাইট

f=(1!)
c!t|t==c=[c]|t>c=c:(c+10^(pred.length.show.min c$t-c))!t

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

ধন্যবাদ শ্রীটচিলিজম ও'জাইক -4 বাইটের জন্য!

ব্যবহার

f 321
[1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90,100,200,300,310,320,321]

ব্যাখ্যা

c!t         -- c=current number, t=target number
 |t==c=[c]  -- Target is reached, return last number
 |t>c=c:(c+10^(pred.length.show.min c$t-c))!t
      c:                                        -- Add current number to list
                                min c$t-c       -- The minimum of the current number, and the difference between the current number and the target
                    length.show.                -- The length of this number
               pred.                            -- Minus 1
           10^(                          )      -- Raise 10 to this power
         c+                                     -- Add that to the current number
        (                                 )!t   -- Recursion

4
পিপিসিজিতে আপনাকে স্বাগতম! ভাল উত্তর।
আর্নল্ড

2
আমি Haskell, জানি না, কিন্তু হয়তো এই টিপস কোন সাহায্য করতে পারেন: মধ্যে Haskell golfing জন্য টিপস এবং <সমস্ত ভাষা> এ golfing জন্য টিপস । তবে আমি একমত, চমৎকার উত্তর। আমার কাছ থেকে +1
কেভিন ক্রুইজসেন

2
সাইটে স্বাগতম! যেহেতু আপনাকে এক্সপ্রেশনটির চারপাশে প্রথম বন্ধনী প্রয়োজন নেই তার (^)চেয়ে বেশি অগ্রাধিকার । একই জন্য যায় এবং(+)(^)(!)(:)
গম উইজার্ড

1
pred.length.show.min c$t-cসংক্ষিপ্ত করা যেতে পারে length(show.min c$t-c)-1। বেনামে ফাংশনগুলি গ্রহণযোগ্য, সুতরাং আপনি হাসকেলে গল্ফিংয়ের নিয়মাবলী সম্পর্কেf= আমাদের গাইডের ব্যাখ্যা অনুসারে অগ্রাহ্য করতে পারেন ।
লাইকোনি

1
রক্ষীদের পরিবর্তে, আপনি কেবলমাত্র একটি কেস এবং শর্তসাপেক্ষ: ব্যবহার করতে পারেন c!t=c: if t>c then (c+10^(length(show.min c$t-c)-1))!t else []। এটি আরও কয়েকটি বাইট সংরক্ষণ করতে এই টিপটি প্রয়োগ করতে দেয় : অনলাইনে চেষ্টা করে দেখুন!
লাইকনি

6

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

f=n=>n?[...f(n-(1+/(^10)?(0*$)/.exec(n)[2])),n]:[]

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

কিভাবে?

তত্ত্ব

নিম্নলিখিত পদক্ষেপগুলি এন=0 অবধি পুনরাবৃত্তি করা হবে :

  • সংখ্যার জন্য চেহারা এর দশমিক প্রতিনিধিত্ব trailing শূন্য এন
  • হ্রাস যদি এন এর একটি সঠিক শক্তি 10
  • n থেকে এক্স=10 বিয়োগ করুনএন

বাস্তবায়ন

এক্স এর মানটি নিম্নলিখিত বর্ণনার সাথে সরাসরি একটি স্ট্রিং হিসাবে গণনা করা হয়:

+---- leading '1'
|
1 + /(^10)?(0*$)/.exec(n)[2]
     \____/\___/
        |    |
        |    +---- trailing zeros (the capturing group that is appended to the leading '1')
        +--------- discard one zero if n starts with '10'

দ্রষ্টব্য : শীর্ষস্থানীয় ব্যতীত '10'কেবলমাত্র সঠিক শক্তিকে প্রভাবিত করে10 (যেমনএন=1000 ) কিন্তু যেমন মানের জন্য বন্দী trailing শূন্য সংখ্যা পরিবর্তন করে নাএন=102300 (কারণ অতিরিক্ত নন-জিরো মধ্যম ডিজিটের,'10'আসলে যেমন ক্ষেত্রে মোটেও মেলে না)।


উদ্ভাবনী লক্ষণীয় আপনি কেবলমাত্র একটি ভেরিয়েবলের ট্র্যাক রেখে "পিছনে" পুনরাবৃত্তিটি করতে পারেন! এটি একটি বিট বিভ্রান্তিকর যে আপনি ব্যবহার kকিছু চ্যালেঞ্জ বিবরণ চেয়ে সম্পূর্ণ ভিন্ন জন্য (যা বাস্তবে আপনারই nওপি এর একটি মিশ্রণ nএবং kএবং আপনার xতাদের হয় i।)
Orjan Johansen



2

এপিএল (ডায়ালগ ইউনিকোড) , 30 বাইট এসবিসিএস

বেনামে ট্যাসিট প্রিফিক্স ফাংশন। Stdout পৃথক লাইনে নম্বর মুদ্রণ।

{⍺=⍵:⍺⋄⍺∇⍵+10*⌊/⌊10⍟⍵,⍺-⎕←⍵}∘1

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

{}∘1 বেনামে ইনফিক্স ল্যাম্বদা সাথে 1 টি প্রাথমিক এন হিসাবে ত্রিযুক্তএন :

⍺=⍵ যদি এবং এন সমান হয়:

   রিটার্ন (এবং স্পষ্টভাবে মুদ্রণ)

  অন্য:

  ⎕←⍵ মুদ্রণ এন

  ⍺-কে  থেকে বিয়োগ করুন

  ⍵, prepend এন

  10⍟লগ10 যারা

   ফ্লোর যারা

  ⌊/ যারা সর্বনিম্ন

  10* দশ যে শক্তি উত্থাপিত

  ⍵+এন প্লাস যে

  ⍺∇ একই এবং নতুন এন ব্যবহার করে পুনরাবৃত্তি করুনএন


2

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

1[=ÐIαD_#‚ßg<°+

@ পলমুটসার এর পোর্ট (প্রথম) হাস্কেল উত্তর , সুতরাং তাকে উর্ধ্বতন নিশ্চিত করা নিশ্চিত করুন !!

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

নিউলাইন সীমারেখার আউটপুট।
এটি অবশ্যই একটি তালিকা হতে পারে, আমি 3 বাইট যোগ করতে হবে:

X[DˆÐIαD_#‚ßg<°+}¯

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

ব্যাখ্যা:

1             # Push a 1 to the stack
 [            # Start an infinite loop
  =           #  Print the current number with trailing newline (without popping it)
  Ð           #  Triplicate the current number
   Iα         #  Get the absolute difference with the input
     D        #  Duplicate that absolute difference
      _       #  If this difference is 0:
       #      #   Stop the infinite loop
      ‚ß      #  Pair it with the current number, and pop and push the minimum
        g   #  Calculate 10 to the power of the length of the minimum minus 1
           +  #  And add it to the current number



1

ব্যাচ, 131 বাইট

@set/an=i=1
:e
@if %n%==%i%0 set i=%i%0
@echo %n%
:c
@set/an+=i
@if %n% leq %1 goto e
@set/an-=i,i/=10
@if %i% neq 0 goto c

কমান্ড-লাইন প্যারামিটার হিসাবে ইনপুট নেয় এবং সংখ্যার তালিকাটি STDOUT এ আউটপুট করে। ব্যাখ্যা:

@set/an=i=1

10 এর পাওয়ার দিয়ে শুরু করুন n=1এবং i=1উপস্থাপন করুন।

:e
@if %n%==%i%0 set i=%i%0

গুন i10 দ্বারা যদি n10 পরবর্তী ক্ষমতা পৌঁছেছে।

@echo %n%

এর বর্তমান মান আউটপুট করুন n

:c
@set/an+=i
@if %n% leq %1 goto e

ইনপুট অতিক্রম না করে iযোগ করা যেতে পারে তার পুনরাবৃত্তি nকরুন।

@set/an-=i,i/=10

পূর্বের মানটি পুনরুদ্ধার করুন nএবং i10 দ্বারা ভাগ করুন ।

@if %i% neq 0 goto c

যদি iশূন্য না হয় তবে আবার যুক্ত iকরার চেষ্টা করুন n


1

আর , 67 65 বাইট

-2 বাইট জিউসেপ্পিকে ধন্যবাদ

k=scan();o=1;i=10^(k:0);while(T<k)o=c(o,T<-T+i[i<=T&i+T<=k][1]);o

বেশ সহজ. বিপরীত ক্রমে যা প্রয়োজন হবে তার বাইরে এটি 10 ​​এর শক্তির একটি সেট নেয়i

(আমি যেহেতু পরেরটি গণনামূলকভাবে অকার্যকর, তবে গল্ফটি গল্ফ! এর i=10^rev(0:log10(k))পরিবর্তে আমি ব্যবহার করতে পছন্দ করব i=10^(k:0))।

তারপরে কিছুক্ষণের মধ্যে, শর্তগুলি প্রয়োগ করে iএবং প্রথমটি (অর্থাৎ বৃহত্তম) নেয়; আপডেট n, এবং আউটপুট এ সংযোজন

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


1
Tপরিবর্তে ব্যবহার করে একটি বাইট সংরক্ষণ করুন n; এটি 2 হওয়া উচিত তবে আমি মনে করি না যে TRUEএটি গ্রহণযোগ্য আউটপুট k=1, তাই আমরা সেট করেছি o=+Tচেষ্টা করে দেখুন!
জিউসেপ

2
এটা ভয়ানক কোডিং, আমি এটি পছন্দ করি। ঘটনাচক্রে, আমি সেট করতে o=1এবং দ্বিতীয় বাইট পেতে পারেন ।
হারুন হায়মান


1

পিপ , 27 বাইট

Wa>Po+:y/t*Y1Ty>o|o+y>ay*:t

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

সিউডোকোডে:

a = args[0]
o = 1
print o
while a > o {
  y = 1
  till y > o || o + y > a
    y *= 10
  o += y / 10
  print o
}

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


0

জাপট , 18 বাইট

ÆT±ApTmTnU)sÊÉÃf§U

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

ÆT±ApTmTnU)sÊÉÃf§U     :Implicit input of integer U
Æ                      :Map the range [0,U)
 T±                    :  Increment T (initially 0) by
   A                   :  10
    p                  :  Raised to the power of
     Tm                :    The minimum of T and
       TnU             :      T subtracted from U
          )            :    End minimum
           s           :    Convert to string
            Ê          :    Length
             É         :    Subtract 1
              Ã        :End map
               f       :Filter
                §U     :  Less than or equal to U


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