Röportaj: Ön Dokuz


18

Röportaj: Ön Dokuz

Bu, iş görüşmesi sorularının programlanmasından esinlenen bir dizi zorluğun ilkidir.

Gelecekteki potansiyel patronunuzun oturduğu ofise girersiniz. "İçeri gel ve otur" diyor. Sinirli bir şekilde oturuyorsunuz, çabuk ama profesyonel kıyafetlerinizin kırışıklık içermediğinden emin olun. Size eğitiminiz, önceki iş deneyimleriniz vb. Hakkında birçok soru soruyor. Onlara çoğunlukla dürüstçe cevap veriyorsunuz, kendinizi daha iyi seslendirmek için buraya ve oraya biraz süsleme ekliyorsunuz. Öne doğru eğilir ve tekrar konuşmaya başlar.

"Hiç kod golfü duydunuz mu?" Neden, evet, golf kodunu seviyor ve boş zamanlarında sık sık yapıyorsunuz. "Harika. Röportajın son kısmı teknik bir sınav. Bir dizi sorunu çözmek için kod yazmakla görevlendirileceksin ..." Sana bir kağıt veriyor. Hızlıca göz at. Çantada keklik. Şimdi neden kod golfü hakkında sordu?

Diyerek şöyle devam etti: "Bu sorunlara çözümlerinizin toplam büyüklüğüne göre puanlandırılacaksınız. Diğer tüm adaylardan daha düşük puan alabiliyorsanız iş sizin." Ah. "Golf gibi, 18 problem vardır, iki grup 9'a bölünmüştür. Çözmek istediğiniz herhangi bir dili kullanmaktan çekinmeyin; duyduğunuz her dil için derleyiciler ve tercümanlar var ve kesinlikle birkaç tane var İyi şanslar! "

Görevler

Görev 1: Çarpım Tablosu

nGirdi olarak bir sayı verildiğinde , aralıktaki pozitif tamsayılar için bir çarpım tablosu çıkarın [1, n]. naralıkta olacak [1, 12]. Tüm sayılar tabloda sola hizalanmalıdır. xSol üst köşedeki karakteri kullanın .

Örnekler:

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

Görev 2: Sıradan RMS

Bir dizi ASCII karakteri verildiğinde , ASCII sıralarının kök-ortalama-kare ortalamasını çıktılayın. Dize hiçbir zaman NULL bayt içermez (sıra 0).

Örnekler:

Input: The Interview: The Front Nine
Output: 95.08290393488019

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

Görev 3: Atış Hareketi

