インタビュー:フロントナイン


18

インタビュー:フロントナイン

これは、就職の面接の質問をプログラミングすることに触発された一連の課題の最初のものです。

潜在的な将来の上司が座っているオフィスに入ります。「さあ、座って」と彼は言う。あなたは緊張して座って、きびきびとしたプロの服装にしわがないようにします。彼はあなたの教育、以前の仕事の経験などについて多くの質問をします。あなたはほとんど正直にそれらに答え、あなた自身をより良くするためにあちこちに少し装飾を追加します。彼は前かがみになり、再び話し始めます。

「コードゴルフのことを聞いたことがありますか?」はい、あなたはゴルフのコードが好きで、あなたの自由な時間に頻繁にそれをします。「すごい。インタビューの最後の部分は技術的な試験です。一連の問題を解決するためのコードを書く必要があります...」彼はあなたに一枚の紙を渡します。あなたはすぐにそれを見ます。簡単です。なぜ彼はコードゴルフについて尋ねたのですか?

「これらの問題に対する解決策の合計サイズに基づいて採点されます。他のすべての候補者よりも低い得点が得られるなら、仕事はあなたのものです。」ああ。「ゴルフのように、18の問題があり、9の2つのセットに分かれています。お好きな言語を自由に使用して解決してください。聞いたことのあるすべての言語、 「がんばって!」

タスク

タスク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:順序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]。回答は、少なくとも小数点以下2桁まで正確である必要があります(端数処理は許可されています)。

例:

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の場合は、シーケンスが2回あり、最も早いオカレンス(インデックス1)を出力します。

例:

Input: 1
Output: 1

Input: 144
Output: 12

Input: 4
Output: 0

タスク6:アナグラム

小文字の英語の文字列([a-z])が3つある場合、最初の文字列のすべての文字を使用し、2番目の文字列で始まり、3番目の文字列で終わる文字列を出力します。そのような文字列を構築できない場合は、空の文字列を出力します。入力文字列は常に少なくとも1文字の長さになります。プレフィックス文字列とポストフィックス文字列がソース文字列のすべての文字を一緒に使用する場合、出力文字列の「中間」(プレフィックス文字列とポストフィックス文字列の間)が空になる場合があります。

例:

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)

ルール

  • これはであるため、最短回答(バイト単位)が優先されます。
  • スコアは、すべてのソリューションのバイトカウントの合計になります。
  • 標準的な抜け穴は禁止されています。
  • 入力および出力は、言語の標準と見なされる方法で実行できます。
  • チャレンジごとに完全なプログラムまたは機能を記述し、チャレンジ間で2つを交換することができます。
  • すべての課題に同じ言語を使用する必要があります。バージョンの違いが通常、チャレンジの個別のエントリと見なされるほど重要な場合は、全体を通して同じバージョンを使用する必要があります。たとえば、Pythonを使用する場合、すべての課題に対してPython 2またはPython 3を使用する必要があります。
  • すべての課題を解決する必要があります。一部の課題のみを解決する回答は、非競争的と見なされます。
  • 言語ビルトインまたは標準ライブラリを使用できます。

リーダーボード

この投稿の下部にあるスタックスニペットは、a)言語ごとの最短ソリューションのリストとして、b)全体的なリーダーボードとして、回答からリーダーボードを生成します。

回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。

## Language Name, N bytes

N提出物のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば:

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

ヘッダーに複数の数字を含める場合(たとえば、スコアが2つのファイルの合計であるか、インタープリターフラグペナルティーを個別にリストする場合)、実際のスコアがヘッダーの最後の数字であることを確認します。

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

言語名をリンクにして、スニペットに表示することもできます。

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


タスク1で科学表記法で数値を出力できますか?
FUZxxl

1
私はそのようなインタビューをしたいと思いますが、それが人々をうまくランク付けするかどうか疑っています。ええ、何でも。まだ楽しい
誇りに思ってhaskeller

結果を印刷する必要がありますか、それとも関数から結果を返すことができますか?後者が許可されている場合、タスク1でマトリックスまたは同様のものを返すことができますか?
アレックスA.

タスク8には2つの出力形式があるようですが、最初の形式だけを使用できますか?
-aditsu

1
それはだから、私は、オフトピックとして、この質問を閉じるために投票してる部分との間の不十分な相互作用を持つマルチパートの挑戦
pppery

回答:


8

Pyth、155の 153 149 142 141 131 130バイト

@FryAmTheEggmanのおかげで4バイト

@ジャクベのおかげで1、5、4バイト

  1. 24バイトJ+1SQp\xtjmsm.[`*dk\ 4JJ

listから乗算テーブルを作成します[1, 1, 2, 3, ...]。これは+1SQxを出力し、最初の文字を削除します。

  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つを追加します。

  1. 14バイトIqSzSJj.-zsQQJ

bagwise減算を使用して、単語から接頭辞と接尾辞を削除し、単語の残りの部分を中央に配置します。この結果が入力の順列ではない場合、出力しないでください。

  1. 8バイトC.tolNQz

長さで並べ替えます。塗り替え もう一度転置します。

  1. 18バイトJsttz/L~%Jd[25T5 1

出力されたコイン数は順番になり[quarters, dimes, nickels, pennies]ます。

入力の最初の2文字を削除し、intにキャストしてセントを取得します。に保存しJます。各番号のdリストで[25, 10, 5, 1]、ポスト割り当てをJ%dJ、その値生成/Jdの元の値としますJ。印刷する。

  1. 16バイトC-M.p,JS{srMQhMJ

タプルを範囲に変換し、1つのリストに結合して、重複排除と並べ替えを行います。これをに保存しますJ。を形成J, hMJしますhMJ, J。ここhMJJ、各要素は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の初心者なので、ゴルフを手伝ってくれた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.