Wywiad: The Front Nine

18

Wywiad: The Front Nine

To pierwsze z serii wyzwań inspirowanych programowaniem pytań do rozmowy kwalifikacyjnej.

Wchodzisz do biura, w którym siedzi twój potencjalny przyszły szef. „Wejdź i usiądź”, mówi. Nerwowo siadasz, upewniając się, że Twój zgrabny, ale profesjonalny strój jest wolny od zmarszczek. Zadaje ci wiele pytań na temat twojego wykształcenia, wcześniejszych doświadczeń zawodowych i tak dalej. Odpowiadasz na nie w większości uczciwie, dodając tu i ówdzie odrobinę ozdoby, aby poprawić sobie brzmienie. Pochyla się i znów zaczyna mówić.

„Czy słyszałeś kiedyś o golfie kodowym?” Dlaczego tak, lubisz grać w golfa i robisz to często w wolnym czasie. „Świetnie. Ostatnia część wywiadu to badanie techniczne. Będziesz musiał napisać kod, aby rozwiązać szereg problemów ...” Wręcza ci kartkę papieru. Szybko na to spojrzysz. Bułka z masłem. Dlaczego zapytał o golfa kodowego?

„Zostaniesz oceniony na podstawie całkowitego rozmiaru rozwiązań tych problemów. Jeśli możesz uzyskać niższy wynik niż wszyscy inni kandydaci, praca jest twoja”. O. „Podobnie jak w golfa, istnieje 18 problemów, podzielonych na dwa zestawy po 9. Możesz swobodnie używać dowolnego języka, który chcesz rozwiązać; mamy kompilatory i tłumaczy dla każdego języka, o którym słyszałeś, a na pewno kilka, których nie znasz „t. Powodzenia!”

Zadania

Zadanie 1: Tabliczka mnożenia

Biorąc pod uwagę liczbę njako dane wejściowe, wypisz tabliczkę mnożenia dla dodatnich liczb całkowitych w zakresie [1, n]. nbędzie w zasięgu [1, 12]. Wszystkie liczby powinny być wyrównane do lewej w tabeli. Użyj znaku xw lewym górnym rogu.

Przykłady:

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

Zadanie 2: Zwykły RMS

Biorąc pod uwagę ciąg znaków ASCII, wyprowadzaj średnią kwadratową średnią ich rzędnych ASCII. Ciąg nigdy nie będzie zawierał bajtu NULL (numer porządkowy 0).

Przykłady:

Input: The Interview: The Front Nine
Output: 95.08290393488019

