कैंटर की अकथनीय संख्या


58

एक अकथ्य संख्या एक संख्या है जो सात से विभाज्य है या उसके सात अंकों में से एक है। एक बच्चों का खेल अकथनीय संख्याओं को छोड़ना है

1 2 3 4 5 6 ( ) 8 9 10 11 12 13 ( ) 15 16 ( ) 18 ...

गेम के कैंटर के संस्करण को अनुक्रम को "1 2 3 4 5 6 () 8 ..." के अंतराल में भरने के द्वारा ऊपर अनुक्रम में परिभाषित किया गया है।

1 2 3 4 5 6 1 8 9 10 11 12 13 2 15 16 3 18 19 20 4 22 23 24 25 26 5 6 29 30 31 32 33 34 1 36 8 38 ...

कम से कम पहले 7 ^ 7 नंबर का प्रिंट / आउटपुट कैंटर के अकथनीय नंबर गेम ...

जबकि परिभाषा को पुनरावर्ती रूप से दिया गया है, आप कोड में पुनरावृत्ति का उपयोग करने के लिए बाध्य नहीं हैं।

यह , इसलिए सबसे छोटी बाइट गिनती जीत के साथ कार्यक्रम!

नोट: 1 से 7 ^ 7 में संख्याओं का योग 203511962727 है। उस सीमा में अंतिम 10 संख्याएँ 823534 823535 221563 108068 823538 823539 823540 823541 823542 221565 हैं।

पहले 1000 पुनरावृत्तियों का पास्टबीन डंप: http://pastebin.com/Ksiu9Svf


8
कृपया उस अनुक्रम के पहले 7 ^ 7 नंबर प्रदान करें ताकि हम अपने समाधानों की जांच कर सकें।
दोष


2
मामले में किसी को भी कुछ और संख्या परिणाम उत्पन्न और तुलना करना चाहता है: अनुक्रम में पहले 7 ^ 77 संख्याओं का योग 3336402440238885119980169136020683586413168645292341926482898521634332654984279162327502549917668322950744929983987545341421076028 है
निकलस बी

निश्चित रूप से, उस क्रम में 1 की संख्या 22977 है, जिसका अर्थ है कि यदि आप पहले 7 ^ 77 समान रूप से यादृच्छिक रूप से एक तत्व उठाते हैं, तो आपके पास 2 * 10 ^ -61 होने की संभावना है 1
निकलेस बी।

1
यदि आप रुचि रखते हैं, तो यहां एक ग्राफ है जो बार-बार आने वालों की संख्या को दर्शाता है: drive.google.com/file/d/0B71iQwGfNtw5NGladjdOZVhoNkk/…
Niklas

जवाबों:


6

पायथ , 25 23 22 बाइट्स

-2 बाइट्स के लिए @Maltysen को धन्यवाद

.V1=+Y
?}7+PbjbT@Y~hZb

एक प्रोग्राम जो एक अनंत धारा को प्रिंट करता है।

इसे ऑनलाइन आज़माएं! (आउटपुट 1 मिनट के अंतराल पर और टाइम आउट पर फ्लश हो गया)

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

.V1=+Y
?}7+PbjbT@Y~hZb

Z = 0, Y = []    Implicit variable assignment
.V1              Infinite incrementing for loop with variable b, starting at 1:
   =+Y            Y = Y +
(newline)          (Implicitly print the result of the following:)
?                   If
 }7                  7 is in
    Pb                the prime factorisation of b
   +                  or
      jbT             the digits of b:
         @Y            Index into Y at index
             Z          Z
           ~h          (Increment Z)
                    else:
              b      b

1
23 बाइट्स । यह 7क्यूज प्राइम का काम करता है, इसलिए प्राइम फैक्टरिंग की जांच के माध्यम से
विभाजन

आप इसे पोस्ट कर सकते हैं, इसका मुख्य भाग
माल्टीसेन

1
इस प्रतियोगिता को जीतने के लिए बधाई। मुझे भी @Maltysen की ट्रिक पसंद है!
23

23

पायथन 2, 77 75 74 70 बाइट्स

धन्यवाद सीमा का सुझाव देने के लिए @MartinEnder को 9e5जो ende आर परिवर्तन के बाद काम d।
अनंत धारा के सुझाव के लिए @mschauer को धन्यवाद, 4 बाइट की बचत।

