인터뷰 : The Front Nine


18

인터뷰 : The Front Nine

이것은 면접 질문 프로그래밍에서 영감을 얻은 일련의 과제 중 첫 번째입니다.

미래의 미래 상사가 앉아있는 사무실로 들어갑니다. "와서 앉으세요"라고 그는 말합니다. 긴장하면서도 전문적인 복장에 주름이 없는지 확인하십시오. 그는 당신의 교육, 이전의 직업 경험 등에 관한 많은 질문을합니다. 당신은 대부분 정직하게 대답하며 여기저기서 약간의 꾸밈음을 추가하여 더 나은 소리를냅니다. 그는 앞으로 몸을 기울이고 다시 말하기 시작합니다.

"코드 골프에 대해 들어 본 적이 있습니까?" 예, 골프 코드를 좋아하고 자유 시간에 자주하는 이유는 무엇입니까? "좋아요. 인터뷰의 마지막 부분은 기술 시험입니다. 일련의 문제를 해결하기 위해 코드를 작성해야 할 것입니다." 당신은 그것을 빨리 눈으로 본다. 쉬워요. 이제 왜 코드 골프에 대해 물어 봤습니까?

"이러한 문제에 대한 솔루션의 전체 크기를 기준으로 점수가 매겨집니다. 다른 모든 후보보다 낮은 점수를받을 수 있다면 직업이 본인의 것입니다." 오. "골프처럼, 18 개의 문제가 있으며, 9 개의 두 세트로 나뉩니다. 문제를 해결하기 위해 원하는 언어를 자유롭게 사용하십시오. 우리는 여러분이 들어 본 모든 언어에 대한 컴파일러와 인터프리터를 가지고 있습니다. ‘행운을 빕니다!’

과제들

작업 1 : 곱셈표

숫자 n를 입력으로 받으면 range의 양의 정수에 대한 곱셈표를 출력하십시오 [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 : 서수 RMS

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 : etaoin shrdlu

Null이 아닌 인쇄 가능한 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을 사용해야합니다.
  • 모든 과제를 해결해야합니다. 도전 과제 중 일부만 해결하는 답변은 경쟁이 아닌 것으로 간주됩니다.
  • 언어 내장 또는 표준 라이브러리를 사용할 수 있습니다.

리더 보드

이 게시물의 하단에있는 스택 스 니펫은 답변 a) 언어별로 가장 짧은 솔루션 목록으로, b) 전체 리더 보드로 답변에서 리더 보드를 생성합니다.

답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 헤드 라인으로 답변을 시작하십시오.

## 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에 대해 행렬 또는 이와 유사한 것을 반환 할 수 있습니까?
Alex A.

작업 8에는 두 가지 출력 형식이있는 것 같습니다. 첫 번째 형식 만 사용할 수 있습니까?
aditsu

@aditsu 두 가지 예제 출력 형식입니다. 당신은 이유 내에서 어떤 형식을 사용할 수 있습니다.
Mego

답변:


8

Pyth, 155 153 149 142 141 131 130 바이트

@FryAmTheEggman 덕분에 4 바이트

@Jakube 덕분에 1, 5 및 4 바이트

  1. 24 바이트 :J+1SQp\xtjmsm.[`*dk\ 4JJ

목록에서 구구단 구축 [1, 1, 2, 3, ...]이며, +1SQ다음, 인쇄 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]post-assign J%dto J을 입력 한 다음 /Jd원래 값이 인 값을 생성하십시오 J. 인쇄.

  1. 16 바이트 :C-M.p,JS{srMQhMJ

튜플을 범위로 바꾸고 하나의 목록으로 결합하여 중복 제거하고 정렬하십시오. 에 저장하십시오 J. 폼 J, hMJhMJ, 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

하스켈, 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의 멍청한 놈이기 때문에 골프를 도와 준 Martin에게 감사합니다.

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

생성자에 전달 된 간격은 자동으로 결합됩니다. 이길.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.