Wawancara: The Front Nine

18

Wawancara: The Front Nine

Ini adalah yang pertama dari serangkaian tantangan yang terinspirasi oleh pemrograman pertanyaan wawancara kerja.

Anda berjalan ke kantor tempat calon bos masa depan Anda duduk. "Ayo masuk dan duduk," katanya. Anda dengan gugup duduk, memastikan pakaian Anda yang tajam namun profesional bebas dari kerutan. Dia banyak bertanya kepada Anda, tentang pendidikan Anda, pengalaman kerja sebelumnya, dan sebagainya. Anda menjawabnya sebagian besar dengan jujur, menambahkan sedikit hiasan di sana-sini untuk membuat diri Anda terdengar lebih baik. Dia mencondongkan tubuh ke depan dan mulai berbicara lagi.

"Pernahkah kamu mendengar tentang kode golf?" Mengapa, ya, Anda suka kode golf, dan sering melakukannya di waktu luang Anda. "Hebat. Bagian terakhir dari wawancara adalah pemeriksaan teknis. Kamu akan ditugaskan menulis kode untuk menyelesaikan serangkaian masalah ..." Dia memberimu selembar kertas. Anda dengan cepat meliriknya. Peasy mudah. Sekarang mengapa dia bertanya tentang kode golf?

"Anda akan dinilai berdasarkan ukuran total solusi Anda untuk masalah ini. Jika Anda dapat skor lebih rendah dari semua kandidat lainnya, pekerjaan itu milik Anda." Oh "Seperti golf, ada 18 masalah, dipecah menjadi dua set 9. Jangan ragu untuk menggunakan bahasa apa pun yang Anda suka untuk menyelesaikannya; kami memiliki kompiler dan penerjemah untuk setiap bahasa yang Anda dengar, dan tentu saja beberapa yang Anda hindari Semoga beruntung! "

Tugas

Tugas 1: Tabel Multiplikasi

Diberikan angka nsebagai input, output tabel perkalian untuk bilangan bulat positif dalam kisaran [1, n]. nakan berada dalam kisaran [1, 12]. Semua angka harus rata kiri dalam tabel. Gunakan karakter xuntuk sudut kiri atas.

Contoh:

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

Tugas 2: Ordinal RMS

Diberikan string karakter ASCII, menghasilkan rata- rata root-mean-square dari ASCII ordinals mereka. String tidak akan pernah berisi byte NULL (ordinal 0).

Contoh:

Input: The Interview: The Front Nine
Output: 95.08290393488019

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

Tugas 3: Gerakan Proyektil

Mengingat kecepatan dan sudut awal dengan cakrawala proyektil yang ditembakkan dari permukaan tanah, menghasilkan jarak horizontal yang akan dilalui sebelum mendarat. Kecepatan awal akan diberikan dalam meter per detik, sudut akan diberikan dalam derajat, dan jarak akan dalam meter. Asumsikan gravitasi Bumi ( g=9.81 m/s/s), dan abaikan efek relativistik. Demi masalah ini, Anda mungkin menganggap bumi itu datar (Anda tidak perlu mempertimbangkan kelengkungan Bumi saat membuat perhitungan Anda). Sudut yang diberikan akan berada dalam kisaran [0, 90]. Jawaban Anda harus akurat untuk setidaknya dua tempat desimal (pembulatan diperbolehkan).

Contoh:

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

velocity=10, angle=60
Result: 8.82798576742547

Tugas 4: etaoin shrdlu

Diberikan string karakter ASCII yang tidak dapat dicetak (ordinals dalam kisaran [32,127]), output string, dengan karakternya diurutkan berdasarkan frekuensi mereka dalam urutan menurun. Dalam kasus dasi, dipesan oleh ASCII ordinal, naik.

Contoh:

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

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

Tugas 5: Indeks Fibonacci

Diberi nomor, tentukan apakah itu adalah angka Fibonacci, dan jika ya, output indeksnya (mulai dari 1) dalam urutan. Jika bukan angka Fibonacci, output 0. Dalam kasus 1, yang berada dalam urutan dua kali, output kejadian paling awal (indeks 1).

Contoh:

Input: 1
Output: 1

Input: 144
Output: 12

Input: 4
Output: 0

Tugas 6: Anagram

