প্রদত্ত সীমার মধ্যে ভাগ্যবান টিকিট গণনা করুন


18

রাশিয়ায় আমাদের একটি traditionতিহ্যের মতো কিছু রয়েছে: আমরা ভাগ্যবান টিকিট খুঁজতে চাই।

নিয়মিত টিকিটের মতো দেখতে এখানে:

বাসের টিকেট

আপনি দেখতে পাচ্ছেন, টিকিটের একটি ছয় সংখ্যার নম্বর রয়েছে।

প্রথম তিনটি সংখ্যার যোগফল শেষ তিনটির যোগফলের সমান হলে একটি ছয় সংখ্যার সংখ্যাটিকে ভাগ্যবান বলে মনে করা হয়।

ছবির নম্বরটি ভাগ্যবান নয়:

038937
038 937
0 + 3 + 8 = 11
9 + 3 + 7 = 19
11 != 19

চ্যালেঞ্জ

একটি ব্যাপ্তির সীমাবদ্ধতা (অন্তর্ভুক্ত) প্রদত্ত, এর মধ্যে থাকা ভাগ্যবান টিকিটের নম্বরগুলি প্রদান করুন।

পরামিতি

  • ইনপুট: 2 পূর্ণসংখ্যা: প্রথম এবং শেষের পূর্ণসংখ্যার ব্যাপ্তি
  • ইনপুটগুলি 0 এবং 999999 এর মধ্যে অন্তর্ভুক্ত হবে
  • আউটপুট: 1 পূর্ণসংখ্যা: কত ভাগ্যবান সংখ্যা ব্যাপ্তিতে রয়েছে
  • আপনি ইনপুট নিতে পারেন এবং যে কোনও গ্রহণযোগ্য বিন্যাসে আউটপুট ফিরিয়ে দিতে পারেন
  • 100000 এর চেয়ে কম সংখ্যার জন্য শীর্ষস্থানীয় জিরো ধরে নিন।

উদাহরণ

0, 1 => 1
100000, 200000 => 5280
123456, 654321 => 31607
0, 999999 => 55252

এটি তাই প্রতিটি ভাষার বাইটে সংক্ষিপ্ত উত্তর answer

আপডেট: এখানে ভাগ্যবান ভাগ্যবান


উত্তর:


10

05 এ বি 1 ই , 8 (বা 10?) 11 (বা 13?) বাইট

Ÿʒ₄n+¦S3ôOË

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

দ্রষ্টব্য: 05AB1E-এ স্ট্রিং এবং পূর্ণসংখ্যাগুলি বিনিময়যোগ্য, সুতরাং আউটপুট সংখ্যায় নেতৃস্থানীয় জিরো থাকে না। এটি অবশ্য অতিরিক্ত 1 বাইট ( 12 বাইট ) দিয়ে স্থির করা যেতে পারে :

Ÿ₄n+€¦ʒS3ôOË

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

3 বা ততোধিক দৈর্ঘ্যের (ব্যাপ্তি [000000, 000999]) সহ বাগ-ফিক্স সংখ্যায় +3 বাইট

ব্যাখ্যা:

Ÿ          # Create an inclusive (on both sides) range from the two inputs
           #  i.e. 038920 and 038910 → 
           #   [38910,38911,38912,38913,38914,38915,38916,38917,38918,38919,38920]
 ʒ         # Filter this list by:
  n+      #  Add 1,000,000 to the number
     |     #  And remove the leading 1
           #   i.e. 38910 → 1038910 → '038910'
  S        #  Transform it to a list of digits
           #   i.e. '038910' → ['0','3','8','9','1','0']
   3ô      #  Split it into chunks of length 3
           #   i.e. ['0','3','8','9','1','0'] → [['0','3','8'],['9','1','0']]
     O     #  Sum the digits in both parts
           #   i.e. [['0','3','8'],['9','1','0']] → [11,10]
      Ë    #  Check if they are equal (if they are, they remain in the filtered list)
           #   i.e. [11,10] → 0

সম্পাদনা: মনে হচ্ছে আমি (এবং বেশিরভাগ উত্তর) সামান্য চ্যালেঞ্জটি ভুলভাবে পড়েছি এবং সীমার মধ্যে থাকা সংখ্যার পরিবর্তে সংখ্যার পরিমাণ জিজ্ঞাসা করা হচ্ছে। }gসেক্ষেত্রে একটি পেছন যুক্ত করা যায় (ফিল্টারটি বন্ধ করুন এবং ফিল্টারযুক্ত তালিকায় থাকা সংখ্যার পরিমাণটি পান), সুতরাং এটির পরিবর্তে এটি 10 13 বাইট রয়েছে :

Ÿʒ₄nS3ôOË}g

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


