Skip to content
Related Articles

Related Articles

Improve Article

Check if a given mobile number is fancy

  • Difficulty Level : Medium
  • Last Updated : 13 May, 2021
Geek Week

Given a mobile number and some conditions for a fancy number, find if the given number is fancy. A 10 digit mobile number is called fancy if it satisfies any of the following three conditions. 
 

  1. A single number occurs three consecutive times. Like 777.
  2. Three consecutive digits are either in increasing or decreasing fashion. Like 456 or 987.
  3. A single digit occurs four or more times in the number. Like 9859009976 – here the digit 9 occurs 4 times.

Examples: 
 

Input : 9859009976 
Output : Yes 
The given mobile number satisfies condition 
three given above.
Input : 7609438921 
Output : No 
None of the given three conditions satisfy.

 

Idea is to convert number into string using to_string so that it becomes easy to traverse. For condition three to count the frequency of every number a basic concept of string hashing is used.
Source :Oracle Interview Set
Below is the solution of above problem. 
 



C++




// C++ program to check if a given mobile
// number is fancy or not.
#include <bits/stdc++.h>
using namespace std;
 
// Returns true if s has three consecutive
// same digits.
bool cond1(string s)
{
    for (int i = 0; i < s.size() - 2; i++) {
        if (s[i] == s[i + 1] && s[i + 1] == s[i + 2])
            return true;
    }
    return false;
}
 
// Returns true if s has three increasing or
// decreasing digits.
bool cond2(string s)
{
    for (int i = 0; i < s.size() - 2; i++) {
        if ((s[i] < s[i + 1] && s[i + 1] < s[i + 2]) ||
            (s[i] > s[i + 1] && s[i + 1] > s[i + 2]))
            return true;
    }
    return false;
}
 
// Checks if a single digit occurs 4 times.
bool cond3(string s)
{
    int a[10];
    memset(a, 0, sizeof(a));
 
    for (int i = 0; i < s.size(); i++)
        a[s[i] - '0']++;
    
    for (int i = 0; i < 9; i++)
        if (a[i] >= 4)
            return true;
     
    return false;
}
 
bool isFancy(string s)
{
    if (cond1(s) || cond2(s) || cond3(s))
        return true;
    else
        return false;
}
 
// Driver condition
int main()
{
    long int n = 7609438921;
    string s = to_string(n);
    if (isFancy(s))
        cout << "Yes";
    else
        cout << "No";
 
    return 0;
}

Java




// Java program to check if a given mobile
// number is fancy or not.
import java.util.*;
import java.lang.*;
import java.io.*;
 
class GFG {
     
public static void main(String[] args) {
         
        String mobileNumber = "7654449244";
         
        if (isFancy(mobileNumber))
            System.out.println("Yes");
        else
            System.out.println("No");
    }
 
    public static boolean isFancy(String mobileNumber) {
        int incrementCount = 0;
        int decrementCount = 0;
        int consecutiveCount = 1;
        int[] countArray = new int[10];
        int prevDigit = -1;
        for(int i = 0; i < mobileNumber.length(); i++) {
         
            int digit = Integer.parseInt(String.valueOf(mobileNumber.charAt(i)));
            countArray[digit] += 1;
            // Checking for Number of occurrences of any digit is greater than 3
         
            if(countArray[digit] > 3)
                return true;
            // Checking for consecutive digits are same
         
            if(prevDigit == digit)
                consecutiveCount += 1;
         
            else if(prevDigit == digit+1 && prevDigit != -1) {
                incrementCount += 1;
                decrementCount = 0;
                consecutiveCount = 1;
            }
         
            else if(digit == prevDigit+1) {
                decrementCount += 1;
                incrementCount = 0;
                consecutiveCount = 1;
            }
         
            if(consecutiveCount == 3)
                return true;
         
            if(incrementCount == 2 || decrementCount == 2)
                return true;
         
            prevDigit = digit;
        }
        return false;
    }
}
 
// This code is contributed by Vasishta Balla

Python 3




# Python3 program to check if a
# given mobile number is fancy or not.
 
# Returns true if s has three
# consecutive same digits.
def cond1(s):
 
    for i in range(len(s) - 2):
        if (s[i] == s[i + 1] and
            s[i + 1] == s[i + 2]):
            return True
     
    return False
 
