Інтерв'ю: Передня дев'ятка


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: Об’єднання діапазонів

Враховуючи кінцевий список 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


Чи дозволяється нам виводити числа в наукових позначеннях в задачі 1?
FUZxxl

1
хоча я хотів би провести таке інтерв'ю, я сумніваюся, чи добре це він оцінює людей. е, що б там не було. все ще весело
гордий haskeller

Чи потрібно друкувати результати чи ми можемо повернути їх з функцій? Якщо останнє допустиме, для задачі 1 можна повернути матрицю чи подібне?
Олексій А.

Завдання 8, здається, має два вихідні формати, чи можемо ми просто використати перший?
aditsu

1
@pppery, це питання є старшим за вказане вами посилання, тому я не думаю, що воно стосується цього питання.
Ніч2

Відповіді:


8

Pyth, 155 153 149 142 141 131 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%dщоб J, потім генерувати значення /Jdз вихідним значенням J. Друк.

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

Перетворіть кортежі на діапазони, об’єднайте в один список, подвійний копіювання та сортування. Збережіть це в J. Форма J, hMJі hMJ, J, де hMJце Jз кожним елементом збільшується на 1. Виконайте віднімання в обох випадках. Перший - це нижні кінці діапазонів, останні - вищі кінці. Перекладіть їх на пари і роздрукуйте.



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

Інтервали, передані конструктору, автоматично з'єднуються. Удар, що.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.