2012-06-24 16 views
6

Recientemente, me preguntaron en una pregunta de entrevista para invertir una cadena en perl. Escribí el código y querían que les diera algunos ejemplos de cadenas para probarlo. Les di ejemplos como una cadena con pocos caracteres, muchos caracteres, caracteres inválidos, etc. Pero también me preguntaron cuál es la cadena más larga con la que probaré. No estaba seguro de qué decir. De ahí esta pregunta. ¿Cuál es la cadena más larga que puedo probar en un código perl? De qué depende ? Memoria en la máquina? ¿Existe alguna limitación desde el punto de vista de Perl?¿Cuál es la cuerda más larga que puedo tener?

+0

¿Conseguiste el trabajo? – simbabque

Respuesta

6

Estaba buscando para ver si puedo encontrar documentación oficial sobre la cadena más larga. Encontré uno en http://perltutorial.org hablando de cadenas:

Perl define la cadena como una secuencia de caracteres. La cadena más corta no contiene caracteres ni cadenas nulas. La cadena más larga puede contener caracteres ilimitados, que solo se limita a la memoria disponible de su computadora.

No sé si esto es oficial suficiente para ti. Sería bueno ver algo en las preguntas frecuentes o Perldoc.

Por cierto, para revertir oficialmente una cadena en Perl:

my $rev_string = reverse $string; 

Esto es en el Perl FAQ # 4, que tiene un montón de manejar cosas en él cadena. El revertir una pregunta de cadena es una vieja pregunta de entrevista truco para ver si alguien sabe sus cosas arcanos de Perl. Seguro que casi todo el mundo sabe reverse invertirá una matriz, pero ¿saben también que invertirá una cadena? Noobies resolverá algún tipo de algoritmo complejo y el entrevistador tendrá una razón para sentirse satisfecho y no contratar a esa persona.

Personalmente, si estaba entrevistando a alguien, hice esta pregunta, y alguien surgió en el lugar con un algoritmo elegante y me mostró cómo funcionaría con los caracteres cortos, largos y no válidos, los contrataría. Siempre puede aprender nuevos trucos de Perl estúpidos, pero pensar rápido en sus pies es algo que es difícil de encontrar.

Aprendí el truco de cuerda inversa hace mucho tiempo cuando alguien me hizo la misma pregunta en una entrevista. Lo busqué y lo encontré en las preguntas frecuentes y me di cuenta de que lo hice mal. He estado usando Perl durante casi 20 años y no puedo pensar en un momento en el que haya tenido que invertir una cadena Perl.

+5

perltutorial.org es [no recomendado] (http://perl-tutorial.org/rejected/), toda la información es cuestionable [por asociación] (http://enwp.org/Association_fallacy). Las respuestas de SO deben citar recursos autorizados de alta calidad. – daxim

+0

Los procesos a menudo solo pueden acceder a una fracción de la memoria de la computadora, por lo que puede estar limitado a mucho menos que la memoria de la computadora. – ikegami

+0

@daxim - Recuerdo haber leído algo similar en el Camel Book, pero no pude encontrarlo. Encontré una declaración similar a la anterior en Perlmonk, pero tampoco hay referencia allí. Tal vez la respuesta correcta debería haber sido _Way más de lo que probablemente nunca necesitarás, así que no te preocupes por eso. –

5

Fundamentalmente, depende de la cantidad de memoria a la que puede acceder su programa (es decir, Perl). Si tienes una máquina de 32 bits, está en algún lugar por debajo de 4 GiB. Si tiene una máquina de 64 bits, entonces el límite es probablemente mayor y depende de la memoria virtual disponible. No hay una limitación fija.

+0

bien. Entonces, ¿cómo se puede crear una cadena larga o, en otras palabras, crear la cadena más larga posible para realizar la prueba? De lo que no estoy seguro es de si existe la necesidad de tener una cadena larga como uno de los casos de prueba. – user238021

+2

@ user238021: esto * * bloqueará tu computadora. Te avisaron: perl -e 'print escalar reverse a ... "z" x999' – jm666

Cuestiones relacionadas