চ্যাম্পনারউনের জিরো কোথায়?


23

একত্রিতভাবে ক্রমবিন্যাসিত সমস্ত অব্যাহত দশমিক পূর্ণসংখ্যার অসীম স্ট্রিং বিবেচনা করুন ( চ্যাম্পারনউয়ের ধ্রুবকের অনুরূপ ):

0123456789101112131415161718192021222324252627282930...979899100101102103...

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা এই অসীম স্ট্রিংয়ে সূচকগুলি (0-ভিত্তিক) হয় এমন একটি nonnegative পূর্ণসংখ্যার মধ্যে নেয়। আউটপুট একটি truthy মান যদি অঙ্ক ইন্ডেক্স 0, অন্যথায় আউটপুট একটি falsy মান যদি অঙ্ক 1-9 হয়।

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।

প্রথম 25 সত্যবাদী-ইনপুটগুলি হ'ল:

0
11
31
51
71
91
111
131
151
171
191
192
194
197
200
203
206
209
212
215
218
222
252
282
312

আপনার প্রোগ্রামটি যদি মেমরির দক্ষ হয় তবে কুডোস, তবে এটি কোনও প্রয়োজন নয়।



এই প্রোগ্রামটি বা সেই ফাংশনটি তার সূচী থেকে এই অ্যারের অঙ্কটি ফেরত দেওয়ার চেয়ে আরও ভাল নয় [কেবলমাত্র এটি 0 নয় বা না]?
রোজলুপি


আমি বুঝতে পারি না এই প্রশ্নটি যা জিজ্ঞাসা করছে তা হ'ল যে কেউ এটি ব্যাখ্যা করতে পারে
শন ওয়াইল্ড

উত্তর:


12

হাস্কেল, 25 বাইট

(<'1').((show=<<[0..])!!)

ব্যবহারের উদাহরণ: (<'1').((show=<<[0..])!!) 312->True



7

গণিত, 42 40 বাইট

(0@@Join@@IntegerDigits@Range@#)[[#]]<1&

বেনামে ফাংশন। ইনপুট হিসাবে একটি সংখ্যা নেয় এবং হয় Trueবা Falseআউটপুট হিসাবে প্রদান করে। দীর্ঘতর, তবুও আরও কার্যকর (?) সমাধান:

RealDigits[ChampernowneNumber[],10,1,-#][[1,1]]<1&

5

সিজেম, 9 বাইট

{_),s=~!}

এটি একটি নামবিহীন ব্লক (ফাংশন) যা পূর্ণসংখ্যার মধ্যে নেয় এবং সেই অনুযায়ী 0 বা 1 প্রদান করে।

ব্যাখ্যা:

{       }        Defines a block
 _               Copy input n
  ),             Increment n and take range
    s            Convert to string - for a list of numbers this concatenates
                 the digits
     =           Index, getting nth digit
      ~          Evaluate the digit character into a number
       !         Logical negation

অনলাইন দোভাষী । মনে রাখবেন যে ~একটি ব্লককে মূল্যায়ন করে। বিকল্প হিসাবে, আপনি এই পরীক্ষার স্যুটটি চালাতে পারেন যা ,সত্যবাদী মানের জন্য প্রথম 1000 নম্বরগুলি ফিল্টার করে।


4

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

Qt:qVXzw)U~

অনলাইনে চেষ্টা করে দেখুন!

ব্যাখ্যা :

    % Implicitly grab input as an integer (N)
Qt  % Add 1 and duplicate
:q  % Create an array from [0 ... N]
V   % Convert each entry to a string (places spaces between each number)
Xz  % Remove all whitespace
w)  % Get the N+1 element of the string (since MATL uses 1-based indexing natively)
U~  % Convert the result back to a number and negate which yields TRUE if it was '0' and
    % FALSE otherwise

4

ব্র্যাচল্যাগ , 10 8 বাইট

2 বাইট ধন্যবাদ ফ্যাটালাইজ করার জন্য।

y@ec:?m0

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

y@ec:?m0

y         range from 0 to Input, inclusive,
 @e       the digits of every number in that range,
   c      concatenated
    :?m   the Input-th digit
       0  is zero.

@eভেক্টরাইজগুলি তাই y@ec:?m02 বাইট সংরক্ষণ করতে কাজ করে।
32

@ ফ্যাটালাইজ আরও কতজন অপারেটর ভেক্টরাইজ করবেন?
লিকি নুন

শুধু #0, #1, #+, #_, #>এবং #<vectorize মত @eআছে। Predicates যে যেমন vectorize কিছু +বা *না vectorize সর্বনিম্ন তালিকা স্তর recursively করতে, এবং ইনপুট কাঠামো উপর নির্ভর করে একই জিনিস সঞ্চালন না।
মারাত্মক করুন