def f(n=0):
 i=f()
 while 1:n+=1;yield next(i)if'7'in`n`or n%7<1else n

यह एक जनरेटर है जो संख्याओं की एक अनंत धारा उत्पन्न करता है।


क्या आप पूरी तरह से ऊपरी सीमा को नहीं हटा सकते थे?
13

@mschauer धन्यवाद, उस एक के बारे में नहीं सोचा था।
पुरकाकूदरी

if n%7<1or'7'in`n`else nथोड़ा तेज (एक ही बाइट काउंट) हो सकता है, चूंकि n%7<1स्ट्रिंग की जांच करने की तुलना में तेज है, और orशॉर्ट-सर्कुलेटिंग है। यह बहुत बुरा है कि yield[n,next(i)][n%7<1or'7'in`n`]काम नहीं करेगा।
mbomb007

@ mbomb007 मुझे नहीं लगता कि गति यहां एक मुद्दा है, लेकिन धन्यवाद। :)
पुरकाकूदरी

10

पर्ल, 47 46 41 39 बाइट्स

@ बडा के लिए 5 बाइट्स का धन्यवाद

say$_=$_%7*!/7/?$_:$a[$b++]for@a=1..1e6

यह ऑनलाइन की कोशिश करो! तिओ नेक्सस, अब पर्ल समर्थन के साथ! यह एक निश्चित बिंदु के बाद आउटपुट को छोटा कर देगा, लेकिन यदि आपके पास पर्ल स्थापित है, तो आप इसे पूर्ण आउटपुट का उत्पादन करने के लिए स्थानीय रूप से चला सकते हैं।

कोड पर्ल के वाक्यविन्यास के कुछ अजीब विचित्र का उपयोग करता है, इसलिए मैं नीचे तोड़ दूँगा कि यह कैसे काम करता है।

कोड टूटने:

say$_=$_%7*!/7/?$_:$a[$b++]for@a=1..1e6
                              @a=1..1e6 #Assign the range (1..1,000,000) to the array @a
                           for          #and then loop through this list, with $_ as an alias for the list member.  As an alias, modifying $_ modifies @a.
      $_%7*!/7/?$_:$a[$b++]             #Ternary operation
      $_%7                              #Returns the residue modulo 7...
          *!/7/                         #...and multiplies it by the negation of whether or not there exists a 7 $_
                                        #Since % and * have the same operator precedence, it must be evaluated in this order
                                        #otherwise we would get (!/7/*$_)%7 instead of ($_%7)*!/7/
               ?$_                      #If the result is non-zero (i.e. truthy), then return $_
                  :$a[$b++]             #Otherwise, return the $b-th element of @a, and increment $b
   $_=                                  #Reassign the result back to $_, modifying @a
say                                     #Prints the result of the assignment, separated by newlines

1
say$a[@a]=$_=...अगर मैं गलत नहीं हूँ तो 2 बाइट जीतना।
दादा

@ दादा वास्तव में जब से मुझे असाइन करने से $_बचाता है, यह मुझे 5 बाइट्स बचाता है। धन्यवाद!
गेब्रियल बेनामी

1
ओह वास्तव में, मैं बस एक त्वरित नज़र आया था और उस असाइनमेंट को बीच में नहीं देखा था .. अच्छी नौकरी :)
दादा

यह इस समय (और केवल यही क्षण!) है कि मैं इस कथन को समझ गया हूं "पर्ल काफी हद तक केवल लेखन ही हो सकता है"।
हनीफेमबारक

@Grimy कृपया अन्य कोड संपादित न करें। यदि आप उत्तर में सुधार करना चाहते हैं तो सुधार सहित टिप्पणी जोड़ें या अपना स्वयं का उत्तर पोस्ट करें। जैसा कि आप शायद एक टिप्पणी से ओपी तक नहीं पहुंचेंगे सिर्फ अपना जवाब पोस्ट करें।
२०

5

PHP, 80 (वाहुका) 57 54 बाइट्स

जबकि विचार वाहूका का है। मुझे लगता है कि इसका जवाब देने के लिए मेरा संस्करण अलग है:

for(;;)echo$a[]=strpos(++$n,55)<-$n%7?"$n ":$a[+$b++];

5

