Вы когда-нибудь хотели спросить компилятор "Почему?" Большинство из нас были разочарованы, когда код не работает должным образом. Поэтому Mathworks реализовал небольшую функцию why, которая отвечает на вопрос. Чтобы привести несколько примеров из MATLAB:
why
The programmer suggested it.
why
To fool the tall good and smart system manager.
why(2)
You insisted on it.
why(46)
Bill insisted on it.
Ваша задача - реализовать whyфункцию на вашем языке. Функция должна работать как с входным аргументом, так и без него (в качестве альтернативы используйте ввод 0или -1). Функция должна быть названа why(или запись why(n)в STDIN должна привести к печати соответствующей строки).
Если аргумент не указан или аргумент нулевой или отрицательный, выходная строка должна быть случайной, допустимой фразой. Таким образом, должна быть функция why, why(), why(0)или why(-1)что возвращает случайное предложение.
Если nзадан входной аргумент (аргумент функции, а не STDIN), вывод должен быть n-й строкой (определенной ниже). Поэтому why(1)всегда следует выводить (распечатывать / отображать) один и тот же результат.
Предложения построены следующим образом (Тип 1, Тип 2 и Специальный). Все предложения заканчиваются на !.
"Person" "ending" !
"Verb" "adjective" "Person" !
A list of special cases
Список лиц:
Stewie
Peter
Homer
The programmer
The system manager
You
Список окончаний:
suggested it
insisted on it
did it
Список глаголов:
To fool
To satisfy
To please
Список прилагательных:
the smart
the bald
the tall
the rich
the stupid
Список особых случаев:
How should I know?
Stop asking!
Don't ask!
Способ выбрать пронумерованный:
Тип предложений:
Odd number => Type 1
Even number => Type 2
n % 7 = 0 => Type 3 (% is the modulus operator)
Имена: n-е имя определяется с помощью модуля (%).
n = 1: 1 % 7 => Stewie
n = 2: 2 % 7 => Peter
...
n = 6: 6 % 7 => You
n = 7: 7 % 7 => How should I know?
n = 11: 11 % 7 => The programmer
n = 14: 14 % 7 => Stop asking!
n = 21: 21 % 7 => Don't ask!
Окончания: n-е окончание также определяется с помощью модуля. Предположим, что окончания (1, 2 и 3) перечислены как (1 2 2 3). Поскольку числа всегда нечетные, используйте((n+1)/2 % 4)
n = 1: ((1+1)/2 % 4) => suggested it
n = 3: ((3+1)/2 % 4) => insisted on it
n = 13: ((13+1)/2 % 4) => did it
Прилагательные: n-е прилагательное определяется с помощью модуля. Поскольку числа всегда четные, используйте:(n % 10)/2
n = 2: (2 % 10)/2 => Smart
n = 6: (6 % 10)/2 => The tall
...
Глаголы: n-й глагол также определяется с помощью модуля. Предположим, что глаголы (1, 2 и 3) перечислены так: (1 2 2 3)числа всегда четные для глаголов, используйте(n % 8) / 2
n = 2: (2 % 8)/2 => To fool
n = 4: (4 % 8)/2 => To satisfy
n = 6: (6 % 8)/2 => To satisfy
n = 8: (8 % 8)/2 => To please
Теперь способ создания случайного должен быть довольно простым, просто выберите случайный n.
Некоторые примеры:
why
You suggested it!
why
To fool the tall Homer!
why
Don't ask!
why(1)
Stewie suggested it!
why(14)
Stop asking!
why(8)
To please the rich Stewie!
Применяются стандартные правила игры в гольф. Победитель будет выбран через неделю со дня объявления конкурса.
/2работать Окончания . Это дает дробные значения. 13также должно быть insisted(14/2 = 7% 4 = 3 = 2-й из настоящих).
the rich The programmerсвязи с указанным the?
Theи Toваши списки, вероятно, должны быть строчными, чтобы соответствовать вашим примерам ...
whyили будетWHYприемлемым?