1000 এর নীচে শুরু হওয়া ব্যাপ্তির জন্য (উদাহরণস্বরূপ [0; 1000]), আপনার ফলাফলটি কিছুটা বন্ধ বলে মনে হচ্ছে (1000 ভাগ্যবান সংখ্যা পাওয়া গেছে)।
frosqh

1
আমি যদি চ্যালেঞ্জটি সঠিকভাবে বুঝতে পারি তবে প্রতিটি সংখ্যায় 1.000.000 যুক্ত করা এবং প্রথম অক্ষরটি মুছে ফেলা হলে এই সমস্যার সমাধান হবে। এটি ব্যবহার করেও মুক্তি পাবেন R
আদনান

@ আদনান ধন্যবাদ, এটি পরিচালনা করার পক্ষে এটি একটি দুর্দান্ত উপায়।
কেভিন ক্রুইজসেন

এটি প্রয়োজনীয় গণনা (এবং আউটপুটটির শীর্ষস্থানীয় শূন্যগুলির প্রয়োজন হয় না), তাই 13.
জোনাথন অ্যালান

9

সি # (.নেট কোর) , 93 + 18 = 111 বাইট

a=>b=>Enumerable.Range(a,b-a+1).Select(e=>$"{e:D6}").Count(e=>e[0]+e[1]+e[2]==e[3]+e[4]+e[5])

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

18 বাইট জন্য using System.Linq;। আমি অনুমান করেছি যে ইনপুট এবং আউটপুট ফর্ম্যাটগুলি নমনীয় হতে পারে। সুতরাং আমি ইনপুট হিসাবে দুটি পূর্ণসংখ্যা গ্রহণ করি (পরিসীমা, অন্তর্ভুক্ত)।

কিছু পরীক্ষার ফলাফল:

a=1000
b=1100

Lucky numbers = 3 [001001, 001010, 001100]

a=2000
b=2100

Lucky numbers = 3 [002002, 002011, 002020]

a=222000
b=222100

Lucky numbers = 7 [222006, 222015, 222024, 222033, 222042, 222051, 222060]

a=0
b=999999

Lucky numbers = 55252 (that's 5.5% of the total numbers)

8

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

সিনট্যাক্স সংবাহন ইনপুট লাগে (m)(n), যেখানে মি হয় একচেটিয়া সমেত উপরের আবদ্ধ এবং এন সমেত নিম্ন মুখী হয়।

m=>g=n=>n<=m&&![...n+=''].reduce((t,d,i)=>t-=n[i+3]?d:-d,0)+g(-~n)

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

কিভাবে?

আমরা একে সংখ্যা পরীক্ষা হেঁটে দ্বারা মাধ্যমে এর সংখ্যা আমি এবং একটি মোট আপডেট টি :এনআমিটি

  • যদি কমপক্ষে 3 টির মতো অঙ্ক থাকেটিটি-আমি
  • অন্যথায়টিটি+ +আমি

প্রক্রিয়া শেষে যদি আমাদের কাছে থাকে তবে n একটি ভাগ্যবান সংখ্যা।টি=0এন


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

একই ইনপুট ফর্ম্যাট।

m=>g=n=>n<=m&&!eval([...n/1e3+''].join`+`.split`+.`.join`^`)+g(n+1)

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

কিভাবে?

প্রতিটি সংখ্যার জন্য :এন

  • এটি দ্বারা ভাগ করুন : উদাঃ100038937 --> 38.937
  • একটি স্ট্রিং এবং বিভক্ত করতে বাধ্য: ['3','8','.','9','3','7']
  • এর সাথে যোগ দিন +:"3+8+.+9+3+7"
  • প্রতিস্থাপন +.সঙ্গে ^:"3+8^+9+3+7"
  • জেএস কোড হিসাবে মূল্যায়ন করুন এবং ফলাফল : ( 11 এক্সওর 19 ) কিনা পরীক্ষা করুন0241119

যদি কোনও দশমিক বিন্দু উত্পন্ন হয় না এবং মূল্যায়ন করা এক্সপ্রেশনটি কেবলমাত্র একটি ইতিবাচক যোগফল (মিথ্যা) হয়, যদি না (সত্যবাদী) হয়। উভয় ক্ষেত্রেই এটি প্রত্যাশিত ফলাফল।এন = 0এন0(গেলিক ভাষার1000)এন=0


এটি অন্তর্ভুক্ত করা হয়েছে।
জোনাথন অ্যালান

7

রুবি , 56 54 বাইট

->a,b{(a..b).count{|i|j=i.digits;j[0,3].sum*2==j.sum}}

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

পদ্ধতি:

  1. প্রতিটি সংখ্যার জন্য, একটি অঙ্কের অ্যারে তৈরি করে (যা বিপরীতে আসে)
  2. অ্যারের প্রথম 3 সংখ্যার যোগফল (সংখ্যায় শেষ 3) সম্পূর্ণ অ্যারের যোগফলকে 2 দ্বারা গুণিত করে
  3. দুটি সংখ্যার সমান হওয়ার জন্য সংখ্যা গণনা করে

6

জাপট , 38 15 বাইট

õV Ëì ò3n)mx r¥

