Cuộc phỏng vấn: Chín mặt trận


18

Cuộc phỏng vấn: Chín mặt trận

Đây là lần đầu tiên trong một loạt các thử thách lấy cảm hứng từ các câu hỏi phỏng vấn xin việc lập trình.

Bạn bước vào văn phòng nơi ông chủ tương lai tiềm năng của bạn ngồi. "Đi vào và ngồi xuống", ông nói. Bạn lo lắng ngồi xuống, đảm bảo trang phục gọn gàng nhưng chuyên nghiệp của bạn không có nếp nhăn. Ông hỏi bạn nhiều câu hỏi, về giáo dục, kinh nghiệm làm việc trước đây, v.v. Bạn trả lời họ một cách trung thực, thêm một chút chỉnh trang ở đây và ở đó để làm cho bản thân bạn nghe tốt hơn. Anh cúi người về phía trước và bắt đầu nói lại.

"Bạn đã bao giờ nghe nói về golf golf?" Tại sao, vâng, bạn thích chơi golf và thường xuyên làm điều đó trong thời gian rảnh. "Tuyệt vời. Phần cuối của cuộc phỏng vấn là một bài kiểm tra kỹ thuật. Bạn sẽ được giao nhiệm vụ viết mã để giải quyết một loạt vấn đề ..." Ông đưa cho bạn một tờ giấy. Bạn nhanh chóng lướt qua nó. Dễ như ăn bánh. Bây giờ tại sao anh ta hỏi về golf golf?

"Bạn sẽ được xếp loại dựa trên tổng kích thước của các giải pháp cho những vấn đề này. Nếu bạn có thể đạt điểm thấp hơn tất cả các ứng cử viên khác, công việc là của bạn." Oh. "Giống như golf, có 18 vấn đề, được chia thành hai bộ 9. Hãy sử dụng bất kỳ ngôn ngữ nào bạn muốn để giải quyết chúng; chúng tôi có trình biên dịch và phiên dịch cho mọi ngôn ngữ bạn đã nghe, và chắc chắn một số ngôn ngữ mà bạn có Chúc may mắn! "

Nhiệm vụ

Nhiệm vụ 1: Bảng nhân

Cho một số nlàm đầu vào, xuất ra bảng nhân cho các số nguyên dương trong phạm vi [1, n]. nsẽ nằm trong phạm vi [1, 12]. Tất cả các số phải được căn trái trong bảng. Sử dụng ký tự xcho góc trên bên trái.

Ví dụ:

n=4
x   1   2   3   4
1   1   2   3   4
2   2   4   6   8
3   3   6   9   12
4   4   8   12  16

n=10
x   1   2   3   4   5   6   7   8   9   10
1   1   2   3   4   5   6   7   8   9   10
2   2   4   6   8   10  12  14  16  18  20
3   3   6   9   12  15  18  21  24  27  30
4   4   8   12  16  20  24  28  32  36  40
5   5   10  15  20  25  30  35  40  45  50
6   6   12  18  24  30  36  42  48  54  60
7   7   14  21  28  35  42  49  56  63  70
8   8   16  24  32  40  48  56  64  72  80
9   9   18  27  36  45  54  63  72  81  90
10  10  20  30  40  50  60  70  80  90  100

Nhiệm vụ 2: RMS thông thường

Cho một chuỗi ký tự ASCII, sản lượng root-mean-square trung bình ordinals ASCII của họ. Chuỗi sẽ không bao giờ chứa byte NULL (thứ tự 0).

Ví dụ:

Input: The Interview: The Front Nine
Output: 95.08290393488019

