How to generate N random integers, each with distinct digits and exact length L in VB.NET

2 Answers

0 votes
Imports System
Imports System.Text

Module DistinctDigitRandomNumbers

    '
    '    Generate a single random integer of length L whose digits are all distinct.
    '    The function returns the number as a string to preserve leading digits if needed.
    '
    Function generateDistinctDigitNumber(L As Integer, rng As Random) As String
        ' Digits 0–9 are available; we will pick L distinct digits.
        ' Using an array to store the chosen digits.
        ' The result string will be built step by step.

        Dim used(9) As Boolean
        Dim result As New StringBuilder(L)
        Dim count As Integer = 0

        While count < L
            ' Generate digits '0'..'9' reliably
            Dim d As Char = Convert.ToChar(48 + rng.Next(10))

            ' If digit not used yet, accept it.
            If Not used(Convert.ToInt32(d) - Convert.ToInt32("0"c)) Then
                used(Convert.ToInt32(d) - Convert.ToInt32("0"c)) = True
                result.Append(d)
                count += 1
            End If
        End While

        Return result.ToString()
    End Function

    '
    '    Generate N random integers, each with distinct digits and length L.
    '    Prints them directly.
    '
    Sub generateNumbers(N As Integer, L As Integer, rng As Random)
        For i As Integer = 1 To N
            Dim s As String = generateDistinctDigitNumber(L, rng)
            Console.WriteLine(s)
        Next
    End Sub

    Sub Main()
        Dim N As Integer = 10   ' how many numbers to generate
        Dim L As Integer = 6    ' length of each number

        ' Random engine setup: seeded with current time.
        Dim rng As New Random()

        ' Generate the numbers
        Console.WriteLine("Generated " & N & " numbers of length " & L & " with distinct digits:")
        generateNumbers(N, L, rng)
    End Sub

End Module


' run:
'
' Generated 10 numbers of length 6 with distinct digits:
' 568943
' 491678
' 659184
' 150783
' 065432
' 871043
' 165978
' 684519
' 436581
' 187530
'

 



answered 16 hours ago by avibootz
0 votes
Imports System
Imports System.Collections.Generic

Module Module1

    Function GenerateDistinctDigitNumbers(N As Integer, L As Integer) As List(Of Integer)
        Dim results As New HashSet(Of Integer)()          ' store unique valid numbers
        Dim lower As Integer = CInt(Math.Pow(10, L - 1))  ' smallest L-digit number
        Dim upper As Integer = CInt(Math.Pow(10, L)) - 1  ' largest L-digit number

        Dim rnd As New Random()                           ' random number generator

        ' keep generating until we have N distinct-digit numbers
        While results.Count < N
            Dim num As Integer = rnd.Next(lower, upper + 1)
            Dim s As String = num.ToString()

            ' check if all digits are unique
            Dim digitSet As New HashSet(Of Char)(s)
            If digitSet.Count = L Then
                results.Add(num)
            End If
        End While

        Return New List(Of Integer)(results)
    End Function

    Sub Main()
        Dim nums = GenerateDistinctDigitNumbers(10, 6)
        Console.WriteLine(String.Join(", ", nums))
    End Sub

End Module



' run:
'
' 793182, 140769, 208369, 756421, 905147, 632048, 524618, 769185, 729654, 319025
'

 



answered 13 hours ago by avibootz

Related questions

...