Here's a programming challenge for you - A Lottery Picker. 1) Must not repeat the same number in one pick. 2) Picks cannot be identical in a batch of games. 3) User must control what the max. number will be, 1=< is not valid. 4) User must control how many numbers per game.4< is not valid. 5) User must control how many games per run, 1< is not valid. 6) Extra points if you put in a Special Number as most lotteries have. Good Luck !

⚠ To comment this publication you need to be logged in.

Cyberat, The "repeat" loops prevent duplicates.

Fschmidt, to be more clear, you build a program for a machine printing custom lottery picks on a screen. Any lottery, so the input is user input not preset numbers not yours not anyone else's. You must have an input and verification process of such.

as far as i can tell, i don't think anyone completed their task successfully! [@fschmidt's](https://chat-to.dev/profile?u=fschmidt) solution was the right one

Fschmidt, explain where and how, I don't see it at all.

Cyberat, My code prevents duplicates.

FSchmidt you did not follow the challenge, you followed Java Juggler's choice of 49, 6, 10. Must have USER INPUT, not your choice. Must validate input.

I can say Luan language has very weird For/Next loops.

Fschmidt, well done and complete code, but no Duplicate Checks. Must have duplicate check per game and per set of games. Best random(timer) will create duplicate numbers & duplicate games also. Maybe there is a language problem here let's say I have 5 numbers: 2, 34, 12, 44, 2. This pick is not desired. Also a game set should not repeat, same way. Run your program & test against it, run 10 games, run 20 games.

I'm in the middle of two programs and couldn't pay much attention to the code 🤔

>Took me about 3 days, take your time. Do run it and test it. Rule of thumb, run with 6 numbers per game and 10-12 games to look for duplicates. Don't trust the randomizer, correct it. `@Cyberat` said here 👆 that it took 3 days to solve and I did a few minutes and got some errors

JavaJuggler, Arrive at what result? My program? I read the requirements, looked at your code for variable names, and wrote my code. It took about 15 minutes.

I'm slowly starting to like this language, Mr. fschmidt. And by the way, how did you arrive at this result?

In my programming language [Luan](http://www.luan.software/): local Luan = require "luan:Luan.luan" local error = Luan.error local range = Luan.range or error() local ipairs = Luan.ipairs or error() local stringify = Luan.stringify or error() local Math = require "luan:Math.luan" local random = Math.random or error() local Table = require "luan:Table.luan" local sort = Table.sort or error() local concat = Table.concat or error() local Io = require "luan:Io.luan" local print = Io.print or error() local function lottery_picker( max_number, numbers_per_game, games_per_run ) max_number >= 1 or error "max_number must be at least 1" numbers_per_game >= 4 or error "numbers_per_game must be at least 4" max_number >= numbers_per_game or error "max_number must be at least numbers_per_game" games_per_run >= 1 or error "games_per_run must be at least 1" local games = {} local picks = {} for _ in range(1,games_per_run) do local game, pick repeat game = {} local used = {} for _ in range(1,numbers_per_game) do local number repeat number = random(1,max_number) until used[number] == nil used[number] = true game[#game+1] = number end sort(game) pick = concat( game, ":" ) until picks[pick] == nil picks[pick] = true games[#games+1] = game end return games end local games = lottery_picker( 49, 6, 10 ) print("Lottery Games:") for _, game in ipairs(games) do print( concat( game, " " ) ) end

Ok. thanks for the tip. as soon as I've finished I'll post it here in the comments.(y)

Took me about 3 days, take your time. Do run it and test it. Rule of thumb, run with 6 numbers per game and 10-12 games to look for duplicates. Don't trust the randomizer, correct it.

I'm trying to make something better organized and compressible. I'll post the result soon.

Hint, requires at least 3 nested loops for duplicate checks.

Input still faulty, since I hate Java and not that familiar, let me write your input in C# best I remember: Input ("What is the maximum number to have in a game ? :", max_number); While max_number =< 1 Print ("Invalid Number, must be greater than 1, try again."); Do Would need a set for each input.

Now you removed the check for duplicate numbers and have no check for duplicate games. This is the entire brain & core of the exercise.

I specified user picks amount of games and all that input, not programmer. Let me be clearer, I walk up to a machine that runs your program, the machine will ask me three questions: What is the max. number in the game, how many numbers to get for a game, how many games to get for this session. Runs the process and returns to main menu on key press. RUN YOUR OWN PROGRAM, test it, not just "I wrote this, how is it now ?".

see now `Mr Cyberat` ```py import random def lottery_picker(max_number, numbers_per_game, games_per_run): """ Generates a batch of lottery games with unique numbers and a bonus number. Parameters: max_number (int): The maximum number that can be picked. numbers_per_game (int): The number of unique numbers per game. games_per_run (int): The number of games per run. Returns: list: A list of games, where each game is a list of unique numbers with a bonus number. """ # Check if inputs are valid if not all(isinstance(param, int) for param in [max_number, numbers_per_game, games_per_run]) or max_number < 1 or numbers_per_game < 4 or games_per_run < 1: return "Invalid input. Please ensure all inputs are positive integers." # Initialize an empty list to store the games games = [] # Generate the games for _ in range(games_per_run): game = set() while len(game) < numbers_per_game: number = random.randint(1, max_number) game.add(number) games.append(sorted(list(game))) return games # Example usage games = lottery_picker(max_number=49, numbers_per_game=6, games_per_run=10) print("Lottery Games:") print("Number 1 Number 2 Number 3 Number 4 Number 5 Bonus Number") for game in games: print("{:8}".format(" ".join(map(str, game[:-1]))) + " " + str(game[-1])) ```

Make it simpler, list the last number as "bonus number", just a header text print marking the column.

The truth is that what sometimes seems simple becomes more complex in implementation. But I'm paying more attention and I'll get better results.

First of all put in the proper code for inputs and verification, you got it, just not in there. Also you don't want to invalidate ALL inputs for 1 wrong input, very annoying. Deprecate verification after each input.

Yes, it was a trick, sounds simple right, lottery picker ? I did it in C# and I ran into trouble seeing the results. Then I added the bonus as extra, when I solved it. I used Arrays and nested loops - hint.

the challenge is really complex and requires a great deal of thought. but i believe i've got to the bottom of the solution. if there's anything missing, let's try and come up with another solution.

I also asked for verification that games do not repeat in a batch. Yes, randomizer can do that in a set of 10+ games.

Does it run and perform ? I want the printed results. Cheap & easy way out, no text input or verification. Deprecate "Number not in game". It's almost like pseudo code. Nope you don't have it, incomplete work.

for this challenge I basically arrived at this result ```py import random def lottery_picker(max_number, numbers_per_game, games_per_run, special_number): """ Generates a batch of lottery games with unique numbers and a special number. Parameters: max_number (int): The maximum number that can be picked. numbers_per_game (int): The number of unique numbers per game. games_per_run (int): The number of games per run. special_number (int): The special number that must be included in every game. Returns: list: A list of games, where each game is a list of unique numbers including the special number. """ # Check if inputs are valid if max_number < 1 or numbers_per_game < 4 or games_per_run < 1 or special_number < 1 or special_number > max_number: return "Invalid input. Please ensure all inputs are positive integers and the special number is within the range." # Initialize an empty list to store the games games = [] # Generate the games for _ in range(games_per_run): game = set() while len(game) < numbers_per_game: number = random.randint(1, max_number) if number != special_number and number not in game: game.add(number) game.add(special_number) games.append(list(game)) return games # Example usage games = lottery_picker(max_number=49, numbers_per_game=6, games_per_run=10, special_number=7) for game in games: print(game) ``` This code defines a function lottery_picker that takes four arguments: max_number, numbers_per_game, games_per_run, and special_number. It generates a batch of lottery games with unique numbers and a special number, and returns a list of games. The function checks if the inputs are valid, and if not, it returns an error message. The example usage at the end of the code generates 10 games with 6 unique numbers each, where the maximum number is 49 and the special number is 7. the challenge has been launched, whoever has a better answer than mine, let's have it