Input: `1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./
Output: 91.38101204135423

Zadanie 3: ruch pocisku

Biorąc pod uwagę początkową prędkość i kąt z horyzontem pocisku wystrzelonego z poziomu gruntu, należy podać odległość poziomą, którą pokona przed lądowaniem. Prędkość początkową podaje się w metrach na sekundę, kąt podaje się w stopniach, a odległość w metrach. Załóżmy grawitację Ziemi ( g=9.81 m/s/s) i zignoruj ​​efekty relatywistyczne. Ze względu na ten problem możesz założyć, że Ziemia jest płaska (nie będziesz musiał brać pod uwagę krzywizny Ziemi podczas wykonywania obliczeń). Podany kąt będzie w zakresie [0, 90]. Twoja odpowiedź powinna być dokładna do co najmniej dwóch miejsc po przecinku (dozwolone jest zaokrąglanie).

Przykłady:

velocity=50, angle=45
Result: 254.84 (rounded)

velocity=10, angle=60
Result: 8.82798576742547

Zadanie 4: etaoin shrdlu

Biorąc pod uwagę ciąg znaków o wartości innej niż zero w drukowalnych znakach ASCII (rzędne w zakresie [32,127]), wyprowadzaj ciąg, a jego znaki są sortowane według częstotliwości w porządku malejącym. W przypadku remisu porządek ASCII porządkowy, rosnąco.

Przykłady:

Input: "Hello, World!"
Output: "llloo !,HWder"

Input: "Programming Puzzles and Code Golf"
Output: "    oooPPaaddeeggllmmnnrrzzCGfisu"

Zadanie 5: Indeks Fibonacciego

Biorąc pod uwagę liczbę, określ, czy jest to liczba Fibonacciego, a jeśli tak, to wypisz jej indeks (zaczynając od 1) w sekwencji. Jeśli nie jest to liczba Fibonacciego, wyzeruj 0. W przypadku 1, który jest dwa razy w sekwencji, wypisz najwcześniejsze wystąpienie (indeks 1).

Przykłady:

Input: 1
Output: 1

Input: 144
Output: 12

Input: 4
Output: 0

Zadanie 6: Anagramy

Biorąc pod uwagę trzy ciągi małych angielskich liter ( [a-z]), wypisz ciąg, który używa wszystkich liter w pierwszym ciągu, zaczyna się od drugiego ciągu, a kończy trzecim. Jeśli taki ciąg nie może zostać skonstruowany, wypisz pusty ciąg. Ciągi wejściowe zawsze będą miały co najmniej jedną literę. „Środek” ciągu wyjściowego (między przedrostkiem i łańcuchem porostkowym) może być pusty, jeśli ciągi przedrostka i przyrostka używają razem wszystkich liter ciągu źródłowego.

Przykłady:

Input: geobits bi es
Possible output: bigtoes

Input: mariatidaltug digital trauma
Output: digitaltrauma

Input: mego go lf
Output: (empty string)

Zadanie 7: Wypełnianie pustych miejsc

Biorąc pod uwagę listę ciągów i znak wypełnienia, wyślij wynik wypełnienia wszystkich ciągów do długości najdłuższego ciągu ze znakiem wypełnienia, posortowanym w porządku rosnącym według oryginalnych długości ciągów, zachowując pierwotną kolejność w przypadku krawat. Powinieneś być w stanie obsługiwać listy o dowolnej skończonej długości, zawierające ciągi o dowolnej skończonej długości, ograniczone tylko ograniczeniami pamięci.

Przykłady:

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"]

Zadanie 8: Dokonywanie zmian

Biorąc pod uwagę liczbę w przedziale [0.01,0.99], wypisz liczbę każdej z 4 standardowych monet amerykańskich, których należy użyć do przedstawienia tej wartości, aby zminimalizować całkowitą liczbę monet. Dane wejściowe zawsze będą miały dokładnie 2 miejsca po przecinku.

Referencja wartości monety:

Penny: 0.01, Nickel: 0.05, Dime: 0.10, Quarter: 0.25

Przykłady:

Input: 0.75
Output: [0,0,0,3]

Input: 0.23
Output: 3 pennies, 0 nickels, 2 dimes, 0 quarters

Zadanie 9: Scalanie zakresów

Biorąc pod uwagę skończoną listę 2-krotek zawierających liczby całkowite reprezentujące zakresy, uzyskaj wynik połączenia wszystkich nakładających się lub sąsiadujących zakresów. Wszystkie zakresy będą miały co najmniej długość 1, a wartość początkowa zawsze będzie mniejsza niż wartość końcowa. Kolejność danych wyjściowych nie ma znaczenia.

Przykłady:

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)

Zasady

  • To jest , więc wygrywa najkrótsza odpowiedź (w bajtach).
  • Twój wynik będzie sumą liczby bajtów dla wszystkich twoich rozwiązań.
  • Standardowe luki są zabronione.
  • Dane wejściowe i wyjściowe można wykonywać w dowolny sposób uznany za standardowy dla Twojego języka.
  • Możesz napisać pełne programy lub funkcje dla każdego wyzwania i możesz wymieniać między nimi dwa wyzwania.
  • Do wszystkich wyzwań musisz używać tego samego języka. Jeśli różnice w wersjach są na tyle znaczące, że zwykle są uważane za osobne wpisy w wyzwaniach, musisz używać tej samej wersji przez cały czas. Na przykład, jeśli używasz języka Python, musisz używać języka Python 2 lub Python 3 dla wszystkich wyzwań.
  • Musisz rozwiązać wszystkie wyzwania. Odpowiedzi, które rozwiązują tylko niektóre wyzwania, zostaną uznane za niekonkurencyjne.
  • Możesz użyć wbudowanych języków lub standardowych bibliotek.

Tabela liderów

Fragment kodu na dole tego postu generuje tabelę wyników na podstawie odpowiedzi a) jako lista najkrótszych rozwiązań dla każdego języka oraz b) jako ogólna tabela wyników.

Aby upewnić się, że Twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:

## Language Name, N bytes

gdzie Njest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik to suma dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:

## Perl, 43 + 2 (-p flag) = 45 bytes

Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes

Mego
źródło
Czy wolno nam wyprowadzać liczby w notacji naukowej w zadaniu 1?
FUZxxl,
1
chociaż chciałbym mieć taki wywiad, wątpię, czy dobrze oceni on ludzi. co tam. nadal fajnie
dumny haskeller
Czy musimy wydrukować wyniki, czy możemy je zwrócić z funkcji? Jeśli to drugie jest dopuszczalne, dla zadania 1 możemy zwrócić macierz lub podobne?
Alex A.,
Zadanie 8 wydaje się mieć 2 formaty wyjściowe, czy możemy po prostu użyć pierwszego?
aditsu
1
@pppery, to pytanie jest starsze niż podany przez Ciebie link, więc nie sądzę, aby miało zastosowanie do tego pytania.
Noc 2

Odpowiedzi:

8

Pyth, 155 153 149 142 141 131 130 bajtów

4 bajty dzięki @FryAmTheEggman

1, 5 i 4 bajty dzięki @Jakube

  1. 24 bajty :J+1SQp\xtjmsm.[`*dk\ 4JJ

