Интервью: Фронт Девять
Это первая из серии задач, вдохновленных программированием вопросов о собеседовании.
Вы входите в офис, где сидит ваш потенциальный будущий начальник. «Заходи и садись», - говорит он. Вы нервно садитесь, следя за тем, чтобы в вашем спортивном наряде не было морщин. Он задает вам много вопросов о вашем образовании, предыдущем опыте работы и так далее. Вы отвечаете на них в основном честно, добавляя немного приукрашивания тут и там, чтобы заставить себя звучать лучше. Он наклоняется вперед и начинает говорить снова.
"Вы когда-нибудь слышали о коде в гольф?" Почему, да, вы любите играть в гольф и часто занимаетесь в свободное время. «Отлично. Последняя часть интервью - технический экзамен. Вам будет поручено написать код для решения ряда проблем ...» Он протягивает вам лист бумаги. Ты быстро смотришь на это. Очень просто. Теперь, почему он спросил о коде в гольф?
«Вы будете оценены на основе общего размера ваших решений этих проблем. Если вы можете набрать баллы ниже, чем у всех других кандидатов, работа ваша». Ой. «Как и в гольфе, есть 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
Ответы:
Pyth,
155153149142141131130 байтов4 байта благодаря @FryAmTheEggman
1, 5 и 4 байта благодаря @Jakube
J+1SQp\xtjmsm.[`*dk\ 4JJ
Создайте таблицу умножения из списка
[1, 1, 2, 3, ...]
, а+1SQ
затем выведите ax
и удалите ее первый символ.@.Om^Cd2z2
Непосредственная.
c*.t.tyvw7Z*QQ9.81
Использует формулу
sin(2 theta) * v^2/a
, гдеtheta
это угол,v
начальная скорость иa
является9.81
o_/zNSz
Непосредственная.
hxeM.u,eNsNQU2Q
Сгенерируйте пары Фибоначчи, найдите в них индекс ввода, добавьте одну.
IqSzSJj.-zsQQJ
Используйте вычитание по сумке для удаления префикса и суффикса из слова, затем поместите оставшуюся часть слова в середину. Если результат этого не является перестановкой ввода, не печатайте его.
C.tolNQz
Сортировать по длине. Заполнено транспонировать. Переставить снова.
Jsttz/L~%Jd[25T5 1
Количество выходных монет в порядке
[quarters, dimes, nickels, pennies]
.Удалите первые 2 символа ввода и приведите к int, чтобы получить центы. Сохранить в
J
. Для каждого числаd
в списке выполните последующее[25, 10, 5, 1]
присвоение , а затем сгенерируйте значение с исходным значением . Распечатать.J%d
J
/Jd
J
C-M.p,JS{srMQhMJ
Превращайте кортежи в диапазоны, объединяйте их в один список, дублируйте и сортируйте. Сохраните это
J
. ФормаJ, hMJ
иhMJ, J
, гдеhMJ
этоJ
с каждым элементом увеличивается на 1. Выполните вычитание в обоих случаях. Первый - нижние концы диапазонов, второй - верхние концы. Переставьте их в пары и распечатайте.источник
CJam, 162
qi),0Xt_ff{*s4Se]}N*s0'xt
q_:i:mh\,mq/
(© Деннис)q~P*90/ms\_**9.81/
q$e`{0=~}$e~
(© Деннис)1_{_2$+}99*]qi#)
qS/(1+1$s{1$#Lt}/)@@**
q~{,}$_z,f{W$e]}p;
q2>i25A5]:md]W%p
q~${_0=2$1=>{+$3%}|}*]p
Денис согласился объединить усилия :)
источник
CJam, 223 байта
Задача 1, 35 байт
Попробуйте онлайн.
Задача 2, 12 байт
Попробуйте онлайн.
Задача 3, 27 байт
Попробуйте онлайн.
Задача 4, 12 байт
Попробуйте онлайн.
Задача 5, 17 байт
Попробуйте онлайн.
Задача 6, 25 байт
Попробуйте онлайн.
Задача 7, 19 байт
Попробуйте онлайн.
Задача 8, 33 байта
Попробуйте онлайн.
Задача 9, 43 байта
Попробуйте онлайн.
источник
Haskell, 650 байт
Задача 1, 88 байт:
Задача 2, 76 байт:
Задача 3, 28 байт
Задача 4, 60 байт:
Задача 5, 64 байта
Задача 6, 93 байта
Задача 7, 81 байт
Задача 8, 73 байта
Задание 9, 87 байт (бесстыдная копия ответа @ MtnViewMark от аналогичного вопроса )
источник
Mathematica 10,3, 465 байт
Все это анонимные функции. Также спасибо Мартину за помощь в игре в гольф, так как я новичок в Mathematica.
Задача 1, 69 байт
\[Transpose]
3-байтовый символ транспонирования.Задача 2, 13 байт
или
(√ 3 байта).
RootMeanSquare
Встроенный не совсем достаточно короткий ...Задача 3, 18 байт
Задача 4, 57 байт
Задача 5, 33 байта
или
или
Задача 6, 178 байт
(в настоящее время есть ошибка)Менее гольф:
Струнные манипуляции ужасны ...
Задача 7, 39 байт
Задача 8, 46 байт
или
Задача 9, 12 байт
Интервалы, передаваемые конструктору, автоматически объединяются. Удар это.
источник