C'è una regola come dopo 20 minuti che dovresti iniziare a scrivere codice, non importa cosa?
No, ma se passi 20 minuti ad analizzare il problema prima di iniziare l'attività, probabilmente sei già nei guai. Un datore di lavoro che ti pone una domanda come quella che hai citato è per lo più interessato al modo in cui affronti un problema, ma se lo pone come un problema di codifica, vorrà vedere anche del codice. Parla attraverso il tuo processo di pensiero ...
Bene, l'approccio ovvio qui è la forza bruta. Se avessi un modo per riconoscere un triangolo rettangolo dati i tre vertici, potrei scorrere tutte le combinazioni di due punti e l'origine cercando triangoli retti. Non dovrebbe essere difficile: posso scrivere una funzione che utilizza il Teorema di Pitagora per identificare i triangoli rettangoli. Per facilitare ciò, scriverò anche una funzione che determina la distanza tra due punti usando la formula della distanza ...
La scrittura di tali funzioni dovrebbe richiedere circa tre minuti. Ora, a pochi minuti dalla domanda, hai già dimostrato che ricordi la geometria di base e che sai davvero come scrivere il codice. Ti dà anche qualcosa di cui parlare:
Quindi, potremmo ovviamente mettere la isRightTriangle(p1, p2, p3)
funzione nel mezzo di quattro for
loop e iterare su tutte le possibili scelte per ciascuno dei due punti variabili. Vediamo ... il problema richiede il numero di triangoli retti, inclusa l'origine su una griglia 50x50, quindi l'utilizzo del metodo della forza bruta ci consente di verificare 50 possibilità per ciascuna coordinata di ciascun punto. Sono 50 ^ 4 controlli ... Sono sicuro che possiamo fare di meglio, ma il codice è ovvio, quindi lasciami scrivere ...
Quindi ora scrivi una funzione che utilizza for
loop nidificati e la isRightTriangle()
funzione che hai appena scritto. Hai risolto il problema, ma hai anche permesso all'intervistatore di vedere dove stai andando. Se il loro obiettivo era solo quello di poter scrivere codice, potrebbero dirti di smettere. Più probabilmente, sono felici di parlare con qualcuno che sa cosa stanno facendo e vorranno vedere fino a che punto lo porti. Quindi vai avanti ...
Mi è venuto in mente mentre scrivevo che possiamo sfruttare la simmetria. Possiamo riflettere qualsiasi dato triangolo rettangolo attorno alla linea di 45 °, quindi se scegliamo di controllare uno dei punti solo su un lato di quella linea, possiamo semplicemente contare tutti i triangoli retti che troviamo due volte ... una volta per il triangolo e una volta per il suo riflesso. Ciò dimezza il numero di controlli. Inoltre, osservandolo ora, stiamo prendendo una radice quadrata per trovare la distanza tra due punti, ma poi la quadriamo di nuovo in isRightTriangle()
...
E così via. Ancora una volta, di solito non vogliono vedere una soluzione perfetta, vogliono vedere come si arriva a una soluzione. Il tuo processo di pensiero non deve essere niente di simile a quello sopra - solo avere la sicurezza di pensare ad alta voce conta molto. Non sudare se commetti un errore - dì semplicemente "hmmm, penso di essere uscito dai binari qui - fammi tornare indietro di un passo ..."