हास्केल, 67 66 बाइट्स

i#x|mod x 7<1||'7'`elem`show x=f!!i:(i+1)#(x+1)|y<-x+1=x:i#y
f=0#1

f संख्याओं की एक अनंत सूची है।

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

fके साथ एक नई यात्रा शुरू करता है 1और ०. नंबर लेने के लिए ०. जब भी कोई अंतर होता है हम एक नया पुनरावृत्ति लेने के लिए यह एक ithतत्व है और वर्तमान चलना जारी है i+1। यदि कोई अंतराल नहीं है, तो हम वर्तमान संख्या लेते xहैं और बिना वृद्धि के चलते हैं i

संपादित करें: @ बीएमओ को -1 बाइट धन्यवाद।


4

MATL , 26 25 बाइट्स

9e5:`t7\yFYA!7-A*~s:2M(2M

इसे ऑनलाइन आज़माएं! साथ 9e5द्वारा बदल दिया 9e4है, ताकि अधिक से अधिक समय और ऑनलाइन संकलक के उत्पादन में आकार चला पार नहीं कर रहे हैं।

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

यह पुनरावृत्ति के बजाय पुनरावृत्ति का उपयोग करता है। (वास्तव में, MATL में पुनरावृत्ति नहीं है)।

से संख्या की एक सरणी 1के लिए 9e5पहले उत्पन्न होता है (क्योंकि यह, पर्याप्त है 9e5से अधिक है 7^7)। फिर, संख्या है कि के गुणज हैं 7या 7अंकों के रूप में पहचान है, और ने ले ली है 1, 2... प्रक्रिया को दोहराया जाता है जब तक वहाँ कोई संख्या को बदलने की जरूरत है कि कर रहे हैं।

9e5:       % Generate array of numbers [1 2 ... 9e5]. This array will become the
           % output, after some numbers have been replaced
`          % Do...while
  t        %   Duplicate the array of numbers
  7\       %   Modulo 7. Gives zero for multiples of 7
  y        %   Duplicate the array of numbers
  FYA!     %   Matrix of decimal digits, with a column for each number
  7-       %   Subtract 7 to each entry of that matrix
  A        %   Array that contains "true" for columns that only contain nonzeros;
           %   that is, for numbers that do not have 7 as digit 
  *        %   Multiply. This corresponds to a logical "and" of the two conditions.
           %   A zero indicates that the number at that index needs to be replaced
  ~        %   Logical negate. Each "true" corresponds to a number to be replaced
  s        %   Sum. This is the amount of numbers to be replaced, say n
  :        %   Push array [1 2 ... n]
  2M       %   Push array of logical values again
  (        %   Replace the numbers at the positions indicated by the logical array
           %   by the values [1 2 ... n]
  2M       %   Push n again. This is used as loop condition, so if it is nonzero
           %   the next iteration will be executed. Note that this executes one
           %   too many iterations: the exit condition is that no replacing has
           %   been needed in the current iteration; but then the current iteration 
           %   (which will be the last) was not really necessary. This does not
           %   matter; the last iteration is useless but also harmless
           % End do...while implicitly. Display implicitly

3

Tcl , 121 बाइट्स

अनंत लूप का उपयोग कर तुच्छ समाधान, कुछ भी नहीं फैंसी ..

set r 0;set n 0;while {[set r [expr $r+1]]} {if {![expr $r%7]||(7 in[split $r ""])} {puts [set n [expr $n+1]]} {puts $r}}

Ungolfed:

set r 0
set n 0
while {[set r [expr $r+1]]} {
  if {![expr $r % 7] || (7 in [split $r ""])} {
    puts [set n [expr $n+1]]
  } {
    puts $r
  }
}

आप उपयोग कर सकते हैं incr। और Tcl संस्करण> = 8.6, अगर incrपहली यात्रा एक की एक वेतन वृद्धि हो जाती है नई से चर 0करने के लिए 1करता है, तो उस चर से पहले सेट नहीं था; इसलिए आप पहले दो setनिर्देशों से छुटकारा पा सकते हैं ।
सर्गियोल

मेरे द्वारा गोल्फ - मैंने कुछ गैर-आवश्यक सफेद स्थान भी हटा दिए।
सर्गियोल

जिस स्थान पर मैंने आपके लिए अपने गोल्फ के सुझाव पोस्ट किए हैं, उन्हें खो दिया है, इसलिए मैंने अपना एक नया उत्तर दिया है
सर्गियोल

3

PHP, 106 80 बाइट्स

इसके बजाय का उपयोग करने के लिए टर्नरी समाधान और छोटे लूप कोड की मदद से इस्माईल मिगुएल को धन्यवाद दें।

PhpFiddle के 30 सेकंड के अधिकतम रनटाइम के कारण पूर्ण अनुक्रम के अंतिम भागों को सत्यापित नहीं कर सका। ओपी द्वारा प्रदान किए गए नमूना आउटपुट के आधार पर कम से कम 1K तक काम करने लगता है।

गोल्फ:

for($n=1;;$n++)echo$a[]=!(strpos($n,"7")>-1||$n%7==0)?"$n ":array_shift($a)." ";

मूल गोल्फ संस्करण :

$n=1;while(1){if(!(strpos($n,"7")>-1||$n%7==0)){echo$a[]=$n." ";}else{echo$a[]=array_shift($a)." ";}$n++;}

1
for($n=1;;$n++)echo$a[]=!(strpos($n,7)>-1||$n%7==0)?"$n ":array_shift($a)." ";मैं बाइट गिनती नहीं जानता, लेकिन मुझे यकीन है कि यह 106 बाइट्स की तुलना में बहुत कम है। इसे आज़माएं और देखें कि क्या यह काम करता है।
इस्माईल मिगुएल

बहुत अच्छा, मदद के लिए धन्यवाद। आपके कोड में एकमात्र संशोधन उद्धरणों में पहले 7 को डालने के लिए था जिसने आपके 78 बाइट संस्करण में दो बाइट्स जोड़े।
वोहुका

आप 3 बाइट्स या ऐसा करके बचा सकते हैं for($n=1;;$n++)echo$a[]=strpos($n,"7")>-1||$n%7==0?array_shift($a)." ":"$n ";। मुझे यकीन है कि अगर आप की जगह ले सकता नहीं कर रहा हूँ $n%7==0के साथ !$n%7, लेकिन यह एक कोशिश के लायक है।
इस्माइल मिगुएल

1
चलते रहो -6: $ n = 0 बेकार है, "7" हो सकता है 7.
क्रिप्टो

1
क्यों बदलाव? for(;;)echo$a[]=strpos(++$n,55)<-1&&$n%7?"$n ":$a[++$b-1];(58 बाइट)। ++$b-1क्योंकि$a[null] === null
क्रिस्टोफ़

3

जूलिया, 62 बाइट्स

x=[];j=0;for i=1:7^7;x=[x;i%7<1||('7' in "$i")?x[j+=1]:i]end;x

कुछ भी आकर्षक नहीं। उपयोग करता है कि अंतराल के भीतर अनुक्रम ही अनुक्रम है। कुछ बाइट्स को बचाने के लिए अत्यधिक सरणी प्रतियां बनाता है।


3

पर्ल 6 ,  74 57 54  53 बाइट्स

sub u{my@u;(1..*).map: {if $_%%7||.comb('7') {@u||=u;@u.shift} else {$_}}}
sub u{(1..*).map: {$_%%7||.comb('7')??(@||=u).shift!!$_}}
sub u{map {$_%%7||.comb('7')??(@||=u).shift!!$_},1..*}
sub u{map {$_%%7||.comb(~7)??(@||=u).shift!!$_},1..*}

कोशिश करो

विस्तारित:

sub u{
  map             # for each element transform using:

  { # bare block lambda with implicit parameter 「$_」

      $_ %% 7     # if it is divisible by 7
      ||          # or
      .comb(~7)   # contains the number 7 (implicit method call on 「$_」)

    ??            # then
      ( @ ||= u ) # store a new instance of the Seq into an unnamed state array if it is empty
                  # ( it is only empty the first time it is seen in this Seq instance )
      .shift      # pull one off of the front

    !!            # else
      $_          # return the value
  },

  1 .. *          # infinite range starting at one ( elements to be mapped over )
}

परीक्षा:

$ time perl6 -e'sub u{map {$_%%7||.comb(~7)??(@||=u).shift!!$_},1..*};put 203511962727 == sum u()[^7**7]'
True

real    2m45.744s
user    2m45.416s
sys     0m0.212s

लगता है कि आप एक बाइट को बचाने के ~7बजाय कह सकते हैं '7'
सीन

2

सीलोन, 202 बाइट्स

object u satisfies{Integer*}{iterator()=>object satisfies Iterator<Integer>{variable value i=0;late Iterator<Integer>n;next()=>if(++i%7<1||'7'in"``i``")then(i<8then(n=iterator())else n).next()else i;};}

यह एक फ़ंक्शन नहीं है, लेकिन एक अनंत घोषणा (Iterable) को लागू करने वाली एक वस्तु घोषणा है। ऑब्जेक्ट को सीधे मुद्रित किया जा सकता है, इसे print(u)आउटपुट करता है:

{ 1, 2, 3, 4, 5, 6, 1, 8, 9, 10, 11, 12, 13, 2, 15, 16, 3, 18, 19, 20, 4, 22, 23, 24, 25, 26, 5, 6, 29, 30, ... }

अधिक प्रिंट करने के लिए, का उपयोग करें printAll(u)। निम्नलिखित कोड newlines का उपयोग करता है, और योग भी प्रिंट करता है (और ऊपर दिखाए गए पहले 30 तत्व):

shared void run() {
    printAll(u.take(7^7), "\n");
    print(sum({0, * u.take(7^7)}));
    print(u);
}

यहाँ ungolfed और टिप्पणी संस्करण है:

// Prints cantor's unspeakable numbers.
//
// Question:  http://codegolf.stackexchange.com/q/101231/2338
// My answer: http://codegolf.stackexchange.com/a/101297/2338

// this object u (which is like a singleton class with its single instance)
// implements the Iterable<Integer> interface.
object u satisfies {Integer*} {
    // That interface has just one formal method,
    // `shared formal Iterator<Integer> iterator()`.
    // Lets implement it by ...
    iterator()
    // ... providing for each call ...
            =>
                // ... a new (anonymous) object, which
                // implements the Iterator<Integer> interface.
                object satisfies Iterator<Integer> {
                    // This is the counter (the type `Integer`
                    // is longer than `value`, so we infer it).
                    // We start at 0.
                    variable value i = 0;
                    // This is a nested Iterator. It will be
                    // initialized when first needed, so we don't
                    // get an endless recursion when creating the
                    // first iterator.
                    late Iterator<Integer> n;
                    // `shared formal Integer next()` is the single method
                    // of Iterator which needs to be implemented.
                    next()
                    // each time it is called, the following
                    // expression will be evaluated.
                            =>
                                // increment the counter, then check if it
                                // is an unspeakable number.
                                if (++i % 7 < 1 || '7' in "``i``")
                                then
                                    // if so, take the nested iterator (and the
                                    //  first time, for i == 7, create it first),
                                    // and take its next element.
                                    (i < 8 then (n = iterator()) else n).next()
                                else
                                    // otherwise, just return i.
                                    i;
                };
}

2

रूबी, 80 बाइट्स

l=->x{x%7==0||x.to_s[/7/]};a=(1..100);b=a.reject &l p a.map{|x|!l[x]?x:b.shift}

पहला सबमिशन, मुझे यकीन है कि इसमें सुधार किया जा सकता है :)


