How to generate 3 no-digit repeated random integers, each with distinct digits in VB.NET

1 Answer

0 votes
Imports System
Imports System.Collections.Generic

Module DistinctDigitGenerator

    ' ------------------------------------------------------------
    ' Function: generate_number
    ' Purpose: Create one 3-digit integer with distinct digits,
    '          drawn from a shared pool of available digits.
    '          The first digit is never zero, so the result
    '          is always a true 3-digit integer.
    ' ------------------------------------------------------------
    Function generate_number(available_digits As List(Of Char), Optional length As Integer = 3) As Integer
        Dim rng As New Random()

        ' Choose the first digit from the pool, excluding '0'
        Dim non_zero_digits As New List(Of Char)()
        For Each d As Char In available_digits
            If d <> "0"c Then
                non_zero_digits.Add(d)
            End If
        Next

        Dim first_digit As Char = non_zero_digits(rng.Next(non_zero_digits.Count))
        available_digits.Remove(first_digit)

        ' Choose the remaining digits from the updated pool
        Dim remaining As New List(Of Char)()
        For i As Integer = 1 To length - 1
            Dim d As Char = available_digits(rng.Next(available_digits.Count))
            remaining.Add(d)
            available_digits.Remove(d)
        Next

        ' Build the number as a string, then convert to int
        Dim digits_str As String = first_digit & String.Join("", remaining)
        Return Integer.Parse(digits_str)
    End Function


    ' ------------------------------------------------------------
    ' Function: generate_three_distinct_digit_numbers
    ' Purpose: Produce three integers, each with distinct digits,
    '          and no digit repeated across all three numbers.
    '          All numbers are guaranteed to be 3 digits long.
    ' ------------------------------------------------------------
    Function generate_three_distinct_digit_numbers() As Tuple(Of Integer, Integer, Integer)
        ' Start with all digits 0–9 as strings
        Dim digits As New List(Of Char)
        For i As Integer = 0 To 9
            digits.Add(Convert.ToChar(Convert.ToInt32("0"c) + i))
        Next

        ' Generate three numbers, each 3 digits long
        Dim n1 As Integer = generate_number(digits)
        Dim n2 As Integer = generate_number(digits)
        Dim n3 As Integer = generate_number(digits)

        Return Tuple.Create(n1, n2, n3)
    End Function


    ' ------------------------------------------------------------
    ' Main execution
    ' ------------------------------------------------------------
    Sub Main()
        ' Run the generator 5 times
        For i As Integer = 1 To 5
            Dim result = generate_three_distinct_digit_numbers()
            Console.WriteLine("(" & result.Item1 & ", " & result.Item2 & ", " & result.Item3 & ")")
        Next
    End Sub

End Module


' run:
'
' (587, 193, 204)
' (194, 265, 308)
' (234, 170, 895)
' (901, 275, 638)
' (973, 254, 680)
'

 



answered 12 hours ago by avibootz

Related questions

...