Diberikan tiga string huruf Inggris huruf kecil ( [a-z]), menghasilkan string yang menggunakan semua huruf dalam string pertama, dimulai dengan string kedua, dan berakhir dengan string ketiga. Jika string semacam itu tidak dapat dibangun, output string kosong. String input akan selalu setidaknya sepanjang satu huruf. "Tengah" dari string output (antara string awalan dan postfix) mungkin kosong, jika string awalan dan postfix bersama-sama menggunakan semua huruf dalam string sumber.

Contoh:

Input: geobits bi es
Possible output: bigtoes

Input: mariatidaltug digital trauma
Output: digitaltrauma

Input: mego go lf
Output: (empty string)

Tugas 7: Mengisi Kosong

Diberikan daftar string dan karakter isian, output hasil melapisi semua string dengan panjang string terpanjang dengan karakter isian, diurutkan dalam urutan naik dengan panjang asli string, menjaga urutan asli dalam case dasi. Anda harus dapat menangani daftar dari setiap panjang yang terbatas, yang berisi string dari setiap panjang yang terbatas, hanya dibatasi oleh batasan memori.

Contoh:

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

Tugas 8: Membuat Perubahan

Diberi nomor dalam kisaran [0.01,0.99], output jumlah masing-masing dari 4 koin AS standar yang harus digunakan untuk mewakili nilai ini sehingga jumlah total koin diminimalkan. Input akan selalu memiliki tepat 2 tempat di belakang desimal.

Referensi nilai koin:

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

Contoh:

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

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

Tugas 9: Menggabungkan Rentang

Diberikan daftar terbatas 2-tupel yang berisi bilangan bulat yang mewakili rentang, menampilkan hasil penggabungan semua rentang yang tumpang tindih atau berdekatan. Semua rentang akan setidaknya dari panjang 1, dan nilai awal akan selalu kurang dari nilai akhir. Urutan output tidak masalah.

Contoh:

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)

Aturan

  • Ini adalah , jadi jawaban tersingkat (dalam byte) menang.
  • Skor Anda akan menjadi jumlah jumlah byte untuk semua solusi Anda.
  • Celah standar dilarang.
  • Input dan output dapat dilakukan dengan cara apa pun yang dianggap standar untuk bahasa Anda.
  • Anda dapat menulis program atau fungsi lengkap untuk setiap tantangan, dan dapat bertukar antara keduanya melintasi tantangan.
  • Anda harus menggunakan bahasa yang sama untuk semua tantangan. Jika perbedaan versi cukup signifikan untuk dianggap entri terpisah dalam tantangan, Anda harus menggunakan versi yang sama secara keseluruhan. Misalnya, jika Anda menggunakan Python, Anda harus menggunakan Python 2 atau Python 3 untuk semua tantangan.
  • Anda harus menyelesaikan semua tantangan. Jawaban yang hanya menyelesaikan beberapa tantangan akan dianggap tidak kompetitif.
  • Anda dapat menggunakan builtin bahasa atau perpustakaan standar.

Papan peringkat

Cuplikan Stack di bagian bawah posting ini menghasilkan leaderboard dari jawaban a) sebagai daftar solusi terpendek per bahasa dan b) sebagai leaderboard keseluruhan.

Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:

## Language Name, N bytes

di mana Nukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:

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

Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:

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

Anda juga dapat membuat nama bahasa menjadi tautan yang kemudian akan muncul di cuplikan:

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

Mego
sumber
Apakah kita diizinkan untuk menghasilkan angka dalam notasi ilmiah dalam tugas 1?
FUZxxl
1
Meskipun saya ingin wawancara seperti itu, saya ragu apakah peringkatnya baik. eh, terserahlah. masih menyenangkan
haskeller bangga
Apakah kita harus mencetak hasil atau bisakah kita mengembalikannya dari fungsi? Jika yang terakhir diizinkan, untuk tugas 1 dapatkah kita mengembalikan matriks atau yang serupa?
Alex A.
Tugas 8 tampaknya memiliki 2 format output, bisakah kita menggunakan yang pertama?
aditsu
@aditsu Itu adalah dua contoh format output. Anda dapat menggunakan format apa pun dengan alasan.
Mego

Jawaban:

8

Pyth, 155 153 149 142 141 131 130 byte

4 byte berkat @FryAmTheEggman