1
PPCG में आपका स्वागत है! क्या यह कम से कम 7 ^ 7 (यानी 823543) तक जाता है, और क्या यह उन संख्याओं के लिए जिम्मेदार है जिनमें अंक 7, यानी 17 हैं?
ETHproductions

यह निश्चित नहीं था। अब तय हो गया। सोचा कि समस्या थोड़ी आसान थी :)
क्रिस्टोफर लेट्स

अच्छा है, लेकिन मुझे यकीन नहीं है कि यह अभी तक योग्य है। के बाद की संख्या 34(जो 8वर्तमान में है) होनी चाहिए 7, लेकिन क्योंकि 7एक अकथ्य संख्या है, कार्यक्रम को एक तीसरा पुनरावृत्ति शुरू करना चाहिए और इसके बजाय प्रिंट करना चाहिए 1
ETHproductions

2

दिल्लोग एपीएल , 39 बाइट्स

{(⍵⍴⍨⍴i)@(i←⍸('7'∊¨⍕¨⍵)∨0=7|⍵)⊢⍵}⍣≡⍳7*7

⍳7*71 2 3 ... 7 7 है

{ }⍣≡है निश्चित बिंदु ऑपरेटर - एक समारोह को बार-बार लागू जब तक परिणाम स्थिर

A@I⊢B संशोधन ऑपरेटर - सूचकांकों में तत्वों की जगह Iमें BसाथA

