How many consecutive descending numbers in my number?












11














2019 has come and probably everyone has noticed the peculiarity of this number: it's in fact composed by two sub-numbers (20 and 19) representing a sequence of consecutive descending numbers.



Challenge



Given a number x, return the length of the maximum sequence of consecutive, descending numbers that can be formed by taking sub-numbers of x.



Notes :




  • sub-numbers cannot contain leading zeros (e.g. 1009 cannot be split into 10,09)

  • consecutive and descending means that a number in the sequence must be equal to the previous number -1, or $n_{i+1} = n_{i}-1$ (e.g. 52 cannot be split into 5,2 because 5 and 2 are not consecutive, 2 ≠ 5 - 1)

  • the sequence must be obtained by using the full number, e.g. in 7321 you can't discard 7 and get the sequence 3,2,1

  • only one sequence can be obtained from the number, e.g. 3211098 cannot be split into two sequences 3,2,1 and 10,9,8


Input




  • An integer number (>= 0) : can be a number, or a string, or list of digits


Output




  • A single integer given the maximum number of decreasing sub-numbers (note that the lower-bound of this number is 1, i.e. a number is composed by itself in a descending sequence of length one)


Examples :



2019         --> 20,19           --> output : 2
201200199198 --> 201,200,199,198 --> output : 4
3246 --> 3246 --> output : 1
87654 --> 8,7,6,5,4 --> output : 5
123456 --> 123456 --> output : 1
1009998 --> 100,99,98 --> output : 3
100908 --> 100908 --> output : 1
1110987 --> 11,10,9,8,7 --> output : 5
210 --> 2,1,0 --> output : 3
1 --> 1 --> output : 1
0 --> 0 --> output : 1
312 --> 312 --> output : 1
191 --> 191 --> output : 1


General rules:




  • This is code-golf, so shortest answer in bytes wins.

    Don't let code-golf languages discourage you from posting answers with non-codegolfing languages. Try to come up with an as short as possible answer for 'any' programming language.


  • Standard rules apply for your answer with default I/O rules, so you are allowed to use STDIN/STDOUT, functions/method with the proper parameters and return-type, full programs. Your call.


  • Default Loopholes are forbidden.

  • If possible, please add a link with a test for your code (i.e. TIO).

  • Also, adding an explanation for your answer is highly recommended.










share|improve this question
























  • Migrated from sandbox : codegolf.meta.stackexchange.com/questions/2140/…
    – digEmAll
    19 hours ago










  • Suggested test case: 1 --> 1.
    – Kamil Drakari
    14 hours ago










  • Additional suggested test cases: 312 --> 1 and 191 --> 1 to ensure answers aren't truncating the first or last number (13,12 and 19,18 in these cases).
    – Kamil Drakari
    13 hours ago






  • 1




    Is the test case 210 -> 2,1,0 wrong (same with 0 -> 0)? The tasks says "sub-numbers cannot contain leading zeros", is zero a special case?
    – BMO
    13 hours ago








  • 1




    @BMO: well, here the topic is kinda phylosofical... :D to me, 0 is a number with no (useless) leading zero, so yes zero is a special case
    – digEmAll
    13 hours ago


















11














2019 has come and probably everyone has noticed the peculiarity of this number: it's in fact composed by two sub-numbers (20 and 19) representing a sequence of consecutive descending numbers.



Challenge



Given a number x, return the length of the maximum sequence of consecutive, descending numbers that can be formed by taking sub-numbers of x.



Notes :




  • sub-numbers cannot contain leading zeros (e.g. 1009 cannot be split into 10,09)

  • consecutive and descending means that a number in the sequence must be equal to the previous number -1, or $n_{i+1} = n_{i}-1$ (e.g. 52 cannot be split into 5,2 because 5 and 2 are not consecutive, 2 ≠ 5 - 1)

  • the sequence must be obtained by using the full number, e.g. in 7321 you can't discard 7 and get the sequence 3,2,1

  • only one sequence can be obtained from the number, e.g. 3211098 cannot be split into two sequences 3,2,1 and 10,9,8


Input




  • An integer number (>= 0) : can be a number, or a string, or list of digits


Output




  • A single integer given the maximum number of decreasing sub-numbers (note that the lower-bound of this number is 1, i.e. a number is composed by itself in a descending sequence of length one)


Examples :



2019         --> 20,19           --> output : 2
201200199198 --> 201,200,199,198 --> output : 4
3246 --> 3246 --> output : 1
87654 --> 8,7,6,5,4 --> output : 5
123456 --> 123456 --> output : 1
1009998 --> 100,99,98 --> output : 3
100908 --> 100908 --> output : 1
1110987 --> 11,10,9,8,7 --> output : 5
210 --> 2,1,0 --> output : 3
1 --> 1 --> output : 1
0 --> 0 --> output : 1
312 --> 312 --> output : 1
191 --> 191 --> output : 1


General rules:




  • This is code-golf, so shortest answer in bytes wins.

    Don't let code-golf languages discourage you from posting answers with non-codegolfing languages. Try to come up with an as short as possible answer for 'any' programming language.


  • Standard rules apply for your answer with default I/O rules, so you are allowed to use STDIN/STDOUT, functions/method with the proper parameters and return-type, full programs. Your call.


  • Default Loopholes are forbidden.

  • If possible, please add a link with a test for your code (i.e. TIO).

  • Also, adding an explanation for your answer is highly recommended.










share|improve this question
























  • Migrated from sandbox : codegolf.meta.stackexchange.com/questions/2140/…
    – digEmAll
    19 hours ago










  • Suggested test case: 1 --> 1.
    – Kamil Drakari
    14 hours ago










  • Additional suggested test cases: 312 --> 1 and 191 --> 1 to ensure answers aren't truncating the first or last number (13,12 and 19,18 in these cases).
    – Kamil Drakari
    13 hours ago






  • 1




    Is the test case 210 -> 2,1,0 wrong (same with 0 -> 0)? The tasks says "sub-numbers cannot contain leading zeros", is zero a special case?
    – BMO
    13 hours ago








  • 1




    @BMO: well, here the topic is kinda phylosofical... :D to me, 0 is a number with no (useless) leading zero, so yes zero is a special case
    – digEmAll
    13 hours ago
















11












11








11







2019 has come and probably everyone has noticed the peculiarity of this number: it's in fact composed by two sub-numbers (20 and 19) representing a sequence of consecutive descending numbers.



Challenge



Given a number x, return the length of the maximum sequence of consecutive, descending numbers that can be formed by taking sub-numbers of x.



Notes :




  • sub-numbers cannot contain leading zeros (e.g. 1009 cannot be split into 10,09)

  • consecutive and descending means that a number in the sequence must be equal to the previous number -1, or $n_{i+1} = n_{i}-1$ (e.g. 52 cannot be split into 5,2 because 5 and 2 are not consecutive, 2 ≠ 5 - 1)

  • the sequence must be obtained by using the full number, e.g. in 7321 you can't discard 7 and get the sequence 3,2,1

  • only one sequence can be obtained from the number, e.g. 3211098 cannot be split into two sequences 3,2,1 and 10,9,8


Input




  • An integer number (>= 0) : can be a number, or a string, or list of digits


Output




  • A single integer given the maximum number of decreasing sub-numbers (note that the lower-bound of this number is 1, i.e. a number is composed by itself in a descending sequence of length one)


Examples :



