Oracle Interview Question
Senior Software Development EngineersCountry: India
Interview Type: In-Person
import java.util.List;
import java.util.ArrayList;
import java.util.Set;
import java.util.HashSet;
import java.lang.Math;
class MagicNumber{
public static void main(String[] args){
long n=9876542361L;
// long n=9786534210L;
// long n=9786533450L;
// long n=9786533222L;
// long n=9988776655L;
List<Integer> consecutives = new ArrayList<>();
Set<Integer> sixDigits = new HashSet<>();
int[] digitsCount = {0,0,0,0,0,0,0,0,0,0};
int d;
boolean isMagicFlag = false;
while(n>0){
d=(int)Math.abs(n%10);
// System.out.println(d);
// checking consecutiveness
if(0==consecutives.size())
consecutives.add(d);
else if(1==consecutives.size()){
if(1==d-consecutives.get(0) || -1==d-consecutives.get(0))
consecutives.add(d);
else{
consecutives.remove(0);
consecutives.add(d);
}
}
else{
if(d-consecutives.get(1) == consecutives.get(1)-consecutives.get(0)){
System.out.println("it is a magic number - consecutive");
isMagicFlag = true;
break;
}
else{
consecutives.remove(1);
consecutives.remove(0);
consecutives.add(d);
}
}
// checking first 6 digits present
if(6>=d)
sixDigits.add(d);
if(6==sixDigits.size()){
System.out.println("it is a magic number - first 6 digits present");
isMagicFlag = true;
break;
}
// checking 3 occurence of any digit
if(2==digitsCount[d]){
System.out.println("it is a magic number - occure 3 times");
isMagicFlag = true;
break;
}
else{
++digitsCount[d];
}
n/=10;
}
if(!isMagicFlag) System.out.println("this is not a magic number");
}
}
private static boolean checkMagicNumber(long number) {
boolean isNumberBwOneToSix = true;
boolean isNumberBwZeroToNine = false;
boolean isConsicutive = false;
boolean isMagicNumber = false;
boolean consicutiveInOrDe = false;
long prevNumber = 0;
int consicutiveBwNine = 0;
int consicutiveInOrDeCount = 0;
while(number > 0) {
long reminder = number % 10;
number = number / 10;
if(isNumberBwOneToSix && (reminder < 1 || reminder > 6)) {
isNumberBwOneToSix = false;
}
if(reminder >= 0 && reminder <= 9) {
consicutiveBwNine++;
}
if(consicutiveBwNine == 3) {
isConsicutive = true;
return isConsicutive;
}
if(prevNumber == 0) {
prevNumber = reminder;
consicutiveInOrDeCount++;
}else if(prevNumber + 1 == reminder) {
consicutiveInOrDeCount++;
}else if(prevNumber - 1 == reminder) {
consicutiveInOrDeCount++;
}else {
consicutiveInOrDeCount = 1;
}
prevNumber = reminder;
if(consicutiveInOrDeCount == 3) {
consicutiveInOrDe = true;
return consicutiveInOrDe;
}
if(isNumberBwOneToSix || isConsicutive || consicutiveInOrDe) {
isMagicNumber = true;
}
}
return isMagicNumber;
}
- Anonymous February 26, 2019