Input: `1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./
Output: 91.38101204135423

Nhiệm vụ 3: Chuyển động của đạn

Với vận tốc và góc ban đầu với đường chân trời của một viên đạn được bắn từ mặt đất, xuất ra khoảng cách ngang mà nó sẽ di chuyển trước khi hạ cánh. Vận tốc ban đầu sẽ được tính bằng mét trên giây, góc sẽ được tính theo độ và khoảng cách sẽ được tính bằng mét. Giả sử trọng lực Trái đất ( g=9.81 m/s/s) và bỏ qua các hiệu ứng tương đối tính. Vì vấn đề này, bạn có thể cho rằng Trái đất phẳng (bạn sẽ không cần xem xét độ cong của Trái đất khi thực hiện các tính toán của mình). Các góc đã cho sẽ nằm trong phạm vi [0, 90]. Câu trả lời của bạn phải chính xác đến ít nhất hai chữ số thập phân (làm tròn được cho phép).

Ví dụ:

velocity=50, angle=45
Result: 254.84 (rounded)

velocity=10, angle=60
Result: 8.82798576742547

Nhiệm vụ 4: etaoin shrdlu

Đưa ra một chuỗi các ký tự ASCII có thể in không null (thứ tự trong phạm vi [32,127]), xuất chuỗi, với các ký tự được sắp xếp theo tần số của chúng theo thứ tự giảm dần. Trong trường hợp hòa, thứ tự theo thứ tự ASCII, tăng dần.

Ví dụ:

Input: "Hello, World!"
Output: "llloo !,HWder"

Input: "Programming Puzzles and Code Golf"
Output: "    oooPPaaddeeggllmmnnrrzzCGfisu"

Nhiệm vụ 5: Chỉ số Fibonacci

Cho một số, xác định xem đó có phải là số Fibonacci không và nếu có, hãy xuất chỉ mục của nó (bắt đầu từ 1) trong chuỗi. Nếu nó không phải là số Fibonacci, đầu ra 0. Trong trường hợp 1, nằm trong chuỗi hai lần, hãy xuất ra lần xuất hiện sớm nhất (chỉ số 1).

Ví dụ:

Input: 1
Output: 1

Input: 144
Output: 12

Input: 4
Output: 0

Nhiệm vụ 6: Đảo chữ

Cho ba chuỗi chữ cái tiếng Anh viết thường ( [a-z]), xuất ra một chuỗi sử dụng tất cả các chữ cái trong chuỗi thứ nhất, bắt đầu bằng chuỗi thứ hai và kết thúc bằng chuỗi thứ ba. Nếu một chuỗi như vậy không thể được xây dựng, xuất ra một chuỗi trống. Các chuỗi đầu vào sẽ luôn dài ít nhất một chữ cái. "Giữa" của chuỗi đầu ra (giữa chuỗi tiền tố và chuỗi hậu tố) có thể trống, nếu các chuỗi tiền tố và hậu tố cùng sử dụng tất cả các chữ cái trong chuỗi nguồn.

Ví dụ:

Input: geobits bi es
Possible output: bigtoes

Input: mariatidaltug digital trauma
Output: digitaltrauma

Input: mego go lf
Output: (empty string)

Nhiệm vụ 7: Điền vào chỗ trống

Đưa ra một danh sách các chuỗi và một ký tự điền, xuất kết quả của việc đệm tất cả các chuỗi theo độ dài của chuỗi dài nhất với ký tự điền, được sắp xếp theo thứ tự tăng dần theo độ dài ban đầu của chuỗi, giữ nguyên thứ tự ban đầu trong trường hợp của một cái cà vạt. Bạn sẽ có thể xử lý các danh sách có độ dài hữu hạn, chứa các chuỗi có độ dài hữu hạn, chỉ giới hạn bởi các ràng buộc bộ nhớ.

Ví dụ:

Input: ["hello","world","this","is","a","test"], 'x'
Output: ["axxxx","isxxx","thisx","testx","hello","world"]

Input: ["I'm","a","lumberjack","and","I'm","okay"], '!'
Output: ["a!!!!!!!!!","I'm!!!!!!!","and!!!!!!!","I'm!!!!!!!","okay!!!!!!","lumberjack"]

Nhiệm vụ 8: Thay đổi

Cho một số trong phạm vi [0.01,0.99], xuất số lượng của mỗi trong số 4 đồng tiền tiêu chuẩn của Hoa Kỳ nên được sử dụng để thể hiện giá trị này sao cho tổng số lượng tiền được giảm thiểu. Đầu vào sẽ luôn có chính xác 2 vị trí phía sau số thập phân.

Tham khảo giá trị tiền xu:

Penny: 0.01, Nickel: 0.05, Dime: 0.10, Quarter: 0.25

Ví dụ:

Input: 0.75
Output: [0,0,0,3]

Input: 0.23
Output: 3 pennies, 0 nickels, 2 dimes, 0 quarters

Nhiệm vụ 9: Sáp nhập dãy

Đưa ra một danh sách hữu hạn gồm 2 bộ dữ liệu chứa các số nguyên biểu thị các phạm vi, đưa ra kết quả của việc hợp nhất tất cả các phạm vi chồng chéo hoặc liền kề. Tất cả các phạm vi sẽ có ít nhất độ dài 1 và giá trị bắt đầu sẽ luôn nhỏ hơn giá trị kết thúc. Thứ tự của đầu ra không quan trọng.

Ví dụ:

Input: (2,3), (4,5), (6,9), (0,7)
Output: (0,9)

Input: (-3,4), (2,5), (-10,-4)
Output (-10,-4), (-3,5)

Input: (2,3), (5,6), (6,8)
Output: (5,8), (2,3)

Quy tắc

  • Đây là , vì vậy câu trả lời ngắn nhất (tính bằng byte) sẽ thắng.
  • Điểm của bạn sẽ là tổng số byte cho tất cả các giải pháp của bạn.
  • Sơ hở tiêu chuẩn bị cấm.
  • Đầu vào và đầu ra có thể được thực hiện theo bất kỳ cách nào được coi là tiêu chuẩn cho ngôn ngữ của bạn.
  • Bạn có thể viết các chương trình hoặc chức năng đầy đủ cho mỗi thử thách và có thể trao đổi giữa hai thử thách.
  • Bạn phải sử dụng cùng một ngôn ngữ cho tất cả các thử thách. Nếu sự khác biệt về phiên bản đủ quan trọng để chúng thường được coi là các mục riêng biệt trong các thử thách, bạn phải sử dụng cùng một phiên bản. Ví dụ: nếu bạn sử dụng Python, bạn phải sử dụng Python 2 hoặc Python 3 cho tất cả các thử thách.
  • Bạn phải giải quyết tất cả các thử thách. Câu trả lời chỉ giải quyết một số thách thức sẽ được coi là không cạnh tranh.
  • Bạn có thể sử dụng ngôn ngữ dựng sẵn hoặc thư viện tiêu chuẩn.

Bảng xếp hạng

Đoạn trích Stack ở cuối bài này tạo bảng xếp hạng từ các câu trả lời a) dưới dạng danh sách các giải pháp ngắn nhất cho mỗi ngôn ngữ và b) dưới dạng bảng xếp hạng tổng thể.

Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:

## Language Name, N bytes

nơi Nlà kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh bại chúng thông qua. Ví dụ:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Nếu bạn muốn bao gồm nhiều số trong tiêu đề của mình (ví dụ: vì điểm của bạn là tổng của hai tệp hoặc bạn muốn liệt kê riêng các hình phạt cờ của thông dịch viên), hãy đảm bảo rằng điểm thực tế là số cuối cùng trong tiêu đề:

## Perl, 43 + 2 (-p flag) = 45 bytes

Bạn cũng có thể đặt tên ngôn ngữ thành liên kết sau đó sẽ hiển thị trong đoạn trích:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


Chúng ta có được phép xuất số trong ký hiệu khoa học trong nhiệm vụ 1 không?
FUZxxl

1
Mặc dù tôi rất thích có một cuộc phỏng vấn như vậy nhưng tôi nghi ngờ nếu nó xếp hạng mọi người tốt. ồ, sao cũng được vẫn vui vẻ
tự hào ngày 5/11/2015

Chúng tôi có phải in kết quả hay chúng tôi có thể trả lại chúng từ các chức năng không? Nếu cái sau được cho phép, đối với nhiệm vụ 1 chúng ta có thể trả về một ma trận hoặc tương tự không?
Alex A.

Nhiệm vụ 8 dường như có 2 định dạng đầu ra, chúng ta có thể chỉ sử dụng định dạng đầu tiên không?
aditsu

1
Tôi đang bỏ phiếu để đóng câu hỏi này ngoài chủ đề vì đây là một thách thức đa phần với sự tương tác không đủ giữa các phần
pppery

Câu trả lời:


8

Pyth, 155 153 149 142 141 131 130 byte

4 byte nhờ @FryAmTheEggman

1, 5 và 4 byte nhờ @Jakube

  1. 24 byte :J+1SQp\xtjmsm.[`*dk\ 4JJ