Zemin seviyesinden ateşlenen bir merminin ufku ile başlangıç ​​hızı ve açısı göz önüne alındığında, inişten önce gideceği yatay mesafeyi çıktılayın. Başlangıç ​​hızı saniyede metre cinsinden verilecek, açı derece cinsinden ve mesafe metre cinsinden verilecektir. Dünya'nın yerçekimini ( g=9.81 m/s/s) varsayalım ve göreli etkileri göz ardı edin. Bu sorun uğruna, Dünya'nın düz olduğunu varsayabilirsiniz (hesaplamalarınızı yaparken Dünya'nın eğriliğini dikkate almanız gerekmez). Verilen açı aralıkta olacaktır [0, 90]. Cevabınız en az iki ondalık basamağa kadar doğru olmalıdır (yuvarlamaya izin verilir).

Örnekler:

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

velocity=10, angle=60
Result: 8.82798576742547

Görev 4: Etaoin Shrdlu

Boş olmayan yazdırılabilir ASCII karakter dizisi (aralıktaki [32,127]sıralar) verildiğinde, dizeyi karakterleri frekanslarına göre azalan düzende sıralayarak çıkarın. Beraberlik durumunda, ASCII ordinal tarafından sipariş, artan.

Örnekler:

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

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

Görev 5: Fibonacci Endeksi

Bir sayı verildiğinde, bunun bir Fibonacci numarası olup olmadığını belirleyin ve varsa dizinini (1'den başlayarak) sırayla çıktılayın. Bir Fibonacci numarası değilse, çıkış 0. İki kez dizilimde olan 1 durumunda, en erken oluşumu (indeks 1) çıkarın.

Örnekler:

Input: 1
Output: 1

Input: 144
Output: 12

Input: 4
Output: 0

Görev 6: Anagramlar

Üç küçük harfli İngilizce harf ( [a-z]) dizesi verildiğinde, ilk dizedeki tüm harfleri kullanan, ikinci dizeyle başlayan ve üçüncü dizeyle biten bir dize çıktılayın. Böyle bir dize oluşturulamazsa, boş bir dize çıktısı alın. Giriş dizeleri her zaman en az bir harf uzunluğunda olacaktır. Önek ve postfix dizeleri birlikte kaynak dizgideki tüm harfleri kullanırsa, çıkış dizesinin "orta" öğesi (önek ve son düzeltme dizesi arasında) boş olabilir.

Örnekler:

Input: geobits bi es
Possible output: bigtoes

Input: mariatidaltug digital trauma
Output: digitaltrauma

Input: mego go lf
Output: (empty string)

Görev 7: Boşlukları Doldurma

Dizelerin bir listesi ve bir dolgu karakteri verildiğinde, tüm dizelerin dolgu karakteriyle en uzun dizenin uzunluğuna kadar doldurulması sonucunu, dizenin orijinal uzunluklarına göre artan düzende sıralanır ve kasadaki orijinal düzeni korunur bir kravat. Yalnızca bellek kısıtlamaları ile sınırlanmış, herhangi bir sonlu uzunlukta dizeler içeren sonlu uzunluktaki listeleri işleyebilmelisiniz.

Örnekler:

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

Görev 8: Değişiklik Yapma

Aralıktaki bir sayı [0.01,0.99]verildiğinde, toplam jeton sayısı en aza indirilecek şekilde bu değeri temsil etmek için kullanılması gereken 4 standart ABD jetonunun her birinin sayısını çıktılayın. Giriş her zaman ondalık sayının tam olarak 2 yerine sahip olacaktır.

Jeton değeri referansı:

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

Örnekler:

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

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

Görev 9: Aralıkları Birleştirme

Aralıkları temsil eden tamsayılar içeren 2 tüplü sonlu bir liste verildiğinde, tüm örtüşen veya bitişik aralıkları birleştirmenin sonucunu çıktı. Tüm aralıklar en az 1 uzunluk olacaktır ve başlangıç ​​değeri daima bitiş değerinden daha az olacaktır. Çıktının sırası önemli değil.

Örnekler:

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)

kurallar

  • Bu , çok kısa cevap (bayt cinsinden) kazanır.
  • Puanınız, tüm çözümleriniz için bayt sayılarının toplamı olacaktır.
  • Standart boşluklar yasaktır.
  • Giriş ve çıkış, diliniz için standart kabul edilen herhangi bir şekilde yapılabilir.
  • Her bir meydan okuma için tam programlar veya işlevler yazabilir ve iki meydan okuma arasında ikisi arasında geçiş yapabilirsiniz.
  • Tüm zorluklar için aynı dili kullanmalısınız. Sürüm farklılıkları genellikle zorluklarda ayrı girdiler olarak kabul edilebilecek kadar önemliyse, aynı sürümü baştan sona kullanmanız gerekir. Örneğin, Python kullanıyorsanız, tüm zorluklar için Python 2 veya Python 3'ü kullanmanız gerekir.
  • Tüm zorlukları çözmelisiniz. Sadece bazı zorlukları çözen cevaplar rekabetçi değildir.
  • Dil yerleşiklerini veya standart kitaplıkları kullanabilirsiniz.

Liderler Sıralaması

Bu yazının altındaki Yığın Snippet'i, a) her dil için en kısa çözüm listesi olarak ve b) genel bir lider tablosu olarak cevaplardan lider tablosunu oluşturur.

Yanıtınızın göründüğünden emin olmak için, lütfen aşağıdaki Markdown şablonunu kullanarak yanıtınızı bir başlıkla başlatın:

## Language Name, N bytes

Ngönderiminizin büyüklüğü nerede . Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:

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

Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğu veya yorumlayıcı bayrak cezalarını ayrı olarak listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :

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

Dil adını, daha sonra snippet'te görünecek bir bağlantı da yapabilirsiniz:

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


Görev 1'deki bilimsel notasyonda sayı çıktılamamıza izin var mı?
FUZxxl

1
Her ne kadar böyle bir röportaj yapmak isterdim ki insanları iyi sıralarsa şüphe ediyorum. her neyse. hala eğlenceli
gururlu haskeller

Sonuçları yazdırmak zorunda mıyız yoksa bunları işlevlerden geri döndürebilir miyiz? İkincisine izin veriliyorsa, görev 1 için bir matris veya benzeri iade edebilir miyiz?
Alex A.

Görev 8'in 2 çıktı biçimi var gibi görünüyor, sadece birincisini kullanabilir miyiz?
aditsu

1
@pppery, bu soru sağladığınız bağlantıdan daha eski, bu yüzden bu soru için geçerli olduğunu düşünmüyorum.
Gece2

Yanıtlar:


8

Pyth, 155 153 149 142 141 131 130 bayt

@FryAmTheEggman sayesinde 4 bayt

@Jakube sayesinde 1, 5 ve 4 bayt

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

Listeden çarpım tablosunu [1, 1, 2, 3, ...]oluşturun +1SQ, ardından a yazdırın xve ilk karakterini kaldırın.

  1. 10 bayt :@.Om^Cd2z2

Basit.

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

Formülü kullanır sin(2 theta) * v^2/a, burada thetaaçı, vbaşlangıç ​​hızı vea bir9.81

  1. 7 bayt :o_/zNSz

Basit.

  1. 15 bayt :hxeM.u,eNsNQU2Q

Fibonacci çiftleri oluşturun, içlerindeki girdinin dizinini bulun, bir tane ekleyin.

  1. 14 bayt :IqSzSJj.-zsQQJ

Öneki ve soneki sözcükten çıkarmak için torba şeklinde çıkarma kullanın, sonra sözcüğün geri kalanını ortaya koyun. Bunun sonucu girişin permütasyonu değilse, yazdırmayın.

  1. 8 bayt :C.tolNQz

Uzunluğa göre sıralayın. Dolgulu aktarım. Yeniden aktar.

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

Çıktı para sayıları sırayla [quarters, dimes, nickels, pennies] .

Girdinin ilk 2 karakterini kaldırın ve sent almak için int'e yayınlayın. Konumuna kaydedin J. dListedeki her sayı için , [25, 10, 5, 1]atayın J%dve Jsonra /Jdorijinal değerine sahip bir değer oluşturun J. Yazdır.

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

Tuples'i aralıklara dönüştürün, tek bir listede birleştirin, tekilleştirin ve sıralayın. Bunu olarak kaydedin J. Form J, hMJve hMJ, J, hMJolan Jher eleman 1 artırılır ile her iki durumda da çıkarır. Birincisi aralıkların alt uçları, ikincisi yüksek uçlardır. Onları çiftlere dönüştürün ve yazdırın.



6

CJam, 223 bayt

Görev 1, 35 bayt

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

Çevrimiçi deneyin.

Görev 2, 12 bayt

q_:i:mh\,mq/

Çevrimiçi deneyin.

Görev 3, 27 bayt

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

Çevrimiçi deneyin.

Görev 4, 12 bayt

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

Çevrimiçi deneyin.

Görev 5, 17 bayt

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

Çevrimiçi deneyin.

Görev 6, 25 bayt

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

Çevrimiçi deneyin.

Görev 7, 19 bayt

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

Çevrimiçi deneyin.

Görev 8, 33 bayt

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

Çevrimiçi deneyin.

Görev 9, 43 bayt

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

Çevrimiçi deneyin.


4

Haskell, 650 bayt

Görev 1, 88 bayt:

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

Görev 2, 76 bayt:

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

Görev 3, 28 bayt

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

Görev 4, 60 bayt:

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

Görev 5, 64 bayt

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

Görev 6, 93 bayt

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

Görev 7, 81 bayt

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

Görev 8, 73 bayt

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

Görev 9, 87 bayt (@ MtnViewMark'ın benzer bir zorluktan yanıtının utanmaz bir kopyası )

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 bayt

Bunların hepsi anonim işlevlerdir. Ayrıca Mathematica'da bir çaylak olduğum için golf için yardım için Martin'e teşekkürler.

Görev 1, 69 bayt

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

\[Transpose] 3 byte "transpoze" sembolüdür.

Görev 2, 13 bayt

Mean[#^2]^.5&

veya

√Mean[#^2]&

(3 3 bayttır). RootMeanSquareYerleşik oldukça kısa yeterli değil ...

Görev 3, 18 bayt

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

Görev 4, 57 bayt

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

Görev 5, 33 bayt

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

veya

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

veya

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

Görev 6, 178 bayt (şu anda bir hatası var)

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

Daha az 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},""]])&

Dize düzenleme korkunç ...

Görev 7, 39 bayt

#~SortBy~StringLength~StringPadRight~#1

Görev 8, 46 bayt

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

veya

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

Görev 9, 12 bayt

Interval@##&

Kurucuya geçirilen aralıklar otomatik olarak birleştirilir. Bunun üstesinden gel.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.