¿Alguna vez has querido preguntarle al compilador "¿Por qué?" La mayoría de nosotros nos hemos sentido frustrados cuando el código no funciona como debería. Mathworks por lo tanto ha implementado una pequeña y agradable función why
que responde a la pregunta. Para dar algunos ejemplos de 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.
Su tarea es implementar la why
función en su idioma. La función debería funcionar con y sin un argumento de entrada (alternativamente, use input 0
o -1
). La función debe ser nombrada why
(o, escribir why(n)
en STDIN debería dar como resultado que se imprima la cadena apropiada).
Si no se proporciona ningún argumento, o el argumento es cero o negativo, la cadena de salida debe ser una frase aleatoria y válida. Por lo tanto, no debería ser una función why
, why()
, why(0)
o why(-1)
que devuelve una frase al azar.
Si se proporciona un argumento de entrada n
(argumento de función, no STDIN), la salida debería ser la enésima cadena (definida a continuación). Por lo tanto, why(1)
siempre debe generar (imprimir / mostrar) el mismo resultado.
Las oraciones se construyen de la siguiente manera (Tipo 1, Tipo 2 y Especial). Todas las oraciones terminan con!
.
"Person" "ending" !
"Verb" "adjective" "Person" !
A list of special cases
La lista de personas:
Stewie
Peter
Homer
The programmer
The system manager
You
La lista de finales:
suggested it
insisted on it
did it
La lista de verbos son:
To fool
To satisfy
To please
La lista de adjetivos:
the smart
the bald
the tall
the rich
the stupid
La lista de casos especiales:
How should I know?
Stop asking!
Don't ask!
La forma de seleccionar una numerada es:
Tipo de oraciones:
Odd number => Type 1
Even number => Type 2
n % 7 = 0 => Type 3 (% is the modulus operator)
Nombres: el enésimo nombre se define mediante el módulo (%).
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!
Terminaciones: la enésima terminación también se define utilizando el módulo. Suponga que las terminaciones (1, 2 y 3) se enumeran como (1 2 2 3)
. Como los números siempre son impares, use((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
Adjetivos: el enésimo adjetivo se define utilizando el módulo. Como los números son siempre pares, use:(n % 10)/2
n = 2: (2 % 10)/2 => Smart
n = 6: (6 % 10)/2 => The tall
...
Verbos: el enésimo verbo también se define utilizando el módulo. Suponga que los verbos (1, 2 y 3) se enumeran como (1 2 2 3)
Como los números son siempre pares para los verbos, use(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
Ahora, la forma de crear una aleatoria debería ser bastante simple, simplemente seleccione una aleatoria n
.
Algunos ejemplos:
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!
Se aplican reglas estándar de golf de código. Se seleccionará un ganador una semana a partir del día en que se publicó el desafío.
why
o seríaWHY
aceptable?/2
funcionar. Eso da valores fraccionarios.13
también debe serinsisted
(14/2 = 7% 4 = 3 = 2do de insistido).the rich The programmer
el especificadothe
?The
yTo
en sus listas, probablemente debería estar en minúsculas para que coincida con sus ejemplos ...