4

পার্ল 6 , 26 25 বাইট

{!+map(|*.comb,0..*)[$_]}

একটি ল্যাম্বদা যা সংখ্যাকে ইনপুট হিসাবে নেয় এবং একটি Trueবা প্রদান করে False

স্মৃতি-সাশ্রয়ী।

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

  1. 0..* - 0 থেকে অসীমের পরিসরটি তৈরি করুন।
  2. map(|*.comb, )- অলসভাবে পরিসীমা পুনরাবৃত্তি করুন, প্রতিটি সংখ্যাকে তার স্ট্রিং উপস্থাপনের অক্ষরের সাথে প্রতিস্থাপন করুন এবং একটি নতুন অলস ক্রমটি ফিরিয়ে দিন। |নতুন ক্রম চ্যাপ্টা রাখে।
  3. [$_]- সূচিত্রে উপাদানটিকে (স্পষ্টভাবে ঘোষিত) ল্যাম্বদা পরামিতি দ্বারা নির্ধারণ করুন $_
  4. +- এটি একটি সংখ্যা জোর করে। (এই পদক্ষেপটি প্রয়োজন কারণ স্ট্রিং ফাঁকা না থাকলে সরাসরি একটি বুলিয়ানকে স্ট্রিং জোর দেওয়া সর্বদা সত্য দেয়))
  5. ! - এটি একটি বুলিয়ানকে বাধ্য করুন এবং এটিকে অবহেলা করুন।

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

সম্পাদনা: -২ বাইট বি বিগিলের জন্য ধন্যবাদ।


আপনি ইতিমধ্যে একটি পি 6 উত্তর আছে কিনা তা দেখার জন্য {!+map(|*.comb,0..*)[$_]}আমি {!+({|($++).comb}...*)[$_]}আগে এসেছিলাম আপনার নিজেরটি সংক্ষিপ্ত করতে পারেন । !+প্রতিস্থাপন করা যেতে পারে1>
ব্র্যাড গিলবার্ট বি 2 গিল

4

জেলি , 6 বাইট

RDF⁸ị¬

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

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

RDF⁸ị¬  Main link. Argument: n

R       Range; yield [1, ..., n].
 D      Decimal; convert all integers in that range to base 10 arrays.
  F     Flatten the result.
   ⁸ị   Extract the digit at index n (1-based).
        This returns 0 if the array is empty (n = 0).
     ¬  Logical NOT; return 1 if the digit is 0, 0 if not.

4

পাইথন 3.5, 40 বাইট

lambda n:('%d'*-~n%(*range(n),n))[n]<'1'

এটি repl.it পরীক্ষা করুন ।

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

ইনপুট এন এর জন্য , '%d'*-~nফর্ম্যাট স্ট্রিং n + 1 বার পুনরাবৃত্তি করে ।

(*range(n),n)পরিসীমা আনপ্যাক করে [0, ..., n - 1] এবং টিপল দেয় (0, ..., এন)

...%...পরিসরের সাথে সম্পর্কিত পূর্ণসংখ্যার সাথে % d এর প্রতিটি ঘটনাকে প্রতিস্থাপন করে 01234567891011 স্ট্রিং প্রদান করে ... এন

(...)[n]<'1'সূচী n তে অক্ষর নির্বাচন করে এবং এটি 1 টির চেয়ে কম হলে পরীক্ষা করে ।


3

পাইথন 3, 44 বাইট

lambda n:''.join(map(str,range(n+1)))[n]<'1'

নাম প্রকাশে অনিচ্ছুক একজন ফাংশন যা যুক্তি এবং আয় মাধ্যমে ইনপুট নেয় Trueবা Falseযথাযথ হিসাবে।

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

lambda n      Anonymous function with input n
range(n+1)    Yield the range [0, n]...
map(str,...)  ...convert all elements to string...
''.join(..)   ...concatenate...
...[n]        ...yield nth character...
:...<'1'      ...return True if int(character)==0 else return False

আইডিয়নে চেষ্টা করে দেখুন


3

পাইথ, 8 7 বাইট

-1 বাইটের জন্য @ লিক্যনুনকে ধন্যবাদ

!s@jkUh

পাইথের গল্ফ করার এটি আমার প্রথম চেষ্টা।

একটি সম্পূর্ণ প্রোগ্রাম যা প্রিন্ট করে Trueবা Falseযথাযথ হিসাবে।

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

প্রথম 25 সত্যবাদী ইনপুট

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

!s@jkUh    Program. Input: Q
      hQ   Head. Yield Q+1
     U     Unary range. Yield [0, Q]
   jk      Join. Join on empty string
  @     Q  Index. Yield string[Q]
 s         Integer. Convert to integer
!          Logical negation. 0 -> True, all other digits -> False
           Print. Print result implicitly

