चेम्परनोई के शून्य कहाँ हैं?


23

सभी nonnegative दशमलव पूर्णांक के अनंत तार को क्रम में एक साथ समझें ( Champernowne के स्थिर के समान ) पर विचार करें:

0123456789101112131415161718192021222324252627282930...979899100101102103...

एक प्रोग्राम या फ़ंक्शन लिखिए जो एक गैर-पूर्णांक में होता है जो इस अनंत स्ट्रिंग में अनुक्रमित (0-आधारित) करता है। आउटपुट एक 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

गणितज्ञ, ४२ ४० बाइट्स

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

अनाम फ़ंक्शन। इनपुट के रूप में एक संख्या लेता है और आउटपुट के रूप में Trueया वापस लौटता है False। एक लंबा, अभी तक अधिक कुशल (?) समाधान:

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

5

CJam, 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

MATL, 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 बाइट्स Fatalize के लिए धन्यवाद।

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.

@evectorizes तो y@ec:?m0काम करता है, 2 बाइट्स को बचाने के लिए।
घातक

@Fatalize कितने अन्य ऑपरेटर वेक्टर करते हैं?
लीक नुन्

केवल #0, #1, #+, #_, #>और #<vectorize की तरह @eकरता है। कुछ ऐसे विधेय हैं जो इस तरह के वेक्टर बनाते हैं +या *निम्न सूची स्तर पर पुनरावृत्ति को वेक्टर नहीं करते हैं, और इनपुट की संरचना के आधार पर समान कार्य नहीं करते हैं।
घातक

4

पर्ल 6 , 26 25 बाइट्स

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

एक लैम्ब्डा कि इनपुट के रूप में एक नंबर लेता है और रिटर्न एक Trueया False

मेमोरी कुशल।

यह काम किस प्रकार करता है

  1. 0..* - 0 से अनंत तक सीमा का निर्माण।
  2. map(|*.comb, )- लाज़िली ने प्रत्येक स्ट्रिंग को उसके स्ट्रिंग प्रतिनिधित्व के पात्रों के साथ बदल दिया और एक नया आलसी अनुक्रम लौटाया। |नया अनुक्रम चपटा रहता है।
  3. [$_]- (कथित रूप से घोषित) लैम्ब्डा पैरामीटर द्वारा परिभाषित सूचकांक पर तत्व को लें $_
  4. +- इसे एक संख्या तक सीमित करें। (यह कदम इसलिए आवश्यक है क्योंकि एक स्ट्रिंग को सीधे बूलियन में ले जाना हमेशा सही देता है जब तक कि स्ट्रिंग खाली न हो।)
  5. ! - यह एक बूलियन के लिए मजबूर और इसे नकारात्मक।

( इसे ऑनलाइन आज़माएं )

संपादित करें: b2gills के लिए -1 बाइट धन्यवाद।


यदि आप पहले से ही एक पी 6 जवाब था, तो देखने के लिए {!+map(|*.comb,0..*)[$_]}आने से {!+({|($++).comb}...*)[$_]}पहले आप मुझे छोटा कर सकते हैं । !+द्वारा प्रतिस्थापित किया जा सकता है1>
ब्रैड गिल्बर्ट b2gills

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 पर परीक्षण करें

यह काम किस प्रकार करता है

इनपुट n के लिए , '%d'*-~nप्रारूप स्ट्रिंग n + 1 को दोहराता है ।

(*range(n),n)रेंज को अनपैक करता है [0, ..., n - 1] और टुपल (0, ..., n) पैदावार देता है ।

...%...सीमा में पूर्णांक के साथ % d की प्रत्येक घटना को प्रतिस्थापित करता है, स्ट्रिंग 01234567891011 ... n की उपज देता है ।

(...)[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

Ideone पर इसे आज़माएं


3

पायथ, 8 7 बाइट्स

-1 बाईट के लिए @LeakyNun को धन्यवाद

!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 पूर्णांक, अधिकतम मेमोरी दक्षता / ओ / का उपयोग करता है

व्याख्या

हम चम्पारण्य के स्थिरांक में इनपुट के रूप में कई अंक उत्पन्न करते हैं।

मुख्य लूप में, हम निम्नलिखित करते हैं:

  • मंजिल संख्या से वर्तमान संख्या की लंबाई ज्ञात करें इसे 10 तक बार-बार विभाजित करें जब तक कि यह 0 तक न पहुंच जाए, और फिर उपयोग किए गए विभाजनों की संख्या की गणना करें।
  • डिवीजनों की संख्या को संग्रहीत करने के बजाय, हम उस संख्या शक्ति के बजाय 10 को संग्रहीत करते हैं।
  • प्रत्येक अंक के माध्यम से Iterate इस प्रकार है: 100s का अंक उस स्थान 1234से प्राप्त किया जाता है (1234/10)%10जहाँ /फर्श विभाजन है।
  • जेनरेट किए गए प्रत्येक अंक के लिए, इनपुट से 1 लें, जबकि जाँच करें कि इनपुट शून्य पर पहुंच गया या नहीं।
  • यदि इनपुट शून्य पर पहुंचता है, तो जांचें कि वर्तमान अंक 0 है और फिर रुका हुआ है।

3

जावास्क्रिप्ट (ईएस 6), 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

जावास्क्रिप्ट (ईएस 6), 47 बाइट्स

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


1

जावास्क्रिप्ट (ईएस 6), 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

STDIN पर इनपुट के साथ चलाएँ:

zero.pl <<< 31

शून्य के लिए 1 प्रिंट करें, अन्यथा कुछ भी नहीं

zero.pl

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

1

PHP, 36 बाइट्स

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

प्रिंट करें 1यदि Champernowne तर्क-वें दशमलव है 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

दरअसल, tes बाइट्स

यह उत्तर सीमा को समाप्‍त करता [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

आउटपुट गैर-रिक्त (सत्य) या खाली (मिथ्या) है। Ideone पर इसका परीक्षण करें ।



1

आर, 61 57 बाइट्स

4 बाइट्स के लिए @plannapus को धन्यवाद।

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) है जहां n इनपुट इंडेक्स है। यह इंडेक्स चेंजिंग "रिटर्न सी!" से "इंडेक्स रिटर्न" की गणना कर सकता है। उस इंडेक्स में एरे का मान ... मुझे समझ नहीं आता कि यह कैसे काम करता है लेकिन ठीक है ...।

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?
कॉनर ओ'ब्रायन

@ ConorO'Brien मेरे लिए काम नहीं करता है। मेरा कार्य एक रिटर्न (31) = सही है, जबकि आपका ( function(n){s="";while(s.length<n)s+=s.length;return !s[n]}) रिटर्न एक (31) = गलत है।
पॉल श्मिट

एचएम। मेरी गलती।
कॉनर ओ'ब्रायन

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

zsh, 31 बाइट्स

exit ${${(j..):-{0..$1}}[$1+1]}

exit 0 zsh में सच है


0

सी #, 71 बाइट्स

और मुझे लगा कि यह पहली बार में छोटा था, लेकिन तब मुझे n+=11इसे जोड़ने से रोकने के लिए जोड़ा गया था System.IndexOutOfRangeExceptionजब 11 से नीचे की संख्या इनपुट थी

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.