0=7|⍵ बिटमेस्क जहां तर्क 7 से विभाज्य है

'7'∊¨⍕¨⍵ बिटमेस्क जहां तर्क के दशमलव स्वरूपण में 7 शामिल हैं

या

उपरोक्त बिटमास्क में से कौन सा सूचकांक सही है?

i← को आवंटित i

⍵⍴⍨⍴i में तत्वों की संख्या के लिए तर्क को नया आकार दें i


यह अच्छा है। क्या यह मदद करता है यदि आप and7 * 7 को बिटमास्क से गुणा करते हैं और अनुक्रम में शून्य में संशोधन करने का निर्धारण करते हैं?
20

2

सी 157 155 बाइट्स

int c[999999],r;main(_,p){if(_){p=--_;c[_]=1;for(;;){printf("%d ",c[_]);main(0,++_+1);c[_]=r?_+1:c[p++];}}else!p?r=1:p%7?p%10-7?main(0,p/10):(r=0):(r=0);}

यह सही लगता है, मैंने पूरी तरह से जांच करने की जहमत नहीं उठाई। 999999 तक जाती है जो कि जाहिर तौर पर काफी बड़ी है।

Ungolfed संस्करण:

int cantor_n[1000000];

int cantor_n_safe(int x) {
    if (!x) return 1;
    if (x % 7 == 0) return 0;
    if (x % 10 == 7) return 0;
    return cantor_n_safe(x / 10);
}

