Интервью: Фронт Девять

18

Интервью: Фронт Девять

Это первая из серии задач, вдохновленных программированием вопросов о собеседовании.

Вы входите в офис, где сидит ваш потенциальный будущий начальник. «Заходи и садись», - говорит он. Вы нервно садитесь, следя за тем, чтобы в вашем спортивном наряде не было морщин. Он задает вам много вопросов о вашем образовании, предыдущем опыте работы и так далее. Вы отвечаете на них в основном честно, добавляя немного приукрашивания тут и там, чтобы заставить себя звучать лучше. Он наклоняется вперед и начинает говорить снова.

"Вы когда-нибудь слышали о коде в гольф?" Почему, да, вы любите играть в гольф и часто занимаетесь в свободное время. «Отлично. Последняя часть интервью - технический экзамен. Вам будет поручено написать код для решения ряда проблем ...» Он протягивает вам лист бумаги. Ты быстро смотришь на это. Очень просто. Теперь, почему он спросил о коде в гольф?

«Вы будете оценены на основе общего размера ваших решений этих проблем. Если вы можете набрать баллы ниже, чем у всех других кандидатов, работа ваша». Ой. «Как и в гольфе, есть 18 проблем, разбитых на два набора по 9. Не стесняйтесь использовать любой язык, который вам нравится, для их решения; у нас есть компиляторы и переводчики для каждого языка, о котором вы слышали, и, конечно, некоторые, которые у вас есть. т. Удачи!

Задачи

Задача 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: Порядковый СКО

Учитывая строку символов 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: Этаоин Шрдлу

Учитывая строку ненулевых печатаемых символов 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: Объединение диапазонов

Учитывая конечный список из двух кортежей, содержащих целые числа, представляющие диапазоны, выведите результат объединения всех перекрывающихся или смежных диапазонов. Все диапазоны будут иметь длину не менее 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 для всех задач.
  • Вы должны решить все проблемы. Ответы, которые решают только некоторые задачи, будут считаться неконкурентными.
  • Вы можете использовать языковые встроенные или стандартные библиотеки.

Leaderboard

Фрагмент стека в нижней части этого поста создает таблицу лидеров из ответов а) в виде списка кратчайшего решения для каждого языка и б) в качестве общей таблицы лидеров.

Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:

## 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

Mego
источник
Разрешено ли выводить числа в научных обозначениях в задании 1?
FUZxxl
1
хотя я хотел бы получить такое интервью, я сомневаюсь, что оно оценивает людей хорошо. да что угодно. все еще весело
гордый haskeller
Нужно ли печатать результаты или мы можем вернуть их из функций? Если последнее допустимо, для задачи 1 мы можем вернуть матрицу или аналог?
Алекс А.
Задача 8, кажется, имеет 2 выходных формата, мы можем просто использовать первый?
aditsu
1
@pppery, этот вопрос старше указанной вами ссылки, поэтому я не думаю, что он относится к этому вопросу.
ночь2

Ответы:

8

Pyth, 155 153 149 142 141 131 130 байтов

4 байта благодаря @FryAmTheEggman

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начальная скорость и aявляется9.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/JdJ

  1. 16 байтов :C-M.p,JS{srMQhMJ

Превращайте кортежи в диапазоны, объединяйте их в один список, дублируйте и сортируйте. Сохраните это J. Форма J, hMJи hMJ, J, где hMJэто Jс каждым элементом увеличивается на 1. Выполните вычитание в обоих случаях. Первый - нижние концы диапазонов, второй - верхние концы. Переставьте их в пары и распечатайте.

isaacg
источник
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.

Задача 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@##&

Интервалы, передаваемые конструктору, автоматически объединяются. Удар это.

mbomb007
источник