Tuesday, January 26, 2016

ChallengingProgramming. ( 2 )

Programming ( Mathematical )  Practice for Fun:

 Question:
       An ISBN (International Standard Book Number) is a ten digit code which uniquely identifies a book.   The first nine digits represent the book and the last digit is used to make sure the ISBN is correct.  To verify an ISBN you calculate 10 times the first digit, plus 9 times the second digit, plus 8 times the third ... all the way until you add 1 times the last digit.  If the final number leaves no remainder when divided by 11 the code is a valid ISBN. 
                                       
               For example: 0201103311 is a valid ISBN,  since
        10*0 + 9*2 + 8*0 + 7*1 + 6*1 + 5*0 + 4*3 + 3*3 + 2*1 + 1*1 = 55. 
                       
    Each of the first nine digits can take a value between and 9.  Sometimes it is necessary to make the last digit equal to ten; this is done by writing the last digit as X.  For example: 156881111X.           


  Write a program that reads in a valid ISBN with a single missing digit, marked with a “ ? “ , and outputs the correct value for the missing digit.
  
                                                                   
                    Sample Input         Sample Output             
               ISBN: 15688?111X         Missing Digit: 1
                                                                            




Solution:

 Visual Basic

Module Module1

    Sub Main()
        Dim ISBNcode As String
        Dim total1, temp, total2 As Integer
        Dim counter1 As Integer = 1
        Console.Write("ISBN: ")
        ISBNcode = Console.ReadLine()
        Dim digit(10) As String
        Dim counter As Integer
        For counter = 1 To Len(ISBNcode)
            digit(counter) = Mid(ISBNcode, counter, 1)
        Next
        If digit(10) = "X" Then digit(10) = "10"
        For counter = 10 To 1 Step -1
            If digit(counter1) = "?" Then
                temp = counter
                counter1 = counter1 + 1
            Else
                total1 = total1 + Val(digit(counter1)) * counter
                counter1 = counter1 + 1
            End If
        Next
        For counter = 0 To 10
            total2 = temp * counter + total1
            If total2 Mod 11 = 0 And counter = 10 Then
                Console.WriteLine("Missing Digit: X")
            Else
                If total2 Mod 11 = 0 Then Console.WriteLine("Missing Digit: " & counter)
            End If
        Next
        Console.ReadKey()
    End Sub

End Module




Thursday, January 14, 2016

ChallengingProgramming. ( 1 )

Programming ( Mathematical )  Practice for Fun:  




 The 3n+1(Collatz conjecture) Problem: 

         Consider the following algorithm to generate a sequence of numbers. Start with an integer n. If n is even, divide by 2. If n is odd, multiply by 3 and add 1. Repeat this process with the new value of n, terminating when n = 1. For example, the following sequence of numbers will be generated for n = 22:



          22   11   34   17   52   26   13   40   20   10   5    16   8   4   2   1
          
 Question:
          It is conjectured (but not yet proven) that this algorithm will terminate at n = 1 for every integer n. Still, the conjecture holds for all integers up to at least 1,000,000. For an input n, the cycle-length of n is the number of numbers generated up to and including the 1. In the example above, the cycle length of 22 is 16. Given any two numbers i and j, you are to determine the maximum cycle length over all numbers between i and j, including both endpoints.


Input
           The input will consist of a series of pairs of integers i and j, one pair of integers per line. All integers will be less than 1,000,000 and greater than 0.



Output
           For each pair of input integers i and j, output i, j in the same order in which they appeared in the input and then the maximum cycle length for integers between and including i and j. These three numbers should be separated by one space, with all three numbers on one line and with one line of output for each line of input.


 Sample Input                      Sample Output

 1    10                            1   10   20           
 100  200                           100   200   125
 201   210                          201   210   89
 900   1000                         900   1000   174





Solution:




Java ( Eclipse ):

import java.util.Scanner;
public class PracRT { 
//PracRT is a random class name.
      public static void main(String[] args) {
            int i,j,cycleCounter,temp;
             Scanner number=new Scanner(System.in);
            System.out.print("Enter first number:");
            i=number.nextInt();
            System.out.print("Enter last number:");
            j=number.nextInt();
            int max=0;
            for (int counter=i;counter<=j;counter=counter+1){
              temp=counter;
              cycleCounter=1;
            while (temp!=1){
              if (temp%2==0){
            temp=temp/2;
            cycleCounter=cycleCounter+1;
              }else{
                    temp=temp*3+1;
                    cycleCounter=cycleCounter+1;
              }
            }
           if(max<cycleCounter){
             max=cycleCounter;
           }
           }
            System.out.print(i+" "+j+" "+max);
      }
}





Visual Basic:


Module Module1
  Sub Main()
        Dim i, j, cycleCounter, counter, temp As Integer
        Console.Write("Enter first number:")
        i = Console.ReadLine()
        Console.Write("Enter last number:")
        j = Console.ReadLine()
        Dim max As Integer = 0
        For counter = i To j
            temp = counter
            cycleCounter = 1
            While temp <> 1
                If temp Mod 2 = 0 Then
                    temp = temp / 2
                    cycleCounter = cycleCounter + 1
                Else
                    temp = temp * 3 + 1
                    cycleCounter = cycleCounter + 1
                End If
            End While
            If max < cycleCounter Then max = cycleCounter
        Next
        Console.Write(i & " " & j & " " & max)
        Console.ReadKey()
    End Sub
 End Module





Collatz's Conjecture: 
          The Collatz's Conjecture states that any number can either be halved (if it is even) or multiplied by three and added one to (if it is odd) and eventually reach 1. The conjecture has not been proven, but most mathematicians who have looked into the problem think the conjecture is true because experimental evidence and heuristic arguments support it.