int main(_, prev_index) {
    prev_index = --_;
    cantor_n[_] = 1;
    for(;;) {
        printf("%d ", cantor_n[_]);
        _++;
        if (!cantor_n_safe(_+1)) {
            cantor_n[_] = cantor_n[prev_index++];
        } else {
            cantor_n[_] = _+1;
        }
    }
    return 0;
}

आंशिक रूप से गोल्फ संस्करण:

int c[999999];int r;
safe(x){ 
    !x?
        r=1:
        x%7?
            x%10-7?
                safe(x/10):
                (r=0):
            (r=0);
}

main(_){
    int p;
    p=--_;
    c[_]=1;
    for(;;){
        printf("%d ",c[_]);
        safe(++_+1);
        if (!r) {
            c[_]=c[p++];
        } else {
            c[_]=_+1;
        }
    }
}

क्या आपको ब्रेसिज़ की आवश्यकता है else?
ज़ाचरी

मैं नहीं, धन्यवाद। मुझे भी तकनीकी रूप से (r=0)अधिकांश समय ब्रेसिज़ की आवश्यकता नहीं है । लेकिन कुछ संकलक picky हैं। मैं अभी कल्पना की जाँच करने के लिए बहुत आलसी हूँ।
लैंबडाबेटा

2

आर, 86 बाइट्स

x=1;while(T<7^7){T=T+1;x[T]=if(!T%%7|7%in%el(strsplit(c(T,""),""))){F=F+1;x[F]}else T}

अनुक्रम में संख्याओं की गणना Tकरने के लिए आर की ट्रूथी बिल्ट-इन (आरंभिक TRUE/ 1) और फाल्सी वैल्यू F(इनिशियलाइज्ड FALSE/ इन 0) को गिनने के लिए अनसेकेबल्स का उपयोग करता है । इसके अलावा कार्यक्रम बस यह जाँचता है कि क्या प्रत्येक संख्या सात से विभाज्य है या इसमें संख्या है।


-4 बाइट्स 7%in%el(strsplit(c(T,""),""))द्वारा प्रतिस्थापित 55%in%utf8ToInt(paste(T))? (परीक्षण नहीं)
JayCe

2

सी - 115 बाइट्स

s[99],r;g(x){return x%10-7&&(!x||g(x/10));};f(i){(r=++s[i])%7&&g(r)||f(i+1);}main(){for(;;f(0),printf("%d\n",r));}

