আমি কীভাবে একটি রেজিডজিট পেতে পারি?


32

বেশ কয়েক ঘন্টা আগে আমার যখন কতটা প্রতিনিধি ছিল তার সম্মানে, যখন আমি প্রথম এই চ্যালেঞ্জটি ভেবেছিলাম:

এখানে চিত্র বর্ণনা লিখুন

ভালো নাম্বার একটি একক অঙ্ক পুনরায় আপ করা হয় বলা হয় repdigits । রেজিডিটস মজা হয়! প্রতিটি অঙ্গ আরো খুশি যদি প্রতিনিধির পরিমাণ তারা ছিল একটি repdigit ছিল হবে ¹ , কিন্তু আমি অধীর am, তাই আপনি কি আমাকে একটা repdigit পেতে দ্রুততম উপায় জানতে সাহায্য করার জন্য প্রয়োজন।

আপনার চ্যালেঞ্জ এখানে:

একটি ধনাত্মক পূর্ণসংখ্যা খ্যাতি প্রতিনিধিত্বমূলক দেওয়া, আউটপুট প্রতিনিধির ন্যূনতম পরিমাণ তারা প্রয়োজন লাভ একটি repdigit পেতে। উদাহরণস্বরূপ, এই চ্যালেঞ্জটি লেখার সময়, ব্যবহারকারী মার্টিন ইন্ডারের 102,856 জন প্রতিনিধি ছিলেন। নিকটতম পুনঃ-অঙ্কটি 111,111, সুতরাং তার পুনর্বিবেচনায় থাকতে হবে: 8255 প্রতিনিধিত্ব

যেহেতু লোকেরা প্রতিনিধিত্ব হারাতে অপছন্দ করে, আমরা কেবল অ-নেতিবাচক পরিবর্তনগুলি বিবেচনা করব। এর অর্থ হ'ল, উদাহরণস্বরূপ, কেউ যদি 1 টি হারানোর পরিবর্তে 12 টি রেপিতে থাকে তবে সমাধানটি হ'ল 10 রেপ অর্জন করা। এটি '0' কে একটি বৈধ আউটপুট হিসাবে মঞ্জুরি দেয়, যেহেতু যার কাছে ১১১ টি প্রতিনিধিত্ব রয়েছে তারা ইতিমধ্যে একটি পুনর্নির্মাণে রয়েছে।

ইনপুট এবং আউটপুট যে কোনও যুক্তিসঙ্গত ফর্ম্যাটে হতে পারে এবং যেহেতু যে কোনও স্ট্যাক এক্সচেঞ্জ সাইটে 1 টিরও কম প্রতিনিধিত্ব করা অসম্ভব তাই আপনি ধরে নিতে পারেন কোনও ইনপুট 1 এর চেয়ে কম হবে না।

একটি কর্নেকেস লক্ষ্য করুন:

যদি কোনও ব্যবহারকারীর 10 টিরও কম প্রতিনিধি থাকে তবে তারা ইতিমধ্যে একটি পুনর্নির্মাণে রয়েছে এবং তাই তাদেরও '0' দরকার।

পরীক্ষার আইও:

#Input      #Ouput
8           0
100         11
113         109
87654321    1234567
42          2
20000       2222
11132       11090

স্ট্যান্ডার্ড লুফোলগুলি প্রয়োগ হয় এবং বাইটের মধ্যে সংক্ষিপ্ততম সমাধানটি জয়ী হয়!


1
@ ডেনিস আমি দেখতে পাচ্ছি না কেন।
ডিজেএমসিএমহেম

1
@ ডেনিস আমি কেন বলব না? আমি সর্বদা আমার চ্যালেঞ্জগুলিতে প্রতিবন্ধক আইও এড়ানোর চেষ্টা করি এবং অনেকগুলি ভাষা (আমার নিজের মতো) স্ট্রিং এবং পূর্ণসংখ্যার ইনপুটটির মধ্যে পার্থক্য করে না, তাই আমি এটিকে সীমাবদ্ধ রাখার কোনও কারণ দেখতে পাচ্ছি না।
ডিজেএমসিএমহেম


6
@ কোল্ডগল্ফ আমি সন্দেহ করি যে খুব শীঘ্রই উইকিপিডিয়া মারা যাবে তবে আমি আরও কিছু তথ্য যুক্ত করেছি।
ডিজেএমসিএমহেম

1
@ ব্রায়ানহ না, সর্বাধিক ক্ষুদ্রতম উপার্জন যা সন্ধ্যাবেলায় প্রতিক্রিয়া সৃষ্টি করে তা হ'ল 5 (প্রশ্ন উত্থাপন)। যাইহোক, এই চ্যালেঞ্জের স্বার্থে, আমরা সত্যতা উপস্থাপনের জন্য নির্দিষ্ট কিছু পরিমাণ রয়েছে তা এই বিষয়টিকে উপেক্ষা করছি। সুতরাং দেওয়া 110উচিত 1, যদিও একটি প্রতিনিধি লাভ করার উপায় নেই।
ডিজেএমসিএমহেম

উত্তর:


9

জেলি , 6 বাইট

DE$1#_

আউটপুট একটি একক অ্যারে।

এটি অনলাইন চেষ্টা করুন! বা বেশিরভাগ পরীক্ষার কেস যাচাই করুন । টেস্ট কেস 87654321 টিআইওর পক্ষে খুব ধীর।

কিভাবে এটা কাজ করে

DE$1#_  Main link. Argument: n

   1#   Call the link to the left with argument k = n, n + 1, n + 2, etc. until one
        match is found, then return the matching k.
  $       Combine the two links to the left into a monadic chain.
D           Convert k to base 10.
 E          Test if all decimal digits are equal.
     _  Subtract n from the result.

1
বাহ ... সমস্ত ASCII। এটি প্রথম। অন্য কোন জেলি সমাধান রয়েছে যা সমস্ত ASCII? উৎসুক.

এই এক এবং এক যে খুঁজে পাওয়া সহজ ছিল না। অন্যরাও থাকতে পারে।
ডেনিস


14

ব্র্যাচল্যাগ , 9 বাইট

:.#++#==,

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

