본문 바로가기

디지털포렌식(Digital forensic)/숫자

[파일] 6/45 번호 생성 앱

반응형

 

45개의 숫자들 중에서 6개를 골라 추첨번호와 일치하면 당첨되는 로또(LOTTO) 번호 추출기는 과거에도 있었다.

다양한 확률과 트랜드, 최근 발생번호 등 다양한 숫자적 옵션들을 적용했지만
가장 중요한 핵심, 당첨에 대해서는 말을 하지 못하는 한계가 명확했다.

 

이 포스팅 역시 당첨을 보장하지 못한다.

 

당첨이 보장된다면? 왜 공개를 할까?
소프트웨어를 만드는 사람들은 예언자가 아니며 숫자를 가지고 세상을 움직이는 예측자들이다.


setup.zip
0.51MB

 

위 파일은 로또 번호 5개 세트를 골라주는 Windows용 앱이다(스마트폰용 아님).

실행하면 버튼이 하나 보이는데, 이 버튼을 클릭하면 5개의 로또 번호 세트를 만들어준다.

 

 

코드에 적용된 특별한 조건은 단 하나

 

랜덤 숫자가 선택되야하며,
당연히 6개의 숫자들은 절대 중복되면 안된다.

Public Class Form1
    Private generatedSets As New List(Of List(Of Integer)) ' 생성된 숫자 세트를 저장할 리스트
    Private random As New Random() ' Random 객체를 클래스 레벨로 이동

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ' DataGridView에 열을 추가
        DataGridView1.Columns.Clear() ' 기존 열을 모두 제거

        For colIndex As Integer = 1 To 6
            Dim column As New DataGridViewTextBoxColumn()
            column.Name = "Column" & colIndex
            column.HeaderText = "번호 " & colIndex
            DataGridView1.Columns.Add(column)
        Next

        ' DataGridView를 초기화
        DataGridView1.Rows.Clear()

        ' 5세트의 숫자를 생성하고 DataGridView에 추가
        For i As Integer = 1 To 5
            Dim randomSet As List(Of Integer) = GenerateUniqueRandomSet()
            DataGridView1.Rows.Add(randomSet(0), randomSet(1), randomSet(2), randomSet(3), randomSet(4), randomSet(5))
        Next
    End Sub

    ' 중복되지 않는 6개의 숫자로 이루진 세트 생성
    Private Function GenerateUniqueRandomSet() As List(Of Integer)
        Dim randomSet As List(Of Integer)

        ' 중복되지 않는 세트를 생성할 때까지 반복
        Do
            randomSet = GenerateRandomSet()
        Loop While generatedSets.Any(Function(s) s.SequenceEqual(randomSet))

        ' 생성된 세트를 저장
        generatedSets.Add(randomSet)
        Return randomSet
    End Function

    ' 1부터 45까지 중복되지 않는 랜덤한 6개의 숫자를 생성
    Private Function GenerateRandomSet() As List(Of Integer)
        Dim usedNumbers As New List(Of Integer)
        Dim randomSet As New List(Of Integer)

        ' 6개의 중복되지 않는 숫자 생성
        While randomSet.Count < 6
            Dim randomNumber As Integer = random.Next(1, 46) ' 1부터 45까지의 숫자
            If Not usedNumbers.Contains(randomNumber) Then
                randomSet.Add(randomNumber)
                usedNumbers.Add(randomNumber)
            End If
        End While

        ' 숫자를 정렬하여 반환
        randomSet.Sort()
        Return randomSet
    End Function
End Class

 

728x90