[C#] 로또 번호 만들기

가장 간단한 로또 번호 만들기 C#코드는 어떤 모습일까요?
(이 코드보다 더 간단한 코드를 알고 계신 분은 댓글로 알려주세요!)

var result = Enumerable.Range(1, 45)
    .OrderBy(_ => Random.Shared.Next())
    .Take(7).ToArray();
var nums = result.Take(6).OrderBy(x => x);
var bonus = result.Last();
    

Print(nums);
Print(bonus);


void Print(object target)
{
    var text = System.Text.Json.JsonSerializer.Serialize(target);
    Console.WriteLine(text);
}

| 출력

[16,21,29,31,38,41]
30

로또 번호는 1부터 45의 숫자 중 총 6개의 번호와 보너스 번호(총 7개 번호)를 랜덤으로 뽑은 결과입니다. 이를 짧은 코드로 구현하기 위해 OrderBy() LINQ 메서드를 이용하여 정렬 기준을 랜덤으로 줘 되려 랜덤으로 섞는 결과를 얻습니다.

6개의 좋아요
Enumerable.Range(1, 45)
    .OrderBy(_ => Random.Shared.Next())
    .Take(7).Chunk(6)
    .Select(nums => $"[{string.Join(",", nums.OrderBy(p => p))}]")
    .ToList().ForEach(Console.WriteLine);

| 출력

[9,12,13,14,38,42]
[8]

본문과 비슷하긴한데 Chunk로 두개로 나눈다음에 바로 출력했습니다.

8개의 좋아요

청크 굿입니다.

3개의 좋아요

저도 디모이님 본문 가져와서 재탕 해봤습니다! :smile:

var numbers = from num in Enumerable.Range(1, 45)
              orderby Random.Shared.Next()
              select num;

Print(numbers.Take(6).OrderBy(x => x));
Print(numbers.Last());

void Print(object target)
{
    var text = System.Text.Json.JsonSerializer.Serialize(target);
    Console.WriteLine(text);
}

결과

[4, 7, 23, 41, 42, 44]
13

로또 한번 사볼까요~ ㅎㅎ

4개의 좋아요

@james.lee 1등 번호 감사합니다… 냠냠

3개의 좋아요

굳이 랜덤 관련 클래스를 이용할 필요가 있을까 해서 이렇게 해보았습니다.

var nums = Enumerable.Range(1, 45)
                .OrderBy(x => Guid.NewGuid()).Take(6);

// 출력하기
nums.OrderBy(x => x).ToList().ForEach(item => Console.WriteLine(item));

출력
11
25
34
35
44
45

8개의 좋아요