এটি বেশ কার্যকর কারণ এটি পাটিগণিতের সীমাবদ্ধতা ব্যবহার করে।

ব্যাখ্যা

:.            The list [Input, Output].
  #+          Both elements must be positive or zero.
    +         The sum of those two elements…
     #=       …must result in an integer where all digits are the same.
       =,     Assign a value that matches those constraints.

12
আমি পছন্দ করি কিভাবে ব্র্যাচ্ল্যাগ উত্তরটির মতো পড়েন। পছন্দ করুন, আপনি কেবল সংজ্ঞা দিন: This is the answer you're looking for. Figure it out for me:)
ডিজেএমসিএমহেম

1
@ ডিজেএমসিমেহেম এটিই ঘোষিত ভাষাগুলির শীতল উপাদান! (যদিও এটা সব সময় নয় যে ঐন্দ্রজালিক: P)
Fatalize

অসাধারণ সমাধান! আমি মনে করি যে ব্র্যাক্ল্যাগ সবসময় কোনও প্রোগ্রামের শেষে অবশিষ্ট সিএলপি (এফডি) ভেরিয়েবলগুলির একটি অন্তর্নিহিত লেবেলিং সম্পাদন করতে পারে। এটি পেতে, সম্পূর্ণ সম্পাদনটি মোড়ানো করুন call_reside_vars/2, সিএলপি (এফডি) ভেরিয়েবলগুলি আনুন এবং সেগুলি লেবেল করুন। উদাহরণস্বরূপ: call_residue_vars(Program, Vs0), include(fd_var, Vs0, Vs), label(Vs)। আপনি কি মনে করেন?
মাদুর

1
@ মম ধন্যবাদ! আমি প্রোগ্রামগুলির শেষের দিকে বর্ধিতকরণের তালিকায় অন্তর্নিহিত লেবেলিং যুক্ত করব, যেহেতু আমি এমন কোনও পরিস্থিতির কথা ভাবতে পারি না যেখানে মৃত্যুর শেষের দিকে কেউ একটি পরিবর্তনশীল আউটপুট নিতে চাইবে।
অগস্ট


10

পাইথন 2, 41 40 বাইট

def f(n):r=10**len(`n`)/9;print-n/r*-r-n

সংক্ষিপ্ততম পদ্ধতির নয়, তবে খুব দক্ষ। আইডিয়নে এটি পরীক্ষা করুন ।

কিভাবে এটা কাজ করে

ইনপুট করতে 10**len(`n`)চক্রের এন নিকটতম ক্ষমতায় আপ 10 । এর পরে, আমরা 9 দ্বারা ফলাফল বিভক্ত । এটি পুনরায় ডিজিট 1 + 1 প্রদান করে যার এন হিসাবে অনেকগুলি সংখ্যা রয়েছে । আমরা আর এ ফলাফল সংরক্ষণ করি । উদাহরণস্বরূপ, যদি n = 87654321 হয় , তবে r = 11111111

পছন্দসই পুনর্নির্মাণটি একাধিক বা আর হবে । সিদ্ধান্ত নিতে যা, আমরা সিলিং বিভাজন সঞ্চালন এন দ্বারা । পাইথন 2 এর বিভাগ অপারেটর /মেঝে থেকে, এটি অর্জন করা যেতে পারে -n/rযা নেতিবাচক চিহ্ন সহ সঠিক পরম মান অর্জন করবে। উদাহরণস্বরূপ, যদি n = 87654321 , এটি -8 আসবে ।

অবশেষে, আমরা প্রতিটি অঙ্কের জন্য n এর মধ্যে একবারের ভাগফল পুনরাবৃত্তি করতে গণনাফলককে -r দ্বারা গুণিত করি । উদাহরণস্বরূপ, যদি এন = 87654321 , এই আয় 88888888 , যা কাঙ্ক্ষিত repdigit হয়।

অবশেষে প্রয়োজনীয় বর্ধিত গণনা করতে আমরা পূর্ববর্তী ফলাফল থেকে n বিয়োগ করব । আমাদের উদাহরণ হিসাবে এন = 87654321 , এটি 1234567 প্রত্যাশিত হিসাবে প্রত্যাবর্তন করবে ।


1
অন্য 41 হয় lambda n:10**len(`n`)/9*-~int(`n*9`[0])-n। এটি প্রায় কাজ করতে কাজ করে lambda n:int(`n*9`[0]*len(`n`))-n, তবে অঙ্কটি খুব ছোট একটি এবং এটি ঠিক করার কোনও ভাল উপায় আমি দেখতে পাচ্ছি না।
xnor

1
আপনি কি এই সূত্রের পিছনে যুক্তি ব্যাখ্যা করতে আপত্তি করবেন? আমাকে কেমন যেন বাধা দেয় O(1)
shooqie

1
@ শুকী আমি আমার উত্তর সম্পাদনা করেছি।
ডেনিস

@ ডেভ: হু, আসলে এটি আকর্ষণীয়। আমি সর্বদা ধরে নিয়েছি যে বন্ধ-ফর্মুলা == O(1), তবে আমার ধারণা এটি বোধগম্য।
shooqie

আশ্চর্যজনক পদ্ধতির। পাইথন 2 এর বাইটের ক্ষেত্রে এটি কিছুটা দীর্ঘ হতে পারে তবে জাভা 7-এ এটি পুরোপুরি 40 বাইট সংরক্ষণ করে , তাই ধন্যবাদ। :) (এছাড়াও "এটি কীভাবে কাজ করে" অংশটির জন্য অনেক ধন্যবাদ))
কেভিন ক্রুইজসেন

9

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

f=lambda n:1-len(set(`n`))and-~f(n+1)

আইডিয়নে এটি পরীক্ষা করুন । নোট করুন যে পরীক্ষার ক্ষেত্রে 87654321 এর জন্য এই পদ্ধতিরটি খুব অদক্ষ ।

কিভাবে এটা কাজ করে

তাহলে এন ইতিমধ্যে একটি repdigit হয়, 1-len(set(`n`))ফিরে আসবে 0 সেট দৈর্ঘ্যের যেহেতু এন বেস 10 's সংখ্যার হতে হবে 1 । এই ক্ষেত্রে, ফেরৎ 0

