Question
You are given three integers (x,y,z) representing the dimensions of a cuboid along with an integer n .
- Print a list of all possible coordinates
- given by (i, j , k) in a 3D grid
- where the sum of i+j+k is not equal to n.
- i.e. can be greater than or smaller than n
- Here 0<=i<=x; 0<=j<=y; 0<=k<=z
- Please use list comprehensions
- Print the list in lexicographic increasing order.
Example
x = 1
y = 1
z = 2
n = 3
- All permutations of (i, j, k) are:
[[0, 0, 0], [0, 0, 1], [0, 0, 2], [0, 1, 0], [0, 1, 1], [0, 1, 2], [1, 0, 0], [1, 0, 1], [1, 0, 2], [1, 1, 0], [1, 1, 1], [1, 1, 2]]
- Print an array of the elements that sum of i, j, k does not equal to n (The required output)
[[0, 0, 0], [0, 0, 1], [0, 0, 2], [0, 1, 0], [0, 1, 1], [1, 0, 0], [1, 0, 1], [1, 1, 0], [1, 1, 2]]
My solution
- code
# make list of all x,y and z possible number
x = int(input())
y = int(input())
z = int(input())
n = int(input())
x = [i for i in range(x+1)]
y = [i for i in range(y+1)]
z = [i for i in range(z+1)]
# for each combination of i,j,k will form a sublist in the final_list, and sum of i,j,k will not equal to n
final_list = [[i,j,k]for i in x for j in y for k in z if (i+j+k)!=n]
print(final_list)
Other solution
- a shorter version
x = int(input())
y = int(input())
z = int(input())
n = int(input())
# for each combination of i,j,k will form a sublist in the final_list, and sum of i,j,k will not equal to n
final_list = [[i,j,k]for i in range(x+1) for j in range(y+1) for k in range(z+1) if (i+j+k)!=n]
print(final_list)
My reflection
- The first time to try problem need to obtain variable form standard input
- good exercise.
- The first time to use multiple for loop in list comprehension.
Credit
challenge on hackerrank
Top comments (0)