采访:前九
这是受编程面试问题启发的一系列挑战中的第一个。
您走进潜在的未来老板所在的办公室。他说:“进来坐下。” 您紧张地坐下,确保您的活泼而专业的服装没有皱纹。他向您询问有关您的学历,以前的工作经验等许多问题。您通常会诚实地回答它们,并在此处和此处添加一些修饰以使自己听起来更好。他俯身,开始再次讲话。
“您听说过打高尔夫球吗?” 为什么,是的,您喜欢打高尔夫球,并且经常在业余时间打高尔夫球。“太好了。面试的最后一部分是技术考试。您将被要求编写代码来解决一系列问题……”他递给您一张纸。您可以快速浏览一下。十分简单。现在,他为什么要问打高尔夫球的代码?
“将根据您对这些问题的解决方案的总大小来给您打分。如果您的得分比所有其他候选人都低,那么这是您的工作。” 哦。“像高尔夫一样,有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
<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table><script>var QUESTION_ID = 63014; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 45941; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "//api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "//api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(42), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>