No me han hecho esta pregunta, tampoco.
A primera vista, parece que uno de los "eliminar a los idiotas incompetentes obviamente a cabo tan pronto como sea posible avaid perder un tiempo valioso entrevista" tipo de preguntas.
Pero si se mira más de cerca, de hecho hay algunas cosas muy interesantes en ese país. Por lo tanto, si I eran el pidiendo esa pregunta, esto es lo que estaría buscando:
- esa pregunta es obviamente estúpida, porque ya es una función de la biblioteca estándar ECMAScript que hace Exactamente eso. Y me gustaría que el entrevistado diga que la pregunta es estúpida, porque de lo contrario son a) zombis sin sentido que siguen estúpidamente las órdenes braindead en lugar de ocuparse de su cerebro, o b) en realidad no saben que la función existe
- También es obviamente un problema de análisis, y es interesante ver si el entrevistado se acerca más como un problema de la piratería cuerda o un problema formal de análisis sintáctico y la cantidad de sobrecarga de uno u otro enfoque genera. En este caso particular, creo que el hacking de cuerdas es el enfoque correcto, pero aún conduce a una gran pregunta de seguimiento: "Ahora haz lo mismo con un analizador sintáctico de descenso recursivo". Cualquier programador debería poder esbozar el analizador de descenso recursivo para este problema en un par de minutos.
- Por último, pero no menos importante, esto es obviamente un pliegue sobre los caracteres de la cadena. Ahora, no necesariamente esperaría que un programador novato descubriera por sí mismo este redil, pero si insinúo que hay un pliegue ahí, deberían poder detectarlo ellos mismos, y volver a escribir su solución en forma de pliegue .
- Y, por supuesto, puede juzgar todas las cualidades generales que este tipo de preguntas le permiten: ¿se detiene el entrevistado y piensa en el problema o comienza a piratearlo? Comienza con requisitos, documentación, especificaciones, ejemplos, pruebas o códigos. ¿Pide aclaración de los casos de esquina (como lo que sucede con la cadena vacía, lo que sucede con una cadena que solo contiene un signo menos y nada más, qué pasa con el espacio en blanco, son cadenas garantizadas que son enteros bien formados, es cero negativo un entero bien formado). ¿Utiliza habitualmente el subconjunto estricto de ES5? ¿Él escribe un código legible?¿Escribe
jslint
código -Friendly
He aquí un ejemplo de resolver el problema con un pliegue (que en ECMAScript se llama reduce
):
"use strict";
function toInteger(s) {
return s.split('').reverse().reduce(function (n, c, i) {
if (c === '-') return -n;
return n + (c.charCodeAt(0) - 48) * Math.pow(10, i);
}, 0);
}
Y esto es un simple analizador sintáctico descendente recursivo que construye el valor sobre la marcha:
"use strict";
function toInteger(s) {
var input,
output = 0,
sign = 1,
lookahead = function() {
return input.charAt(0);
},
consume = function() {
var res = input.slice(0, 1);
input = input.slice(1, input.length);
return res;
},
isDigit = function (c) {
return /[0-9]/.test(c);
},
signParser = function() {
if (lookahead() === '-') {
sign *= -1;
consume();
}
},
digitParser = function() {
if (!isDigit(lookahead())) return false;
output *= 10;
output += (consume().charCodeAt(0) - 48);
return true;
},
numberParser = function() {
signParser();
while (digitParser());
};
input = s;
numberParser();
if (!input.length === 0) return false;
output *= sign;
return output;
}
Como siempre es el caso con este tipo de preguntas de la entrevista, nadie serio esperaría que el entrevistado que acaba de escribir los función s abajo en la pizarra. Especialmente el analizador sintáctico de descenso recursivo. Pero en mi humilde opinión, cualquiera debería ser capaz de esbozar cómo se vería la función. En particular, una de las bellezas de un analizador sintáctico descendente recursivo es que se trata de una transformación muy directa de una gramática libre de contexto en un conjunto de funciones de análisis sintáctico, y un entrevistado debería ser capaz de explicar aproximadamente cómo funciona esa transformación, y qué tipo de funciones de análisis corresponden a qué tipo de construcciones gramaticales.
uf, que es un montón de cosas que usted puede salir de una pregunta tan sencilla!
'tmpStr = tmpStr.substr (0, tmpStr.length-1);' parece un poco innecesario si también invierte-itera sobre 'pos'. –
Tampoco parece manejar números negativos. –
gracias por la crítica !! –