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ę n
jako dane wejściowe, wypisz tabliczkę mnożenia dla dodatnich liczb całkowitych w zakresie [1, n]
. n
będzie w zasięgu [1, 12]
. Wszystkie liczby powinny być wyrównane do lewej w tabeli. Użyj znaku x
w 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 golf golfowy , 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 N
jest 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
Odpowiedzi:
Pyth,
155153149142141131130 bajtów4 bajty dzięki @FryAmTheEggman
1, 5 i 4 bajty dzięki @Jakube
J+1SQp\xtjmsm.[`*dk\ 4JJ
Zbuduj tabliczkę mnożenia z listy
[1, 1, 2, 3, ...]
, a+1SQ
następnie wydrukuj ax
i usuń jej pierwszy znak.@.Om^Cd2z2
Bezpośredni.
c*.t.tyvw7Z*QQ9.81
Wykorzystuje wzór
sin(2 theta) * v^2/a
, gdzietheta
jest kątem,v
jest prędkością początkową ia
wynosi9.81
o_/zNSz
Bezpośredni.
hxeM.u,eNsNQU2Q
Wygeneruj pary Fibonacciego, znajdź w nich indeks danych wejściowych, dodaj jedną.
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.
C.tolNQz
Sortuj według długości Wypełniona transpozycja. Transponuj ponownie.
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 numerud
na liście[25, 10, 5, 1]
przypiszJ%d
doJ
, a następnie wygeneruj wartość/Jd
z oryginalną wartościąJ
. Wydrukować.C-M.p,JS{srMQhMJ
Zamień krotki w zakresy, połącz w jedną listę, deduplikuj i sortuj. Zapisz to do
J
. FormularzJ, hMJ
ihMJ, J
, gdziehMJ
jest,J
z 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.źródło
CJam, 162
qi),0Xt_ff{*s4Se]}N*s0'xt
q_:i:mh\,mq/
(© Dennis)q~P*90/ms\_**9.81/
q$e`{0=~}$e~
(© Dennis)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
Dennis zgodził się połączyć siły :)
źródło
CJam, 223 bajty
Zadanie 1, 35 bajtów
Wypróbuj online.
Zadanie 2, 12 bajtów
Wypróbuj online.
Zadanie 3, 27 bajtów
Wypróbuj online.
Zadanie 4, 12 bajtów
Wypróbuj online.
Zadanie 5, 17 bajtów
Wypróbuj online.
Zadanie 6, 25 bajtów
Wypróbuj online.
Zadanie 7, 19 bajtów
Wypróbuj online.
Zadanie 8, 33 bajty
Wypróbuj online.
Zadanie 9, 43 bajty
Wypróbuj online.
źródło
Haskell, 650 bajtów
Zadanie 1, 88 bajtów:
Zadanie 2, 76 bajtów:
Zadanie 3, 28 bajtów
Zadanie 4, 60 bajtów:
Zadanie 5, 64 bajty
Zadanie 6, 93 bajty
Zadanie 7, 81 bajtów
Zadanie 8, 73 bajty
Zadanie 9, 87 bajtów (kopia bezwstydny od @ MtnViewMark za odpowiedź z podobnym wyzwaniem)
źródło
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
\[Transpose]
jest 3-bajtowym symbolem „transpozycji”.Zadanie 2, 13 bajtów
lub
(√ to 3 bajty).
RootMeanSquare
Wbudowaną nie jest dość krótki na tyle ...Zadanie 3, 18 bajtów
Zadanie 4, 57 bajtów
Zadanie 5, 33 bajty
lub
lub
Zadanie 6, 178 bajtów
(obecnie występuje błąd)Mniej golfa:
Manipulowanie strunami jest okropne ...
Zadanie 7, 39 bajtów
Zadanie 8, 46 bajtów
lub
Zadanie 9, 12 bajtów
Odstępy przekazywane do konstruktora są automatycznie łączone. Pobij to.
źródło