2019         --> 20,19           --> output : 2
201200199198 --> 201,200,199,198 --> output : 4
3246 --> 3246 --> output : 1
87654 --> 8,7,6,5,4 --> output : 5
123456 --> 123456 --> output : 1
1009998 --> 100,99,98 --> output : 3
100908 --> 100908 --> output : 1
1110987 --> 11,10,9,8,7 --> output : 5
210 --> 2,1,0 --> output : 3
1 --> 1 --> output : 1
0 --> 0 --> output : 1
312 --> 312 --> output : 1
191 --> 191 --> output : 1


General rules:




  • This is code-golf, so shortest answer in bytes wins.

    Don't let code-golf languages discourage you from posting answers with non-codegolfing languages. Try to come up with an as short as possible answer for 'any' programming language.


  • Standard rules apply for your answer with default I/O rules, so you are allowed to use STDIN/STDOUT, functions/method with the proper parameters and return-type, full programs. Your call.


  • Default Loopholes are forbidden.

  • If possible, please add a link with a test for your code (i.e. TIO).

  • Also, adding an explanation for your answer is highly recommended.










share|improve this question















2019 has come and probably everyone has noticed the peculiarity of this number: it's in fact composed by two sub-numbers (20 and 19) representing a sequence of consecutive descending numbers.



Challenge



Given a number x, return the length of the maximum sequence of consecutive, descending numbers that can be formed by taking sub-numbers of x.



Notes :




  • sub-numbers cannot contain leading zeros (e.g. 1009 cannot be split into 10,09)

  • consecutive and descending means that a number in the sequence must be equal to the previous number -1, or $n_{i+1} = n_{i}-1$ (e.g. 52 cannot be split into 5,2 because 5 and 2 are not consecutive, 2 ≠ 5 - 1)

  • the sequence must be obtained by using the full number, e.g. in 7321 you can't discard 7 and get the sequence 3,2,1

  • only one sequence can be obtained from the number, e.g. 3211098 cannot be split into two sequences 3,2,1 and 10,9,8


Input




  • An integer number (>= 0) : can be a number, or a string, or list of digits


Output




  • A single integer given the maximum number of decreasing sub-numbers (note that the lower-bound of this number is 1, i.e. a number is composed by itself in a descending sequence of length one)


Examples :



2019         --> 20,19           --> output : 2
201200199198 --> 201,200,199,198 --> output : 4
3246 --> 3246 --> output : 1
87654 --> 8,7,6,5,4 --> output : 5
123456 --> 123456 --> output : 1
1009998 --> 100,99,98 --> output : 3
100908 --> 100908 --> output : 1
1110987 --> 11,10,9,8,7 --> output : 5
210 --> 2,1,0 --> output : 3
1 --> 1 --> output : 1
0 --> 0 --> output : 1
312 --> 312 --> output : 1
191 --> 191 --> output : 1


General rules:




  • This is code-golf, so shortest answer in bytes wins.

    Don't let code-golf languages discourage you from posting answers with non-codegolfing languages. Try to come up with an as short as possible answer for 'any' programming language.


  • Standard rules apply for your answer with default I/O rules, so you are allowed to use STDIN/STDOUT, functions/method with the proper parameters and return-type, full programs. Your call.


  • Default Loopholes are forbidden.

  • If possible, please add a link with a test for your code (i.e. TIO).

  • Also, adding an explanation for your answer is highly recommended.







code-golf






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 5 hours ago









Veskah

82414




82414










asked 19 hours ago









digEmAll

2,579411




2,579411












  • Migrated from sandbox : codegolf.meta.stackexchange.com/questions/2140/…
    – digEmAll
    19 hours ago










  • Suggested test case: 1 --> 1.
    – Kamil Drakari
    14 hours ago










  • Additional suggested test cases: 312 --> 1 and 191 --> 1 to ensure answers aren't truncating the first or last number (13,12 and 19,18 in these cases).
    – Kamil Drakari
    13 hours ago






  • 1




    Is the test case 210 -> 2,1,0 wrong (same with 0 -> 0)? The tasks says "sub-numbers cannot contain leading zeros", is zero a special case?
    – BMO
    13 hours ago








  • 1




    @BMO: well, here the topic is kinda phylosofical... :D to me, 0 is a number with no (useless) leading zero, so yes zero is a special case
    – digEmAll
    13 hours ago




















  • Migrated from sandbox : codegolf.meta.stackexchange.com/questions/2140/…
    – digEmAll
    19 hours ago










  • Suggested test case: 1 --> 1.
    – Kamil Drakari
    14 hours ago










  • Additional suggested test cases: 312 --> 1 and 191 --> 1 to ensure answers aren't truncating the first or last number (13,12 and 19,18 in these cases).
    – Kamil Drakari
    13 hours ago






  • 1




    Is the test case 210 -> 2,1,0 wrong (same with 0 -> 0)? The tasks says "sub-numbers cannot contain leading zeros", is zero a special case?
    – BMO
    13 hours ago








  • 1




    @BMO: well, here the topic is kinda phylosofical... :D to me, 0 is a number with no (useless) leading zero, so yes zero is a special case
    – digEmAll
    13 hours ago


















Migrated from sandbox : codegolf.meta.stackexchange.com/questions/2140/…
– digEmAll
19 hours ago




Migrated from sandbox : codegolf.meta.stackexchange.com/questions/2140/…
– digEmAll
19 hours ago












Suggested test case: 1 --> 1.
– Kamil Drakari
14 hours ago




Suggested test case: 1 --> 1.
– Kamil Drakari
14 hours ago












Additional suggested test cases: 312 --> 1 and 191 --> 1 to ensure answers aren't truncating the first or last number (13,12 and 19,18 in these cases).
– Kamil Drakari
13 hours ago




Additional suggested test cases: 312 --> 1 and 191 --> 1 to ensure answers aren't truncating the first or last number (13,12 and 19,18 in these cases).
– Kamil Drakari
13 hours ago




1




1




Is the test case 210 -> 2,1,0 wrong (same with 0 -> 0)? The tasks says "sub-numbers cannot contain leading zeros", is zero a special case?
– BMO
13 hours ago






Is the test case 210 -> 2,1,0 wrong (same with 0 -> 0)? The tasks says "sub-numbers cannot contain leading zeros", is zero a special case?
– BMO
13 hours ago






1




1




@BMO: well, here the topic is kinda phylosofical... :D to me, 0 is a number with no (useless) leading zero, so yes zero is a special case
– digEmAll
13 hours ago






@BMO: well, here the topic is kinda phylosofical... :D to me, 0 is a number with no (useless) leading zero, so yes zero is a special case
– digEmAll
13 hours ago












9 Answers
9






active

oldest

votes


















4














JavaScript (ES6), 66 bytes



Takes input as a string.





f=(s,n=x='',o=p=n,i=0)=>s[i++]?o==s?i:f(s,--n,o+n,i):f(s,p+s[x++])


Try it online!






