L'interview: The Front Nine

18

L'interview: The Front Nine

Il s'agit du premier d'une série de défis inspirés par la programmation des questions d'entrevue d'emploi.

Vous entrez dans le bureau où se trouve votre futur patron potentiel. "Entrez et asseyez-vous", dit-il. Vous vous asseyez nerveusement, en vous assurant que votre tenue accrocheuse mais professionnelle est sans rides. Il vous pose de nombreuses questions sur votre formation, vos expériences de travail antérieures, etc. Vous y répondez principalement honnêtement, en ajoutant un peu d'embellissement ici et là pour vous faire mieux sonner. Il se penche en avant et recommence à parler.

"Avez-vous déjà entendu parler du golf à code?" Pourquoi, oui, vous aimez le code de golf, et faites-le fréquemment pendant votre temps libre. "Génial. La dernière partie de l'entretien est un examen technique. Il vous sera demandé d'écrire du code pour résoudre une série de problèmes ..." Il vous tend une feuille de papier. Vous jetez un coup d'œil dessus. Peasy facile. Maintenant, pourquoi at-il posé des questions sur le golf à code?

"Vous serez noté en fonction de la taille totale de vos solutions à ces problèmes. Si vous pouvez obtenir un score inférieur à tous les autres candidats, le travail vous appartient." Oh. "Comme le golf, il y a 18 problèmes, divisés en deux séries de 9. N'hésitez pas à utiliser n'importe quelle langue que vous aimez pour les résoudre. Nous avons des compilateurs et des interprètes pour chaque langue dont vous avez entendu parler, et certainement quelques-uns que vous n'avez pas 't. Bonne chance! "

Les tâches

Tâche 1: table de multiplication

Étant donné un nombre nen entrée, affichez une table de multiplication pour les entiers positifs dans la plage [1, n]. nsera dans la plage [1, 12]. Tous les nombres doivent être alignés à gauche dans le tableau. Utilisez le caractère xpour le coin supérieur gauche.

Exemples:

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

Tâche 2: RMS ordinale

Étant donné une chaîne de caractères ASCII, affichez la moyenne quadratique moyenne de leurs ordinaux ASCII. La chaîne ne contiendra jamais d'octet NULL (ordinal 0).

Exemples:

Input: The Interview: The Front Nine
Output: 95.08290393488019

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

Tâche 3: Mouvement de projectile

