采访:前九


18

采访:前九

这是受编程面试问题启发的一系列挑战中的第一个。

您走进潜在的未来老板所在的办公室。他说:“进来坐下。” 您紧张地坐下,确保您的活泼而专业的服装没有皱纹。他向您询问有关您的学历,以前的工作经验等许多问题。您通常会诚实地回答它们,并在此处和此处添加一些修饰以使自己听起来更好。他俯身,开始再次讲话。

“您听说过打高尔夫球吗?” 为什么,是的,您喜欢打高尔夫球,并且经常在业余时间打高尔夫球。“太好了。面试的最后一部分是技术考试。您将被要求编写代码来解决一系列问题……”他递给您一张纸。您可以快速浏览一下。十分简单。现在,他为什么要问打高尔夫球的代码?

“将根据您对这些问题的解决方案的总大小来给您打分。如果您的得分比所有其他候选人都低,那么这是您的工作。” 哦。“像高尔夫一样,有18个问题,分为两个问题,每组9个。请随意使用您喜欢的任何语言来解决它们;我们为您所听到的每种语言提供了编译器和解释器,当然您还可以使用其中的几种语言“ t。祝你好运!”

任务

任务1:乘法表

给定一个数字n作为输入,输出范围为的正整数的乘法表[1, n]n将在范围内[1, 12]。所有数字应在表格中左对齐。使用该字符x的左上角。

例子:

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

任务2:序数RMS

给定一串ASCII字符,输出其ASCII序数的均方根平均值。该字符串将永远不会包含NULL字节(标准0)。

例子:

Input: The Interview: The Front Nine
Output: 95.08290393488019

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

任务3:弹丸运动

给定从地面发射的弹丸的初始速度和与地平线的夹角,输出其着陆前将行进的水平距离。初始速度将以米/秒为单位,角度将以度为单位,距离应以米为单位。假设地球重力(g=9.81 m/s/s),而忽略相对论效应。出于这个问题的考虑,您可以假设地球是平坦的(在进行计算时,您无需考虑地球的曲率)。给定的角度将在范围内[0, 90]。您的答案至少应精确到两位小数(允许四舍五入)。

例子:

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

velocity=10, angle=60
Result: 8.82798576742547

任务4:etaoin shrdlu

给定一个非空的可打印ASCII字符字符串(范围为[32,127]),输出该字符串,其字符按其频率降序排列。如果是平局,则按ASCII顺序升序排列。

例子:

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

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

任务5:斐波那契指数

给定一个数字,确定它是否是斐波那契数,如果是,则按顺序输出其索引(从1开始)。如果不是斐波那契数,则输出0。如果是1(序列两次),则输出最早的出现(索引1)。

例子:

Input: 1
Output: 1

Input: 144
Output: 12

Input: 4
Output: 0

任务6:字谜

给定三个由小写英文字母([a-z])组成的字符串,输出一个字符串,该字符串使用第一个字符串中的所有字母,以第二个字符串开头,以第三个字符串结尾。如果无法构造这样的字符串,请输出一个空字符串。输入字符串将始终至少为一个字母长。如果前缀和后缀字符串一起使用源字符串中的所有字母,则输出字符串的“中间”(在前缀和后缀字符串之间)可能为空。

例子:

Input: geobits bi es
Possible output: bigtoes

Input: mariatidaltug digital trauma
Output: digitaltrauma

Input: mego go lf
Output: (empty string)

任务7:填补空白

给定一个字符串列表和一个填充字符,输出用填充字符将所有字符串填充到最长字符串的长度的结果,并按字符串的原始长度升序排列,在这种情况下保留原始顺序领带。您应该能够处理任何有限长度的列表,其中包含任何有限长度的字符串,并且仅受内存限制。

例子:

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"]

任务8:进行更改

给定范围内[0.01,0.99]的数字,输出应该用于表示该值的4个标准美国硬币中每个硬币的数目,以使硬币总数最小化。输入将始终在小数点后第2位。

硬币价值参考:

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

例子:

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

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

任务9:合并范围

给定一个有限的2元组列表,其中包含表示范围的整数,请输出合并所有重叠或相邻范围的结果。所有范围的长度至少应为1,起始值始终小于终止值。输出的顺序无关紧要。

例子:

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)

规则

  • 这是,因此最短的答案(以字节为单位)获胜。
  • 您的分数将是所有解决方案的字节数之和。
  • 禁止出现标准漏洞。
  • 输入和输出可以以您的语言视为标准的任何方式执行。
  • 您可以为每个挑战编写完整的程序或函数,并且可以在两个挑战之间互换。
  • 您必须对所有挑战使用相同的语言。如果版本差异足够大,以至于通常将它们视为挑战中的单独条目,则必须始终使用相同的版本。例如,如果您使用Python,则必须使用Python 2或Python 3应对所有挑战。
  • 您必须解决所有挑战。仅解决某些挑战的答案将被认为是非竞争性的。
  • 您可以使用内置语言或标准库。