3

সিলোস , 141 বাইট

readIO
i+1
lblL
c=C
p=1
lblc
p*10
c/10
if c c
p/10
lbln
m=C
m/p
m%10
p/10
i-1
if i C
GOTO H
lblC
if p n
C+1
GOTO L
lblH
m/m
m-1
m|
printInt m

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

মাত্র 5 টি পূর্ণসংখ্যার ব্যবহার করে, সর্বাধিক মেমরির দক্ষতা \ o /

ব্যাখ্যা

আমরা চ্যাম্পারনউয়ের ধ্রুবকটিতে ইনপুট হিসাবে যতগুলি সংখ্যা তৈরি করি।

মূল লুপে, আমরা নিম্নলিখিতটি করি:

  • বর্তমান নম্বরটির দৈর্ঘ্যটি ফ্লোর_বিভাজন করে 10 দ্বারা বারবার বিভাজিত হয়ে এটি 0 না হওয়া পর্যন্ত সন্ধান করুন এবং তারপরে ব্যবহৃত বিভাগগুলির সংখ্যা গণনা করুন।
  • বিভাগগুলির সংখ্যা সংরক্ষণ করার পরিবর্তে, আমরা পরিবর্তে 10 থেকে সেই সংখ্যাটি সঞ্চয় করি।
  • যেমন প্রতিটি অঙ্ক মাধ্যমে পুনরুক্তি: 100গুলি অঙ্ক 1234দ্বারা প্রাপ্ত হয় (1234/10)%10যেখানে /মেঝে বিভাগ।
  • উত্পন্ন প্রতিটি অঙ্কের জন্য, ইনপুট থেকে 1 নিন, যখন ইনপুটটি শূন্যে পৌঁছেছে কিনা তা পরীক্ষা করে।
  • যদি ইনপুটটি শূন্যে পৌঁছে যায়, বর্তমান সংখ্যাটি 0 এবং তারপরে থামবে কিনা তা পরীক্ষা করে দেখুন।

3

জাভাস্ক্রিপ্ট (ES6), 45 বাইট + কুডোস

f=(n,s='0')=>s[n]?!+s[n]:f(n-s.length,-~s+'')

আমার সেরা নন-কুডোস সংস্করণটি ছিল 34 বাইট:

n=>!+(g=s=>s[n]||g(s+i++))('',i=0)

1
আমি ভেবেছিলাম কুডোস একটি গ্রন্থাগার ছিল যতক্ষণ না বুঝতে পেরেছি যে চ্যালেঞ্জের কোনও কুডো রয়েছে: পি
কনর

1

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

n=>[...Array(n+1)].reduce((a,_,i)=>a+i,'')[n]<1


1

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

n=>!+(r=i=>i>n?'':i+r(i+1))(0)[n]

উদাহরণ:

let f =
n=>!+(r=i=>i>n?'':i+r(i+1))(0)[n]

// test all integers in [0, 312]
for(var n = 0, list = []; n <= 312; n++) {
  f(n) && list.push(n);
}
console.log(list.join(','));


1

গ্রোভি, 56 বাইট

def f(n){def s=''<<'';(0..n).each{s<<it};!(s[n] as int)}

অভিনব কিছু নয়, তবে আমি কিছু নতুন জিনিস চেষ্টা করছি।

def f(n) {
  def s = ''<<''           // declare a StringBuffer
  (0..n).each { s << it }
  !(s[n] as int)           // Groovy considers a non-null char truthy, so we have to cast 
}

1

পার্ল, 24 বাইট

এর জন্য +1 অন্তর্ভুক্ত -p

এসটিডিনে ইনপুট দিয়ে চালান:

zero.pl <<< 31

শূন্যের জন্য 1 মুদ্রণ করুন, অন্যথায় কিছুই নয়

zero.pl

$_=!(map/./g,0..$_)[$_]

1

পিএইচপি, 36 বাইট

<?=!join(range(0,$a=$argv[1]))[$a];

1চ্যাম্পারনউই আর্গুমেন্ট-দশমিক হলে মুদ্রণ করুন 0, অন্যথায় '' (ফাঁকা স্ট্রিং) মুদ্রণ করুন।


1

রুবি, 35 23 বাইট

এটি একটি বেনাম ফাংশন যা সম্মতি দেয় [0..n], nতম সূচক গ্রহণ করে এবং সেই চরটি "0"(এর চেয়ে কম "1") হয় কিনা তা পরীক্ষা করে । গল্ফিং পরামর্শ স্বাগত জানাই।

->n{([*0..n]*'')[n]<?1}

Ungolfing

->n{...}   # Create an anonymous function with parameter n.
[*0..n]    # Create an array of the range [0..n].
[...]*''   # Join the array using the empty string.
(...)[n]   # Take the char at the n-th index of the string.
<?1        # Check if the char is < "1" (that is, "0").

