Goodland Electricity HackerRank Solution

In this Goodland Electricity HackerRank solution, Goodland is a country with a number of evenly spaced cities along a line. The distance between adjacent cities is  unit. There is an energy infrastructure project planning meeting, and the government needs to know the fewest number of power plants needed to provide electricity to the entire list of cities. Determine that number. If it cannot be done, return -1.

You are given a list of city data. Cities that may contain a power plant have been labeled . Others not suitable for building a plant are labeled . Given a distribution range of , find the lowest number of plants that must be built such that all cities are served. The distribution range limits supply to cities where distance is less than k.

Example

Each city is  unit distance from its neighbors, and we’ll use  based indexing. We see there are  cities suitable for power plants, cities  and . If we build a power plant at , it can serve  through  because those endpoints are at a distance of  and . To serve , we would need to be able to build a plant in city  or . Since none of those is suitable, we must return -1. It cannot be done using the current distribution constraint.

Function Description

Complete the pylons function in the editor below.

pylons has the following parameter(s):

  • int k: the distribution range
  • int arr[n]: each city’s suitability as a building site

Returns

  • int: the minimum number of plants required or -1

Input Format

The first line contains two space-separated integers  and , the number of cities in Goodland and the plants’ range constant.
The second line contains  space-separated binary integers where each integer indicates suitability for building a plant.

Constraints

  • Each .

Subtask

  •  for  of the maximum score.

Output Format

Print a single integer denoting the minimum number of plants that must be built so that all of Goodland’s cities have electricity. If this is not possible for the given value of , print .

Sample Input

STDIN         Function
-----         --------
6 2           arr[] size n = 6, k = 2
0 1 1 1 1 0   arr = [0, 1, 1, 1, 1, 0]

Sample Output

2

Explanation

Cities , , , and  are suitable for power plants. Each plant will have a range of . If we build in cities  cities,  and , then all cities will have electricity.

Goodland Electricity HackerRank solution

I will Provide solution in Multiple programming languages for you. If you are not able to find the code in required language then please share in comments so that our team can help you.

Problem Solution in Python

def pylons(k, arr):
    # Write your code here
    index = 0
    count = 0
    while index < len(arr):
        plant_not_found = True
        for distance in range(k-1, -k, -1):
            if (index + distance < len(arr)) and (index + distance >= 0) and (arr[index+distance] == 1):
                count += 1
                index += k + distance
                plant_not_found = False
                break
        if plant_not_found:
            return -1    
           
    return count

Problem Solution in JavaScript

function pylons(k, arr) {
    // Write your code here


    let i=0,count=0;


    while(i<arr.length){
        let j=i+k-1;
        while(j>i-k){
            if(arr[j]==1){
                count++;
                i=j+k;              
                break;
            }
            j--;
            if(j==i-k)
                j--;
        }
        if(j<i-k)
            return -1;
    }
    return count;
}

Problem Solution in Java

public static int pylons(int k, List<Integer> arr) {
        int plants = 0;
        int index = k - 1;
        int start = 0;
        while(index < arr.size()) {
            if(arr.get(index) == 1) {
                start = index + 1;
                plants++;
                if((index + ((k - 1) * 2) + 1 > arr.size() - 1) && index + k < arr.size()){
                    if(arr.subList(arr.size() - k, arr.size()).contains(1)){
                        plants++;
                        break;
                    }else{
                        return -1;
                    }
                }else{
                    index += ((k - 1) * 2) + 1;
                }
            }else if(index == start){
                return -1;
            }else{
                index--;
            }
        }
        return plants;
    }
Solve original Problem on HackerRank here. Checkout more HackerRank Problems

Leave a Comment