Flipkart Interview Question
SDE-2sCountry: United States
Interview Type: Phone Interview
public class App
{
public interface Component {
Component merge(Component other);
}
public class Scanner {
Component fromString(String str) {
Component c = null;
if(str.length() != 0) {
Character key = str.charAt(0);
String sub = str.substring(2, str.length());
if (str.charAt(1) == '>') {
c = new Composite(key, fromString(sub));
} else if (str.charAt(1) == '=') {
c = new Leaf(key, Integer.parseInt(sub));
} else { // TODO : invalid operator, raise exception
}
}
return c;
}
}
public class Leaf extends HashMap<Character, Object> implements Component {
public Leaf(Character k, Integer v) {
put(k,v);
}
public Component merge(Component other) {
if (other instanceof Leaf) {
Leaf o = (Leaf)other;
for (Character key : o.keySet()) {
if(keySet().contains(key)) {
if (get(key) instanceof List) {
((List)get(key)).add(o.get(key));
} else {
List<Object> l = new ArrayList<Object>();
l.add(get(key));
l.add(o.get(key));
put(key, l);
}
} else {
put(key, o.get(key));
}
}
}
return this;
}
public String toString() {
String s = "{";
for (Map.Entry<Character, Object> entry : entrySet()) {
s+= "'"+entry.getKey()+"'"+":"+entry.getValue()+", ";
}
return s+"}";
}
}
public class Composite extends HashMap<Character, Object> implements Component {
public Composite(Character k, Object v) {
put(k,v);
}
public Component merge(Component other) {
return (Composite)deepMerge(this, (Map)other);
}
private Map deepMerge(Map l, Map r) {
for (Object key : r.keySet()) {
if (l.keySet().contains(key)) {
if (l.get(key) instanceof Map && r.get(key) instanceof Map) {
Map lChild = (Map)l.get(key);
Map rChild = (Map)r.get(key);
l.put(key, deepMerge(lChild, rChild));
} else if (l.get(key) instanceof List) {
List lChild = (List)l.get(key);
lChild.add(r.get(key));
} else {
List<Object> li = new ArrayList<Object>();
li.add(l.get(key));
li.add(r.get(key));
l.put(key, li);
}
} else {
l.put(key, r.get(key));
}
}
return l;
}
public String toString() {
String s = "{";
for (Map.Entry<Character, Object> entry : entrySet()) {
s+= "'"+entry.getKey()+"'"+":"+entry.getValue()+", ";
}
return s+"}";
}
}
public static void main( String[] args ) throws java.io.IOException {
App s = new App();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line;
App.Component c = null;
while(true) {
line = br.readLine();
if (line == null || line.isEmpty()) {
break;
}
if (c == null) {
c = s.new Scanner().fromString(line);
} else {
c.merge(s.new Scanner().fromString(line));
}
}
System.out.println(c);
}
}
a>b=1
a>b=2
a>c>e=3
a>c>f=4
b>a=5
a>b>c=5
b=7
a>b>c>d=99
a>b=99
{'a':{'b':[1, 2, {'c':5, }, {'c':{'d':99, }, }, 99], 'c':{'e':3, 'f':4, }, }, 'b':[{'a':5, }, 7], }
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class App
{
public interface Component {
Component merge(Component other);
}
public class Scanner {
Component fromString(String str) {
Component c = null;
if(str.length() != 0) {
Character key = str.charAt(0);
String sub = str.substring(2, str.length());
if (str.charAt(1) == '>') {
c = new Composite(key, fromString(sub));
} else if (str.charAt(1) == '=') {
c = new Leaf(key, Integer.parseInt(sub));
} else { // TODO : invalid operator, raise exception
}
}
return c;
}
}
public class Leaf extends HashMap<Character, Object> implements Component {
public Leaf(Character k, Integer v) {
put(k,v);
}
public Component merge(Component other) {
if (other instanceof Leaf) {
Leaf o = (Leaf)other;
for (Character key : o.keySet()) {
if(keySet().contains(key)) {
if (get(key) instanceof List) {
((List)get(key)).add(o.get(key));
} else {
List<Object> l = new ArrayList<Object>();
l.add(get(key));
l.add(o.get(key));
put(key, l);
}
} else {
put(key, o.get(key));
}
}
}
return this;
}
public String toString() {
String s = "{";
for (Map.Entry<Character, Object> entry : entrySet()) {
s+= "'"+entry.getKey()+"'"+":"+entry.getValue()+", ";
}
return s+"}";
}
}
public class Composite extends HashMap<Character, Object> implements Component {
public Composite(Character k, Object v) {
put(k,v);
}
public Component merge(Component other) {
return (Composite)deepMerge(this, (Map)other);
}
private Map deepMerge(Map l, Map r) {
for (Object key : r.keySet()) {
if (l.keySet().contains(key)) {
if (l.get(key) instanceof Map && r.get(key) instanceof Map) {
Map lChild = (Map)l.get(key);
Map rChild = (Map)r.get(key);
l.put(key, deepMerge(lChild, rChild));
} else if (l.get(key) instanceof List) {
List lChild = (List)l.get(key);
lChild.add(r.get(key));
} else {
List<Object> li = new ArrayList<Object>();
li.add(l.get(key));
li.add(r.get(key));
l.put(key, li);
}
} else {
l.put(key, r.get(key));
}
}
return l;
}
public String toString() {
String s = "{";
for (Map.Entry<Character, Object> entry : entrySet()) {
s+= "'"+entry.getKey()+"'"+":"+entry.getValue()+", ";
}
return s+"}";
}
}
public static void main( String[] args ) throws java.io.IOException {
App s = new App();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line;
App.Component c = null;
while(true) {
line = br.readLine();
if (line == null || line.isEmpty()) {
break;
}
if (c == null) {
c = s.new Scanner().fromString(line);
} else {
c.merge(s.new Scanner().fromString(line));
}
}
System.out.println(c);
}
}
output:
SUJITs-MacBook-Pro:com.packt.samples.archetype sujitroutray$ java -jar target/com.packt.samples.archetype-1.0.0.jar
a>b=1
a>b=2
a>c>e=3
a>c>f=4
b>a=5
a>b>c=5
b=7
a>b>c>d=99
a>b=99
{'a':{'b':[1, 2, {'c':5, }, {'c':{'d':99, }, }, 99], 'c':{'e':3, 'f':4, }, }, 'b':[{'a':5, }, 7], }
Please provide the code , if anybody knows it..
- vinay25788 October 26, 2017