তাহলে এন একটি repdigit নয়, f(n+1)যাও recursively কল পরবর্তী সম্ভাব্য মান এন-~বাড়তি রিটার্ন মান ( 0 দ্বারা একটি repdigit পাওয়া যায়) 1 প্রতিটি সময় যাও recursively বলা হয়, যাতে চূড়ান্ত ফেরত মান যতবার সমান, , বলা হয়েছে অর্থাত যতবার এন করতে বৃদ্ধি করা হয়েছিল একটি পুনরায় ডিজিট করুন।


1
Lদীর্ঘস্থায়ীদের পরিচালনা করা দরকার কিনা আমি এই বিষয়গুলির জন্য কখনই পরিষ্কার নই ।
xnor

4
কী, কী করে - তা ... তুমি পারবে না ... কি? এক মুহুর্তের জন্য আমি আমার 52 বাইট উত্তর নিয়ে গর্বিত ছিলাম ...
ডিজেএমসিএমহেম

1
@ এক্সনর: সি এর সমাধানগুলি ডিফল্টরূপে দীর্ঘ পূর্ণসংখ্যার জন্য কাজ করার প্রয়োজন হয় না, তাই আমি সবসময় পাইথনের ক্ষেত্রে একইভাবে সত্য ধরে নিয়েছি।
ডেনিস

1
@ ডিজেএমসিহেম আমার কাছে তাকিয়ে আছে যেমন এটি সংখ্যার স্ট্রিং প্রতিনিধিত্ব থেকে তৈরি একটি সেটের আকার পরীক্ষা করে কোনও পুনরুক্তি না পাওয়া অবধি এটি গণনা করে। -~কল এটি তৈরি করা সংখ্যা গণনা করার জন্য ফাংশন পারেন।
মূল্য কালি

8

পার্ল 6 , 23 বাইট

{($_...{[==] .comb})-1}

একটি ল্যাম্বদা যা ইনপুট নম্বরটিকে আর্গুমেন্ট হিসাবে গ্রহণ করে এবং ফলাফলটি প্রদান করে।

ব্যাখ্যা:

  1. ...ইনপুট নম্বরটি পুনর্নির্মাণ না করা অবধি ক্রমবর্ধমান অপারেটর ব্যবহার করে (এর স্ট্রিং উপস্থাপনাটিকে অক্ষরগুলিতে বিভক্ত করে পরীক্ষা করে দেখানো হয় যে তারা সমস্ত সমান কিনা)
  2. ক্রমের দৈর্ঘ্য থেকে একটিকে বিয়োগ করে।

পরীক্ষাটি প্রতিস্থাপন করা যেতে পারে/(.)$0*/
জো কিং

7

জাভা 7, 116 76 বাইট

int c(int i){int r=(int)Math.pow(10,(i+"").length())/9;return(-i/r-1)*-r-i;}

ব্যবহৃত @Dennis 'আশ্চর্যজনক পদ্ধতির একটি খুব বড় 40 বাইট বাইট গোনা কম।

অবহেলিত ও পরীক্ষার কেস:

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

class Main{
  static int c(int i){
    int r = (int)Math.pow(10, (i+"").length()) / 9;
    return (-i / r - 1) * -r - i;
  }

  public static void main(String[] a){
    System.out.println(c(8));
    System.out.println(c(100));
    System.out.println(c(113));
    System.out.println(c(87654321));
    System.out.println(c(42));
    System.out.println(c(20000));
    System.out.println(c(11132));
  }
}

আউটপুট:

0
11
109
1234567
2
2222
11090

1
আসলে, আপনার "এটি চেষ্টা করুন" প্রিন্ট দেয় 1 যদি আপনি 0 টি মুদ্রণের পরিবর্তে 8 টি খাওয়ান তবে এটি প্রিন্ট দেয়।
এসকিউবি

@ এসকিউবি আহ আপনি ঠিক বলেছেন। হুম, এটি বেশ অদ্ভুত, যেহেতু আমার পোস্টের আউটপুটটি আমি আমার আইডিই কনসোল থেকে অনুলিপি করে রেখেছি ..
কেভিন ক্রুইজসেন

দ্বিতীয় থেকে শেষ আউটপুট হওয়া উচিত নয় 2222এবং চতুর্থ আউটপুটটি হওয়া উচিত 12345678?
ড্যানথম্যান

@ ড্যানডেম্যান আহ, দ্বিতীয় থেকে শেষ অবধি আসলে এর 2222পরিবর্তে হওয়া উচিত 222। আমি কোডটিতে একটি ভুল স্থির করেছি, তবে দুর্ঘটনাক্রমে এখনও পুরানো আউটপুটটি এখানে ব্যবহার করেছি। এটা এখন ঠিক। চতুর্থ হিসাবে, না, এটি হওয়া উচিত 123467(যেমন আপনি ওপি-র প্রশ্নেও দেখতে পারেন)।
কেভিন ক্রুইজসেন

4

পাইথ, 9 8 7 বাইট

1 ফ্রিআমএইচজিমনকে বাইট ধন্যবাদ।

