Інтерв'ю: Передня дев'ятка
Це перша із серії викликів, натхненних програмуванням питань співбесіди.
Ви заходите в офіс, де сидить ваш потенційний майбутній начальник. "Заходьте і сідайте", - каже він. Ви нервово сідаєте, переконуючись, що ваш веселий, але професійний одяг не містить зморшок. Він задає вам багато питань, про вашу освіту, попередній досвід роботи тощо. Ви відповідаєте їм здебільшого чесно, додаючи трохи прикрас тут і там, щоб зробити себе краще. Він нахиляється вперед і знову починає говорити.
"Ви коли-небудь чули про кодовий гольф?" Чому так, ти любиш гольф-код, і робиш це часто у вільний час. "Чудово. Остання частина інтерв'ю - це технічний огляд. Вам буде доручено написати код, щоб вирішити ряд проблем ..." Він передає вам аркуш паперу. Ви швидко переглядаєте це. Простенька. Тепер чому він запитав про кодовий гольф?
"Ви будете оцінені на основі загального розміру ваших рішень для цих проблем. Якщо ви зможете набрати менше, ніж усі інші кандидати, робота за вами". Ой. "Як і у гольфу, є 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: Об’єднання діапазонів
Враховуючи кінцевий список 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.
- Ви повинні вирішити всі виклики. Відповіді, які вирішують лише деякі проблеми, будуть вважатися неконкурентними.
- Ви можете використовувати мовні вбудовані або стандартні бібліотеки.
Таблиця лідерів
Фрагмент стека внизу цієї публікації генерує таблицю лідерів з відповідей а) як список найкоротших варіантів для кожної мови та б) як загальну таблицю лідерів.
Щоб переконатися, що ваша відповідь відображається, будь ласка, почніть свою відповідь із заголовка, використовуючи наступний шаблон 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