Problem Set 6(Non-Isomorphic Numbers)

Non-Isomorphic Numbers

Q.Given ‘n’ integers, write an algorithm and the subsequent Python code to print all numbers that are Non-isomorphic to the first number. Two numbers with non-distinct digits ( numbers in which digits are repeated)  are said to be non-isomorphic if they have the same number of digits in it and the sets of positions  having the same  digits are different. For example:

  • 12321 is not non-isomorphic to 83538 .
Both the  numbers are of length five.  In 12321, positions 2 and 4 have the same digit 2, Positions 1 and 5 have same digit 1. Hence the set of positions having the same digit are {{1,5},{2,4}}. Similarly , for the number 83538, the set of positions having the same digit is {{1,5}, {2,4}}. Since the sets of positions having the same digit are same , the numbers are not non-isomorphic
  • 1232 is non-isomorphic to 2342 because set of positions having same digits for 1232 is {{2, 4}} and for 2342 is {{1, 4}} . The sets of positions having same digits are different. Positions are numbered from left to right starting from 1.
  • 12 is not non-isomorphic to 10.
Write a function to check whether two  numbers are non-isomorphic. If none of the numbers are non-isomorphic then print ‘No non-isomorphic’.
Input Format
First line contains the number of elements, n
Next ‘n’ line contains the numbers
Output Format
Print first number in the first line
Next few lines contain the numbers that are non-isomorphic to first number.
If the none of the numbers are not non-isomorphic, then Print “No non-isomorphic

Input:
the number n, n numbers

Processing:
def isomorphic(number):
    number_list = list(map(int,str(number)))
    length = len(number_list)
    common_pos = []
    temp_pos = []
    for i in range(len(list(set(number_list)))):
        if number_list.count(number_list[i]) >= 2:
            for j in range(len(number_list)):
                if number_list[i] == number_list[j]:
                    temp_pos.append(j)
            common_pos.append(temp_pos)
            temp_pos = []
    return length,common_pos
final_num_list = [number]
count = 0
final_list = []
first_number = isomorphic(number)
for i in range(n-1):
    temp = int(input())
    if first_number != isomorphic(temp) and first_number[0] == isomorphic(temp)[0] and isomorphic(temp)[1]:
        if final_list == []:
            final_list.append(number)
        final_list.append(temp)
        count += 1

Output:
Display the numbers that are isomorphic to first number if none are present then print No non-isomorphic

Program:
def isomorphic(number):
    number_list = list(map(int,str(number)))
    length = len(number_list)
    common_pos = []
    temp_pos = []
    for i in range(len(list(set(number_list)))):
        if number_list.count(number_list[i]) >= 2:
            for j in range(len(number_list)):
                if number_list[i] == number_list[j]:
                    temp_pos.append(j)
            common_pos.append(temp_pos)
            temp_pos = []
    return length,common_pos
n = int(input())
number = int(input())
final_num_list = [number]
count = 0
first_number = isomorphic(number)
final_list = []
for i in range(n-1):
    temp = int(input())
    if first_number != isomorphic(temp) and first_number[0] == isomorphic(temp)[0] and isomorphic(temp)[1] != []:
        if final_list == []:
            final_list.append(number)
        final_list.append(temp)
        count += 1
if count == 0:
    print('No non-isomorphic')
else:
    for i in final_list:
        print(i)
Algorithm:
Step1. Define the function isomorphic with one parameter number
Step1.1 convert the number to individual digits and assign it to number_list and assign length as the number of digits of the number
Step1.2 repeat till i is less than the number of unique digits
Step1.2.1 check whether the ith digit in the number_list is repeated if yes find all the positions and add these positions to temp_pos list and append temp_pos to common_pos
Step1.3 return the number of digits and common_pos list
Step2. Get n i.e. the number of numbers to be entered
Step3. Get the first number and call the isomorphic function with the first number and store the value that is returned in first_number variable
Step4. Repeat till i is less than n-1
Step4.1 get the number and check if the value returned when the number is called with isomorphic function with first_number is not same and also check if both the numbers have the same number of digits if both conditions are satisfied display the number.
Step4.2 increment count by 1 which was initially zero
Step5. If count is equal 0 then display no non-isomorphic
Step6.End


4 comments:

  1. Please upload isomorphic pps6 code

    ReplyDelete
    Replies
    1. I need the full question to be able to upload the solution...if you provide the full question i would upload the solutions as soon as possible

      Delete
  2. CSE1701 Isomorphic Numbers (Id-3083) Author: JN
    Given ‘n’ integers, write an algorithm and the subsequent Python code to print all numbers that are isomorphic to the first number. Two numbers with non-distinct (numbers in which digits get repeated) are said to be isomorphic if they have the same number of digits in it and the sets of positions having the same digits are equal.. For example:

    12321 is isomorphic to 83538 .
    Both the numbers are of length five. In 12321, positions 2 and 4 have the same digit 2, Positions 1 and 5 have same digit 1. Hence the set of positions having the same digit are {{1,5},{2,4}. Similarly , for the number 83538, the set of positions having the same digit is {{1,5}, {2,4}}.

    1232 is not isomorphic to 2342 because set of places having same digits for 1232 is {{2, 4}} and for 2342 is {{1, 4}} (digits are numbered from left to right starting from 1).
    12 is not isomorphic to 10.
    Write a function to check whether two numbers are isomorphic. If none of the numbers are isomorphic then print ‘No isomorphic’.

    Input Format

    First line contains the number of elements, n

    Next ‘n’ line contains the numbers

    Output Format

    Print first number in the first line

    Next few lines contain the numbers that are isomorphic to first number.

    If the none of the numbers are not isomorphic, then Print “No isomorphic”

    ReplyDelete

Bonus Practice Problems(GMT To IST)

IST (Indian Standard Time) is 5 hours 30 minutes ahead of GMT(Greenwich Mean Time). Develop an algorithm and write the Python code to find...