Sort by

recency

|

947 Discussions

|

  • + 0 comments

    Python: Semi-short looping solution…

    def workbook(_, k, arr):
      p = s = 0
      for i in arr:
        for j in range(0, i, k):
          p, s = ((p + 1, s + 1)
            if j < p + 1 <= min(i, j + k)
            else (p + 1, s)) 
      return s
    

    Here's a semi-short, non-looping functional solution…

    def workbook(_, k, arr):
        pg = lambda m: m[0]
        prob1 = lambda m: m[1][0]
        probN = lambda m: m[1][1]
        return sum(map(
            lambda pgProbs: int(prob1(pgProbs) < pg(pgProbs) <= probN(pgProbs)), 
            enumerate(sum(map(
                lambda chNumProb: list(map(
                    lambda pgProb1: (pgProb1, min(chNumProb, pgProb1 + k)), 
                    range(0, chNumProb, k))), 
                arr), []), start=1))) 
    

    It could be shorter, but I've seen people complain about the readability of functional code. So, I tried to make this descriptive. I used verbose names for lambda arguments. I also added lambdas for accessing the members of tuples returned from the inner map levels.

    Here's a terse version of the same code…

    def workbook(_, k, arr):
        return sum(map(lambda m: int(m[1][0] < m[0] <= m[1][1]),
                enumerate(sum(map(lambda i:
                    list(map(lambda j: (j, min(i, j + k)), 
                    range(0, i, k))), 
                arr), []), 1))) 
    
  • + 0 comments

    Here is problem solution in Python, Java, C++, C and Javascript - https://programmingoneonone.com/hackerrank-lisas-workbook-problem-solution.html

  • + 0 comments

    Here is my c++ solution

    int workbook(int n, int k, vector arr) { vector> pages; int specialCount = 0;

    for (int chapter = 0; chapter < n; chapter++) {
        int problems = arr[chapter];
        int problemNum = 1;
    
        while (problemNum <= problems) {
            int end = min(problemNum + k - 1, problems);
            vector<int> page;
    
            for (int i = problemNum; i <= end; i++) {
                page.push_back(i);
            }
    
            pages.push_back(page);
            problemNum = end + 1;
        }
    }
    
    
    for (int i = 0; i < pages.size(); i++) {
        int pageNumber = i + 1;
        for (int j=0;j<pages[i].size();j++) {
            if (pages[i][j] == pageNumber) {
                specialCount++;
            }
        }
    }
    
    return specialCount;
    

    }

  • + 0 comments

    Here is my c++ solution , you can watch the explanation here : https://youtu.be/3L-haDbsjAg

    int workbook(int n, int k, vector<int> arr) {
        int page = 1, chapter = 1, fe = 1, res = 0;
        while(chapter <= arr.size()){
            int le = min(fe + k - 1, arr[chapter-1]);
            if(fe <= page && page <= le) res++;
            fe = le + 1;
            if(fe > arr[chapter-1]) {
                chapter++;
                fe = 1;
            }
            page ++;
        }   
        return res;
    }
    
  • + 0 comments

    Perl:

    sub workbook {
        my ($n, $k, $arr) = @_;
    
        my @tmp;
        my $cnt = 0;
        my $j = 0;
        for (my $i = 0; $i < scalar(@$arr); $i++) {
            if ($arr->[$i] > $k) {
                for ($j = 1; $j <= $arr->[$i] - ($arr->[$i] % $k); $j += $k) {
                    push(@tmp, [ $j..$j + $k - 1]);
                }
                push(@tmp, [$j..$arr->[$i]]) if ($arr->[$i] % $k != 0);
            } else { push(@tmp, [1..$arr->[$i]]); }
            
        }
        for (my $i = 0; $i <scalar(@tmp); $i++) {
            $cnt += grep { $_ == $i + 1} @{$tmp[$i]};
        }
        
        return $cnt;
    }