¿Existe una regla que indique que después de 20 minutos debería comenzar a codificar sin importar qué?
No, pero si pasa 20 minutos analizando el problema antes de comenzar a trabajar, probablemente ya esté en problemas. Un empleador que le hace una pregunta como la que citó está principalmente interesado en cómo aborda un problema, pero si lo hace como un problema de codificación, también querrá ver algún código. Hábleles a través de su proceso de pensamiento ...
Bueno, el enfoque obvio aquí es la fuerza bruta. Si tuviera una manera de reconocer un triángulo rectángulo dados los tres vértices, podría recorrer todas las combinaciones de dos puntos y el origen buscando triángulos rectángulos. Eso no debería ser difícil: puedo escribir una función que use el Teorema de Pitágoras para identificar triángulos rectángulos. Para hacerlo más fácil, también escribiré una función que determina la distancia entre dos puntos usando la fórmula de la distancia ...
Escribir esas funciones debería tomar unos tres minutos. Ahora, a los pocos minutos de la pregunta, ya ha demostrado que recuerda la geometría básica y que realmente sabe cómo escribir código. También te da algo de qué hablar:
Entonces, obviamente podríamos poner la isRightTriangle(p1, p2, p3)
función en el medio de cuatro for
bucles e iterar sobre todas las opciones posibles para cada uno de los dos puntos variables. Veamos ... el problema pide la cantidad de triángulos rectángulos, incluido el origen en una cuadrícula de 50x50, por lo que usar el método de fuerza bruta nos hace verificar 50 posibilidades para cada coordenada de cada punto. Son 50 ^ 4 comprobaciones ... Estoy seguro de que podemos hacerlo mejor, pero el código es obvio, así que déjenme escribirlo ...
Entonces, ahora escribe una función que usa for
bucles anidados y la isRightTriangle()
función que acaba de escribir. Has resuelto el problema, pero también has dejado que el entrevistador vea a dónde vas. Si su objetivo era solo ver que usted puede escribir código, podrían decirle que pare. Lo más probable es que estén felices de hablar con alguien que sepa lo que están haciendo y querrán ver hasta dónde llegas. Entonces sigues ...
Mientras escribía, se me ocurrió que podemos aprovechar la simetría. Podemos reflejar cualquier triángulo rectángulo dado alrededor de la línea de 45 °, así que si elegimos verificar uno de los puntos solo en un lado de esa línea, podemos contar cualquier triángulo rectángulo que encontremos dos veces ... una vez para el triángulo y otra vez por su reflejo Eso reduce el número de cheques a la mitad. Además, mirándolo ahora, estamos sacando una raíz cuadrada para encontrar la distancia entre dos puntos, pero luego volvemos a cuadrar eso en isRightTriangle()
...
Y así. Una vez más, generalmente no quieren ver una solución perfecta, quieren ver cómo se llega a una solución. Su proceso de pensamiento no tiene que ser como el anterior: solo tener la confianza para pensar en voz alta contará mucho. No se preocupe si comete un error, solo diga "hmmm, creo que me he salido de los rieles aquí, déjeme retroceder un paso ..."