-23 শেগিকে ধন্যবাদ!

আমার প্রথম জাপা জমা; সমস্ত সহায়তার জন্য শেগিকে ধন্যবাদ!

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


জাপটে স্বাগতম! :)
শেগি

@ শেগি ধন্যবাদ! এটি একটি সুন্দর ঝরঝরে ভাষা!
উভচর

আপনাকে শুরু করতে সহায়তা করার জন্য । আপনার যদি কোনও প্রশ্ন থাকে তবে নির্দ্বিধায় আমাকে চ্যাটে পিং করুন ।
শেগি

@ শেগি এটি আশ্চর্যজনক আমি অবশ্যই এ থেকে অনেক কিছু শিখেছি। আপনি কি এটি নিজের উত্তর হিসাবে পোস্ট করার পরিকল্পনা করছেন? তোমার উচিত!
এমফাইবোলজিকাল

না, আপনার এটি থাকতে পারে :) যেমনটি আমি বলেছিলাম, আপনাকে শুরু করতে সহায়তা করার জন্য।
শেগি

6

পাইথন 3, 117 113 106 135 বাইট

এটি আমার প্রথম উত্তর তাই আমি নিশ্চিত যে উন্নতির কোনও জায়গা আছে।

def x(a,b):
    n=0
    for i in range(a,b+1):
        if sum(map(int,str(i//1000)))==sum(map(int,str(i%1000))):n+=1
    print(n)
  • -4 বাইটস ডাব্লুডাব্লু ধন্যবাদ
  • -7 বাইট ধন্যবাদ অসন তুহিদকে ধন্যবাদ
  • একটি ফাংশন তৈরি করতে +29 বাইট

পূর্ণসংখ্যা বিভাগের মাধ্যমে প্রথম তিনটি সংখ্যা এবং মডুলোর মাধ্যমে শেষ তিনটি সংখ্যা পায়। ব্যাপ্তির প্রথম এবং শেষের পূর্ণসংখ্যার যথাক্রমে এবং যথাক্রমে xফাংশনের আর্গুমেন্ট হিসাবে ইনপুট করা হয়। আউটপুট হয় , মুদ্রিত।abn

Ungolfed:

def x(a, b):
    n = 0
    for i in range(a, b + 1):
        if sum(map(int, str(i // 1000))) == sum(map(int, str(i % 1000))):
            n += 1
    print(n)

1
বিটিডব্লিউয়ের পরে আপনার ইন্ডেন্টেশন লাগবে না। এছাড়াও প্রথম বা শেষ 3 টি সংখ্যার আগে নেওয়ার আগে স্ট্রিংয়ে রূপান্তর করা সম্ভবত সস্তা।
গম উইজার্ড

2
পিপিসিজিতে আপনাকে স্বাগতম! পরীক্ষা করে দেখুন পাইথন মধ্যে golfing জন্য টিপস টিপস এবং ট্রিকস জন্য, আপনি আগ্রহী হলে সবচেয়ে ভাষার জন্য একটি অনুরূপ থ্রেড আছে। এছাড়াও, টিআইও লিঙ্কটিকে প্রদর্শন হিসাবে অন্তর্ভুক্ত করা ভাল অনুশীলন ।
অসোন তুহিদ

আমি প্রতিস্থাপন করার সুপারিশ করছি n=n+1সঙ্গে n+=1এবং ডান যদি বিবৃতি পরে এটি চলন্ত ( if...:n+=1)
Asone Tuhid

আপনি নিতে পারবেন না aএবং bপ্রাক-ঘোষিত ভেরিয়েবল হিসাবে। আপনি হয় একটি ফাংশন আছে বা ইনপুট মাধ্যমে তাদের নিতে হবে
জো কিং

1
আপনি যদি এটি একটি ফাংশন হিসাবে রাখেন তবে আপনি n=0অংশটি শিরোনামে স্থানান্তর করতে পারেন , যেমনdef x(a,b,n=0)
জো কিং

6

আর , 93 86 বাইট

@ জিউসেপ / এর শেষ প্রশংসাগুলিতে সংক্ষিপ্ত যুক্তি

function(a,b){for(i in sprintf("%06d",a:b)){x=utf8ToInt(i);F=F+!sum(x[1:3]-x[4:6])}
F}

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

পূর্ণসংখ্যা ইনপুট। তাদের সাথে প্যাড 0। ছয়টি ASCII কোড পয়েন্টে রূপান্তর করুন। অপব্যবহার Fbuiltin।


আমি এই ফাংশন থেকে একটি এনএ ফিরে আসছি।
রবার্ট এস

আমি সম্পাদনাটি পিছনে ফেলেছি। scipenসমস্যার কারণে নতুন সংস্করণ 0 এ ব্যর্থ হয় । আচ্ছা ভালো.
এনজিএম



6

হুশ , 12 বাইট

#ȯ§¤=Σ↓↑3↔d…

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

ব্যাখ্যা

#(§¤=Σ↓↑3↔d)…  -- example input: 100000 101000
            …  -- inclusive range: [100000,100001..100999,101000]
#(         )   -- count elements where (example with 100010)
          d    -- | digits: [1,0,0,0,1,0]
         ↔     -- | reversed: [0,1,0,0,0,1]
  §     3      -- | fork elements (3 and [0,1,0,0,0,1])
       ↑       -- | | take: [0,1,0]
      ↓        -- | | drop: [0,0,1]
   ¤=          -- | > compare the results by equality of their
     Σ         -- | | sums 1 == 1
               -- | : 1
               -- : 3

আপনার প্রাথমিক সমাধানটিতে আপনার সমাধানের একই ত্রুটি রয়েছে বলে মনে হচ্ছে: [000000, 001001]ফলাফলটি 2( 000000এবং 001001) হওয়া উচিত , তবে 1001পরিবর্তে ফলাফল পাওয়া উচিত । (আমি 1,000,0001
এটির

1
@ কেভিন ক্রুজসেন: আমার মনে হয় আমি মনে করতে পারি এই চ্যালেঞ্জটি প্রাথমিকভাবে পরিষ্কার ছিল না, আরএনটি দেখার জন্য আমার হাতে সময় নেই, তাই আমি কেবল আমার প্রাথমিক জমাতে ফিরে এসেছি যা সঠিক বলে মনে হচ্ছে।
19

5

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

ILΦ…·NN⁼Σι⊗Σ÷ιφ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। সম্পাদনা: আমি প্রথমে ভেবেছিলাম এটি ভাগ্যবান সংখ্যার তালিকা যা প্রয়োজনীয় ছিল। এটি 14 বাইটে ( তালিকার দৈর্ঘ্য লাগে এমনটি সরিয়ে ) বা 20 টি বাইটে করা যেতে পারে যদি আপনি কিছু সুন্দর ফর্ম্যাটিং চান:

EΦ…·NN⁼Σι⊗Σ÷ιφ﹪%06dι

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

    NN                  Input the range endpoints
  …·                    Inclusive range
 Φ                      Filter
        ι               Current value
       Σ                Sum of digits
            ι           Current value
             φ          Predefined variable 1000
           ÷            Integer divide
          Σ             Sum of digits
         ⊗              Doubled
      ⁼                 Equals
E                       Map over results
                   ι    Current value
               %06d     Literal string
              ﹪         Format value
                        Implicitly print each result on its own line

4

পার্ল 5 + -pl -MList::Util+(sum), 49 বাইট

@F=/./g,$\+=sum@F[5,4,3]==sum@F[2,1,0]for$_..<>}{

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


পার্ল 5 + -nl -MList::Util+(sum) -M5.010, 50 বাইট

পরিবর্তে প্রতিটি টিকিট আউটপুট দিতে হয় +1 বাইট:

@F=/./g,sum@F[5,4,3]-sum(@F[2,1,0])||say for$_..<>

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


3

পাইথন 3 , 89 86 বাইট

-2 মিঃ এক্সকোডারকে ধন্যবাদ।

-3 আসোন তুহিদ উত্তর থেকে অনুপ্রেরণা।

lambda a,b:sum(sum(map(int,str(i)))==2*sum(map(int,str(i)[-3:]))for i in range(a,b+1))

পরীক্ষার ফলাফল:

Example 1 : 
a = 0
b = 1
Lucky numbers : 1 

Example 2 : 
a = 100000
b = 200000
Lucky numbers : 5280 

Example 3 : 
a = 123456
b = 654321
Lucky numbers : 31607 

Example 3 : 
a = 0
b = 999999
Lucky numbers : 55252 

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


1
গণনা সংস্করণে, sumকোনও জেনারেটর তৈরি করতে পারেন যাতে বন্ধনীগুলির [...] প্রয়োজন হয় না
মিঃ এক্সকোডার

range(a,b+1)বৈশিষ্ট এখন "সমেত" (এটি আপনার ব্যবহার করতে পারে নি যুক্তরাষ্ট্রের *rস্থানে a,b- আমার পাইথন 2 উত্তর দেখার উপায় দ্বারা)। এছাড়াও নোট করুন যে অনুমানটি এখন নিশ্চিত করে যে এটি অবশ্যই আউটপুট হিসাবে গণনা করা উচিত।
জোনাথন অ্যালান

3

এমএটিএল , 24 বাইট

&:1e3&\,!'%03d'&V2&sw]=s

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

(-২ বাইট লুইস মেন্ডোকে ধন্যবাদ।)

&: - প্রদত্ত দুটি সংখ্যার মধ্যে অন্তর্ভুক্তিমূলক পরিসর তৈরি করুন

1e3&\ - 'ডিভেরেম' - 1000 দ্বারা ভাগ করুন এবং দুটি অ্যারে অনুসারে অনুস্মারক এবং মেঝেতে ভাগফলটি পান।

, - দু'বার করুন

!'03d'&V - প্রতিটি মানকে শূন্য প্যাডযুক্ত তিন-প্রস্থের স্ট্রিংয়ে রূপান্তর এবং রূপান্তর করুন

&s - প্রতিটি সারির মানগুলি যোগ করুন

w - অনুস্মারক অ্যারেটি আনতে স্যুইচ করুন এবং এটি আবার এটি করুন

] - শেষ লুপ

= - সাম্যের জন্য পরীক্ষা করুন (অ্যারে সমান যেখানে 1s ফেরত দেয়)

s - গণনা পেতে তাদের যোগফল (অন্তর্ভুক্ত আউটপুট)


3

কোটলিন , 152 119 বাইট

{a:Int,b:Int->(a..b).map{String.format("%06d",it)}.filter{it[0].toInt()+it[1].toInt()+it[2].toInt()==it[3].toInt()+it[4].toInt()+it[5].toInt()}.count()}

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

এটিকে ছয়টি চিহ্নের স্ট্রিং এবং গণনায় রূপান্তরিত করার চেয়ে দুটি পূর্ণসংখ্যা গ্রহণ করা।

এটি মজির জন্য এবং 119 টি বাইটে তার সমাধানের জন্য এটি অনুকূলিত হয়েছে ।

{a:Int,b:Int->(a..b).count{val d="%06d".format(it);(d[0]-'0')+(d[1]-'0')+(d[2]-'0')==(d[3]-'0')+(d[4]-'0')+(d[5]-'0')}}

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


1
আপনি 133 বাইট অবধি এটি কমপ্যাক্ট করতে পারবেন{a:Int,b:Int->(a..b).map{"%06d".format(it)}.filter{(it[0]-'0')+(it[1]-'0')+(it[2]-'0')==(it[3]-'0')+(it[4]-'0')+(it[5]-'0')}.count()}
মাইজি

3

ডিসি , 44 বাইট

sb[d]sD[dA00~[rA~rA~++rx]dx=D1+dlb!<L]dsLxkz

অন্যথায় খালি স্ট্যাক থেকে দুটি আর্গুমেন্ট নেয়, স্ট্যাকের শীর্ষে আউটপুট দেয়।

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

এখানে চতুর বিটটি হ'ল একটি অনামী (অর্থাতন্ত্রহীন) ম্যাক্রোর ব্যবহার যা অন্য তিন-অঙ্কের অংশে নিজের অনুলিপি চালানোর জন্য মৃত্যুদন্ড কার্যকর করার আগে সদৃশ হয়েছিল।

ব্যাখ্যা

অভ্যন্তরীণ ম্যাক্রোটিতে [rA~rA~++rx]"স্ট্যাকের দ্বিতীয়-শীর্ষে থাকা তিনটি সংখ্যার অঙ্কের অঙ্কের অঙ্কটি গণনা করুন, তারপরে ম্যাক্রো হিসাবে স্ট্যাকের মূল শীর্ষটি সম্পাদন করুন" এর প্রভাব রয়েছে।

মূল প্রোগ্রাম:

sb             Saves the upper bound as b so we'll know when to quit
[d]sD          Defines the macro D, which contextually is "increment stack depth"
[              Start the main loop - the next number to test is on top 
  d              Make a copy to increment later for loop purposes
  A00            The literal "1000"
  ~              Quotient and remainder, so "123456" is now "123 456"
  [rA~rA~++rx]d  Stack is now "123 456 M M", where M is the anonymous macro
  x              Run M on the stack "123 456 M", which (see definition 
                 above) ends up running M on the stack "123 15", which
                 leaves "15 6" (and executes the 6, which is a no-op)
  =D             If the two sums were equal, increment the stack depth
  1+             Increment the current test number
  dlb!<L         Loop unless the test number is now larger than b
]dsLx          Name and start the loop
kz             Current depth is 1+answer, so throw away top and return

3

পাস্কাল (এফপিসি) , 163 153 বাইট

var a,b:Int32;begin read(a,b);for a:=a to b do if a div$186A0+a div$2710mod$A+a div$3E8mod$A=a div$64mod$A+a div$Amod$A+a mod$Athen b:=b+1;write(b-a)end.

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

ব্যাখ্যা

এখানে প্রথমে কিছু সাধারণ-বর্ণনামূলক কোড রয়েছে:

var a,b,i,s,c,d:Int32;
begin
  read(a,b);
  s:=0;
  for i:=a to b do begin
    c:=i div 1000;
    d:=i mod 1000;
    if c div 100+(c div 10) mod 10+c mod 10=d div 100+(d div 10) mod 10+d mod 10 then begin s:=s+1; {writeln(i)} end;
  end;
  write('There are ',s,' numbers');
end.

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

তারপরে আমি লুপটির আচরণকে অপব্যবহার করেছি:

  • লুপ মান (থেকে পূর্বেই নির্ধারণ করা হয় aথেকে b,) তাই aলুপ পরিবর্তনশীল, ড্রপ হিসাবে পুনঃব্যবহার করা যাবে i;
  • লুপটির শেষে, লুপ ভেরিয়েবলটি চূড়ান্ত মান ( bলুপের আগে মান ) এ রেখে যায়। আমি bএকটি ধারক হিসাবে ব্যবহার করেছি , যখন কোনও ভাগ্যবান নম্বর পাওয়া যায় তখন এটি বৃদ্ধি করে এবং লুপের শেষে bভাগ্যবান সংখ্যার পরিমাণ অনুসারে তার পুরানো মান থেকে দূরে থাকে, সুতরাং b-aসঠিক ফলাফল দেয়। এই হ্রাস s

dক্রিয়াকলাপের সাথে সরাসরি পরিবর্তে aলুপটি সংক্ষিপ্ত করে। প্রতিস্থাপন করা হচ্ছে cসরাসরি উপর অপারেশন সঙ্গে aডোজ লুপ কমান না, কিন্তু, ড্রপ পর d, লুপ এর beginএবং endঅপ্রয়োজনীয় এবং আমি শুধুমাত্র 2 ভেরিয়েবল ব্যবহার দিয়ে শেষ :)

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


3

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

... উপরে কোটলিন উদাহরণ থেকে ধার।

import java.util.stream.IntStream;

(a,b)->IntStream.range(a,b+1).mapToObj(i->String.format("%06d",i).getBytes()).filter(c->c[0]+c[1]+c[2]==c[3]+c[4]+c[5]).count();

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

স্ট্রিংয়ের বাইটের যোগফলের তুলনা করা সত্যিকারের অঙ্কগুলি যোগ করার মতোই।


2
( a->b->) তরকারী করে আপনি একটি বাইট সংরক্ষণ করতে পারেন , তবে IntStreamএটি সম্পূর্ণরূপে যোগ্যতা অর্জন করতে হবে না কারণ এটিটি প্রবেশ না করে java.lang
জাকোব

পিপিসিজিতে আপনাকে স্বাগতম! @ যাকোব যেমন উল্লেখ করেছেন, আমদানিগুলি বাইট-কাউন্টের অংশ, সুতরাং আপনাকে আপনার কোড এবং বাইট-কাউন্টে java.util.stream.সামনের অংশটি যুক্ত করতে হবে IntStream। এছাড়াও উল্লেখ হিসাবে জ্যাকব , আপনি ব্যবহার করে একটি বাইট সংরক্ষণ করতে পারবেন a->b->, এবং পরিবর্তন করে কিছু অতিরিক্ত বাইট সংরক্ষণ আপনিও যে কোনো String.formatজন্য "".formatএটি অনলাইনে ব্যবহার করে দেখুন: 139 বাইট । যদিও প্রথম ভাল উত্তর। আমার কাছ থেকে +1 উপভোগকর তোমার থাকা!
কেভিন ক্রুইজসেন



2

জেলি ,  9  8 বাইট

-1 ডেনিসকে ধন্যবাদ ( rµ...E)S-> r...E€Sযেহেতু সবকিছু ভেক্টরাইজ করে))

rdȷD§E€S

একটি ডায়াডিক লিঙ্কটি পরিসরের দুটি প্রান্ত বিন্দু (উভয় উপায়েই) গ্রহণ করে যা ভাগ্যবান টিকিটের গণনা দেয়।

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

কিভাবে?

1000000এন1000
এক্স=এন1000

ওয়াই=এনগেলিক ভাষার1000
এন=1000×এক্স+ +ওয়াই

এক্সওয়াইএন

rdȷD§E€S - Link: integer a; integer b
r        - inclusive range [a,b] (either [a,a+1,a+2,...,b] or [a,a-1,a-2,...,b])
         -                              e.g.: 0       or 78        or 7241
  ȷ      - literal 1000
 d       - divmod (vectorises)                [0,0]      [0,78]       [7,241]
   D     - to decimal lists (vectorises)      [[0],[0]]  [[0],[7,8]]  [[7],[2,4,1]]
    §    - sum each (vectorises)              [0,0]      [0,15]       [7,7]
     E€  - for €ach: all equal?               1          0            1
       S - sum (counts the 1s in the resulting list)

E€Sসংরক্ষণ µ
ডেনিস

@ ডেনিস আহ হ্যাঁ, আমি অন্য একটি সমাধান থেকে কাজ করছিলাম যা পথে সমস্ত কিছু ভেক্টরাইজ করে নি!
জোনাথন অ্যালান

2

পাওয়ারশেল, 85 বাইট

($args[0]..$args[1]|%{'{0:D6}'-f$_}|?{+$_[0]+$_[1]+$_[2]-eq+$_[3]+$_[4]+$_[5]}).count

পরীক্ষার স্ক্রিপ্ট:

$f = {

($args[0]..$args[1]|%{'{0:D6}'-f$_}|?{+$_[0]+$_[1]+$_[2]-eq+$_[3]+$_[4]+$_[5]}).count

}

@(
    ,((0,1), 1)
    ,((1000,2000), 3)
    ,((2000,3000), 6)
    ,((10000, 20000), 282)
    ,((101000, 102000), 6)
    ,((201000, 202000), 10)
    ,((901000, 902000), 63)
    ,((100000, 200000), 5280)
    ,((123456, 654321), 31607)
    #,((0, 999999), 55252)
) | % {
    $c, $e = $_
    "      $c"
    $r = &$f $c[0] $c[1]
    "$($e-eq$r): actual=$r expected=$e"
}

আউটপুট:

      0 1
True: actual=1 expected=1
      1000 2000
True: actual=3 expected=3
      2000 3000
True: actual=6 expected=6
      10000 20000
True: actual=282 expected=282
      101000 102000
True: actual=6 expected=6
      201000 202000
True: actual=10 expected=10
      901000 902000
True: actual=63 expected=63
      100000 200000
True: actual=5280 expected=5280
      123456 654321
True: actual=31607 expected=31607

শক্তির উৎস? আমি সত্যিই দেখতে পাইনি যে এক আসছে: ডি
Дмитрий Архипенко

2

কোটলিন, 95 বাইট

{a:Int,b:Int->(a..b).count{val d="%06d".format(it);d.chars().sum()==2*d.take(3).chars().sum()}}

.kt পরীক্ষার জন্য:

var  f = {a:Int,b:Int->(a..b).count{val d="%06d".format(it);d.chars().sum()==2*d.take(3).chars().sum()}}

fun main(args: Array<String>) {
    println(f(0,1))             // 1
    println(f(1000,2000))       // 3
    println(f(2000,3000))       // 6
    println(f(101000, 102000))  // 6
    println(f(201000, 202000))  // 10
    println(f(901000, 902000))  // 63
    println(f(10000, 20000))    // 282
    println(f(100000, 200000))  // 5280
    println(f(123456, 654321))  // 31607
    println(f(0, 999999))       // 55252
}

ব্যাখ্যা

পরিসীমা থেকে সংখ্যা গণনা করুন যেখানে সমস্ত সংখ্যার অঙ্কের যোগফল প্রথম 3 অঙ্কের ডাবল যোগের সমান।



1

পাইথন 2 ,  83  80 বাইট

-3 অসোন তুহিদের পর্যবেক্ষণ ব্যবহার করে - যান জমা দিন!

lambda a,b:sum(sum(map(int,`v/1000`))*2==sum(map(int,`v`))for v in range(a,b+1))

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

অনেকটা আমার জেলি উত্তরটির মতো (তবে ইনপুটগুলি অবশ্যই এখানে বাছাই করা উচিত a<=b)


ইনপুট জন্য 75 বাইটa, b+1 (যেমন পরিসীমা ডান আবদ্ধ বাদ দেয়):

lambda*r:sum(sum(map(int,`v/1000`))*2==sum(map(int,`v`))for v in range(*r))

আর একবার চেষ্টা কর


1

Clojure, 102 বাইট

#(count(for[i(range %(inc %2)):when(=(let[d(map int(format"%06d"i))](apply +(map -(drop 3 d)d)))0)]i))

স্ট্রিং এবং গণিতের মিশ্রণ খুব মজাদার নয়।



1

সি (জিসিসি), 90 88 বাইট

l=10;u(c,k,y){for(y=0;c<=k;)c++%l+c/l%l+c/100%l-c/1000%l-c/10000%l-c/100000%l?:++y;c=y;}

আমার জাভা উত্তর পোর্ট । এটি এখানে অনলাইনে চেষ্টা করুন । দুটি বাইট গল্ফ করার জন্য সিলিংক্যাটকে ধন্যবাদ ।

Ungolfed:

l=10; // constant, we will be using the number 10 rather a lot
u(c, k, // function returning an integer and taking two integer arguments: lower and upper bound
  y) { // abusing the argument list to declare a variable of type integer: the number of lucky tickets found in the range
    for(y = 0; c <= k; ) // set count to 0 and loop through the range
        c++ %l + c/l %l + c/100 %l // if the digit sum of the second half of the ticket number ...
        - c/1000 %l - c/10000 %l - c/100000 %l // ... is the same as the digit sum of the first half ...
        ?: ++y; // ... it's a lucky ticket: increment the count
    c = y; // return the count
}

সুপারিশ L'✐'পরিবর্তে 10000এবং দায়িত্ব অর্পণ 10একটি পরিবর্তনশীল করতে।
সিলিংক্যাট

@ এসিলিংক্যাটটি আমি পছন্দ করি যে এটি আমাকে একটি অতিরিক্ত পরিবর্তনশীল নাম দেয়, তবে আমি 10 নির্ধারণ করে কোনও বাইট সংরক্ষণ করতে পারি না: বিট.ly / 2O5ND2YL'…' কৌশল হিসাবে , এটি পরিষ্কার; কিন্তু এটি কি বাইট সংরক্ষণ করে? আমার কাছে এটি একটি বহু-বাইট চরিত্র বলে মনে হচ্ছে, তাই চরগুলি সংরক্ষণ করার সময়, এটি বাইট সংরক্ষণ করতে পারে না ... বা এটি করতে পারে?
ওওবালেন্স

@ এসিলিংক্যাট আমার ভুল, একটি ভেরিয়েবলকে 10 বরাদ্দ করে দুটি বাইট সংরক্ষণ করা যায়। ধন্যবাদ.
ওব্লান্স

1

জাভা 8, 101 99 বাইট

u->l->{int n=0,d=10;for(;l<=u;)if(l++%d+l/d%d+l/100%d==l/1000%d+l/10000%d+l/100000%d)++n;return n;}

অন্যান্য জাভা উত্তরের চেয়ে আলাদা পদ্ধতির । স্ট্রিম এবং স্ট্রিংগুলি ব্যবহার করার পরিবর্তে এটি একটি লুপ ব্যবহার করে এবং সরাসরি সংখ্যাগুলি মূল্যায়ণ করে। এটি এখানে অনলাইনে চেষ্টা করুন

দুটি বাইট গল্ফ করার জন্য সিলিংক্যাটকে ধন্যবাদ ।

Ungolfed:

u -> l -> { // lambda taking two integer arguments in currying syntax and returning an integer
    int n = 0, // the counter
        d = 10; // auxiliary constant, we will be using the number 10 rather a lot
    for(; l <=u ; ) // loop over all ticket numbers in the range
        if(l++ %d + l/d %d + l/100 %d // if the digit sum of the second half of the number ...
           == l/1000 %d + l/10000 %d + l/100000 %d) // ... is the same as the digit sum of the first half ...
            ++n; // ... it's a lucky ticket, add 1 to the counter
    return n; // return the count
}

1

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

তাত্ক্ষণিক উইন্ডো এবং কক্ষগুলি [A1] [A2]ইনপুট হিসাবে ব্যবহার করা হচ্ছে ।

c=[A1]-[A2]:d=IIf(c<0,[A1],[A2]):For x=d To d+Abs(c):e=String(6-Len(x),"0")&x:For y=1To 3:i=i+Mid(e,y,1):j=j+Mid(e,7-y,1):Next:z=IIf(i=j,z+1,z):i=0:j=0:Next:?z

1

এফ #, 110 বাইট

let t=string>>Seq.sumBy(int>>(-)48)
let r s e=Seq.where(fun n->t(n/1000)=t(n-(n/1000)*1000)){s..e}|>Seq.length

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

tস্ট্রিংকে সংখ্যায় রূপান্তর করে এবং তাদের যোগফল দেয়। rথেকে সংখ্যার পরিসীমা লাগে sকরার e, এবং সংখ্যার যে অপয়া ছেড়ে ফিল্টার করে। প্রথম তিনটি অঙ্ক সংগ্রহ করা হয় n/1000। দ্বিতীয় তিনটি সংখ্যা দ্বারা গুণ করা হয় n-(n/1000)*1000

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