/diceroll

Codelab for learning Go-lang (RU)

Primary LanguageGo

КодоЛаба: Флаги командной строки, функции, случайные числа.

Программирование на Go, Школа Программистов 2019

В данной кодолабе вам нужно будет написать программу, которая имитирует бросание игрального кубика.

В итоге у вас получится полноценная программа, которая работает с флагами командной строки.

Шаг 0. Что есть сейчас ?

Сейчас программа умеет выводить числа от 1 до 6.

Также программа принимает флаг для установки начального значения случайного генератора.

$ go run main.go -seed 4
>> 2

Запустите программу go run main.go -seed 42. Запомните, что она вывела.

Шаг 1. Функция случайного числа

  1. Допишите функцию randInterval, чтобы она возвращала число из диапазона [l,r]

  2. Замените вызов fmt.Println(rand.Intn(6) + 1)на fmt.Println(randInterval(1,6))

  3. Проверьте себя, запустите программу еще раз go run main.go -seed 42. Результат не должен измениться.

Шаг 2. "Увеличиваем кубик"

В многих настольных играх, таких как DnD нужно иметь кубики, которые дают больше значений.

Например, 12-гранники, которые дают числа от 1 до 12 включительно.

Добавьте в нашу программу два флага командной строки типа Int, которые будут обозначать начало и конец интервала кубика.

$ go run main.go -seed 42 -start 1 -end 10

Вам нужно использовать функцию randInterval и цикл, чтобы решить эту задачу.

Проверьте, что программа корректно работает, несколько раз запустите

$ go run main.go -start 0 -end 1

Должны возвращаться только числа 0 и 1

По умолчанию границы должны остаться от 1 до 6.

Проверьте себя, запустите программу еще раз go run main.go -seed 42. Результат должен соотвествовать результату из шага 1.

(Дополнительно) Программа должна выводить сообщение об ошибке, если start > end.

Шаг 3. "Кинем кубик несколько раз"

Добавьте новый флаг n. При передаче этого флага программа должна выводить N случайных чисел.

Все остальные флаги должны учитываться.

$ go run main.go -start 0 -end 1 -n 3 

Выводом данной программы должы быть 3 бинарных числа.

Вам нужно использовать функцию randInterval и цикл, чтобы решить эту задачу.

По умолчанию должно выводиться только одно число.

Проверьте себя, запустите программу еще раз go run main.go -seed 42. Результат должен соотвествовать результату из шага 2.

Шаг 4. "Без повторений"

Добавьте булевый флаг norepeat.

При вызове программы с заданым флагом и флагом n, числа в выводе не должны повторяться.

$ go run main.go -start 0 -end 6 -n 3 -norepeat
>> 3,1,4   

По умолчанию данный флаг равен false.

Добавьте сообщение об ошибке, если не возможно вывести N чисел от L до R без повторений.