संपादित करें: @mschauer को धन्यवाद जिन्होंने कहा कि मैंने कुछ चीजों को याद किया।


अच्छा तरीका। दो टिप्पणी। r% 10-7 केवल ट्रेलिंग सेवन्स को पकड़ता है और आपके हीप को दूषित नहीं करता है: स्टैक की गहराई बहुपदों में बढ़ती है ... s [99] सुरक्षित है।
मिचौएर

2

जावास्क्रिप्ट, 80 बाइट्स

n=[]
r=l=>(m=n[l]=++n[l]||1,!/7/.test(m)m%7?m:r(l+1))
for(;;)console.log(r(0))

चूंकि केवल न्यूनतम आवश्यकताएं हैं, लेकिन अधिकतम आवश्यकताएं नहीं हैं, इसलिए यह समाधान अनिश्चित काल तक जारी रहता है।

यह सत्यापित करने के लिए कि एल्गोरिथ्म सही है, आप केवल अंतिम 10 नंबरों और योग को एक ही कोड प्रिंटिंग निष्पादित कर सकते हैं:

n = []
r = l => (m = n[l] = ++n[l] || 1, !/7/.test(m) && m % 7 ? m : r(l + 1))
var tot = 0
for (i = 0; i + 1; i++) {
    v = r(0)
    tot += v
        if (i > Math.pow(7, 7) - 11) {
        console.log(v)
    }
    if (i === Math.pow(7, 7) - 1) {
        console.log(tot)
        break
    }
}

सिंटैक्सएर्रर: गुम)
पैतृक


1

जावास्क्रिप्ट 81 बाइट्स

मूल (98 बाइट्स)

for(c=0,i=1;i<=Math.pow(7,7);i++)/7/.test(i)||i%7==0?(6==c?c=1:c++,console.log(c)):console.log(i);

golfed

p=console.log;for(c=0,i=1;i<9e5;i++)/7/.test(i)||i%7==0?(6==c?c=1:c++,p(c)):p(i);

साइट पर आपका स्वागत है! मैं जावास्क्रिप्ट के बारे में बहुत कुछ नहीं जानता, लेकिन क्या आप ऐसा कुछ कर सकते हैं p=console.log;for(c=0,i=1;i<=Math.pow(7,7);i++)/7/.test(i)||i%7==0?(6==c?c=1:c++,p(c)):p(i);?
DJMcMayhem

धन्यवाद @DrMcMoylex, कि कुछ और बाइट्स गिरा दिया। मुझे संदेह नहीं है कि अभी भी सुधार की गुंजाइश है।
रिचर्ड सीमे

मैं खुशी से मदद कर सकता है! एक दूसरी बात मैं सिर्फ एहसास हुआ, तुम कर सकते हो है 9e5के बजाय Math.pow(7,7), के बाद से चुनौती ने कहा:Print/output AT LEAST the first 7^7
DJMcMayhem

हाँ, अच्छा शॉट डॉक्टर! इसने मुझे एक तुलना ऑपरेटर से भी एक समान ड्रॉप करने की अनुमति दी।
रिचर्ड शिम

यह वह नहीं लगता जो अपेक्षित है। अंतराल को भरने के दौरान, आपको स्पष्ट रूप से केवल काउंटर रीसेट करने के बजाय नियमों को फिर से लागू करना होगा (अनुक्रम का यह हिस्सा देखें:) 34 1 36 **8** 38। लेकिन क्या इसके लायक है के लिए, वर्तमान संस्करण में कुछ और golfed जा सकता है: for(c=i=0;++i<9e5;)console.log(!/7/.test(i)&&i%7?i:c++%6+1)
अरनौलद

1

Befunge, 100 या 156 बाइट्स

यह पहला संस्करण दोनों की अधिक पोर्टेबल है, खुद को 7-बिट मेमोरी कोशिकाओं तक सीमित करता है, जो कि आपको संदर्भ दुभाषिया में मिलता है।

"O":0>\#09#:p#-:#1_v<0$.< 
9\*"~"g9+1:+1::p00:<+3$_^#g01$$<v"~":/"~"p9g00%"~"::+1+g9\*"~"+g
:#15#+5#g+#0%#17#\-#/!#+\#5:#5_^>%00g1+9p"~"/00g2+9p::7%!10>>p#0

