2011-08-10 23 views
8

Tenemos una pregunta que hacemos en nuestra oficina durante las entrevistas que dice así. En aras de la coherencia, estoy restringiendo el contexto de esto a Python. Estoy seguro de que hay otras respuestas, pero en realidad solo estoy interesado en las respuestas de Python.Interesante entrevista "Hello World"

escribirme una función llamada say que cuando se llama así:

>>> say('Hello')('World') 

sólo muestra (no devuelve):

>>> say('Hello')('World') 
Hello World 
>>> 

Nos metimos en una discusión meta después de la entrevista de hoy donde declaró que siempre espero que el solicitante responda con lo siguiente.

def say(x): 
print "Hello World" 
return lambda a:None 

me di cuenta de que hay una posibilidad de reducir aún más esta reemplazando la función lambda con un sistema incorporado en el de algún tipo que devuelve None pero yo he cavado y parece que no puede encontrar uno que es más corto que lambda a:None

Así que la pregunta general aquí es ...

¿Puede usted pensar en una manera de hacer esto más corto, como en caracteres global inferior a (haciendo caso omiso de los saltos de línea). Cualquier declaración de importación se cuenta en el recuento de caracteres. (52 caracteres)

ACTUALIZACIÓN

(39 caracteres)

>>> def p(x): 
... print "Hello",x 
>>> say=lambda x:p 
>>> say("Hello")("World") 
Hello World 
>>> 

Python 3 Respuesta (48 caracteres)

>>> def say(x): 
... return lambda a:print("Hello World") 
>>> say("Hello")("World") 
Hello World 
>>> 
+1

¿quieres que 'say' use realmente sus argumentos? ¿o debería simplemente 'imprimir' Hello World''? –

+2

El punto entero de la publicación es que él piensa que sería divertido si no usara sus argumentos. – agf

+0

sí, estamos bien con algo que siempre imprime '" Hello World "' porque a menudo cuando formulamos la pregunta, nuestro lenguaje deja espacio para esta salida. –

Respuesta

13

Python 2.x responde

La respuesta obvia que en realidad no cuenta porque devuelve la cadena en lugar de imprimirlo:

>>> say = lambda x: lambda y: x + " " + y 
>>> say('Hello')('World') 
'Hello World' 

Ésta es de 45 caracteres de nueva línea de conteo:

def p(x): 
print "Hello World" 
say=lambda x:p 

Este método deja caer hasta 41 personajes pero se ve un poco raro ya que utiliza un argumento pero no el otro:

def p(x): 
print "Hello",x 
say=lambda x:p 

Python 3.x responde

36 caracteres:

>>> say=lambda x:lambda y:print(x+" "+y) 
>>> say('Hello')('World') 
Hello World 

38 caracteres:

>>> say=lambda x:print(x,end=' ') or print 
>>> say('Hello')('World') 
Hello World 
+0

Esto devuelve el argumento, necesita realmente imprimirlo. Voy a aclarar mi pregunta. –

+0

Sí, esa es básicamente la respuesta con la que debe encontrar cualquier programador competente. Quiero decir, ¿quién en su sano juicio probaría lo anterior en una entrevista seria para un trabajo que realmente, realmente quería? Probablemente también depende del tono de la entrevista y podría imaginarme lanzando el primero solo por diversión antes de contestar correctamente – Voo

+0

@ F.J - Lamento haber sido respetuoso. Las declaraciones de importación hacen que tu personaje cuente más tiempo. Cuento 76. Nuevamente volví a aclarar mi pregunta. –

6
def say(x): 
    print x, 
    return say 
+0

ver la edición que hice arriba. El tuyo aún devuelve una función. Perdón por ser tan específico. –

+1

+1 inteligente eso. – Voo

5

Al menos en Python 3, print es una función que devuelve None, por lo que se puede hacer esto:

def say(x): 
    return lambda a: print ('Hello World') 

o (guardando algunos caracteres más):

say=lambda x:lambda y:print("Hello World") 
+0

Oooh. Sneaky python 3 respuesta. ¡Me gusta! –