Hai mai desiderato chiedere al compilatore "Perché?" Molti di noi sono rimasti frustrati quando il codice non funziona come dovrebbe. Mathworks ha quindi implementato una simpatica piccola funzione why, che risponde alla domanda. Per dare alcuni esempi da 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.
Il tuo compito è implementare la whyfunzione nella tua lingua. La funzione dovrebbe funzionare con e senza un argomento di input (in alternativa utilizzare input 0o -1). La funzione deve essere denominata why(oppure, la scrittura why(n)in STDIN dovrebbe comportare la stampa della stringa appropriata).
Se non viene fornito alcun argomento o l'argomento è zero o negativo, la stringa di output deve essere una frase casuale e valida. Quindi, ci dovrebbe essere una funzione why, why(), why(0)o why(-1)che i rendimenti una frase casuale.
Se nviene fornito un argomento di input (argomento della funzione, non STDIN), l'output dovrebbe essere l'ennesima stringa (definita di seguito). Quindi, why(1)dovrebbe sempre produrre (stampare / visualizzare) lo stesso risultato.
Le frasi sono costruite come segue (Tipo 1, Tipo 2 e Speciale). Tutte le frasi finiscono con !.
"Person" "ending" !
"Verb" "adjective" "Person" !
A list of special cases
L'elenco delle persone:
Stewie
Peter
Homer
The programmer
The system manager
You
L'elenco dei finali:
suggested it
insisted on it
did it
L'elenco dei verbi sono:
To fool
To satisfy
To please
L'elenco degli aggettivi:
the smart
the bald
the tall
the rich
the stupid
L'elenco dei casi speciali:
How should I know?
Stop asking!
Don't ask!
Il modo per selezionarne uno numerato è:
Tipo di frasi:
Odd number => Type 1
Even number => Type 2
n % 7 = 0 => Type 3 (% is the modulus operator)
Nomi: l'ennesimo nome è definito usando il modulo (%).
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!
Endings: anche l'ennesimo finale è definito usando il modulo. Supponiamo che i finali (1, 2 e 3) siano elencati come (1 2 2 3). Poiché i numeri sono sempre dispari, utilizzare((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
Aggettivi: l'ennesimo aggettivo è definito usando il modulo. Poiché i numeri sono sempre pari, utilizzare:(n % 10)/2
n = 2: (2 % 10)/2 => Smart
n = 6: (6 % 10)/2 => The tall
...
Verbi: anche l'ennesimo verbo viene definito usando il modulo. Supponiamo che i verbi (1, 2 e 3) siano elencati come (1 2 2 3)Dato che i numeri sono sempre anche per i verbi, usa(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
Ora, il modo di crearne uno casuale dovrebbe essere abbastanza semplice, basta selezionare un casuale n.
Qualche esempio:
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!
Si applicano le regole standard per il golf. Verrà selezionato un vincitore una settimana dal giorno in cui è stata pubblicata la sfida.
/2funzionare. Questo dà valori frazionari. 13dovrebbe anche essere insisted(14/2 = 7% 4 = 3 = 2 ° di insistito).
the rich The programmerdovuti a quello specificato the?
Thee Tonelle tue liste dovrebbero probabilmente essere minuscole per corrispondere ai tuoi esempi ...
whyo sarebbeWHYaccettabile?