दूसरा संस्करण केवल उन दुभाषियों के साथ काम करता है जिनके पास 32-बिट मेमोरी सेल हैं, और इस प्रकार सख्ती से बेफ़ुज नहीं है, लेकिन यह हमें कोशिकाओं में विभाजित किए बिना स्मृति में बड़े मूल्यों को संग्रहीत करने देता है।

"O":0>\#09#:p#-:#1_v<0$.< 
%7::p9g00:+1g9:p00:<+1$_^#g01$$<v01!
:#15#+5#g+#0%#17#\-#/!#+\#5:#5_^>p#0

दोनों ही मामलों में कार्यक्रम अनिश्चित काल तक चलता है, लेकिन पहला संस्करण 2 मिलियन अंक के आसपास बह जाएगा, जबकि दूसरे संस्करण को अधिकतम अंतर मान (लगभग 2 बिलियन) तक मिलना चाहिए।

आप इसे ऑनलाइन आज़मा सकते हैं , लेकिन आपको इसे हमेशा के लिए चलाने की कोशिश करने से रोकने के लिए प्रक्रिया को मारना होगा।


1

क्लोजर, 130 बाइट्स

#(let[R(range(inc %))](rest((reduce(fn[[r s]i](if(or(=(mod i 7)0)((set(str i))\7))[(assoc r i(r s))(inc s)][r s]))[(vec R)0]R)0)))

बेसिक कम, परिणाम वेक्टर की सामग्री पर नज़र रखना और कितने मूल्यों को छोड़ दिया गया है। अंतिम 0घटा हुआ का पहला तत्व लेता है [r s], rest0-अनुक्रमित परिणाम का पहला तत्व छोड़ता है।



1

Tcl , 64 बाइट्स

while 1 {puts [expr {[incr i]%7&&7ni[split $i ""]?$i:[incr s]}]}

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


अच्छा! मेरी तुलना में बहुत छोटा ...
hdrz

यह "... 33 34 7 36 8 38 38 ..." के बजाय "... 33 34 1 36 8 38 ..."
लिखता है

@ शमशेर: ठीक है, जब मेरे पास समय होगा तब मैं इसे ठीक कर
दूंगा

@ भारज मैंने आपके समाधान की कोशिश की और यह वही मुद्दा है जिसके बारे में mschauer ने बताया है!
सर्गियोल

1

जावास्क्रिप्ट, 64 बाइट्स

for(f=n=>!/7/.test(m=++n[0])*m%7?m:f(n.t=n.t||[0]);;)alert(f(f))

output=[];index=0;for(f=n=>!/7/.test(m=++n[0])*m%7?m:f(n.t=n.t||[0]);index<100;)output[index++]=f(f);console.log(output.join(','))


ps को अन्य कुछ ( console.log) जावास्क्रिप्ट उत्तरों के साथ तुलना करने के लिए , यह 70 बाइट्स है
l4m2

1

जाप , 25 बाइट्स

[]L³õ@pX%7«/7/tX ?X:UgV°

राशि और अंतिम 10 तत्वों का परीक्षण करें

अनुक्रम की पहली 1,000,000 प्रविष्टियाँ बनाता है और उन्हें प्रिंट करता है। 7**7 == 823543जाप में एक मिलियन सबसे कम संख्या है ।

अनुगामी न्यूलाइन महत्वपूर्ण है, क्योंकि यह अंतर्निहित असाइनमेंट को सक्रिय करता है U

सूची जनरेट करने में केवल एक सेकंड का समय लगता है, लेकिन संपूर्ण सरणी को आउटपुट करने से संभवतः आपका ब्राउज़र हैंग हो जाएगा।

अनपैक्ड और यह कैसे काम करता है

[]L³õX{UpX%7&&!/7/tX ?X:UgV++

[]                            Assign empty array to U
  L³õX{                       Map over 1 to 1,000,000 inclusive...
         X%7&&                  If X is not divisible by 7 and
              !/7/tX            X does not have a digit 7
                     ?X:UgV++   then X, otherwise the next element already in U
       Up                       Push it to the end of U

                              Implicit print U

उस संपत्ति का उपयोग करता है जिसे पुनरावर्ती परिभाषा पहले से उत्पन्न अनुक्रम को देखकर हल किया जा सकता है।

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