Compte tenu de la vitesse et de l'angle initiaux avec l'horizon d'un projectile tiré depuis le sol, émettez la distance horizontale qu'il parcourra avant l'atterrissage. La vitesse initiale sera donnée en mètres par seconde, l'angle sera donné en degrés et la distance en mètres. Supposons la gravité terrestre ( g=9.81 m/s/s) et ignorez les effets relativistes. Pour des raisons de ce problème, vous pouvez supposer que la Terre est plate (vous n'aurez pas besoin de prendre en compte la courbure de la Terre lors de vos calculs). L'angle donné sera dans la plage [0, 90]. Votre réponse doit être précise à au moins deux décimales (l'arrondi est autorisé).

Exemples:

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

velocity=10, angle=60
Result: 8.82798576742547

Tâche 4: etaoin shrdlu

Étant donné une chaîne de caractères ASCII imprimables non nuls (ordinaux dans la plage [32,127]), sortez la chaîne, avec ses caractères triés par leurs fréquences dans l'ordre décroissant. En cas d'égalité, ordre par ordinal ASCII, croissant.

Exemples:

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

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

Tâche 5: indice de Fibonacci

Étant donné un nombre, déterminez s'il s'agit d'un nombre de Fibonacci et, s'il l'est, sortez son index (à partir de 1) dans la séquence. S'il ne s'agit pas d'un nombre de Fibonacci, sortez 0. Dans le cas de 1, qui est dans la séquence deux fois, sortez l'occurrence la plus ancienne (index 1).

Exemples:

Input: 1
Output: 1

Input: 144
Output: 12

Input: 4
Output: 0

Tâche 6: Anagrammes

Étant donné trois chaînes de lettres anglaises minuscules ( [a-z]), sortez une chaîne qui utilise toutes les lettres de la première chaîne, commence par la deuxième chaîne et se termine par la troisième chaîne. Si une telle chaîne ne peut pas être construite, affichez une chaîne vide. Les chaînes d'entrée auront toujours au moins une lettre. Le "milieu" de la chaîne de sortie (entre la chaîne de préfixe et de suffixe) peut être vide, si les chaînes de préfixe et de suffixe utilisent ensemble toutes les lettres de la chaîne source.

Exemples:

Input: geobits bi es
Possible output: bigtoes

Input: mariatidaltug digital trauma
Output: digitaltrauma

Input: mego go lf
Output: (empty string)

Étape 7: Remplir les blancs

Étant donné une liste de chaînes et un caractère de remplissage, affichez le résultat du remplissage de toutes les chaînes à la longueur de la chaîne la plus longue avec le caractère de remplissage, trié par ordre croissant selon la longueur d'origine des chaînes, en préservant l'ordre d'origine dans le cas. d'une cravate. Vous devriez être capable de gérer des listes de n'importe quelle longueur finie, contenant des chaînes de n'importe quelle longueur finie, limitées uniquement par des contraintes de mémoire.

Exemples:

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

Tâche 8: apporter des changements

Étant donné un nombre dans la plage [0.01,0.99], affichez le nombre de chacune des 4 pièces américaines standard qui devraient être utilisées pour représenter cette valeur de sorte que le nombre total de pièces soit minimisé. L'entrée aura toujours exactement 2 places derrière la décimale.

Référence de la valeur de la pièce:

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

Exemples:

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

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

Tâche 9: fusion de plages

Étant donné une liste finie de 2 tuples contenant des entiers qui représentent des plages, affichez le résultat de la fusion de toutes les plages chevauchantes ou adjacentes. Toutes les plages auront au moins une longueur de 1 et la valeur de départ sera toujours inférieure à la valeur de fin. L'ordre de sortie n'a pas d'importance.

Exemples:

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)

Règles

  • C'est le , donc la réponse la plus courte (en octets) l'emporte.
  • Votre score sera la somme du nombre d'octets pour toutes vos solutions.
  • Les failles standard sont interdites.
  • L'entrée et la sortie peuvent être effectuées de la manière considérée comme standard pour votre langue.
  • Vous pouvez écrire des programmes ou des fonctions complets pour chaque défi, et pouvez échanger entre les deux à travers les défis.
  • Vous devez utiliser le même langage pour tous les défis. Si les différences de version sont suffisamment importantes pour qu'elles soient généralement considérées comme des entrées distinctes dans les défis, vous devez utiliser la même version tout au long. Par exemple, si vous utilisez Python, vous devez utiliser Python 2 ou Python 3 pour tous les défis.
  • Vous devez résoudre tous les défis. Les réponses qui ne résolvent que certains des défis seront considérées comme non compétitives.
  • Vous pouvez utiliser des langages intégrés ou des bibliothèques standard.

Classement

L'extrait de pile au bas de cet article génère le classement à partir des réponses a) en tant que liste des solutions les plus courtes par langue et b) en tant que classement général.

Pour vous assurer que votre réponse apparaît, veuillez commencer votre réponse avec un titre, en utilisant le modèle Markdown suivant:

## Language Name, N bytes

Nest la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les rayant. Par exemple:

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

Si vous souhaitez inclure plusieurs nombres dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou que vous souhaitez répertorier les pénalités de drapeau d'interprète séparément), assurez-vous que le score réel est le dernier numéro de l'en-tête:

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

Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de code:

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

Mego
la source
Sommes-nous autorisés à sortir des nombres en notation scientifique dans la tâche 1?
FUZxxl
1
même si j'aimerais avoir une telle interview, je doute qu'elle classe bien les gens. hein, peu importe. toujours amusant
fier haskeller
Devons-nous imprimer les résultats ou pouvons-nous les renvoyer des fonctions? Si celle-ci est autorisée, pour la tâche 1, pouvons-nous renvoyer une matrice ou similaire?
Alex A.
La tâche 8 semble avoir 2 formats de sortie, pouvons-nous simplement utiliser le premier?
aditsu
1
@pppery, cette question est plus ancienne que le lien que vous avez fourni, donc je ne pense pas qu'elle s'applique à cette question.
Night2

Réponses:

8

Pyth, 155 153 149 142 142 141 131 130 octets

4 octets grâce à @FryAmTheEggman

1, 5 et 4 octets grâce à @Jakube

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

Construisez la table de multiplication à partir de la liste [1, 1, 2, 3, ...], qui est +1SQ, puis imprimez xet supprimez son premier caractère.

  1. 10 octets :@.Om^Cd2z2

Simple.

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

Utilise la formule sin(2 theta) * v^2/a, où thetaest l'angle, vest la vitesse initiale et aest9.81

  1. 7 octets :o_/zNSz

Simple.

  1. 15 octets :hxeM.u,eNsNQU2Q

Générez des paires de fibonacci, trouvez l'index de l'entrée en elles, ajoutez-en un.

  1. 14 octets :IqSzSJj.-zsQQJ

Utilisez la soustraction par bagage pour supprimer le préfixe et le suffixe du mot, puis placez le reste du mot au milieu. Si le résultat n'est pas une permutation de l'entrée, ne l'imprimez pas.

  1. 8 octets :C.tolNQz

Trier par longueur. Transposé rempli. Transposer à nouveau.

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

Le nombre de pièces en sortie est dans l'ordre [quarters, dimes, nickels, pennies].

Supprimez les 2 premiers caractères de l'entrée et transformez-les en int pour obtenir des cents. Enregistrer dans J. Pour chaque numéro dde la liste [25, 10, 5, 1], post-attribuez J%dà J, puis générez la valeur /Jdavec la valeur d'origine de J. Impression.

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

Transformez les tuples en plages, combinez-les en une seule liste, dédupliquez et triez. Enregistrez ceci dans J. Forme J, hMJet hMJ, J, où hMJest Javec chaque élément augmenté de 1. Effectuez la soustraction dans les deux cas. Le premier correspond aux extrémités inférieures des plages, le second aux extrémités supérieures. Transposez-les en paires et imprimez.

isaacg
la source
6

CJam, 223 octets

Tâche 1, 35 octets

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

Essayez-le en ligne.

Tâche 2, 12 octets

q_:i:mh\,mq/

Essayez-le en ligne.

Tâche 3, 27 octets

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

Essayez-le en ligne.

Tâche 4, 12 octets

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

Essayez-le en ligne.

Tâche 5, 17 octets

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

Essayez-le en ligne.

Tâche 6, 25 octets

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

Essayez-le en ligne.

Tâche 7, 19 octets

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

Essayez-le en ligne.

Tâche 8, 33 octets

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

Essayez-le en ligne.

Tâche 9, 43 octets

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

Essayez-le en ligne.

Dennis
la source
4

Haskell, 650 octets

Tâche 1, 88 octets:

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

Tâche 2, 76 octets:

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

Tâche 3, 28 octets

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

Tâche 4, 60 octets:

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

Tâche 5, 64 octets

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

Tâche 6, 93 octets

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

Tâche 7, 81 octets

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

Tâche 8, 73 octets

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

Tâche 9, 87 octets (une copie sans vergogne de la réponse de @ MtnViewMark d'un défi similaire)

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
la source
2

Mathematica 10.3, 465 octets

Ce sont toutes des fonctions anonymes. Merci aussi à Martin pour son aide au golf, car je suis un noob chez Mathematica.

Tâche 1, 69 octets

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

\[Transpose] est le symbole "transposer" de 3 octets.

Tâche 2, 13 octets

Mean[#^2]^.5&

ou

√Mean[#^2]&

(√ est de 3 octets). L' RootMeanSquareintégré n'est pas assez court ...

Tâche 3, 18 octets

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

Tâche 4, 57 octets

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

Tâche 5, 33 octets

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

ou

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

ou

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

Tâche 6, 178 octets (contient actuellement un bogue)

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

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

La manipulation des cordes est horrible ...

Tâche 7, 39 octets

#~SortBy~StringLength~StringPadRight~#1

Tâche 8, 46 octets

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

ou

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

Tâche 9, 12 octets

Interval@##&

Les intervalles transmis au constructeur sont automatiquement unis. Bas ça.

mbomb007
la source