1

আসলে, 9 8 বাইট

এই উত্তরটি পরিসীমাটিকে একত্রিত করে [0..n], nতম সূচক গ্রহণ করে এবং সেই চরটি কিনা তা পরীক্ষা করে "0"। গল্ফিং পরামর্শ স্বাগত জানাই। এটি অনলাইন চেষ্টা করুন!

;urεjE≈Y

Ungolfing

;          Duplicate n
 ur        Increment the duplicate and create range [0..n].
   εj      Join the range with an empty string. Stack: <string> n
     E     Take the char at the n-th index.
      ≈    int(a)
       Y   Logical NOT. If the digit is 0, then return 1, else return 0.

1

বাশ, 31 28 বাইট

seq -s "" 0 $1|egrep ^.{$1}0

আউটপুটটি খালি নয় (সত্যবাদী) বা খালি (মিথ্যা)। আইডিয়নে এটি পরীক্ষা করুন ।



1

আর, 61 57 বাইট

4 বাইটের জন্য প্ল্যানাপাসকে ধন্যবাদ

n=scan();strsplit(paste(0:n,collapse=""),"")[[1]][n+1]==0

0: n (0 ইনডেক্সিংয়ের জন্য) সংখ্যার একটি ভেক্টর তৈরি করে, তাদের একটি স্ট্রিং তৈরি করে, স্ট্রিং থেকে নবম মান টানায় (0 সূচকের জন্য সামঞ্জস্য করা)। সংখ্যায় রূপান্তর করে এবং যদি এটি 0 হয় তবে পরীক্ষাগুলি।



0

সি, 154 বাইট

s(n,v,k,z){for(k=1;(z=n%10,n/=10)&&!v||k<v;++k); return v?z:k;}
f(n,i,j,c){for(i=0,j=0;;++i){c=s(i,0,0,0);j+=c;if(j>n){c=s(i,j-n,c,0);break;}}return !c;}

যে ফাংশনটি মান গণনা করে তা হ'ল f (n, 0,0,0) যেখানে এন ইনপুট সূচক। এটি সূচক "রিটার্ন! সি" থেকে "রিটার্ন সি" সেই সূচকের অ্যারের মান পরিবর্তন করে গণনা করতে পারে ... আমি বুঝতে পারছি না তবে এটি ঠিক আছে বলে মনে হচ্ছে ....

main()
{int   i,r;
 char  a[]="0123456789101112131415161718192021222324252627282930313233343536";

 for(i=0; i<1000; ++i) 
    if(r=f(i,0,0,0))  
        printf("%u|",i);
}
/*
 154
 0|11|31|51|71|91|111|131|151|171|191|192|194|197|200|203|206|209|212|215|218|222
|252|282|312|342|372|402|432|462|491|492|494|497|500|503|506|509|512|515|518|522|552
|582|612|642|672|702|732|762|791|792|794|797|800|803|806|809|812|815|818|822|852
|882|912|942|972|
*/

0

জাভাস্ক্রিপ্ট (ES5): 61 60 বাইট

function(b){for(s="";s.length<b;)s+=s.length;return 0==s[b]}

Ungolfed:

function a(b){
  for(var s="";s.length<b;)
    s+=s.length;
  }
  return (s[b]==0);
}

পুরানো:

function(n){s="";while(s.length<n)s+=s.length;return s[n]==0}

পুরানো অবহেলিত:

function a(n){
  var str="";
  while(str.length<n)str+=str.length; //Create String as long as needed
  return str[n]==0 //Check for 0 and return
}

!s[n]তার বদলে কেমন হয় s[n]==0?
কনর

@ কনরও ব্রায়েন আমার পক্ষে কাজ করে না। আমার ফাংশনটি a (31) = সত্য দেয়, যখন আপনার ( function(n){s="";while(s.length<n)s+=s.length;return !s[n]}) একটি (31) = মিথ্যা দেয় false
পল স্মিটজ

HM। আমার ভুল.
কনর ও'ব্রায়েন

0

কফিস্ক্রিপ্ট, 56 বাইট

a=(b)->
 s=""
 while s.length<b #loop for building string with required length
  s+=s.length     #add number
 "0"==s[b]        #return, if the number at the position equals zero


0

সি #, 71 বাইট

এবং আমি ভেবেছিলাম এটি প্রথমে সংক্ষিপ্ত, তবে তখন 11 টির নীচের সংখ্যাগুলি ইনপুট হলে n+=11এটি ছোঁড়াতে বাধা দেওয়ার জন্য আমাকে যুক্ত করতে System.IndexOutOfRangeExceptionহয়েছিল

return String.Join("",Enumerable.Range(0,n+=11).ToArray())[n]=='0'?1:0;

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