2011-08-10 35 views
8

Chúng tôi có một câu hỏi mà chúng tôi yêu cầu tại văn phòng của chúng tôi trong các cuộc phỏng vấn diễn ra như thế này. Vì mục đích nhất quán, tôi hạn chế bối cảnh của việc này thành python. Tôi chắc chắn có những câu trả lời khác nhưng tôi thực sự chỉ quan tâm đến câu trả lời python.Phỏng vấn "Hello World" thú vị

Viết cho tôi một hàm có tên say rằng khi gọi như thế này:

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

Nó CHỈ Prints (không trở về):

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

Chúng tôi đã vào một cuộc thảo luận meta sau buổi phỏng vấn ngày nay, nơi tôi nói rằng tôi luôn hy vọng người nộp đơn sẽ trả lời với những điều sau đây.

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

tôi nhận ra rằng có một khả năng rút ngắn thời gian này hơn nữa bằng cách thay thế lambda chức năng với một chiếc của một số loại trả về None nhưng tôi đã đào và dường như không thể tìm thấy một trong đó là ngắn hơn lambda a:None

Vậy câu hỏi tổng thể ở đây là ...

bạn có thể nghĩ ra một cách để làm điều này ngắn hơn, như trong nhân vật tổng thể ít (bỏ qua các dấu ngắt dòng). Bất kỳ câu lệnh nhập nào đều được tính vào số ký tự của bạn. (52 nhân vật)

CẬP NHẬT

(39 nhân vật)

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

Python 3 trả lời (48 nhân vật)

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

bạn có muốn 'say' thực sự sử dụng đối số của nó không? hay nó luôn luôn chỉ là 'in' Hello World''? –

+2

Toàn bộ điểm của bài đăng là anh ấy nghĩ sẽ rất buồn cười nếu nó _didn't_ sử dụng các đối số của nó. – agf

+0

vâng, chúng tôi luôn đồng ý với một cái gì đó luôn luôn in "Hello World" bởi vì thường khi chúng tôi cụm từ câu hỏi, ngôn ngữ của chúng tôi rời khỏi phòng cho đầu ra này. –

Trả lời

13

Python 2.x trả lời

Câu trả lời rõ ràng là không thực sự đếm vì nó sẽ trả về chuỗi thay vì in nó:

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

Cái này là 45 ký tự đếm dòng mới:

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

Phương pháp này giảm xuống còn 41 nhân vật nhưng có vẻ loại lẻ vì nó sử dụng một đối số nhưng không phải là khác:

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

Python 3.x trả lời

36 ký tự:

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

38 ký tự:

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

Điều này trả về đối số, nó cần thực sự in nó. Tôi sẽ làm rõ câu hỏi của tôi. –

+0

Vâng, đó là câu trả lời cơ bản mà bất kỳ lập trình viên có thẩm quyền nào cũng nên đưa ra. Tôi có nghĩa là ai trong tâm trí của họ sẽ cố gắng ở trên trong một cuộc phỏng vấn nghiêm túc cho một công việc anh thực sự, thực sự muốn? Có lẽ cũng phụ thuộc vào giai điệu của cuộc phỏng vấn và tôi có thể tưởng tượng bản thân mình ném cái đầu tiên chỉ để giải trí trước khi trả lời chính xác – Voo

+0

@ F.J - Xin lỗi vì đã tiếp tục tuân thủ. Các báo cáo nhập khẩu làm cho nhân vật của bạn được tính lâu hơn. Tôi đếm 76. Tôi lại làm sáng tỏ câu hỏi của mình. –

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

xem chỉnh sửa tôi đã thực hiện ở trên. Bạn vẫn trả về một hàm. Xin lỗi vì quá cụ thể. –

+1

+1 thông minh đó. – Voo

5

Ít nhất bằng Python 3, print là một hàm trả về None, vì vậy bạn có thể làm điều này:

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

hoặc (lưu thêm vài ký tự):

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

Oooh. Sneaky python 3 câu trả lời. Tôi thích nó! –