排行榜

这篇文章底部的堆栈摘录从答案a)生成排行榜,答案是每种语言的最短解决方案列表,b)则是总体排行榜。

为确保您的答案显示出来,请使用以下Markdown模板以标题开头。

## Language Name, N bytes

N您提交的文件大小在哪里。如果您提高了分数,则可以通过打败旧分数保持标题。例如:

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

如果要在标头中包含多个数字(例如,因为您的分数是两个文件的总和,或者您想单独列出解释器标志罚分),请确保实际分数是标头中的最后一个数字:

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

您还可以将语言名称设置为链接,然后该链接将显示在代码段中:

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


我们是否可以在任务1中以科学计数法输出数字?
FUZxxl

1
尽管我很想接受这样的采访,但我怀疑它是否能很好地对人们进行排名。嗯,随便 仍然很有趣
骄傲的haskeller 2015年

我们必须打印结果还是可以从函数中返回结果?如果后者是允许的,那么对于任务1,我们可以返回矩阵或类似矩阵吗?
Alex A.

任务8似乎有2种输出格式,我们可以只使用第一种吗?
aditsu

1
@pppery,此问题早于您提供的链接,因此我认为它不适用于此问题。
夜间2

Answers:


8

Pyth,155个 153 149 142 141 131 130字节

@ FryAmTheEggman,4个字节

1、5和4个字节感谢@Jakube

  1. 24个字节J+1SQp\xtjmsm.[`*dk\ 4JJ

从列表构造乘法表[1, 1, 2, 3, ...],即+1SQ,然后打印a x并删除其第一个字符。

  1. 10个字节@.Om^Cd2z2

直截了当。

  1. 18个字节c*.t.tyvw7Z*QQ9.81

使用公式sin(2 theta) * v^2/a,其中theta是角度,v是初始速度,a9.81

  1. 7个字节o_/zNSz

直截了当。

  1. 15个字节hxeM.u,eNsNQU2Q

生成斐波那契对,在其中找到输入的索引,加一。

  1. 14个字节IqSzSJj.-zsQQJ

使用袋式减法从单词中删除前缀和后缀,然后将单词的其余部分放在中间。如果此结果不是输入的排列,请不要打印。

  1. 8个字节C.tolNQz

按长度排序。填充转置。再次移调。

  1. 18个字节Jsttz/L~%Jd[25T5 1

输出硬币计数是按顺序排列的[quarters, dimes, nickels, pennies]

删除输入的前2个字符并将其强制转换为int以获取美分。保存到J。对于d列表中的每个数字[25, 10, 5, 1],后分配J%dJ,然后生成/Jd原始值为的值J。打印。

  1. 16个字节C-M.p,JS{srMQhMJ

将元组变成范围,合并为一个列表,进行重复数据删除和排序。将此保存到J。形式J, hMJhMJ, J,其中hMJJ每元加1。在这两种情况下进行加减。前者是范围的下限,后者是范围的上限。将它们成对放置并打印。



6

CJam,223个字节

任务1,35个字节

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

在线尝试。

任务2,12个字节

q_:i:mh\,mq/

在线尝试。

任务3,27个字节

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

在线尝试。

任务4,12个字节

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

在线尝试。

任务5,17个字节

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

在线尝试。

任务6,25个字节

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

在线尝试。

任务7,19个字节

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

在线尝试。

任务8、33个字节

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

在线尝试。

任务9,43个字节

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

在线尝试。


4

Haskell,650个字节

任务1,88个字节:

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

任务2,76个字节:

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

任务3,28个字节

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

任务4,60个字节:

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

任务5,64个字节

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

任务6,93字节

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

任务7,81个字节

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

任务8,73个字节

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

任务9,87个字节(来自类似挑战的@MtnViewMark 答案的无耻副本)

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

Mathematica 10.3,465字节

所有这些都是匿名函数。另外,由于我是Mathematica的新手,因此感谢Martin帮助打高尔夫球。

任务1,69个字节

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

\[Transpose] 是3个字节的“转置”符号。

任务2,13个字节

Mean[#^2]^.5&

要么

√Mean[#^2]&

(√是3个字节)。在RootMeanSquare内置的是不太足够短...

任务3,18个字节

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

任务4,57字节

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

任务5,33个字节

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

要么

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

要么

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

任务6,178个字节(当前有一个错误)

({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},""]])&

少打高尔夫球:

({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},""]])&

字符串操作是可怕的...

任务7,39个字节

#~SortBy~StringLength~StringPadRight~#1

任务8,46个字节

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

要么

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

任务9,12个字节

Interval@##&

传递给构造函数的时间间隔会自动合并。打败那个。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.