Zbuduj tabliczkę mnożenia z listy [1, 1, 2, 3, ...], a +1SQnastępnie wydrukuj a xi usuń jej pierwszy znak.

  1. 10 bajtów :@.Om^Cd2z2

Bezpośredni.

  1. 18 bajtów :c*.t.tyvw7Z*QQ9.81

Wykorzystuje wzór sin(2 theta) * v^2/a, gdzie thetajest kątem, vjest prędkością początkową i awynosi9.81

  1. 7 bajtów :o_/zNSz

Bezpośredni.

  1. 15 bajtów :hxeM.u,eNsNQU2Q

Wygeneruj pary Fibonacciego, znajdź w nich indeks danych wejściowych, dodaj jedną.

  1. 14 bajtów :IqSzSJj.-zsQQJ

Użyj odejmowania zgodnie z ruchem wskazówek zegara, aby usunąć przedrostek i przyrostek ze słowa, a następnie umieść resztę słowa na środku. Jeśli wynikiem tego nie jest permutacja wejścia, nie drukuj go.

  1. 8 bajtów :C.tolNQz

Sortuj według długości Wypełniona transpozycja. Transponuj ponownie.

  1. 18 bajtów :Jsttz/L~%Jd[25T5 1

Liczby monet wyjściowych są uporządkowane [quarters, dimes, nickels, pennies].

Usuń pierwsze 2 znaki wejściowe i przesyłaj do int, aby uzyskać centy. Zapisz w J. Dla każdego numeru dna liście [25, 10, 5, 1]przypisz J%ddo J, a następnie wygeneruj wartość /Jdz oryginalną wartością J. Wydrukować.

  1. 16 bajtów :C-M.p,JS{srMQhMJ

Zamień krotki w zakresy, połącz w jedną listę, deduplikuj i sortuj. Zapisz to do J. Formularz J, hMJi hMJ, J, gdzie hMJjest, Jz każdym elementem powiększonym o 1. Wykonaj odejmowanie w obu przypadkach. Pierwszy to dolne końce zakresów, drugi to wyższe końce. Przełóż je na pary i wydrukuj.

isaacg
źródło
6

CJam, 223 bajty

Zadanie 1, 35 bajtów

ri_)_,0Xt2m*::*0'xt:s@s,2+f{Se]}/N*

Wypróbuj online.

Zadanie 2, 12 bajtów

q_:i:mh\,mq/

Wypróbuj online.

Zadanie 3, 27 bajtów

rd180/P*_mc\ms]rdf*~4.905/*

Wypróbuj online.

Zadanie 4, 12 bajtów

q$e`{0=~}$e~

Wypróbuj online.

Zadanie 5, 17 bajtów

XXri:R{_2$+}*]R#)

Wypróbuj online.

Zadanie 6, 25 bajtów

re!_rf#:!.*r:S;{N+SN+#)}=

Wypróbuj online.

Zadanie 7, 19 bajtów

{:C;{,}$_W=,f{Ce]}}

Wypróbuj online.

Zadanie 8, 33 bajty

A4m*{:+}$r2>i:R;{[X5A25].*:+R=}=p

Wypróbuj online.

Zadanie 9, 43 bajty

{{~1$-,f+}%:|$__,(%a\2ew{:-W<},+e_$2/2,f.+}

Wypróbuj online.

Dennis
źródło
4

Haskell, 650 bajtów

Zadanie 1, 88 bajtów:

f n="x   "++unlines(map(take 4.(++"   ").show=<<)$[1..n]:map(\a->a:map(a*)[1..n])[1..n])

Zadanie 2, 76 bajtów:

g s=sqrt(sum(map(fromIntegral.(^2).fromEnum)s)/sum(s>>[1]))

Zadanie 3, 28 bajtów

v?a=v*v/9.81*sin(2*a*pi/180)

Zadanie 4, 60 bajtów:

import Data.List
i x=concat$sortOn((0-).length)$group$sort x

Zadanie 5, 64 bajty

j=(%zip[0..]z);x%((i,h):t)|x<h=0|x==h=i|1<2=x%t;z=scanl(+)0(1:z)

Zadanie 6, 93 bajty

import Data.List
k a b c|q b a&&q c a=b++((a\\b)\\c)++c|1<2="";q=(.sort).isSubsequenceOf.sort

Zadanie 7, 81 bajtów

import Data.List
s!f=map(take(maximum$map r s).(++cycle[f]))(sortOn r s);r=length

Zadanie 8, 73 bajty

m x=floor(x*100)#[25,10,5,1];x#[]=[];x#(h:t)|(d,m)<-divMod x h=(m#t)++[d]

Zadanie 9, 87 bajtów (kopia bezwstydny od @ MtnViewMark za odpowiedź z podobnym wyzwaniem)

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]
nimi
źródło
2

Mathematica 10.3, 465 bajtów

Wszystkie są funkcjami anonimowymi. Również dzięki Martinowi za pomoc w grze w golfa, ponieważ jestem matką w Mathematica.

Zadanie 1, 69 bajtów

Grid@Join[{Join[{"x"},r=Range@#]},Flatten/@({r,Outer[1##&,r,r]}\[Transpose])]&

\[Transpose] jest 3-bajtowym symbolem „transpozycji”.

Zadanie 2, 13 bajtów

Mean[#^2]^.5&

lub

√Mean[#^2]&

(√ to 3 bajty). RootMeanSquareWbudowaną nie jest dość krótki na tyle ...

Zadanie 3, 18 bajtów

Sin[2#2°]#/9.81#&

Zadanie 4, 57 bajtów

""<>SortBy[c=Characters@#,{-c~Count~#&,ToCharacterCode}]&

Zadanie 5, 33 bajty

Tr@Position[Fibonacci@Range@#,#]&

lub

Tr[Fibonacci@Range@#~Position~#]&

lub

Tr[Fibonacci~Array~#~Position~#]&

Zadanie 6, 178 bajtów (obecnie występuje błąd)

({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},""]])&

Mniej golfa:

({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},""]])&

Manipulowanie strunami jest okropne ...

Zadanie 7, 39 bajtów

#~SortBy~StringLength~StringPadRight~#1

Zadanie 8, 46 bajtów

FrobeniusSolve[{1,5,10,25},100#]~MinimalBy~Tr&

lub

{.1,.5,.10,.25}~FrobeniusSolve~#~MinimalBy~Tr&

Zadanie 9, 12 bajtów

Interval@##&

Odstępy przekazywane do konstruktora są automatycznie łączone. Pobij to.

mbomb007
źródło