Skip to content

Instantly share code, notes, and snippets.

@Youngestdev
Last active July 5, 2020 11:43
Show Gist options
  • Save Youngestdev/0d3eaf072d8004a97897810682859e19 to your computer and use it in GitHub Desktop.
Save Youngestdev/0d3eaf072d8004a97897810682859e19 to your computer and use it in GitHub Desktop.

Question One.

Find the sum of the first n numbers.. where 1 < n > 1000000.

Question Two.

Given a string of length n consisting of digits [0-9], count the number of ways the given string can be split into prime numbers, each of which is in the range 2 to 100 inclusive. Since the answer can be large, return the answer modulo 10e9 + 7. Note: A partition that contains numbers with leading zeroes will be invalid and the initial string does not contain leading zeroes. Take for example the input string to be s = "11373", then this string can be split into 6 different ways as [11, 37, 3), [113, 7, 3), [11, 3, 73), [11, 37, 3), (113, 73) and [11, 373) where each one of them contains only prime numbers.

s = "11373"
[[11, 37, 3], [113, 7, 3], [11,3,73], [113, 73], [11. 373]]

if a partition is "03", it's invalid
@Youngestdev
Copy link
Author

Youngestdev commented Jul 5, 2020

Updated Version - Longest Sequence

Find the longest sequence in a given array.

Input: [1,2,3,0,6,5,4,3,2,1]
Output: 6 i.e [6,5,4,3,2,1] is the longest sequence

Input: [1,2,3,4,2,1]
Output: 4 i.e [1,2,3,4] is the longest sequence

Input: [1,2,2,1]
Output; 2 i.e [1,2] or [2,1] is the longest sequence

"""
    Given an array of numbers in any order - sorted or not, return the length of the longest sequence..
    This is a variant to a stock question - longest price rise and drop.
    Original code by Adesanya Tomiwa [https://github.com/Tomesyy]
    What this code does is compute the longest sequence in increasing and decreasing order then returns the max length
"""

def longestSequence(array):
    dp = [[1 for _ in range(len(array))] for _ in range(2)]
    for i in range(len(array)):
        for j in range(i - 1, len(array)):
            if array[j] < array[i]:
                dp[0][i] = max(dp[0][j] + 1, dp[0][i])
            if array[j] > array[i]:
                dp[1][i] = max(dp[1][j] + 1, dp[1][i])

    # There should be a beautiful way to do this but ko kan aye.
    return max(max(dp[0]), max(dp[1]))

if __name__ == '__main__':
    print(longestSequence([1,2,3,0,6,5,4,3,2,1]))
    print(longestSequence([1,2,2,1]))
    print(longestSequence([1,2,4,0,-1,19,4,3,2,1]))
    print(longestSequence([1,2,3,4,2,1]))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment