Интервью: Фронт Девять
Это первая из серии задач, вдохновленных программированием вопросов о собеседовании.
Вы входите в офис, где сидит ваш потенциальный будущий начальник. «Заходи и садись», - говорит он. Вы нервно садитесь, следя за тем, чтобы в вашем спортивном наряде не было морщин. Он задает вам много вопросов о вашем образовании, предыдущем опыте работы и так далее. Вы отвечаете на них в основном честно, добавляя немного приукрашивания тут и там, чтобы заставить себя звучать лучше. Он наклоняется вперед и начинает говорить снова.
"Вы когда-нибудь слышали о коде в гольф?" Почему, да, вы любите играть в гольф и часто занимаетесь в свободное время. «Отлично. Последняя часть интервью - технический экзамен. Вам будет поручено написать код для решения ряда проблем ...» Он протягивает вам лист бумаги. Ты быстро смотришь на это. Очень просто. Теперь, почему он спросил о коде в гольф?
«Вы будете оценены на основе общего размера ваших решений этих проблем. Если вы можете набрать баллы ниже, чем у всех других кандидатов, работа ваша». Ой. «Как и в гольфе, есть 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