Перейти к содержанию

🗒 Задача

Для алгоритма простого приложения-лотереи, нужно угадать два числа от 0 до 42. Если угадать только одно – игрок получает утешительный приз. Напиши программу, проверяющую выигрыш. Пользователь должен вводить числа в консоль. Правильные числа заранее известны и хранятся в переменных. Оформить ввод текстовыми подсказками о том, что нужно вводить. Вывести отдельным сообщением, какие числа были нужны для победы.

  • если оба числа угаданы вывести “Поздравляем! Вы выиграли главный приз!”;

  • если угадано только одно число, вывести “Вы выиграли утешительный приз!”;

  • если не угадано ничего, вывести “Неудача!”;

  • программа должна учитывать ввод чисел в обратном порядке.

❌ Ошибки

  • не используют else if — нужно делать все в общем условии if

  • не проверяются выигрышные числа в обратном порядке ввода

  • не ошибка — даем рекомендации по правильному переносу длинного выражения

✏️ Комментарии

Раз уже тут используем продвинутые темы, предлагаю доработать. Пусть два выигрышных числа будут списком (или массивом). И проверка будет заключаться в том, есть ли введенные числа пользователем в списке. например методом contains
Слишком длинная строка (больше 120 символов), как правило в крупных и средних компаниях есть системы проверяющие код, которые не пропустят такое форматирование (например [Detekt](https://detekt.dev/docs/rules/formatting/#maximumlinelength)). Давай добавим переносы
А что будет, если пользователь введет выигрышные числа в обратном порядке?) 
Официальная Kotlin Coding Conventions не дает строгих указаний на тему переноса строк внутри условий. Но на моей практике всегда было так. для длинных условий if, которые не помещаются в одну строку, делаем перенос строки после оператора || или &&.
- можно использовать постфиксный инкремент для более короткой формы `i++`
- тк тело условия однострочное и короткое, можно его поместить на той же строке, где определен `if` и опустить фигурные скобки
Для конструкции `when` тоже можно опустить фигурные скобки и писать тело сразу после `->`

🧾 Решение

fun main() {
    val number1 = (0..42).random()
    val number2 = (0..42).random()

    println("Введите два числа по очереди")

    val firstNumber = readln().toInt()
    val secondNumber = readln().toInt()

    if ((firstNumber == number1 && secondNumber == number2) || (firstNumber == number2 && secondNumber == number1))
        println(
            "Поздравляем, вы выиграли главный приз! \n" +
                    "Загаданные числа $number1 и $number2")

    else if ((firstNumber == number1 && secondNumber != number2) || (firstNumber != number1 && secondNumber == number2))
        println("Поздравляем, вы выиграли утешительный приз! \n" +
                "Загаданные числа $number1 и $number2")
    else
        println("Неудача! \n" +
                "Загаданные числа $number1 и $number2")
    }
fun main() {
    val number1 = 15
    val number2 = 28

    print("Введите первое число от 0 до 42: ")
    val userNumber1 = readln().toIntOrNull()

    print("Введите второе число от 0 до 42: ")
    val userNumber2 = readln().toIntOrNull()

    val isWinning = (userNumber1 == number1 && userNumber2 == number2) || (userNumber1 == number2 && userNumber2 == number1)

    if (isWinning) {
        println("Поздравляем! Вы выиграли главный приз!")
    } else if (userNumber1 == number1 || userNumber1 == number2 || userNumber2 == number1 || userNumber2 == number2) {
        println("Вы выиграли утешительный приз!")
    } else {
        println("Неудача!")
    }

    println("Правильные числа для победы были $number1 и $number2.")
}
fun main() {
    val winningNumber1 = 7
    val winningNumber2 = 24

    println("Введите первое число (от 0 до 42):")
    val userNumber1 = readln().toIntOrNull()

    println("Введите второе число (от 0 до 42):")
    val userNumber2 = readln().toIntOrNull()

    if (userNumber1 != null && userNumber2 != null) {
        when {
            (userNumber1 == winningNumber1 && userNumber2 == winningNumber2) ||
            (userNumber1 == winningNumber2 && userNumber2 == winningNumber1) ->
                println("Поздравляем! Вы выиграли главный приз!")

            userNumber1 == winningNumber1 || userNumber1 == winningNumber2 ||
            userNumber2 == winningNumber1 || userNumber2 == winningNumber2 ->
                println("Вы выиграли утешительный приз!")

            else -> println("Неудача!")
        }

        println("Выигрышные числа были: $winningNumber1 и $winningNumber2")
    } else {
        println("Некорректный ввод данных")
    }
}
fun main() {
    val winningNumber1 = Random.nextInt(0, 43)
    val winningNumber2 = Random.nextInt(0, 43)
    var correctAnswersCount = 0

    println("""
        Добро пожаловать в розыгрыш лотереи!
        У вас 2 попытки. Возможны диапазон ответов от 0 до 42.
        Если угождаете одно число - получите утешительный приз! Если два - главный приз!
    """.trimIndent())

    println("Введите первое число.")
    val firstNumber = readln().toInt()
    println("Введите второе число.")
    val secondNumber = readln().toInt()
    println("$winningNumber1, $winningNumber2")

    if (firstNumber == winningNumber1 || firstNumber == winningNumber2) ++correctAnswersCount
    if (secondNumber == winningNumber1 || secondNumber == winningNumber2) ++correctAnswersCount

    val resultMessage = when(correctAnswersCount) {
        2 -> "Поздравляем! Вы выиграли главный приз!"
        1 -> "Вы выиграли утешительный приз!"
        else -> "Неудача!"
    }

    println(resultMessage)
}