Hackerrank 3D Surface Area Solution
.MathJax_SVG_Display {text-align: center; margin: 1em 0em; position: relative; display: block!important; text-indent: 0; max-width: none; max-height: none; min-width: 0; min-height: 0; width: 100%} .MathJax_SVG .MJX-monospace {font-family: monospace} .MathJax_SVG .MJX-sans-serif {font-family: sans-serif} .MathJax_SVG {display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 100%; font-size-adjust: none; text-indent: 0; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0; min-height: 0; border: 0; padding: 0; margin: 0} .MathJax_SVG * {transition: none; -webkit-transition: none; -moz-transition: none; -ms-transition: none; -o-transition: none} .mjx-svg-href {fill: blue; stroke: blue} .MathJax_SVG_LineBox {display: table!important} .MathJax_SVG_LineBox span {display: table-cell!important; width: 10000em!important; min-width: 0; max-width: none; padding: 0; border: 0; margin: 0}
Madison, is a little girl who is fond of toys. Her friend Mason works in a toy manufacturing factory . Mason has a 2D board of size with rows and columns. The board is divided into cells of size with each cell indicated by it's coordinate . The cell has an integer written on it. To create the toy Mason stacks number of cubes of size on the cell .
Given the description of the board showing the values of and that the price of the toy is equal to the 3d surface area find the price of the toy.
![image](https://s3.amazonaws.com/hr-assets/0/1509009918-091bdd4cba-1502631298-5cd3275ce9-img2.png)
Input Format.MathJax_SVG_Display {text-align: center; margin: 1em 0em; position: relative; display: block!important; text-indent: 0; max-width: none; max-height: none; min-width: 0; min-height: 0; width: 100%} .MathJax_SVG .MJX-monospace {font-family: monospace} .MathJax_SVG .MJX-sans-serif {font-family: sans-serif} .MathJax_SVG {display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 100%; font-size-adjust: none; text-indent: 0; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0; min-height: 0; border: 0; padding: 0; margin: 0} .MathJax_SVG * {transition: none; -webkit-transition: none; -moz-transition: none; -ms-transition: none; -o-transition: none} .mjx-svg-href {fill: blue; stroke: blue} .MathJax_SVG_LineBox {display: table!important} .MathJax_SVG_LineBox span {display: table-cell!important; width: 10000em!important; min-width: 0; max-width: none; padding: 0; border: 0; margin: 0}
The first line contains two space-separated integers and the height and the width of the board respectively.
The next lines contains space separated integers. The integer in line denotes .
Constraints.MathJax_SVG_Display {text-align: center; margin: 1em 0em; position: relative; display: block!important; text-indent: 0; max-width: none; max-height: none; min-width: 0; min-height: 0; width: 100%} .MathJax_SVG .MJX-monospace {font-family: monospace} .MathJax_SVG .MJX-sans-serif {font-family: sans-serif} .MathJax_SVG {display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 100%; font-size-adjust: none; text-indent: 0; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0; min-height: 0; border: 0; padding: 0; margin: 0} .MathJax_SVG * {transition: none; -webkit-transition: none; -moz-transition: none; -ms-transition: none; -o-transition: none} .mjx-svg-href {fill: blue; stroke: blue} .MathJax_SVG_LineBox {display: table!important} .MathJax_SVG_LineBox span {display: table-cell!important; width: 10000em!important; min-width: 0; max-width: none; padding: 0; border: 0; margin: 0}
Output Format.MathJax_SVG_Display {text-align: center; margin: 1em 0em; position: relative; display: block!important; text-indent: 0; max-width: none; max-height: none; min-width: 0; min-height: 0; width: 100%} .MathJax_SVG .MJX-monospace {font-family: monospace} .MathJax_SVG .MJX-sans-serif {font-family: sans-serif} .MathJax_SVG {display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 100%; font-size-adjust: none; text-indent: 0; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0; min-height: 0; border: 0; padding: 0; margin: 0} .MathJax_SVG * {transition: none; -webkit-transition: none; -moz-transition: none; -ms-transition: none; -o-transition: none} .mjx-svg-href {fill: blue; stroke: blue} .MathJax_SVG_LineBox {display: table!important} .MathJax_SVG_LineBox span {display: table-cell!important; width: 10000em!important; min-width: 0; max-width: none; padding: 0; border: 0; margin: 0}
Print the required answer, i.e the price of the toy, in one line.
Sample Input 0.MathJax_SVG_Display {text-align: center; margin: 1em 0em; position: relative; display: block!important; text-indent: 0; max-width: none; max-height: none; min-width: 0; min-height: 0; width: 100%} .MathJax_SVG .MJX-monospace {font-family: monospace} .MathJax_SVG .MJX-sans-serif {font-family: sans-serif} .MathJax_SVG {display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 100%; font-size-adjust: none; text-indent: 0; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0; min-height: 0; border: 0; padding: 0; margin: 0} .MathJax_SVG * {transition: none; -webkit-transition: none; -moz-transition: none; -ms-transition: none; -o-transition: none} .mjx-svg-href {fill: blue; stroke: blue} .MathJax_SVG_LineBox {display: table!important} .MathJax_SVG_LineBox span {display: table-cell!important; width: 10000em!important; min-width: 0; max-width: none; padding: 0; border: 0; margin: 0} 1 11
Sample Output 0.MathJax_SVG_Display {text-align: center; margin: 1em 0em; position: relative; display: block!important; text-indent: 0; max-width: none; max-height: none; min-width: 0; min-height: 0; width: 100%} .MathJax_SVG .MJX-monospace {font-family: monospace} .MathJax_SVG .MJX-sans-serif {font-family: sans-serif} .MathJax_SVG {display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 100%; font-size-adjust: none; text-indent: 0; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0; min-height: 0; border: 0; padding: 0; margin: 0} .MathJax_SVG * {transition: none; -webkit-transition: none; -moz-transition: none; -ms-transition: none; -o-transition: none} .mjx-svg-href {fill: blue; stroke: blue} 6
Explanation 0.MathJax_SVG_Display {text-align: center; margin: 1em 0em; position: relative; display: block!important; text-indent: 0; max-width: none; max-height: none; min-width: 0; min-height: 0; width: 100%} .MathJax_SVG .MJX-monospace {font-family: monospace} .MathJax_SVG .MJX-sans-serif {font-family: sans-serif} .MathJax_SVG {display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 100%; font-size-adjust: none; text-indent: 0; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0; min-height: 0; border: 0; padding: 0; margin: 0} .MathJax_SVG * {transition: none; -webkit-transition: none; -moz-transition: none; -ms-transition: none; -o-transition: none} .mjx-svg-href {fill: blue; stroke: blue} .MathJax_SVG_LineBox {display: table!important} .MathJax_SVG_LineBox span {display: table-cell!important; width: 10000em!important; min-width: 0; max-width: none; padding: 0; border: 0; margin: 0}
![image](https://s3.amazonaws.com/hr-assets/0/1505569910-2f8fc5da13-3d.png)
The surface area of cube is 6.
Sample Input 1.MathJax_SVG_Display {text-align: center; margin: 1em 0em; position: relative; display: block!important; text-indent: 0; max-width: none; max-height: none; min-width: 0; min-height: 0; width: 100%} .MathJax_SVG .MJX-monospace {font-family: monospace} .MathJax_SVG .MJX-sans-serif {font-family: sans-serif} .MathJax_SVG {display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 100%; font-size-adjust: none; text-indent: 0; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0; min-height: 0; border: 0; padding: 0; margin: 0} .MathJax_SVG * {transition: none; -webkit-transition: none; -moz-transition: none; -ms-transition: none; -o-transition: none} .mjx-svg-href {fill: blue; stroke: blue} .MathJax_SVG_LineBox {display: table!important} .MathJax_SVG_LineBox span {display: table-cell!important; width: 10000em!important; min-width: 0; max-width: none; padding: 0; border: 0; margin: 0} 3 31 3 42 2 31 2 4
Sample Output 1.MathJax_SVG_Display {text-align: center; margin: 1em 0em; position: relative; display: block!important; text-indent: 0; max-width: none; max-height: none; min-width: 0; min-height: 0; width: 100%} .MathJax_SVG .MJX-monospace {font-family: monospace} .MathJax_SVG .MJX-sans-serif {font-family: sans-serif} .MathJax_SVG {display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 100%; font-size-adjust: none; text-indent: 0; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0; min-height: 0; border: 0; padding: 0; margin: 0} .MathJax_SVG * {transition: none; -webkit-transition: none; -moz-transition: none; -ms-transition: none; -o-transition: none} .mjx-svg-href {fill: blue; stroke: blue} .MathJax_SVG_LineBox {display: table!important} .MathJax_SVG_LineBox span {display: table-cell!important; width: 10000em!important; min-width: 0; max-width: none; padding: 0; border: 0; margin: 0} 60
Explanation 1.MathJax_SVG_Display {text-align: center; margin: 1em 0em; position: relative; display: block!important; text-indent: 0; max-width: none; max-height: none; min-width: 0; min-height: 0; width: 100%} .MathJax_SVG .MJX-monospace {font-family: monospace} .MathJax_SVG .MJX-sans-serif {font-family: sans-serif} .MathJax_SVG {display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 100%; font-size-adjust: none; text-indent: 0; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0; min-height: 0; border: 0; padding: 0; margin: 0} .MathJax_SVG * {transition: none; -webkit-transition: none; -moz-transition: none; -ms-transition: none; -o-transition: none} .mjx-svg-href {fill: blue; stroke: blue} .MathJax_SVG_LineBox {display: table!important} .MathJax_SVG_LineBox span {display: table-cell!important; width: 10000em!important; min-width: 0; max-width: none; padding: 0; border: 0; margin: 0}
The sample input corresponds to the figure described in problem statement.
Solution in java8
Approach 1.
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
static int surfaceArea(int[][] a, int h, int w) {
int s = 2 * h * w;
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
s += a[i][j] * 4;
}
}
for (int i = 0; i < h; i++) {
for (int j = 1; j < w; j++) {
s -= Math.min(a[i][j-1], a[i][j]) * 2;
}
}
for (int i = 1; i < h; i++) {
for (int j = 0; j < w; j++) {
s -= Math.min(a[i-1][j], a[i][j]) * 2;
}
}
return s;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int H = sc.nextInt();
int W = sc.nextInt();
int[][] A = new int[H][W];
for(int Ai = 0; Ai < H; Ai++){
for(int Aj = 0; Aj < W; Aj++){
A[Ai][Aj] = sc.nextInt();
}
}
int result = surfaceArea(A, H, W);
System.out.println(result);
sc.close();
}
}
Approach 2.
import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.*;
public class Solution {
// Complete the surfaceArea function below.
static int surfaceArea(int[][] A) {
int area = 2*(A.length -2)*(A[0].length -2) ;
for(int i = 1 ;i <= A.length -2 ; i++){
for(int j = 1; j<= A[i].length -2 ; j++){
area += Math.max(0,A[i][j] - A[i-1][j]);
area += Math.max(0,A[i][j] - A[i][j-1]);
area += Math.max(0,A[i][j] - A[i+1][j]);
area += Math.max(0,A[i][j] - A[i][j+1]);
}
}
return area;
}
private static final Scanner scanner = new Scanner(System.in);
public static void main(String[] args) throws IOException {
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));
String[] HW = scanner.nextLine().split(" ");
int H = Integer.parseInt(HW[0]);
int W = Integer.parseInt(HW[1]);
int[][] A = new int[H+2][W+2];
for (int i = 0; i < H; i++) {
String[] ARowItems = scanner.nextLine().split(" ");
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
for (int j = 0; j < W; j++) {
int AItem = Integer.parseInt(ARowItems[j]);
A[i+1][j+1] = AItem;
}
}
int result = surfaceArea(A);
bufferedWriter.write(String.valueOf(result));
bufferedWriter.newLine();
bufferedWriter.close();
scanner.close();
}
}
Approach 3.
import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.*;
public class Solution {
// Complete the surfaceArea function below.
static int surfaceArea(int[][] A) {
int H=A.length;
int W=A[0].length;
int result = 2 * H * W;
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
result += (A[i][j]) * 4;
if(i != 0) {
result -= 2 * Math.min(A[i - 1][j], A[i][j]);
}
if(j != 0) {
result -= 2 * Math.min(A[i][j], A[i][j - 1]);
}
}
}
return result;
}
private static final Scanner scanner = new Scanner(System.in);
public static void main(String[] args) throws IOException {
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));
String[] HW = scanner.nextLine().split(" ");
int H = Integer.parseInt(HW[0]);
int W = Integer.parseInt(HW[1]);
int[][] A = new int[H][W];
for (int i = 0; i < H; i++) {
String[] ARowItems = scanner.nextLine().split(" ");
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
for (int j = 0; j < W; j++) {
int AItem = Integer.parseInt(ARowItems[j]);
A[i][j] = AItem;
}
}
int result = surfaceArea(A);
bufferedWriter.write(String.valueOf(result));
bufferedWriter.newLine();
bufferedWriter.close();
scanner.close();
}
}
Solution in python3
Approach 1.
#!/bin/python3
import math
import os
import random
import re
import sys
# Complete the surfaceArea function below.
def surfaceArea(A):
a = [[0] * (len(A[0]) + 2)]
for row in A:
a.append([0] + row + [0])
a.append([0] * (len(A[0]) + 2))
ans = len(A) * len(A[0]) * 2
for i in range(1, len(a)):
for j in range(1, len(a[i])):
ans += abs(a[i][j] - a[i-1][j])
ans += abs(a[i][j] - a[i][j-1])
return ans
if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')
HW = input().split()
H = int(HW[0])
W = int(HW[1])
A = []
for _ in range(H):
A.append(list(map(int, input().rstrip().split())))
result = surfaceArea(A)
fptr.write(str(result) + '\n')
fptr.close()
Approach 2.
#!/bin/python3
import math
import os
import random
import re
import sys
# Complete the surfaceArea function below.
def surfaceArea(A):
Area = 0
for i in range(len(A)):
for j in range(len(A[i])):
l = min(A[i-1][j], A[i][j]) if i > 0 else 0
u = min(A[i][j-1], A[i][j]) if j > 0 else 0
r = min(A[i][j+1], A[i][j]) if j <len(A[i])-1 else 0
d = min(A[i+1][j], A[i][j]) if i <len(A)-1 else 0
k = A[i][j]*4 +2 -l -u -r -d
Area+= k
return(Area)
if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')
HW = input().split()
H = int(HW[0])
W = int(HW[1])
A = []
for _ in range(H):
A.append(list(map(int, input().rstrip().split())))
result = surfaceArea(A)
fptr.write(str(result) + '\n')
fptr.close()
Approach 3.
#!/bin/python3
import math
import os
import random
import re
import sys
# Complete the surfaceArea function below.
def surfaceArea(A,H,W):
area=0
for i in range(H):
for j in range(W):
sub_area=(4*A[i][j]+2)
if i-1>=0:
sub_area-=min(A[i-1][j],A[i][j])
if j-1>=0:
sub_area-=min(A[i][j-1],A[i][j])
if i+1<=H-1:
sub_area-=min(A[i+1][j],A[i][j])
if j+1<=W-1:
sub_area-=min(A[i][j+1],A[i][j])
print(str(i)+" "+str(j)+" is "+str(sub_area))
area+=sub_area
return area
if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')
HW = input().split()
H = int(HW[0])
W = int(HW[1])
A = []
for _ in range(H):
A.append(list(map(int, input().rstrip().split())))
result = surfaceArea(A,H,W)
fptr.write(str(result) + '\n')
fptr.close()
Solution in cpp
Approach 1.
#include <bits/stdc++.h>
using namespace std;
// Complete the surfaceArea function below.
int surfaceArea(vector<vector<int>> A, int H, int W) {
int s = 2 * H * W;
for (int i = 1; i < H + 1; i++) {
for (int j = 1; j < W + 1; j++) {
if (A[i][j] > A[i][j - 1]) s += A[i][j] - A[i][j - 1];
if (A[i][j] > A[i - 1][j]) s += A[i][j] - A[i - 1][j];
if (A[i][j] > A[i][j + 1]) s += A[i][j] - A[i][j + 1];
if (A[i][j] > A[i + 1][j]) s += A[i][j] - A[i + 1][j];
}
}
return s;
}
int main() {
ofstream fout(getenv("OUTPUT_PATH"));
int H, W;
cin >> H >> W;
vector<vector<int>> A(H + 2, vector<int>(W + 2));
for (int i = 0; i < H + 2; i++) {
for (int j = 0; j < W + 2; j++) {
if (i && j && i < H + 1 && j < W + 1) cin >> A[i][j];
else
A[i][j] = 0;
}
}
int result = surfaceArea(A, H, W);
fout << result << "\n";
fout.close();
return 0;
}
Approach 2.
#include <iostream>
using namespace std;
int mod(int a);
int main()
{
const int MAX_SIZE = 102;
int rows, cols,price,i,j;
int mat[MAX_SIZE][MAX_SIZE];
cin >> rows >> cols;
//we surround the matrix with 0s
for (i = 0; i < rows + 2; i++)
{
mat[i][0] = 0;
mat[i][cols+1] = 0;
}
for (i = 0; i < cols + 2; i++)
{
mat[0][i] = 0;
mat[rows+1][i] = 0;
}
//We read the values
for (i = 1; i <= rows; i++)
for (j = 1; j <= cols; j++)
cin >> mat[i][j];
//We compute up and down views.
price = (rows * cols)* 2;
//We compute from left to right view and from behind to infront view
for (int i = 0; i < rows+1; i++)
{
for (int j = 0; j < cols+1; j++)
{
price += mod(mat[i][j] - mat[i][j+1]);
price += mod(mat[i][j] - mat[i+1][j]);
}
}
cout << price << endl;
return 0;
}
int mod(int a)
{
if (a < 0)
a = -a;
return a;
}
Approach 3.
#include <bits/stdc++.h>
using namespace std;
bool isValid(int i, int j, int n, int m){
if(i < 0 || j < 0 || i >= n || j >= m)
return false;
return true;
}
int main() {
int n, m;
cin>>n>>m;
int A[n][m];
for (int i = 0; i < n; ++i){
for(int j = 0; j < m; j++)
cin>>A[i][j];
}
int ans = 0;
for (int i = 0; i < n; ++i){
for(int j = 0; j < m; j++){
if(A[i][j] > 0){
ans += 2;
// -------------
if(isValid(i-1,j, n, m)){
if(A[i][j] > A[i-1][j])
ans += (A[i][j] - A[i-1][j]);
}
else{
ans += A[i][j];
}
// -------------
if(isValid(i+1,j, n, m)){
if(A[i][j] > A[i+1][j])
ans += (A[i][j] - A[i+1][j]);
}
else{
ans += A[i][j];
}
// -------------
if(isValid(i,j-1, n, m)){
if(A[i][j] > A[i][j-1])
ans += (A[i][j] - A[i][j-1]);
}
else{
ans += A[i][j];
}
// -------------
if(isValid(i,j+1, n, m)){
if(A[i][j] > A[i][j+1])
ans += (A[i][j] - A[i][j+1]);
}
else{
ans += A[i][j];
}
}
}
}
cout << ans << endl;
return 0;
}