share|improve this answer





























    4















    Jelly,  15  9 bytes



    Bugfix thanks to Dennis



    ŻṚẆDfŒṖẈṀ


    Try it online! (even 321 takes half a minute since the code is at least $O(N^2)$)



    How?



    ŻṚẆDfŒṖẈṀ - Link: integer, n
    Ż - [0..n]
    Ṛ - reverse
    Ẇ - all contiguous slices (of implicit range(n)) = [[n],...,[2],[1],[0],[n,n-1],...,[2,1],[1,0],...,[n,n-1,n-2,...,2,1,0]]
    D - to decimal (vectorises)
    ŒṖ - partitions of (implicit decimal digits of) n
    f - filter discard from left if in right
    Ẉ - length of each
    Ṁ - maximum





    share|improve this answer































      4















      Perl 6, 43 41 bytes





      {/(<-[0]>.*?|0)+<?{2>set 1..*Z+$0}>/;+$0}


      Try it online!



      Regex based solution. I'm trying to come up with a better way to match from a descending list instead, but Perl 6 doesn't do partitions well



      Explanation:



      {                                        }  # Anonymous code block
      / /; # Match in the input
      <-[0]>.*? # Non-greedy number not starting with 0
      |0 # Or 0
      ( )+ # Repeatedly for the rest of the number
      <?{ }> # Where
      1..*Z+$0 # Each matched number plus the ascending numbers
      # For example 1,2,3 Z+ 9,8,7 is 10,10,10
      set # Coerced to a set
      2> # Is smaller than length 2?
      +$0 # Return the length of the list





      share|improve this answer































        2















        05AB1E, 10 bytes



        ÝRŒʒJQ}€gà


        Extremely slow, so the TIO below only works for test cases below 750..



        Try it online.



        Explanation:





        Ý           # Create a list in the range [0, (implicit) input]
        # i.e. 109 → [0,1,2,...,107,108,109]
        R # Reverse it
        # i.e. [0,1,2,...,107,108,109] → [109,108,107,...,2,1,0]
        Π# Get all possible sublists of this list
        # i.e. [109,108,107,...,2,1,0]
        # → [[109],[109,108],[109,108,107],...,[2,1,0],[1],[1,0],[0]]
        ʒ } # Filter it by:
        J # Where the sublist joined together
        # i.e. [10,9] → "109"
        # i.e. [109,108,107] → "109108107"
        Q # Are equal to the (implicit) input
        # i.e. 109 and "109" → 1 (truthy)
        # i.e. 109 and "109108107" → 0 (falsey)
        €g # After filtering, take the length of each remaining inner list
        # i.e. [[109],[[10,9]] → [1,2]
        à # And only leave the maximum length (which is output implicitly)
        # i.e. [1,2] → 2





        share|improve this answer































          2














          Pyth, 16 bytes



          lef!.EhM.+vMT./z


          Try it online here, or verify all the test cases at once here.



          lef!.EhM.+vMT./z   Implicit: z=input as string
          ./z Get all divisions of z into disjoint substrings
          f Filter the above, as T, keeping those where the following is truthy:
          vMT Parse each substring as an int
          .+ Get difference between each pair
          hM Increment each
          !.E Are all elements 0? { NOT(ANY(...)) }
          e Take the last element of the filtered divisions
          Divisions are generated with fewest substrings first, so last remaining division is also the longest
          l Length of the above, implicit print





          share|improve this answer





























            0















            Japt, 30 bytes



            ;õ0 Ô+J f,+Uì q",?" +J mèJ ²ÎÉ


            Try it online! or Check most test cases



            This doesn't score well, but it uses a unique method and there might be room to golf it a lot more. It also performs well enough that all test cases other than 201200199198 avoid timing out.



            Explanation:



            ;                                 #Set J = ","
            õ0 #Get the range [0...input]
            Ô #Reverse it
            +J #Add a comma to the end, casting to a string by joining with ","
            f #Get the substring that matches this regex:
            , # Starts with a comma
            +Uì # Has all the digits of the input
            q",?" # Optionally, there can be commas between any digits
            +J # Ends with a comma
            mèJ #Count the number of commas in the result
            ²Î #Use 2 instead if no substring matched
            É #Subtract 1





            share|improve this answer





























              0















              Jelly, 11 bytes



              ŒṖḌ’DɗƑƇẈṀ


              Byte for byte, no match for the other Jelly solution, but this one should be roughly $Oleft(n^{0.3}right)$.



              Try it online!



              How it works



              ŒṖḌ’DɗƑƇẈṀ  Main link. Argument: n (integer)

              ŒṖ Yield all partitions of n's digit list in base 10.
              Ƈ Comb; keep only partitions for which the link to the left returns 1.
              Ƒ Fixed; yield 1 if calling the link to the left returns its argument.
              Cumulatively reduce the partition by the link to the left.
              ɗ Combine the three links to the left into a dyadic chain.
              Ḍ Undecimal; convert a digit list into an integer.
              ’ Decrement the result.
              D Decimal; convert the integer back to a digit list.





              share|improve this answer































                0















                Charcoal, 26 bytes



                F⊕LθF⊕Lθ⊞υ⭆κ⁻I…θιλI﹪⌕υθ⊕Lθ


                Try it online! Link is to verbose version of code. Explanation:



                F⊕Lθ


                Loop i from 0 to the length of the input.



                F⊕Lθ


                Loop k from 0 to the length of the input.



                ⊞υ⭆κ⁻I…θ⊕ιλ


                Calculate the first k numbers in the descending sequence starting from the number given by the first i digits of the input, concatenate them, and accumulate each resulting string in the predefined empty list.



                I﹪⌕υθ⊕Lθ


                Find the position of the first matching copy of the input and reduce it modulo 1 more than the length of the input.



                Example: For an input of 2019 the following strings are generated:



                 0
                1 0
                2 0-1
                3 0-1-2
                4 0-1-2-3
                5
                6 2
                7 21
                8 210
                9 210-1
                10
                11 20
                12 2019
                13 201918
                14 20191817
                15
                16 201
                17 201200
                18 201200199
                19 201200199198
                20
                21 2019
                22 20192018
                23 201920182017
                24 2019201820172016


                2019 is then found at index 12, which is reduced modulo 5 to give 2, the desired answer.






                share|improve this answer





























                  0















                  Python 3, 302 282 bytes



                  Takes input as a string. Basically, it takes increasing larger slices of the number from the left, and sees if for that slice of the number a sequence can be formed using all the numbers.





                  def g(n,m,t=1):
                  for i in range(1,len(m)+1):
                  if int(m)==int(n[:i])+1:
                  if i==len(n):return t+1
                  return g(n[i:],n[:i],t+1)
                  return 1
                  def f(n):
                  for i in range(len(n)):
                  x=n[:i]
                  for j in range(1,len(x)+1):
                  if (int(x)==int(n[i:i+j])+1)*int(n[i]):return g(n[i:],x)
                  return 1


                  Try it online!






                  share|improve this answer























                    Your Answer





                    StackExchange.ifUsing("editor", function () {
                    return StackExchange.using("mathjaxEditing", function () {
                    StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
                    StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
                    });
                    });
                    }, "mathjax-editing");

                    StackExchange.ifUsing("editor", function () {
                    StackExchange.using("externalEditor", function () {
                    StackExchange.using("snippets", function () {
                    StackExchange.snippets.init();
                    });
                    });
                    }, "code-snippets");

                    StackExchange.ready(function() {
                    var channelOptions = {
                    tags: "".split(" "),
                    id: "200"
                    };
                    initTagRenderer("".split(" "), "".split(" "), channelOptions);

                    StackExchange.using("externalEditor", function() {
                    // Have to fire editor after snippets, if snippets enabled
                    if (StackExchange.settings.snippets.snippetsEnabled) {
                    StackExchange.using("snippets", function() {
                    createEditor();
                    });
                    }
                    else {
                    createEditor();
                    }
                    });

                    function createEditor() {
                    StackExchange.prepareEditor({
                    heartbeatType: 'answer',
                    autoActivateHeartbeat: false,
                    convertImagesToLinks: false,
                    noModals: true,
                    showLowRepImageUploadWarning: true,
                    reputationToPostImages: null,
                    bindNavPrevention: true,
                    postfix: "",
                    imageUploader: {
                    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
                    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
                    allowUrls: true
                    },
                    onDemand: true,
                    discardSelector: ".discard-answer"
                    ,immediatelyShowMarkdownHelp:true
                    });


                    }
                    });














                    draft saved

                    draft discarded


















                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodegolf.stackexchange.com%2fquestions%2f178373%2fhow-many-consecutive-descending-numbers-in-my-number%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown

























                    9 Answers
                    9






                    active

                    oldest

                    votes








                    9 Answers
                    9






                    active

                    oldest

                    votes









                    active

                    oldest

                    votes






                    active

                    oldest

                    votes









                    4














                    JavaScript (ES6), 66 bytes



                    Takes input as a string.





                    f=(s,n=x='',o=p=n,i=0)=>s[i++]?o==s?i:f(s,--n,o+n,i):f(s,p+s[x++])


                    Try it online!






                    share|improve this answer


























                      4














                      JavaScript (ES6), 66 bytes



                      Takes input as a string.





                      f=(s,n=x='',o=p=n,i=0)=>s[i++]?o==s?i:f(s,--n,o+n,i):f(s,p+s[x++])


                      Try it online!






                      share|improve this answer
























                        4












                        4








                        4






                        JavaScript (ES6), 66 bytes



                        Takes input as a string.





                        f=(s,n=x='',o=p=n,i=0)=>s[i++]?o==s?i:f(s,--n,o+n,i):f(s,p+s[x++])


                        Try it online!






                        share|improve this answer












                        JavaScript (ES6), 66 bytes



                        Takes input as a string.





                        f=(s,n=x='',o=p=n,i=0)=>s[i++]?o==s?i:f(s,--n,o+n,i):f(s,p+s[x++])


                        Try it online!







                        share|improve this answer












                        share|improve this answer



                        share|improve this answer










                        answered 19 hours ago









                        Arnauld

                        72.6k689306




                        72.6k689306























                            4















                            Jelly,  15  9 bytes



                            Bugfix thanks to Dennis



                            ŻṚẆDfŒṖẈṀ


                            Try it online! (even 321 takes half a minute since the code is at least $O(N^2)$)



                            How?



                            ŻṚẆDfŒṖẈṀ - Link: integer, n
                            Ż - [0..n]
                            Ṛ - reverse
                            Ẇ - all contiguous slices (of implicit range(n)) = [[n],...,[2],[1],[0],[n,n-1],...,[2,1],[1,0],...,[n,n-1,n-2,...,2,1,0]]
                            D - to decimal (vectorises)
                            ŒṖ - partitions of (implicit decimal digits of) n
                            f - filter discard from left if in right
                            Ẉ - length of each
                            Ṁ - maximum





                            share|improve this answer




























                              4















                              Jelly,  15  9 bytes



                              Bugfix thanks to Dennis



                              ŻṚẆDfŒṖẈṀ


                              Try it online! (even 321 takes half a minute since the code is at least $O(N^2)$)



                              How?



                              ŻṚẆDfŒṖẈṀ - Link: integer, n
                              Ż - [0..n]
                              Ṛ - reverse
                              Ẇ - all contiguous slices (of implicit range(n)) = [[n],...,[2],[1],[0],[n,n-1],...,[2,1],[1,0],...,[n,n-1,n-2,...,2,1,0]]
                              D - to decimal (vectorises)
                              ŒṖ - partitions of (implicit decimal digits of) n
                              f - filter discard from left if in right
                              Ẉ - length of each
                              Ṁ - maximum





                              share|improve this answer


























                                4












                                4








                                4







                                Jelly,  15  9 bytes



                                Bugfix thanks to Dennis



                                ŻṚẆDfŒṖẈṀ


                                Try it online! (even 321 takes half a minute since the code is at least $O(N^2)$)



                                How?



                                ŻṚẆDfŒṖẈṀ - Link: integer, n
                                Ż - [0..n]
                                Ṛ - reverse
                                Ẇ - all contiguous slices (of implicit range(n)) = [[n],...,[2],[1],[0],[n,n-1],...,[2,1],[1,0],...,[n,n-1,n-2,...,2,1,0]]
                                D - to decimal (vectorises)
                                ŒṖ - partitions of (implicit decimal digits of) n
                                f - filter discard from left if in right
                                Ẉ - length of each
                                Ṁ - maximum





                                share|improve this answer















                                Jelly,  15  9 bytes



                                Bugfix thanks to Dennis



                                ŻṚẆDfŒṖẈṀ


                                Try it online! (even 321 takes half a minute since the code is at least $O(N^2)$)



                                How?



                                ŻṚẆDfŒṖẈṀ - Link: integer, n
                                Ż - [0..n]
                                Ṛ - reverse
                                Ẇ - all contiguous slices (of implicit range(n)) = [[n],...,[2],[1],[0],[n,n-1],...,[2,1],[1,0],...,[n,n-1,n-2,...,2,1,0]]
                                D - to decimal (vectorises)
                                ŒṖ - partitions of (implicit decimal digits of) n
                                f - filter discard from left if in right
                                Ẉ - length of each
                                Ṁ - maximum






                                share|improve this answer














                                share|improve this answer



                                share|improve this answer








                                edited 10 hours ago

























                                answered 18 hours ago









                                Jonathan Allan

                                50.8k534165




                                50.8k534165























                                    4















                                    Perl 6, 43 41 bytes





                                    {/(<-[0]>.*?|0)+<?{2>set 1..*Z+$0}>/;+$0}


                                    Try it online!



                                    Regex based solution. I'm trying to come up with a better way to match from a descending list instead, but Perl 6 doesn't do partitions well



                                    Explanation:



                                    {                                        }  # Anonymous code block
                                    / /; # Match in the input
                                    <-[0]>.*? # Non-greedy number not starting with 0
                                    |0 # Or 0
                                    ( )+ # Repeatedly for the rest of the number
                                    <?{ }> # Where
                                    1..*Z+$0 # Each matched number plus the ascending numbers
                                    # For example 1,2,3 Z+ 9,8,7 is 10,10,10
                                    set # Coerced to a set
                                    2> # Is smaller than length 2?
                                    +$0 # Return the length of the list





                                    share|improve this answer




























                                      4















                                      Perl 6, 43 41 bytes





                                      {/(<-[0]>.*?|0)+<?{2>set 1..*Z+$0}>/;+$0}


                                      Try it online!



                                      Regex based solution. I'm trying to come up with a better way to match from a descending list instead, but Perl 6 doesn't do partitions well



                                      Explanation:



                                      {                                        }  # Anonymous code block
                                      / /; # Match in the input
                                      <-[0]>.*? # Non-greedy number not starting with 0
                                      |0 # Or 0
                                      ( )+ # Repeatedly for the rest of the number
                                      <?{ }> # Where
                                      1..*Z+$0 # Each matched number plus the ascending numbers
                                      # For example 1,2,3 Z+ 9,8,7 is 10,10,10
                                      set # Coerced to a set
                                      2> # Is smaller than length 2?
                                      +$0 # Return the length of the list





                                      share|improve this answer


























                                        4












                                        4








                                        4







                                        Perl 6, 43 41 bytes





                                        {/(<-[0]>.*?|0)+<?{2>set 1..*Z+$0}>/;+$0}


                                        Try it online!



                                        Regex based solution. I'm trying to come up with a better way to match from a descending list instead, but Perl 6 doesn't do partitions well



                                        Explanation:



                                        {                                        }  # Anonymous code block
                                        / /; # Match in the input
                                        <-[0]>.*? # Non-greedy number not starting with 0
                                        |0 # Or 0
                                        ( )+ # Repeatedly for the rest of the number
                                        <?{ }> # Where
                                        1..*Z+$0 # Each matched number plus the ascending numbers
                                        # For example 1,2,3 Z+ 9,8,7 is 10,10,10
                                        set # Coerced to a set
                                        2> # Is smaller than length 2?
                                        +$0 # Return the length of the list





                                        share|improve this answer















                                        Perl 6, 43 41 bytes





                                        {/(<-[0]>.*?|0)+<?{2>set 1..*Z+$0}>/;+$0}


                                        Try it online!



                                        Regex based solution. I'm trying to come up with a better way to match from a descending list instead, but Perl 6 doesn't do partitions well



                                        Explanation:



                                        {                                        }  # Anonymous code block
                                        / /; # Match in the input
                                        <-[0]>.*? # Non-greedy number not starting with 0
                                        |0 # Or 0
                                        ( )+ # Repeatedly for the rest of the number
                                        <?{ }> # Where
                                        1..*Z+$0 # Each matched number plus the ascending numbers
                                        # For example 1,2,3 Z+ 9,8,7 is 10,10,10
                                        set # Coerced to a set
                                        2> # Is smaller than length 2?
                                        +$0 # Return the length of the list






                                        share|improve this answer














                                        share|improve this answer



                                        share|improve this answer








                                        edited 7 hours ago

























                                        answered 18 hours ago









                                        Jo King

                                        21k248110




                                        21k248110























                                            2















                                            05AB1E, 10 bytes



                                            ÝRŒʒJQ}€gà


                                            Extremely slow, so the TIO below only works for test cases below 750..



                                            Try it online.



                                            Explanation:





                                            Ý           # Create a list in the range [0, (implicit) input]
                                            # i.e. 109 → [0,1,2,...,107,108,109]
                                            R # Reverse it
                                            # i.e. [0,1,2,...,107,108,109] → [109,108,107,...,2,1,0]
                                            Π# Get all possible sublists of this list
                                            # i.e. [109,108,107,...,2,1,0]
                                            # → [[109],[109,108],[109,108,107],...,[2,1,0],[1],[1,0],[0]]
                                            ʒ } # Filter it by:
                                            J # Where the sublist joined together
                                            # i.e. [10,9] → "109"
                                            # i.e. [109,108,107] → "109108107"
                                            Q # Are equal to the (implicit) input
                                            # i.e. 109 and "109" → 1 (truthy)
                                            # i.e. 109 and "109108107" → 0 (falsey)
                                            €g # After filtering, take the length of each remaining inner list
                                            # i.e. [[109],[[10,9]] → [1,2]
                                            à # And only leave the maximum length (which is output implicitly)
                                            # i.e. [1,2] → 2





                                            share|improve this answer




























                                              2















                                              05AB1E, 10 bytes



                                              ÝRŒʒJQ}€gà


                                              Extremely slow, so the TIO below only works for test cases below 750..



                                              Try it online.



                                              Explanation:





                                              Ý           # Create a list in the range [0, (implicit) input]
                                              # i.e. 109 → [0,1,2,...,107,108,109]
                                              R # Reverse it
                                              # i.e. [0,1,2,...,107,108,109] → [109,108,107,...,2,1,0]
                                              Π# Get all possible sublists of this list
                                              # i.e. [109,108,107,...,2,1,0]
                                              # → [[109],[109,108],[109,108,107],...,[2,1,0],[1],[1,0],[0]]
                                              ʒ } # Filter it by:
                                              J # Where the sublist joined together
                                              # i.e. [10,9] → "109"
                                              # i.e. [109,108,107] → "109108107"
                                              Q # Are equal to the (implicit) input
                                              # i.e. 109 and "109" → 1 (truthy)
                                              # i.e. 109 and "109108107" → 0 (falsey)
                                              €g # After filtering, take the length of each remaining inner list
                                              # i.e. [[109],[[10,9]] → [1,2]
                                              à # And only leave the maximum length (which is output implicitly)
                                              # i.e. [1,2] → 2





                                              share|improve this answer


























                                                2












                                                2








                                                2







                                                05AB1E, 10 bytes



                                                ÝRŒʒJQ}€gà


                                                Extremely slow, so the TIO below only works for test cases below 750..



                                                Try it online.



                                                Explanation:





                                                Ý           # Create a list in the range [0, (implicit) input]
                                                # i.e. 109 → [0,1,2,...,107,108,109]
                                                R # Reverse it
                                                # i.e. [0,1,2,...,107,108,109] → [109,108,107,...,2,1,0]
                                                Π# Get all possible sublists of this list
                                                # i.e. [109,108,107,...,2,1,0]
                                                # → [[109],[109,108],[109,108,107],...,[2,1,0],[1],[1,0],[0]]
                                                ʒ } # Filter it by:
                                                J # Where the sublist joined together
                                                # i.e. [10,9] → "109"
                                                # i.e. [109,108,107] → "109108107"
                                                Q # Are equal to the (implicit) input
                                                # i.e. 109 and "109" → 1 (truthy)
                                                # i.e. 109 and "109108107" → 0 (falsey)
                                                €g # After filtering, take the length of each remaining inner list
                                                # i.e. [[109],[[10,9]] → [1,2]
                                                à # And only leave the maximum length (which is output implicitly)
                                                # i.e. [1,2] → 2





                                                share|improve this answer















                                                05AB1E, 10 bytes



                                                ÝRŒʒJQ}€gà


                                                Extremely slow, so the TIO below only works for test cases below 750..



                                                Try it online.



                                                Explanation:





                                                Ý           # Create a list in the range [0, (implicit) input]
                                                # i.e. 109 → [0,1,2,...,107,108,109]
                                                R # Reverse it
                                                # i.e. [0,1,2,...,107,108,109] → [109,108,107,...,2,1,0]
                                                Π# Get all possible sublists of this list
                                                # i.e. [109,108,107,...,2,1,0]
                                                # → [[109],[109,108],[109,108,107],...,[2,1,0],[1],[1,0],[0]]
                                                ʒ } # Filter it by:
                                                J # Where the sublist joined together
                                                # i.e. [10,9] → "109"
                                                # i.e. [109,108,107] → "109108107"
                                                Q # Are equal to the (implicit) input
                                                # i.e. 109 and "109" → 1 (truthy)
                                                # i.e. 109 and "109108107" → 0 (falsey)
                                                €g # After filtering, take the length of each remaining inner list
                                                # i.e. [[109],[[10,9]] → [1,2]
                                                à # And only leave the maximum length (which is output implicitly)
                                                # i.e. [1,2] → 2






                                                share|improve this answer














                                                share|improve this answer



                                                share|improve this answer








                                                edited 18 hours ago

























                                                answered 18 hours ago









                                                Kevin Cruijssen

                                                35.9k554188




                                                35.9k554188























                                                    2














                                                    Pyth, 16 bytes



                                                    lef!.EhM.+vMT./z


                                                    Try it online here, or verify all the test cases at once here.



                                                    lef!.EhM.+vMT./z   Implicit: z=input as string
                                                    ./z Get all divisions of z into disjoint substrings
                                                    f Filter the above, as T, keeping those where the following is truthy:
                                                    vMT Parse each substring as an int
                                                    .+ Get difference between each pair
                                                    hM Increment each
                                                    !.E Are all elements 0? { NOT(ANY(...)) }
                                                    e Take the last element of the filtered divisions
                                                    Divisions are generated with fewest substrings first, so last remaining division is also the longest
                                                    l Length of the above, implicit print





                                                    share|improve this answer


























                                                      2














                                                      Pyth, 16 bytes



                                                      lef!.EhM.+vMT./z


                                                      Try it online here, or verify all the test cases at once here.



                                                      lef!.EhM.+vMT./z   Implicit: z=input as string
                                                      ./z Get all divisions of z into disjoint substrings
                                                      f Filter the above, as T, keeping those where the following is truthy:
                                                      vMT Parse each substring as an int
                                                      .+ Get difference between each pair
                                                      hM Increment each
                                                      !.E Are all elements 0? { NOT(ANY(...)) }
                                                      e Take the last element of the filtered divisions
                                                      Divisions are generated with fewest substrings first, so last remaining division is also the longest
                                                      l Length of the above, implicit print





                                                      share|improve this answer
























                                                        2












                                                        2








                                                        2






                                                        Pyth, 16 bytes



                                                        lef!.EhM.+vMT./z


                                                        Try it online here, or verify all the test cases at once here.



                                                        lef!.EhM.+vMT./z   Implicit: z=input as string
                                                        ./z Get all divisions of z into disjoint substrings
                                                        f Filter the above, as T, keeping those where the following is truthy:
                                                        vMT Parse each substring as an int
                                                        .+ Get difference between each pair
                                                        hM Increment each
                                                        !.E Are all elements 0? { NOT(ANY(...)) }
                                                        e Take the last element of the filtered divisions
                                                        Divisions are generated with fewest substrings first, so last remaining division is also the longest
                                                        l Length of the above, implicit print





                                                        share|improve this answer












                                                        Pyth, 16 bytes



                                                        lef!.EhM.+vMT./z


                                                        Try it online here, or verify all the test cases at once here.



                                                        lef!.EhM.+vMT./z   Implicit: z=input as string
                                                        ./z Get all divisions of z into disjoint substrings
                                                        f Filter the above, as T, keeping those where the following is truthy:
                                                        vMT Parse each substring as an int
                                                        .+ Get difference between each pair
                                                        hM Increment each
                                                        !.E Are all elements 0? { NOT(ANY(...)) }
                                                        e Take the last element of the filtered divisions
                                                        Divisions are generated with fewest substrings first, so last remaining division is also the longest
                                                        l Length of the above, implicit print






                                                        share|improve this answer












                                                        share|improve this answer



                                                        share|improve this answer










                                                        answered 17 hours ago









                                                        Sok

                                                        3,587722




                                                        3,587722























                                                            0















                                                            Japt, 30 bytes



                                                            ;õ0 Ô+J f,+Uì q",?" +J mèJ ²ÎÉ


                                                            Try it online! or Check most test cases



                                                            This doesn't score well, but it uses a unique method and there might be room to golf it a lot more. It also performs well enough that all test cases other than 201200199198 avoid timing out.



                                                            Explanation:



                                                            ;                                 #Set J = ","
                                                            õ0 #Get the range [0...input]
                                                            Ô #Reverse it
                                                            +J #Add a comma to the end, casting to a string by joining with ","
                                                            f #Get the substring that matches this regex:
                                                            , # Starts with a comma
                                                            +Uì # Has all the digits of the input
                                                            q",?" # Optionally, there can be commas between any digits
                                                            +J # Ends with a comma
                                                            mèJ #Count the number of commas in the result
                                                            ²Î #Use 2 instead if no substring matched
                                                            É #Subtract 1





                                                            share|improve this answer


























                                                              0















                                                              Japt, 30 bytes



                                                              ;õ0 Ô+J f,+Uì q",?" +J mèJ ²ÎÉ


                                                              Try it online! or Check most test cases



                                                              This doesn't score well, but it uses a unique method and there might be room to golf it a lot more. It also performs well enough that all test cases other than 201200199198 avoid timing out.



                                                              Explanation:



                                                              ;                                 #Set J = ","
                                                              õ0 #Get the range [0...input]
                                                              Ô #Reverse it
                                                              +J #Add a comma to the end, casting to a string by joining with ","
                                                              f #Get the substring that matches this regex:
                                                              , # Starts with a comma
                                                              +Uì # Has all the digits of the input
                                                              q",?" # Optionally, there can be commas between any digits
                                                              +J # Ends with a comma
                                                              mèJ #Count the number of commas in the result
                                                              ²Î #Use 2 instead if no substring matched
                                                              É #Subtract 1





                                                              share|improve this answer
























                                                                0












                                                                0








                                                                0







                                                                Japt, 30 bytes



                                                                ;õ0 Ô+J f,+Uì q",?" +J mèJ ²ÎÉ


                                                                Try it online! or Check most test cases



                                                                This doesn't score well, but it uses a unique method and there might be room to golf it a lot more. It also performs well enough that all test cases other than 201200199198 avoid timing out.



                                                                Explanation:



                                                                ;                                 #Set J = ","
                                                                õ0 #Get the range [0...input]
                                                                Ô #Reverse it
                                                                +J #Add a comma to the end, casting to a string by joining with ","
                                                                f #Get the substring that matches this regex:
                                                                , # Starts with a comma
                                                                +Uì # Has all the digits of the input
                                                                q",?" # Optionally, there can be commas between any digits
                                                                +J # Ends with a comma
                                                                mèJ #Count the number of commas in the result
                                                                ²Î #Use 2 instead if no substring matched
                                                                É #Subtract 1





                                                                share|improve this answer













                                                                Japt, 30 bytes



                                                                ;õ0 Ô+J f,+Uì q",?" +J mèJ ²ÎÉ


                                                                Try it online! or Check most test cases



                                                                This doesn't score well, but it uses a unique method and there might be room to golf it a lot more. It also performs well enough that all test cases other than 201200199198 avoid timing out.



                                                                Explanation:



                                                                ;                                 #Set J = ","
                                                                õ0 #Get the range [0...input]
                                                                Ô #Reverse it
                                                                +J #Add a comma to the end, casting to a string by joining with ","
                                                                f #Get the substring that matches this regex:
                                                                , # Starts with a comma
                                                                +Uì # Has all the digits of the input
                                                                q",?" # Optionally, there can be commas between any digits
                                                                +J # Ends with a comma
                                                                mèJ #Count the number of commas in the result
                                                                ²Î #Use 2 instead if no substring matched
                                                                É #Subtract 1






                                                                share|improve this answer












                                                                share|improve this answer



                                                                share|improve this answer










                                                                answered 10 hours ago









                                                                Kamil Drakari

                                                                2,971416




                                                                2,971416























                                                                    0















                                                                    Jelly, 11 bytes



                                                                    ŒṖḌ’DɗƑƇẈṀ


                                                                    Byte for byte, no match for the other Jelly solution, but this one should be roughly $Oleft(n^{0.3}right)$.



                                                                    Try it online!



                                                                    How it works



                                                                    ŒṖḌ’DɗƑƇẈṀ  Main link. Argument: n (integer)

                                                                    ŒṖ Yield all partitions of n's digit list in base 10.
                                                                    Ƈ Comb; keep only partitions for which the link to the left returns 1.
                                                                    Ƒ Fixed; yield 1 if calling the link to the left returns its argument.
                                                                    Cumulatively reduce the partition by the link to the left.
                                                                    ɗ Combine the three links to the left into a dyadic chain.
                                                                    Ḍ Undecimal; convert a digit list into an integer.
                                                                    ’ Decrement the result.
                                                                    D Decimal; convert the integer back to a digit list.





                                                                    share|improve this answer




























                                                                      0















                                                                      Jelly, 11 bytes



                                                                      ŒṖḌ’DɗƑƇẈṀ


                                                                      Byte for byte, no match for the other Jelly solution, but this one should be roughly $Oleft(n^{0.3}right)$.



                                                                      Try it online!



                                                                      How it works



                                                                      ŒṖḌ’DɗƑƇẈṀ  Main link. Argument: n (integer)

                                                                      ŒṖ Yield all partitions of n's digit list in base 10.
                                                                      Ƈ Comb; keep only partitions for which the link to the left returns 1.
                                                                      Ƒ Fixed; yield 1 if calling the link to the left returns its argument.
                                                                      Cumulatively reduce the partition by the link to the left.
                                                                      ɗ Combine the three links to the left into a dyadic chain.
                                                                      Ḍ Undecimal; convert a digit list into an integer.
                                                                      ’ Decrement the result.
                                                                      D Decimal; convert the integer back to a digit list.





                                                                      share|improve this answer


























                                                                        0












                                                                        0








                                                                        0







                                                                        Jelly, 11 bytes



                                                                        ŒṖḌ’DɗƑƇẈṀ


                                                                        Byte for byte, no match for the other Jelly solution, but this one should be roughly $Oleft(n^{0.3}right)$.



                                                                        Try it online!



                                                                        How it works



                                                                        ŒṖḌ’DɗƑƇẈṀ  Main link. Argument: n (integer)

                                                                        ŒṖ Yield all partitions of n's digit list in base 10.
                                                                        Ƈ Comb; keep only partitions for which the link to the left returns 1.
                                                                        Ƒ Fixed; yield 1 if calling the link to the left returns its argument.
                                                                        Cumulatively reduce the partition by the link to the left.
                                                                        ɗ Combine the three links to the left into a dyadic chain.
                                                                        Ḍ Undecimal; convert a digit list into an integer.
                                                                        ’ Decrement the result.
                                                                        D Decimal; convert the integer back to a digit list.





                                                                        share|improve this answer















                                                                        Jelly, 11 bytes



                                                                        ŒṖḌ’DɗƑƇẈṀ


                                                                        Byte for byte, no match for the other Jelly solution, but this one should be roughly $Oleft(n^{0.3}right)$.



                                                                        Try it online!



                                                                        How it works



                                                                        ŒṖḌ’DɗƑƇẈṀ  Main link. Argument: n (integer)

                                                                        ŒṖ Yield all partitions of n's digit list in base 10.
                                                                        Ƈ Comb; keep only partitions for which the link to the left returns 1.
                                                                        Ƒ Fixed; yield 1 if calling the link to the left returns its argument.
                                                                        Cumulatively reduce the partition by the link to the left.
                                                                        ɗ Combine the three links to the left into a dyadic chain.
                                                                        Ḍ Undecimal; convert a digit list into an integer.
                                                                        ’ Decrement the result.
                                                                        D Decimal; convert the integer back to a digit list.






                                                                        share|improve this answer














                                                                        share|improve this answer



                                                                        share|improve this answer








                                                                        edited 10 hours ago

























                                                                        answered 16 hours ago









                                                                        Dennis

                                                                        186k32297735




                                                                        186k32297735























                                                                            0















                                                                            Charcoal, 26 bytes



                                                                            F⊕LθF⊕Lθ⊞υ⭆κ⁻I…θιλI﹪⌕υθ⊕Lθ


                                                                            Try it online! Link is to verbose version of code. Explanation:



                                                                            F⊕Lθ


                                                                            Loop i from 0 to the length of the input.



                                                                            F⊕Lθ


                                                                            Loop k from 0 to the length of the input.



                                                                            ⊞υ⭆κ⁻I…θ⊕ιλ


                                                                            Calculate the first k numbers in the descending sequence starting from the number given by the first i digits of the input, concatenate them, and accumulate each resulting string in the predefined empty list.



                                                                            I﹪⌕υθ⊕Lθ


                                                                            Find the position of the first matching copy of the input and reduce it modulo 1 more than the length of the input.



                                                                            Example: For an input of 2019 the following strings are generated:



                                                                             0
                                                                            1 0
                                                                            2 0-1
                                                                            3 0-1-2
                                                                            4 0-1-2-3
                                                                            5
                                                                            6 2
                                                                            7 21
                                                                            8 210
                                                                            9 210-1
                                                                            10
                                                                            11 20
                                                                            12 2019
                                                                            13 201918
                                                                            14 20191817
                                                                            15
                                                                            16 201
                                                                            17 201200
                                                                            18 201200199
                                                                            19 201200199198
                                                                            20
                                                                            21 2019
                                                                            22 20192018
                                                                            23 201920182017
                                                                            24 2019201820172016


                                                                            2019 is then found at index 12, which is reduced modulo 5 to give 2, the desired answer.






                                                                            share|improve this answer


























                                                                              0















                                                                              Charcoal, 26 bytes



                                                                              F⊕LθF⊕Lθ⊞υ⭆κ⁻I…θιλI﹪⌕υθ⊕Lθ


                                                                              Try it online! Link is to verbose version of code. Explanation:



                                                                              F⊕Lθ


                                                                              Loop i from 0 to the length of the input.



                                                                              F⊕Lθ


                                                                              Loop k from 0 to the length of the input.



                                                                              ⊞υ⭆κ⁻I…θ⊕ιλ


                                                                              Calculate the first k numbers in the descending sequence starting from the number given by the first i digits of the input, concatenate them, and accumulate each resulting string in the predefined empty list.



                                                                              I﹪⌕υθ⊕Lθ


                                                                              Find the position of the first matching copy of the input and reduce it modulo 1 more than the length of the input.



                                                                              Example: For an input of 2019 the following strings are generated:



                                                                               0
                                                                              1 0
                                                                              2 0-1
                                                                              3 0-1-2
                                                                              4 0-1-2-3
                                                                              5
                                                                              6 2
                                                                              7 21
                                                                              8 210
                                                                              9 210-1
                                                                              10
                                                                              11 20
                                                                              12 2019
                                                                              13 201918
                                                                              14 20191817
                                                                              15
                                                                              16 201
                                                                              17 201200
                                                                              18 201200199
                                                                              19 201200199198
                                                                              20
                                                                              21 2019
                                                                              22 20192018
                                                                              23 201920182017
                                                                              24 2019201820172016


                                                                              2019 is then found at index 12, which is reduced modulo 5 to give 2, the desired answer.






                                                                              share|improve this answer
























                                                                                0












                                                                                0








                                                                                0







                                                                                Charcoal, 26 bytes



                                                                                F⊕LθF⊕Lθ⊞υ⭆κ⁻I…θιλI﹪⌕υθ⊕Lθ


                                                                                Try it online! Link is to verbose version of code. Explanation:



                                                                                F⊕Lθ


                                                                                Loop i from 0 to the length of the input.



                                                                                F⊕Lθ


                                                                                Loop k from 0 to the length of the input.



                                                                                ⊞υ⭆κ⁻I…θ⊕ιλ


                                                                                Calculate the first k numbers in the descending sequence starting from the number given by the first i digits of the input, concatenate them, and accumulate each resulting string in the predefined empty list.



                                                                                I﹪⌕υθ⊕Lθ


                                                                                Find the position of the first matching copy of the input and reduce it modulo 1 more than the length of the input.



                                                                                Example: For an input of 2019 the following strings are generated:



                                                                                 0
                                                                                1 0
                                                                                2 0-1
                                                                                3 0-1-2
                                                                                4 0-1-2-3
                                                                                5
                                                                                6 2
                                                                                7 21
                                                                                8 210
                                                                                9 210-1
                                                                                10
                                                                                11 20
                                                                                12 2019
                                                                                13 201918
                                                                                14 20191817
                                                                                15
                                                                                16 201
                                                                                17 201200
                                                                                18 201200199
                                                                                19 201200199198
                                                                                20
                                                                                21 2019
                                                                                22 20192018
                                                                                23 201920182017
                                                                                24 2019201820172016


                                                                                2019 is then found at index 12, which is reduced modulo 5 to give 2, the desired answer.






                                                                                share|improve this answer













                                                                                Charcoal, 26 bytes



                                                                                F⊕LθF⊕Lθ⊞υ⭆κ⁻I…θιλI﹪⌕υθ⊕Lθ


                                                                                Try it online! Link is to verbose version of code. Explanation:



                                                                                F⊕Lθ


                                                                                Loop i from 0 to the length of the input.



                                                                                F⊕Lθ


                                                                                Loop k from 0 to the length of the input.



                                                                                ⊞υ⭆κ⁻I…θ⊕ιλ


                                                                                Calculate the first k numbers in the descending sequence starting from the number given by the first i digits of the input, concatenate them, and accumulate each resulting string in the predefined empty list.



                                                                                I﹪⌕υθ⊕Lθ


                                                                                Find the position of the first matching copy of the input and reduce it modulo 1 more than the length of the input.



                                                                                Example: For an input of 2019 the following strings are generated:



                                                                                 0
                                                                                1 0
                                                                                2 0-1
                                                                                3 0-1-2
                                                                                4 0-1-2-3
                                                                                5
                                                                                6 2
                                                                                7 21
                                                                                8 210
                                                                                9 210-1
                                                                                10
                                                                                11 20
                                                                                12 2019
                                                                                13 201918
                                                                                14 20191817
                                                                                15
                                                                                16 201
                                                                                17 201200
                                                                                18 201200199
                                                                                19 201200199198
                                                                                20
                                                                                21 2019
                                                                                22 20192018
                                                                                23 201920182017
                                                                                24 2019201820172016


                                                                                2019 is then found at index 12, which is reduced modulo 5 to give 2, the desired answer.







                                                                                share|improve this answer












                                                                                share|improve this answer



                                                                                share|improve this answer










                                                                                answered 9 hours ago









                                                                                Neil

                                                                                79.5k744177




                                                                                79.5k744177























                                                                                    0















                                                                                    Python 3, 302 282 bytes



                                                                                    Takes input as a string. Basically, it takes increasing larger slices of the number from the left, and sees if for that slice of the number a sequence can be formed using all the numbers.





                                                                                    def g(n,m,t=1):
                                                                                    for i in range(1,len(m)+1):
                                                                                    if int(m)==int(n[:i])+1:
                                                                                    if i==len(n):return t+1
                                                                                    return g(n[i:],n[:i],t+1)
                                                                                    return 1
                                                                                    def f(n):
                                                                                    for i in range(len(n)):
                                                                                    x=n[:i]
                                                                                    for j in range(1,len(x)+1):
                                                                                    if (int(x)==int(n[i:i+j])+1)*int(n[i]):return g(n[i:],x)
                                                                                    return 1


                                                                                    Try it online!






                                                                                    share|improve this answer




























                                                                                      0















                                                                                      Python 3, 302 282 bytes



                                                                                      Takes input as a string. Basically, it takes increasing larger slices of the number from the left, and sees if for that slice of the number a sequence can be formed using all the numbers.





                                                                                      def g(n,m,t=1):
                                                                                      for i in range(1,len(m)+1):
                                                                                      if int(m)==int(n[:i])+1:
                                                                                      if i==len(n):return t+1
                                                                                      return g(n[i:],n[:i],t+1)
                                                                                      return 1
                                                                                      def f(n):
                                                                                      for i in range(len(n)):
                                                                                      x=n[:i]
                                                                                      for j in range(1,len(x)+1):
                                                                                      if (int(x)==int(n[i:i+j])+1)*int(n[i]):return g(n[i:],x)
                                                                                      return 1


                                                                                      Try it online!






                                                                                      share|improve this answer


























                                                                                        0












                                                                                        0








                                                                                        0







                                                                                        Python 3, 302 282 bytes



                                                                                        Takes input as a string. Basically, it takes increasing larger slices of the number from the left, and sees if for that slice of the number a sequence can be formed using all the numbers.





                                                                                        def g(n,m,t=1):
                                                                                        for i in range(1,len(m)+1):
                                                                                        if int(m)==int(n[:i])+1:
                                                                                        if i==len(n):return t+1
                                                                                        return g(n[i:],n[:i],t+1)
                                                                                        return 1
                                                                                        def f(n):
                                                                                        for i in range(len(n)):
                                                                                        x=n[:i]
                                                                                        for j in range(1,len(x)+1):
                                                                                        if (int(x)==int(n[i:i+j])+1)*int(n[i]):return g(n[i:],x)
                                                                                        return 1


                                                                                        Try it online!






                                                                                        share|improve this answer















                                                                                        Python 3, 302 282 bytes



                                                                                        Takes input as a string. Basically, it takes increasing larger slices of the number from the left, and sees if for that slice of the number a sequence can be formed using all the numbers.





                                                                                        def g(n,m,t=1):
                                                                                        for i in range(1,len(m)+1):
                                                                                        if int(m)==int(n[:i])+1:
                                                                                        if i==len(n):return t+1
                                                                                        return g(n[i:],n[:i],t+1)
                                                                                        return 1
                                                                                        def f(n):
                                                                                        for i in range(len(n)):
                                                                                        x=n[:i]
                                                                                        for j in range(1,len(x)+1):
                                                                                        if (int(x)==int(n[i:i+j])+1)*int(n[i]):return g(n[i:],x)
                                                                                        return 1


                                                                                        Try it online!







                                                                                        share|improve this answer














                                                                                        share|improve this answer



                                                                                        share|improve this answer








                                                                                        edited 4 hours ago

























                                                                                        answered 10 hours ago









                                                                                        Neil A.

                                                                                        1,138120




                                                                                        1,138120






























                                                                                            draft saved

                                                                                            draft discarded




















































                                                                                            If this is an answer to a challenge…




                                                                                            • …Be sure to follow the challenge specification. However, please refrain from exploiting obvious loopholes. Answers abusing any of the standard loopholes are considered invalid. If you think a specification is unclear or underspecified, comment on the question instead.


                                                                                            • …Try to optimize your score. For instance, answers to code-golf challenges should attempt to be as short as possible. You can always include a readable version of the code in addition to the competitive one.
                                                                                              Explanations of your answer make it more interesting to read and are very much encouraged.


                                                                                            • …Include a short header which indicates the language(s) of your code and its score, as defined by the challenge.



                                                                                            More generally…




                                                                                            • …Please make sure to answer the question and provide sufficient detail.


                                                                                            • …Avoid asking for help, clarification or responding to other answers (use comments instead).






                                                                                            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                                                                                            Please pay close attention to the following guidance:


                                                                                            • Please be sure to answer the question. Provide details and share your research!

                                                                                            But avoid



                                                                                            • Asking for help, clarification, or responding to other answers.

                                                                                            • Making statements based on opinion; back them up with references or personal experience.


                                                                                            To learn more, see our tips on writing great answers.




                                                                                            draft saved


                                                                                            draft discarded














                                                                                            StackExchange.ready(
                                                                                            function () {
                                                                                            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodegolf.stackexchange.com%2fquestions%2f178373%2fhow-many-consecutive-descending-numbers-in-my-number%23new-answer', 'question_page');
                                                                                            }
                                                                                            );

                                                                                            Post as a guest















                                                                                            Required, but never shown





















































                                                                                            Required, but never shown














                                                                                            Required, but never shown












                                                                                            Required, but never shown







                                                                                            Required, but never shown

































                                                                                            Required, but never shown














                                                                                            Required, but never shown












                                                                                            Required, but never shown







                                                                                            Required, but never shown







                                                                                            Popular posts from this blog

                                                                                            Mario Kart Wii

                                                                                            What does “Dominus providebit” mean?

                                                                                            Antonio Litta Visconti Arese