1, 5 dan 4 byte berkat @Jakube

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

Buat tabel perkalian dari daftar [1, 1, 2, 3, ...], yaitu +1SQ, lalu cetak a xdan hapus karakter pertamanya.

  1. 10 byte :@.Om^Cd2z2

Mudah.

  1. 18 byte :c*.t.tyvw7Z*QQ9.81

Menggunakan rumus sin(2 theta) * v^2/a, di mana thetaadalah sudut, vadalah kecepatan awal dan aadalah9.81

  1. 7 byte :o_/zNSz

Mudah.

  1. 15 byte :hxeM.u,eNsNQU2Q

Hasilkan pasangan fibonacci, cari indeks input di dalamnya, tambahkan satu.

  1. 14 byte :IqSzSJj.-zsQQJ

Gunakan pengurangan bagwise untuk menghapus awalan dan akhiran dari kata, lalu letakkan sisa kata di tengah. Jika hasil ini bukan permutasi dari input, jangan cetak itu.

  1. 8 byte :C.tolNQz

Sortir menurut panjangnya. Diisi transpose. Transposis lagi.

  1. 18 byte :Jsttz/L~%Jd[25T5 1

Hitungan koin output dalam urutan [quarters, dimes, nickels, pennies].

Hapus 2 karakter pertama input dan cor ke int untuk mendapatkan sen. Simpan ke J. Untuk setiap nomor ddalam daftar [25, 10, 5, 1], pasca-assign J%dke J, kemudian menghasilkan nilai /Jddengan nilai asli J. Mencetak.

  1. 16 byte :C-M.p,JS{srMQhMJ

Ubah tupel menjadi rentang, gabungkan menjadi satu daftar, deduplikat dan urutkan. Simpan ini untuk J. Bentuk J, hMJdan hMJ, J, di mana hMJini Jdengan setiap elemen meningkat 1. Lakukan pengurangan dalam kedua kasus. Yang pertama adalah ujung bawah rentang, yang terakhir adalah ujung yang lebih tinggi. Ubah posisinya menjadi berpasangan dan cetak.

isaacg
sumber
6

CJam, 223 byte

Tugas 1, 35 byte

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

Cobalah online.

Tugas 2, 12 byte

q_:i:mh\,mq/

Cobalah online.

Tugas 3, 27 byte

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

Cobalah online.

Tugas 4, 12 byte

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

Cobalah online.

Tugas 5, 17 byte

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

Cobalah online.

Tugas 6, 25 byte

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

Cobalah online.

Tugas 7, 19 byte

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

Cobalah online.

Tugas 8, 33 byte

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

Cobalah online.

Tugas 9, 43 byte

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

Cobalah online.

Dennis
sumber
4

Haskell, 650 byte

Tugas 1, 88 byte:

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

Tugas 2, 76 byte:

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

Tugas 3, 28 byte

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

Tugas 4, 60 byte:

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

Tugas 5, 64 byte

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

Tugas 6, 93 byte

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

Tugas 7, 81 byte

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

Tugas 8, 73 byte

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

Tugas 9, 87 byte (salinan jawaban MtnViewMark yang tak tahu malu dari tantangan serupa)

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
sumber
2

Mathematica 10.3, 465 byte

Semua ini adalah fungsi anonim. Juga, terima kasih kepada Martin untuk membantu bermain golf, karena saya seorang pemula di Mathematica.

Tugas 1, 69 byte

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

\[Transpose] adalah simbol 3 byte "transpose".

Tugas 2, 13 byte

Mean[#^2]^.5&

atau

√Mean[#^2]&

(√ adalah 3 byte). The RootMeanSquarebuilt-in tidak cukup cukup singkat ...

Tugas 3, 18 byte

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

Tugas 4, 57 byte

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

Tugas 5, 33 byte

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

atau

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

atau

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

Tugas 6, 178 byte (saat ini memiliki bug)

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

Kurang bermain golf:

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

Manipulasi string mengerikan ...

Tugas 7, 39 byte

#~SortBy~StringLength~StringPadRight~#1

Tugas 8, 46 byte

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

atau

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

Tugas 9, 12 byte

Interval@##&

Interval yang diteruskan ke konstruktor secara otomatis disatukan. Kalahkan itu.

mbomb007
sumber