# Returns true if s has three
# increasing or decreasing digits.
def cond2(s):
    for i in range(len(s) - 2):
        if ((s[i] < s[i + 1] and
             s[i + 1] < s[i + 2]) or
            (s[i] > s[i + 1] and
             s[i + 1] > s[i + 2])):
            return True
     
    return False
 
# Checks if a single digit
# occurs 4 times.
def cond3(s):
    a = [0] * 10
    for i in range(len(s)):
        a[s[i] - '0'] = a[s[i] - '0'] + 1
     
    for i in range(len(9)):
     
        if (a[i] >= 4):
            return True
     
    return False
 
def isFancy(s):
    if (cond1(s) or cond2(s) or cond3(s)):
        return True
    else:
        return False
 
# Driver condition
s = "7609438921"
if (isFancy(s)):
    print("Yes")
else:
    print("No")
     
# This code is contributed by ash264

C#




// C# program to check if a given mobile
// number is fancy or not.
using System;
 
class GFG
{
 
    public static void Main(String[] args)
    {
 
        String mobileNumber = "7654449244";
 
        if (isFancy(mobileNumber))
        {
            Console.WriteLine("Yes");
        }
        else
        {
            Console.WriteLine("No");
        }
    }
 
    public static bool isFancy(String mobileNumber)
    {
        int incrementCount = 0;
        int decrementCount = 0;
        int consecutiveCount = 1;
        int[] countArray = new int[10];
        int prevDigit = -1;
        for (int i = 0; i < mobileNumber.Length; i++)
        {
 
            int digit = Int32.Parse(String.Join("",mobileNumber[i]));
            countArray[digit] += 1;
             
            // Checking for Number of occurrences
            // of any digit is greater than 3
            if (countArray[digit] > 3)
            {
                return true;
            }
 
            // Checking for consecutive digits are same
            if (prevDigit == digit)
            {
                consecutiveCount += 1;
            }
            else if (prevDigit == digit + 1 && prevDigit != -1)
            {
                incrementCount += 1;
                decrementCount = 0;
                consecutiveCount = 1;
            }
            else if (digit == prevDigit + 1)
            {
                decrementCount += 1;
                incrementCount = 0;
                consecutiveCount = 1;
            }
            if (consecutiveCount == 3)
            {
                return true;
            }
            if (incrementCount == 2 || decrementCount == 2)
            {
                return true;
            }
            prevDigit = digit;
        }
        return false;
    }
}
 
// This code is contributed by Rajput-Ji

Javascript




<script>
// Javascript  program to check if a given mobile
// number is fancy or not
 
// Returns true if s has three consecutive
// same digits.
function cond1( s)
{
    for (var i = 0; i < s.length - 2; i++) {
        if (s[i] == s[i + 1] && s[i + 1] == s[i + 2])
            return true;
    }
    return false;
}
 
// Returns true if s has three increasing or
// decreasing digits.
function cond2( s)
{
    for (var i = 0; i < s.length - 2; i++) {
        if ((s[i] < s[i + 1] && s[i + 1] < s[i + 2]) ||
            (s[i] > s[i + 1] && s[i + 1] > s[i + 2]))
            return true;
    }
    return false;
}
 
// Checks if a single digit occurs 4 times.
function cond3( s)
{
    var a = new Array(10);
    a.fill(0);
 
    for (var i = 0; i < s.length; i++)
        a[s[i] - '0']++;
    
    for (var i = 0; i < 9; i++)
        if (a[i] >= 4)
            return true;
     
    return false;
}
 
function isFancy( s)
{
    if (cond1(s) || cond2(s) || cond3(s))
        return true;
    else
        return false;
}
 
 var  n = "7609438921";
  
    // var s = to_string(n);
    if (isFancy(n))
        document.write( "Yes");
    else
       document.write( "No");
 
// This code is contributed by SoumikMondal
</script>
Output: 
Yes

 

Attention reader! All those who say programming isn’t for kids, just haven’t met the right mentors yet. Join the  Demo Class for First Step to Coding Coursespecifically designed for students of class 8 to 12. 

The students will get to learn more about the world of programming in these free classes which will definitely help them in making a wise career choice in the future.




My Personal Notes arrow_drop_up
Recommended Articles
Page :