-f@F`TQ

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

খুব অদক্ষ, ইনপুট থেকে পরবর্তী রেজিডিজ্টে সমস্ত সংখ্যা লুপ করে lo


@ এমিগনা জানানোর জন্য ধন্যবাদ। এটি সঠিকভাবে পরীক্ষা করার সময় নেই।
পূর্কাকুডারী

4

মস্তিষ্ক-ফ্লাক 690 358 বাইট

এখানে আমার যেতে

(({})[()])(()){{}(({}())){(({}))(<((()()()()()){}<>)>)<>{({}[()])<>(({}()[({})])){{}(<({}({}))>)}{}<>}{}<>({}<{}>)<>(<((()()()()()){}(<>))>)<>{({}[()])<>(({}()[({}<({}())>)])){{}(<({}({}<({}[()])>))>)}{}<>}{}<>{}{}({}<>)}{}<>{(([])<{{}({}[()]<>)<>([])}{}><>){({}[()]<({}<>)<>>)}{}<>}([]){{}{(<({}<>)<>>)}{}([])}{}<>(([][()()])<{{}{}([][()()])}{}>)}{}({}[{}])

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

ব্যাখ্যা

মূলটির চেয়ে কম ইনপুটটির দ্বিতীয় কপি তৈরি করে শুরু করুন। আমরা অনুলিপিটি পরবর্তী প্রতিলিপি অনুসন্ধান করতে ব্যবহার করব। সংখ্যাটি নিজেই যদি একটি পুনঃ ডিজিট হয় তবে আমরা একটিকে বিয়োগ করি

(({})[()])

আসন্ন লুপটি সন্তুষ্ট করতে একটিকে চাপ দিন। (শুধু শূন্য নয় এক হতে হবে না)

(())

এই লুপটি স্ট্যাকের উপরে একটি পুনর্নির্মাণ না হওয়া অবধি চলবে

{

বাজে পপ। এগুলি শীর্ষে একটি "বুলিয়ান" যা লুপটি চালায়, যেহেতু এটি আর দরকার নেই আমাদের এটি পপ করা।

{}

একটি যোগ করুন এবং শীর্ষে সদৃশ করুন। অনুলিপিটি তার অঙ্কগুলিতে বিভক্ত হবে।

(({}()))

অনুলিপিটি শূন্য না হলেও ...

{

আবার কপি

(({}))

Mod 10 এবং অন্য স্ট্যাকের দিকে যান

(<((()()()()()){}<>)>)<>{({}[()])<>(({}()[({})])){{}(<({}({}))>)}{}<>}{}<>({}<{}>)<>

10 দ্বারা ভাগ (পূর্ণসংখ্যা বিভাগ)

(<((()()()()()){}(<>))>)<>{({}[()])<>(({}()[({}<({}())>)])){{}(<({}({}<({}[()])>))>)}{}<>}{}<>{}{}({}<>)

}

আমাদের অনুলিপি ছিল শূন্য পপ

{}

সংখ্যাটি এখন আমরা তার বেস 10 অঙ্কগুলিতে বিভ্রান্ত করেছি, সুতরাং আমরা সমস্ত সংখ্যার সাথে স্ট্যাকের মধ্যে পরিবর্তন করব।

<>

যদিও অগ্রণী সংখ্যাটি শূন্য নয়

{

আমরা স্ট্যাকের উচ্চতার একটি অনুলিপি (যেমন অঙ্কের সংখ্যা) তুলি ...

(([])<

স্ট্যাকের প্রতিটি সংখ্যা থেকে নিঃশব্দে একটি বিয়োগ করুন

{
{}
({}[()]<>)<>
([])
}
{}

স্ট্যাকের উচ্চতাটি আমরা তুলে নিলাম। (এবং অন্য স্ট্যাকের জন্য অদলবদল)

><>)

আমরা অন্য স্ট্যাকের উপরে যে অঙ্কগুলি রেখেছি তা সঠিক স্ট্যাকের দিকে ফিরে টানতে আমরা স্ট্যাকের উচ্চতা ব্যবহার করি।

{
({}[()]<({}<>)<>>)
}

আমাদের স্ট্যাকের উচ্চতা শূন্যটি পপ করুন

{}

অঙ্কগুলি (বা অঙ্কগুলি কী ছিল) দিয়ে স্ট্যাকের পিছনে সরিয়ে নিন

<>

শেষ লুপ

}

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

স্ট্যাকের উচ্চতা শূন্য নয়

([])
{
{}

অঙ্কটি শূন্য না হলে এটিকে অন্য স্ট্যাকের দিকে সরান এবং শূন্যের সাথে প্রতিস্থাপন করুন।

{
(<({}<>)<>>)
}

এটি পপ করুন (এখন এটি একটি শূন্য)

{}

শেষ লুপ

([])
}
{}

অন্য স্ট্যাকের উপর অদলবদল করুন (দুহ ..)

<>

আমাদের স্ট্যাক উচ্চতার বিয়োগ দু'এর একটি অনুলিপি ধরুন

(([][()()])<

যদিও স্ট্যাকের উচ্চতা দুটি নয় (আসল এবং সঞ্চালক)

{
{}

শীর্ষে পপ করুন

{}

কিছুক্ষণ শেষ

([][()()])
}
{}

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

>)

যদি এই লুপটি শেষ হয় তবে আমরা একটি পুনর্নির্মাণ খুঁজে পেয়েছি

}

"বুলিয়ান" পপ করুন

{}

পুনরুক্তি থেকে মূলটি বিয়োগ করুন

({}[{}])

সিরিয়াসলি, আপনি এটি কিভাবে করবেন? আমি ভাবছিলাম "ওহ, আমি এটি মস্তিষ্কের ঝাঁকুনিতে করতে চাই, তবে কীভাবে তা নির্ধারণ করা যায় তা আমি বুঝতে পারছি না যে এটি পুনরায় ডিজিটিট হবে কিনা"। এটা পাগলামি! আপনি এই উত্তরগুলি বেশিরভাগ তৈরি করতে কোনও স্ক্রিপ্ট ব্যবহার করেন?
ডিজেএমসিএমহেম

@ ডিজেএমসিএমহেম নাপ সবে অনুশীলন করুন। একটি ব্যাখ্যা অনুসরণ করা হবে।
গম উইজার্ড

@ ডিজেএমসিমেহেম আমি দুঃখিত আমি সম্ভবত বুঝতে পারি নি 112 + 110 = 222?
গম উইজার্ড

আমি দুঃখিত, আপনি পুরোপুরি ঠিক বলেছেন, আমি কী বলছি তা আমি জানি না। দয়া করে শেষ মন্তব্যটি উপেক্ষা করুন।
ডিজেএমসিএমহেম

3

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

a=b=input()
while len(set(str(a)))!=1:a+=1
print a-b

পাইথন 2 এর কয়েকটি কৌশল রয়েছে যা এই সংক্ষিপ্ত করে তোলে। উদাহরণস্বরূপ, ইনপুটটি সংখ্যাসূচক, সুতরাং আমাদের ইন্টে কাস্ট করার দরকার নেই। (-5 বাইট) আমাদেরও a-b(-1 বাইট) চারপাশে প্রথম বন্ধনী স্থাপন করার দরকার নেই

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

def f(i):
    a=b=i
    while len(set(str(a)))!=1:a+=1
    return a-b

inputs = [8, 100, 113, 87654321, 42, 20000, 11132]
outputs = [0, 11, 109, 1234567, 2, 2222, 11090]

for i in range(len(inputs)):
    print(f(inputs[i]) == outputs[i])

আপনি এটি অনলাইন চেষ্টাও করতে পারেন !


3

জিএনইউ সেড, 223 + 1 (আর পতাকা) = 224 বাইট

s/$/:0%/
:;y/:%/%:/
/^(.)\1*%/{s/.*%(.*):/\1/;q}
:f;s/9(@*:)/@\1/;tf
s/8(@*:)/9\1/;s/7(@*:)/8\1/
s/6(@*:)/7\1/;s/5(@*:)/6\1/
s/4(@*:)/5\1/;s/3(@*:)/4\1/
s/2(@*:)/3\1/;s/1(@*:)/2\1/
s/0(@*:)/1\1/;s/(^|%)(@*:)/\11\2/
y/@/0/;t

চালান:

sed -rf repdigit.sed <<< "112"

আউটপুট:

110

এটি একটি খাঁটি সেড সমাধান , পাটিগণিতটি কেবল নিয়মিত এক্সপ্রেশন ব্যবহার করে সিমুলেট করা হয়। অ্যালগরিদম নিম্নলিখিত হিসাবে কাজ করে:

  1. প্যাটার্ন স্পেস ফর্ম্যাট সেট করা আছে ^current_reputation:needed_reputation%$
  2. প্রধান লুপ বিভাজক জাগ্রত হয় প্রতিটি পুনরাবৃত্তির:
    ক) %:থেকে বৃদ্ধি প্রযোজ্য needed_reputation
    খ) :%থেকে বৃদ্ধি প্রযোজ্য current_reputation
  3. যদি current_reputation একটি "repdigit", হয় needed_reputation ছাপা হয় এবং প্রোগ্রাম প্রান্ত

2

জাভা, 74 72 বাইট

int c(int i){int n=0;while(!(i+++"").matches("^(.)\\1*$"))n++;return n;}

( অন্য জাভা এন্ট্রি যদি 76 বাইট হয় তবে এটি একটি74 72, যেহেতু এটি দুই চার বাইট সংক্ষিপ্ত)।

যাইহোক, কাউন্টার বাড়ানোর সময় কেবল পুনরায় ডিজিট হওয়া পর্যন্ত কেবল ইনপুটটিকে বাড়িয়ে দিন। কাউন্টারটি ফেরত দিন।

হ্যাঁ, এগুলি এক সারিতে তিনটি প্লাস, ইনপুট বৃদ্ধির জন্য দুটি, একটি খালি স্ট্রিংটিকে স্ট্রিং হিসাবে তৈরি করার জন্য একটি।
না, আমি মনে করি নি যে এটি উভয়ের মধ্যে ফাঁকা জায়গা ছাড়া আইনী হবে তবে আপনি সেখানে যান। টাইপো আপনার জন্য এটি করবে: এক বাইট ছোট orter

কিছুক্ষণের পরিবর্তে ফর-লুপ ব্যবহার করা ঠিক ততটা বাইট লাগে:

int c(int i){int n=0;for(;!(i+++"").matches("^(.)\\1*$");n++);return n;}

সম্পাদনা:

পূর্ববর্তী সংস্করণটির matches("^(\\d)\\1*$")একটি পুনর্নির্মাণের জন্য পরীক্ষা করতে হয়েছিল , তবে যেহেতু আমরা কেবল একটি ইনটকে একটি স্ট্রিংয়ে রূপান্তর করেছি, .তাই ম্যাচটি টু ব্যবহার করা যথেষ্ট।


অবহেলিত ও পরীক্ষার কেস:

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

class Main{
  static int c(int i){
    int n=0;
    while(!(i++ + "").matches("^(.)\\1*$")) {
      n++;
    }
    return n;
  }

  public static void main(String[] a){
    System.out.println(c(8));
    System.out.println(c(100));
    System.out.println(c(113));
    System.out.println(c(87654321));
    System.out.println(c(42));
    System.out.println(c(20000));
    System.out.println(c(11132));
  }

}

আউটপুট:

0
11
109
1234567
2
2222
11090

আমরা সাধারণত লুপগুলির জন্য সর্বদা ব্যবহারের পরামর্শ দিই কারণ মাঝেমধ্যে আপনি বাইট সংরক্ষণের এমন কোনও উপায় স্পট করতে পারেন যা আপনি কিছুক্ষণ লুপ ব্যবহার করতে পারেন না।
নিল

@ নীল আচ্ছা, আমি যদি এখানে জানি তবে আমার রক্তপাত হবে।
এসকিউবি

আমি আপনাকে বাইট সংরক্ষণ করতে পারছি না বলে পরামর্শ দিচ্ছিলাম না, আমি কেবল এটি উল্লেখ করার চেষ্টা করছিলাম যে এটি অবিস্মরণীয় যে লুপটির দৈর্ঘ্য একই ছিল যেহেতু আপনি এটি দীর্ঘতর হওয়ার প্রত্যাশা করবেন না।
নীল

@ নিল আহ, ঠিক আছে
এসকিউবি

2

আর, 102 98 91 বাইট

a=scan(,'');i=0;while(length(unique(strsplit(a,"")[[1]]))!=1){a=paste(strtoi(a)+1);i=i+1};i

অসমাপ্ত:

a=scan(,'') #Asks for input
i=0         #Initialize i to 0, surprisingly

while(length(unique(strsplit(a,"")[[1]]))!=1) 
    #Splits the input into its digits,  
    #compute the length of the vector created by the function `unique`, which gives all the digits once.
    #as long as the this length is different from one :
{
a=paste(strtoi(a)+1) #Increases by one the value of the input (while messing around with its format)
i=i+1                           #Increases by one the value of the counter
}

i #Outputs the counter

( as.numericএবংas.character ) ফর্ম্যাটটি দিয়ে চারপাশে জগাখিচু করা কিছু বাইট যুক্ত করে, তবে আর সত্যিই নমনীয় নয়!


2

পার্ল, 40 + 1 ( -n) = 41 বাইট

/^(.)\1*$/&&say($v|0) or$_++&&++$v&&redo

যদি 0সংখ্যাটি ইতিমধ্যে কোনও পুনঃ ডিজিট ডিজিটের পরিবর্তে কিছু না ছাপানো গ্রহণযোগ্য হয় তবে 37 বাইটই যথেষ্ট:

/^(.)\1*$/&&say$v or$_++&&++$v&&redo

-n(1 বাইট) এবং -Eবা -M5.010(বিনামূল্যে) দিয়ে চালান :

perl -nE '/^(.)\1*$/&&say($v|0) or$_++&&++$v&&redo'

ব্যাখ্যা : কোডের দুটি বড় অংশ রয়েছে: /^(.)\1*$/&&say$vএবং $_++&&++$v&&redo। প্রথম পরীক্ষা যদি $_একটি পুনর্নির্মাণ হয়; হ্যাঁ যদি এটা সংখ্যা আমরা আসল সংখ্যা যোগ করা এটি একটি repdigit করুন (ছাপে $v), এবং কোন যদি, আমরা উভয় 1 ছিল $_এবং $v, এবং শুরু।


1
পার্লের ৪১ বাইট, স্ট্রিংয়ের দৈর্ঘ্যের মাধ্যমে 1 ম অঙ্কের নকল (বা কোনও অঙ্ক 1 ম এর চেয়ে বড় যদি 1 তম) নকল করে, তবে ইনপুট বিয়োগ করে:perl -pe '@x=sort/./g;//;$_=(($x[-1]>$&)+$&)x+@x-$_'
এরিক

2

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

f=(n,p=1)=>n<p?-~(n*9/p)*~-p/9-n:f(n,p*10)

ব্যাখ্যা: Recursively নির্ণয় pপরবর্তী শক্তি 10পর n। পুনরাবৃত্তি করা অঙ্কটি তারপরে গণনা করা হবে এবং পুনরাবৃত্তিটি 1+floor(9n/p)সহজভাবে হয় (p-1)/9, যা থেকে ফলাফলটি অনুসরণ করা হয়।


2

05 এ বি 1 ই , 10 6 বাইট

∞.Δ+Ë

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

ব্যাখ্যা

∞<      # from the infinite list of non-negative integers
  .Δ    # find the first number where
     Ë  # all digits are equal
    +   # after adding the input

1
-২ বাইট যে পোস্ট করার সময় এখনও সন্দেহ করা সম্ভব হয়নি: সরান §এবং এতে পরিবর্তন ¹-করুন α। এবং এখানে বরং একটি অনুরূপ 8-বাইট বিকল্প:∞+.ΔÙg}α
কেভিন ক্রুইজসেন


1

আসলে, 15 বাইট

;D;WXu;$╔l1<WX-

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

ব্যাখ্যা:

;D;WXu;$╔l1<WX-
;                dupe
 D;              decrement, dupe
   WXu;$╔l1<W    while top of stack is truthy:
    X              discard
     u             increment
      ;            dupe
       $╔l1<       1 if len(str(TOS)) > 1 else 0 (check if the string representation of the TOS contains only one unique digit)
                 after the loop, the stack will be [1 repdigit input]
             X   discard
              -  subtract input from repdigit

1

জেলিফিশ , 20 বাইট

p
<
)\&&&~j<i
->N>u0

এটি অনলাইন চেষ্টা করুন! টিআইও দীর্ঘ পরীক্ষার কেসগুলি পরিচালনা করতে পারে না, তবে পর্যাপ্ত সময় এবং মেমরির কারণে তাদেরও কাজ করা উচিত।

ব্যাখ্যা

  • iএটি ইনপুট, এবং <এটি হ্রাস। এই মানটি বামে ফাংশনে খাওয়ানো হয়।
  • \> ডানদিকে ফাংশনটি সত্যবাদী মান না দেওয়া পর্যন্ত মান (অন্তত একবার) বৃদ্ধি করে।
  • পরীক্ষা ফাংশনটি &চারটি ফাংশনের একটি রচনা ( গুলি)।
  • 0~j স্ট্রিংয়ে রূপান্তর করে।
  • u সদৃশ অঙ্কগুলি সরিয়ে দেয়।
  • > ফলাফলযুক্ত স্ট্রিংয়ের মাথাটি সরিয়ে দেয়।
  • Nযৌক্তিক অবহেলা: এটি 1একটি খালি স্ট্রিং দেয় এবং খালি নয় 0for সুতরাং ফাংশন একটি প্রতিনিধির অঙ্ক অবস্থান পরীক্ষা, এবং ফল \থেকে পরবর্তী প্রতিনিধির অঙ্ক কাউন্টিং হয় <i
  • )-ফাংশন ইনপুট থেকে ফলাফলটি বিয়োগ করে, এটি <i
  • এই পার্থক্য এক এক দ্বারা বন্ধ, তাই <এটি হ্রাস। পরিশেষে, pফলাফল মুদ্রণ।

1

পাওয়ারশেল ভি 2 +, 66 বাইট

param($n)for($x=+"$($n[0])";($y="$x"*$n.length)-lt$n;$x++){}+$y-$n

পাওয়ারশেলের সাধারণত গল্ফ-ফর-গল্ফ খুব আলগা ingালাই এখানে একটি বড় পতন is

$nস্ট্রিং হিসাবে ইনপুট নেয় এবং একটি forলুপে প্রবেশ করে । সেটআপের পদক্ষেপের জন্য, আমরা প্রথম অক্ষরটি বের করি $n[0]তবে "$(...)"কোনও int হিসাবে কাস্টিংয়ের আগে +সংরক্ষণের আগে এটিকে আবার স্ট্রিংয়ে রূপান্তর করতে হয় $x। অন্যথায়, পরবর্তীকালে গাণিতিকগুলি চর-কোডের ASCII মানটি ব্যবহার করবে।

শর্তসাপেক্ষে পরীক্ষা করে বলা হয় যে $n.length "$x"গুলি থেকে অস্থায়ীভাবে সঞ্চিত স্ট্রিংগুলি এস $y-এর চেয়ে কম কম কিনা $n। যতক্ষণ না এটি হয় ততক্ষণ, আমরা বাড়তি $x++, পরবর্তী লুপের জন্য শর্তসাপেক্ষ সেট আপ করি।

উদাহরণস্বরূপ, ইনপুটটির জন্য 123, $yশর্তাধীন যখন প্রথম চেক করা হবে তখন এর মান হবে 111যা কম-এর চেয়ে কম $n, তাই লুপটি অবিরত থাকবে। লুপের শরীরে কিছুই নেই, তাই পদক্ষেপের বৃদ্ধি ঘটে $x++, আবার শর্তসাপেক্ষে আবার পরীক্ষা করা হয়। এই সময়টি $yসমান 222, যা এর চেয়ে বেশি $n, তাই লুপটি সমাপ্ত হয়। যদি ইনপুটটি ইতিমধ্যে একটি পুনরায় ডিজিট হয় তবে শর্তসাপেক্ষে সন্তুষ্ট হয় না, কারণ সেই সময়ে $yসমান $n

লুপটি বের হয়ে গেলে, আমরা $yএকটি পূর্ণসংখ্যার কাছে কাস্ট করি +, তারপরে বিয়োগ করুন $n। সেই ফলাফলটি পাইপলাইনে রেখে গেছে এবং আউটপুট অন্তর্ভুক্ত।


1

পিএইচপি 5.6, 59 53 51 50 বাইট

সংরক্ষিত 6 8 @manatwork ধন্যবাদ বাইট।

while(count_chars($argv[1]+$b,3)[1])$b++;echo$b?:0

এর সাথে পরীক্ষা করুন:

php test.php 11132

count_chars()দ্বিতীয় প্যারামিটার হিসাবে 3 ফাংশন একটি স্ট্রিং স্বতন্ত্র অক্ষর সঙ্গে একটি স্ট্রিং ফেরৎ। যখন এই স্ট্রিংটি 1 অক্ষর দীর্ঘ [1]হবে ( যখন দৈর্ঘ্য 1 হবে তখন এটি প্রত্যাবর্তিত হবে) তবে প্রতিধ্বনিত হবে $b, অন্যথায় বৃদ্ধি $bএবং আবার লুপ হবে।


1
এর দুর্দান্ত ব্যবহার count_chars()। 3 মোড প্যারামিটার হিসাবে প্রায় 3? সুতরাং এই হবে whileশর্ত: count_chars($argv[1]+$b,3)[1]
manatwork

সত্যিই চালাক, ধারণাটির জন্য ধন্যবাদ। আমি মোডের জন্য মূলত 3 টি ব্যবহার করার চেষ্টা করেছি তবে এটি ছাড়া এটি ব্যবহারের কোনও উপায়ের কথা ভাবতে পারি না countবা strlenএটি একই দৈর্ঘ্যে পরিণত হয়েছিল।
স্যামসকাঞ্চ

1
ওহ, এবং echo$b?:0;
initial বিটি শুরু না করে

ওও আমি ফাঁকা টার্নারি সম্পর্কে ভুলে গেছি। ভাল কল!
স্যামস্কাঞ্চ

1

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

q`QtVda}G-

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