Xây dựng các bảng cửu chương từ danh sách [1, 1, 2, 3, ...], đó là +1SQ, sau đó in một xvà loại bỏ ký tự đầu tiên của nó.

  1. 10 byte :@.Om^Cd2z2

Nói thẳng ra.

  1. 18 byte :c*.t.tyvw7Z*QQ9.81

Sử dụng công thức sin(2 theta) * v^2/a, trong đó thetalà góc, vlà vận tốc ban đầu và a9.81

  1. 7 byte :o_/zNSz

Nói thẳng ra.

  1. 15 byte :hxeM.u,eNsNQU2Q

Tạo các cặp Wikipedia, tìm chỉ mục của đầu vào trong đó, thêm một cặp.

  1. 14 byte :IqSzSJj.-zsQQJ

Sử dụng phép trừ bagwise để loại bỏ tiền tố và hậu tố khỏi từ, sau đó đặt phần còn lại của từ ở giữa. Nếu kết quả của việc này không phải là hoán vị của đầu vào, đừng in nó.

  1. 8 byte :C.tolNQz

Sắp xếp theo chiều dài. Tràn đầy chuyển vị. Chuyển tiếp một lần nữa.

  1. 18 byte :Jsttz/L~%Jd[25T5 1

Số lượng đồng xu đầu ra theo thứ tự [quarters, dimes, nickels, pennies].

Xóa 2 ký tự đầu vào và chuyển sang int để nhận xu. Lưu vào J. Đối với mỗi số dtrong danh sách [25, 10, 5, 1], sau assign J%dđể J, sau đó tạo ra giá trị /Jdvới giá trị ban đầu của J. In.

  1. 16 byte :C-M.p,JS{srMQhMJ

Biến các bộ dữ liệu thành các phạm vi, kết hợp thành một danh sách, lặp lại và sắp xếp. Lưu cái này vào J. Mẫu J, hMJhMJ, J, nơi hMJđược Jvới tất cả các yếu tố tăng 1. Thực hiện phép trừ trong cả hai trường hợp. Cái trước là đầu dưới của phạm vi, cái sau là đầu cao hơn. Chuyển chúng thành cặp và in.



6

CJam, 223 byte

Nhiệm vụ 1, 35 byte

ri_)_,0Xt2m*::*0'xt:s@s,2+f{Se]}/N*

Hãy thử trực tuyến.

Nhiệm vụ 2, 12 byte

q_:i:mh\,mq/

Hãy thử trực tuyến.

Nhiệm vụ 3, 27 byte

rd180/P*_mc\ms]rdf*~4.905/*

Hãy thử trực tuyến.

Nhiệm vụ 4, 12 byte

q$e`{0=~}$e~

Hãy thử trực tuyến.

Nhiệm vụ 5, 17 byte

XXri:R{_2$+}*]R#)

Hãy thử trực tuyến.

Nhiệm vụ 6, 25 byte

re!_rf#:!.*r:S;{N+SN+#)}=

Hãy thử trực tuyến.

Nhiệm vụ 7, 19 byte

{:C;{,}$_W=,f{Ce]}}

Hãy thử trực tuyến.

Nhiệm vụ 8, 33 byte

A4m*{:+}$r2>i:R;{[X5A25].*:+R=}=p

Hãy thử trực tuyến.

Nhiệm vụ 9, 43 byte

{{~1$-,f+}%:|$__,(%a\2ew{:-W<},+e_$2/2,f.+}

Hãy thử trực tuyến.


4

Haskell, 650 byte

Nhiệm vụ 1, 88 byte:

f n="x   "++unlines(map(take 4.(++"   ").show=<<)$[1..n]:map(\a->a:map(a*)[1..n])[1..n])

Nhiệm vụ 2, 76 byte:

g s=sqrt(sum(map(fromIntegral.(^2).fromEnum)s)/sum(s>>[1]))

Nhiệm vụ 3, 28 byte

v?a=v*v/9.81*sin(2*a*pi/180)

Nhiệm vụ 4, 60 byte:

import Data.List
i x=concat$sortOn((0-).length)$group$sort x

Nhiệm vụ 5, 64 byte

j=(%zip[0..]z);x%((i,h):t)|x<h=0|x==h=i|1<2=x%t;z=scanl(+)0(1:z)

Nhiệm vụ 6, 93 byte

import Data.List
k a b c|q b a&&q c a=b++((a\\b)\\c)++c|1<2="";q=(.sort).isSubsequenceOf.sort

Nhiệm vụ 7, 81 byte

import Data.List
s!f=map(take(maximum$map r s).(++cycle[f]))(sortOn r s);r=length

Nhiệm vụ 8, 73 byte

m x=floor(x*100)#[25,10,5,1];x#[]=[];x#(h:t)|(d,m)<-divMod x h=(m#t)++[d]

Nhiệm vụ 9, 87 byte (bản sao không biết xấu hổ về câu trả lời của @ MtnViewMark từ một thử thách tương tự)

n i=foldr(&)[]i;p@(a,b)&(q@(c,d):r)|b<c=p:q&r|a>d=q:p&r|1<3=(min a c,max b d)&r;p&_=[p]

2

Toán học 10.3, 465 byte

Tất cả đều là những chức năng ẩn danh. Ngoài ra, cảm ơn Martin vì đã giúp chơi golf, vì tôi là một người mới ở Mathematica.

Nhiệm vụ 1, 69 byte

Grid@Join[{Join[{"x"},r=Range@#]},Flatten/@({r,Outer[1##&,r,r]}\[Transpose])]&

\[Transpose] là ký hiệu "chuyển vị" 3 byte.

Nhiệm vụ 2, 13 byte

Mean[#^2]^.5&

hoặc là

√Mean[#^2]&

(Là 3 byte). Việc tích RootMeanSquarehợp không đủ ngắn ...

Nhiệm vụ 3, 18 byte

Sin[2#2°]#/9.81#&

Nhiệm vụ 4, 57 byte

""<>SortBy[c=Characters@#,{-c~Count~#&,ToCharacterCode}]&

Nhiệm vụ 5, 33 byte

Tr@Position[Fibonacci@Range@#,#]&

hoặc là

Tr[Fibonacci@Range@#~Position~#]&

hoặc là

Tr[Fibonacci~Array~#~Position~#]&

Nhiệm vụ 6, 178 byte (hiện có lỗi)

({s,a,b}=Characters@{##};q=If[#2~SubsetQ~#,List@@(Plus@@#-Plus@@#2),{}]&;i=If[#!={},##]&;x=i[q[s,a],{}];y=If[x!={},i[q[x,b],{},Null],Null];Echo[If[y!=Null,""<>Join@{a,y,b},""]])&

Ít chơi gôn hơn:

({s,a,b}=Characters@{##};
q=If[#2~SubsetQ~#,List@@(Plus@@#-Plus@@#2),{}]&;
i=If[#!={},##]&;
x=i[q[s,a],{}];
y=If[x!={},i[q[x,b],{},Null],Null];
Echo[If[y!=Null,""<>Join@{a,y,b},""]])&

Thao tác chuỗi là khủng khiếp ...

Nhiệm vụ 7, 39 byte

#~SortBy~StringLength~StringPadRight~#1

Nhiệm vụ 8, 46 byte

FrobeniusSolve[{1,5,10,25},100#]~MinimalBy~Tr&

hoặc là

{.1,.5,.10,.25}~FrobeniusSolve~#~MinimalBy~Tr&

Nhiệm vụ 9, 12 byte

Interval@##&

Các khoảng thời gian được chuyển đến hàm tạo sẽ tự động union-ed. Đánh bại nó

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.