সমস্ত অঙ্ক সমান না হওয়া পর্যন্ত এটি ইনপুট বৃদ্ধি করে রাখে, সুতরাং এটি ধীর হয়। 87654321অনলাইন সংকলক ইনপুট সময় শেষ।

q      % Take input implicitly. Subtract 1
`      % Do...while loop
  Q    %   Increment top of the stack
  tV   %   Duplicate and convert to string (i.e. digits of the number)
  d    %   Difference between consecutive digits
  a    %   True if any such difference is nonzero. This is the loop condition
}      % Finally (execute on loop exit)
  G-   %   Subtract input. This is the final result, to be (implicitly) displayed
       % End loop implicitly. If loop condition (top of the stack) is truthy: proceeds 
       % with next iteration. Else: executes the "finally" block and exits loop
       % Display implicitly

1

রুবি, 42 টি অক্ষর

->n{i=0;n.next!&&i+=1while n.squeeze[1];i}

স্ট্রিং ইনপুট আশা করে।

নমুনা রান:

irb(main):019:0> ->n{i=0;n.next!&&i+=1while n.squeeze[1];i}['87654321']
=> 1234567

রুবি, 39 টি অক্ষর

রিকার্সিভ কল, বড় ফলাফলগুলিতে "সিস্টেমস্ট্যাক এরির: স্ট্যাক স্তরটি খুব গভীর" তে চলেছে।

r=->n,i=0{n.squeeze[1]?r[n.next,i+1]:i}

নমুনা রান:

irb(main):001:0> r=->n,i=0{n.squeeze[1]?r[n.next,i+1]:i}
=> #<Proc:0x00000002367ca0@(irb):10 (lambda)>

irb(main):002:0> r['20000']
=> 2222

1

মতলব, 65 64 বাইট

t=input('');i=0;while nnz(diff(+num2str(t+i)))
i=i+1;end
disp(i)

লুপের কারণে এটি বরং ধীর ...

ব্যাখ্যা

t=input('')  -- takes input
i=0          -- set counter to 0
while 
          num2str(t+i)   -- convert number to string 
         +               -- and then to array of corresponding ASCII codes
    diff(             )  -- produce vector of differences (all zeros for 'repdigit')
nnz(                   ) -- and count non-zero entries
i=i+1                    -- while not all digits are the same increase the counter
end          -- end while loop
disp(i)      -- print the counter

@ লুইস মেন্ডোকে ধন্যবাদ একটি বাইট সংরক্ষণ করা ।


আপনার কি সত্যই দরকার +0? diffস্বয়ংক্রিয়ভাবে সংখ্যায়
লুইস মেন্ডো

আমার সংস্করণে যদি আমি এটি যুক্ত না করি তবে diffস্ট্রিংটিকে সিম হিসাবে বিবেচনা করে এবং পার্থক্য করার চেষ্টা করি।
pajonk

তারপরে সম্ভবত প্লাসটি সামনের দিকে সরান (অবিচ্ছিন্ন অপারেটর হিসাবে) এবং শূন্যটি সরিয়ে ফেলুন
লুইস মেন্ডো

1

এক্সেল, 85 79 বাইট

নিম্নলিখিত সূত্রটি সেল ব্যতীত অন্য কোনও ঘরে রাখুন Nকারণ এটি ইনপুটটির রেফারেন্স সেলের নাম:

=IF(1*(REPT(LEFT(N),LEN(N)))<N,REPT(LEFT(N)+1,LEN(N))-N,REPT(LEFT(N),LEN(N))-N)

ব্যাখ্যা:

  • Nইনপুট এবং রেফারেন্স সেলের নাম
  • LEFT(N) ইনপুট মানটির প্রথম অঙ্কটি গ্রহণ করুন।
  • LEN(N) ইনপুট মান দৈর্ঘ্য প্রদান।
  • REPT(LEFT(N),LEN(N))ইনপুট মান LEN(N)বারের প্রথম অঙ্কটি পুনরাবৃত্তি করুন এবং পাঠ্য বিন্যাসটিকে সংখ্যা বিন্যাসে রূপান্তর করতে এটি 1 দিয়ে গুণ করুন যাতে আমরা এটি সংখ্যা তুলনার জন্য ব্যবহার করতে পারি।
  • মাইক্রোসফ্ট এক্সেলের আইএফ ফাংশনের সিনট্যাক্সটি হ'ল: আইএফ (শর্ত, [মান_আর_আর_আরক], [মান_ফ_ফ্যালস]) , সুতরাং পুরো সূত্রটি স্ব- বর্ণনামূলক makes

আপনি বাদ পারেন Num_charsমধ্যে LEFTএবং 4 বাইট সংরক্ষণ করুন:LEFT(N)
Wernisch

এটি 6 বাইট করুন
ওয়ার্নিশ

@ ওয়ার্নিশ ধন্যবাদ সম্পাদনা করা হয়েছে।
আনস্তাসিয়া-রোমানোভা 秀

IFশর্তটি জোর করে 1বা এটিকে 0ব্যবহার --করে আপনি 25 বাইট সংরক্ষণ করতে পারবেন আপনার নিজেকে কেবল পুনরাবৃত্তি করতে হবে না +1:=REPT(LEFT(N)+(--1*(REPT(LEFT(N),LEN(N)))<N),LEN(N))-N
i_saw_drones

আসলে, এই ইনস্ট্যান্সের মধ্যে, আপনি এটি স্পষ্টভাবে বাধ্য করতে আপনি পরিবর্তে শুধু ব্যবহার করতে পারেন প্রয়োজন হবে না: =REPT(LEFT(N)+(1*(REPT(LEFT(N),LEN(N)))<N),LEN(N))-N, 27 বাইট সংরক্ষণ 52. মোট দিতে
i_saw_drones

1

ব্র্যাচল্যাগ ভি 2, 6 বাইট

;.+=∧ℕ

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

  +       The sum of
          the input
;         and
 .        the output
   =      is a repdigit,
    ∧     and
          the output
     ℕ    is a whole number.

5-বাইট +↙.=∧বাদ দেওয়া থেকে দূরে চলে যায় কারণ এটি অ-পজিটিভ আউটপুটগুলি মোটেই চেষ্টা করে না, তবে এটি ইতিমধ্যে একটি সংখ্যা দেওয়া হলে ব্যর্থ হয় যেটি ইতিমধ্যে অ-ইতিবাচক ফলাফলগুলি চেষ্টা করে না।


0

জাভা, 59 বাইট

int c(int i){return(i+"").matches("^(.)\\1*$")?0:c(i+1)+1;}

(আমি এখনও জাভা এন্ট্রিগুলি কীভাবে গণনা করব তা নিশ্চিত নই, তবে প্রথম জাভা এন্ট্রি দ্বারা নির্ধারিত মান অনুসারে এই এন্ট্রিটি 59 বাইট, যেহেতু এটি 17 বাইট সংক্ষিপ্ত)।

যাইহোক, যদি আমাদের কোনও পুনঃ ডিজিট থাকে তবে 0 ফিরে আসুন, অন্যথায় ইনপুটটিতে 1 যুক্ত করুন, নিজে কল করুন এবং ফলাফলটিতে 1 যুক্ত করুন।


অবহেলিত ও পরীক্ষার কেস:

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

class Main{
  static int c(int i) {
    return
      (i+"").matches("^(.)\\1*$")
      ? 0
      : c(i+1) + 1;
  }

  public static void main(String[] a){
    System.out.println(c(8));
    System.out.println(c(100));
    System.out.println(c(113));
    System.out.println(c(42));
    System.out.println(c(20000));
    System.out.println(c(19122));
    // Entry below will run out of memory
    System.out.println(c(19121));
  }
}

আউটপুট:

Runtime error   time: 0.09 memory: 321152 signal:-1
0
11
109
2
2222
3100

যেমন আপনি দেখতে পাচ্ছেন, শেষ এন্ট্রিটি শেষ হওয়ার আগে মেমরির বাইরে চলে যায়। StackOverflowErrorএটিকে (খুব উপযুক্ত) নিক্ষেপ করা হয়েছে java.util.regex.Pattern.sequence(Pattern.java:2134), তবে আমি পুরোপুরি আত্মবিশ্বাসী যে রেজেক্স নিজেই কোনও ভুল নেই, কারণ এটি আমার আগের এন্ট্রিতে আমি একই ব্যবহার করেছি



0

সি, 84 বাইট

d,n,l,f;F(i){for(n=0;1;){l=i+n++;d=l%10;f=0;while(l/=10)f|=l%10-d;if(!f)return--n;}}

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

int main() {
  printf("%d\n", F(8));
  printf("%d\n", F(100));
  printf("%d\n", F(113));
  printf("%d\n", F(87654321));
  printf("%d\n", F(47));
  printf("%d\n", F(20000));
  printf("%d\n", F(11132));
}

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