A Entrevista: Os Nove da Frente

18

A Entrevista: Os Nove da Frente

Este é o primeiro de uma série de desafios inspirados na programação de perguntas para entrevistas de emprego.

Você entra no escritório onde está o seu futuro chefe em potencial. "Entre e sente-se", diz ele. Você se senta nervosamente, certificando-se de que seu traje rápido e profissional esteja livre de rugas. Ele faz muitas perguntas sobre sua educação, experiências de trabalho anteriores e assim por diante. Você as responde de maneira honesta, adicionando um pouco de embelezamento aqui e ali para fazer você parecer melhor. Ele se inclina para frente e começa a falar novamente.

"Você já ouviu falar de código de golfe?" Por que, sim, você gosta de código de golfe e faz isso frequentemente no seu tempo livre. "Ótimo. A última parte da entrevista é um exame técnico. Você será encarregado de escrever o código para resolver uma série de problemas ..." Ele entrega uma folha de papel. Você rapidamente olha por cima. Mole-mole. Agora, por que ele perguntou sobre o código de golfe?

"Você será avaliado com base no tamanho total de suas soluções para esses problemas. Se você conseguir uma pontuação menor do que todos os outros candidatos, o trabalho é seu." Oh. "Como o golfe, existem 18 problemas, divididos em dois conjuntos de 9. Sinta-se à vontade para usar qualquer idioma que você quiser para resolvê-los; temos compiladores e intérpretes para todos os idiomas de que você já ouviu falar, e certamente alguns que você já conhece. boa sorte! "

As tarefas

Tarefa 1: Tabela de multiplicação

Dado um número ncomo entrada, imprima uma tabela de multiplicação para números inteiros positivos no intervalo [1, n]. nestará no intervalo [1, 12]. Todos os números devem estar alinhados à esquerda na tabela. Use o caractere xpara o canto superior esquerdo.

Exemplos:

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

Tarefa 2: RMS ordinal

Dada uma sequência de caracteres ASCII, produza a média quadrática média raiz de seus ordinais ASCII. A cadeia nunca conterá um byte NULL (ordinal 0).

Exemplos:

Input: The Interview: The Front Nine
Output: 95.08290393488019

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

Tarefa 3: Movimento de Projéteis

Dada a velocidade e o ângulo inicial com o horizonte de um projétil disparado do nível do solo, calcule a distância horizontal que ele percorrerá antes do pouso. A velocidade inicial será dada em metros por segundo, o ângulo será dado em graus e a distância será em metros. Assuma a gravidade da Terra ( g=9.81 m/s/s) e ignore os efeitos relativísticos. Para solucionar esse problema, você pode assumir que a Terra é plana (você não precisará considerar a curvatura da Terra ao fazer seus cálculos). O ângulo fornecido estará no intervalo [0, 90]. Sua resposta deve ser precisa com pelo menos duas casas decimais (o arredondamento é permitido).

Exemplos:

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

velocity=10, angle=60
Result: 8.82798576742547

Tarefa 4: etaoin shrdlu

Dada uma sequência de caracteres ASCII imprimíveis não nulos (ordinais no intervalo [32,127]), produza a sequência, com seus caracteres classificados por suas frequências em ordem decrescente. Em caso de empate, encomende por ASCII ordinal, ascendente.

Exemplos:

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

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

Tarefa 5: Índice de Fibonacci

Dado um número, determine se é um número de Fibonacci e, se for, produza seu índice (começando em 1) na sequência. Se não for um número de Fibonacci, produza 0. No caso de 1, que está na sequência duas vezes, produza a ocorrência mais antiga (índice 1).

Exemplos:

Input: 1
Output: 1

Input: 144
Output: 12

Input: 4
Output: 0

Tarefa 6: Anagramas

Dadas três seqüências de letras minúsculas em inglês ( [a-z]), produza uma sequência que usa todas as letras da primeira sequência, começa com a segunda sequência e termina com a terceira sequência. Se essa sequência não puder ser construída, produza uma sequência vazia. As seqüências de entrada sempre terão pelo menos uma letra. O "meio" da sequência de saída (entre as sequências de prefixo e postfix) pode estar vazio, se as sequências de prefixo e postfix juntas usarem todas as letras na sequência de origem.

Exemplos:

Input: geobits bi es
Possible output: bigtoes

Input: mariatidaltug digital trauma
Output: digitaltrauma

Input: mego go lf
Output: (empty string)

Tarefa 7: Preenchendo os espaços em branco

Dada uma lista de cadeias e um caractere de preenchimento, imprima o resultado de preencher todas as cadeias até o comprimento da cadeia mais longa com o caractere de preenchimento, classificado em ordem crescente pelos comprimentos originais das cadeias, preservando a ordem original no caso de um empate. Você deve poder lidar com listas de qualquer comprimento finito, contendo cadeias de qualquer comprimento finito, limitadas apenas por restrições de memória.

Exemplos:

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

Tarefa 8: Fazendo alterações

Dado um número no intervalo [0.01,0.99], produza o número de cada uma das 4 moedas padrão dos EUA que devem ser usadas para representar esse valor, de modo que o número total de moedas seja minimizado. A entrada sempre terá exatamente 2 casas atrás do decimal.

Referência do valor da moeda:

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

Exemplos:

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

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

Tarefa 9: Mesclando intervalos

Dada uma lista finita de duas tuplas contendo números inteiros que representam intervalos, produz o resultado da mesclagem de todos os intervalos sobrepostos ou adjacentes. Todos os intervalos terão pelo menos o comprimento 1 e o valor inicial será sempre menor que o valor final. A ordem da saída não importa.

Exemplos:

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)

Regras

  • Isso é , então a resposta mais curta (em bytes) vence.
  • Sua pontuação será a soma das contagens de bytes de todas as suas soluções.
  • As brechas padrão são proibidas.
  • A entrada e a saída podem ser realizadas da maneira que for considerada padrão para o seu idioma.
  • Você pode escrever programas ou funções completos para cada desafio e trocar entre os dois.
  • Você deve usar o mesmo idioma para todos os desafios. Se as diferenças de versão forem significativas o suficiente para serem consideradas entradas separadas nos desafios, você deverá usar a mesma versão. Por exemplo, se você usa o Python, deve usar o Python 2 ou o Python 3 para todos os desafios.
  • Você deve resolver todos os desafios. Respostas que resolvem apenas alguns dos desafios serão consideradas não competitivas.
  • Você pode usar linguagem interna ou bibliotecas padrão.

Entre os melhores

O snippet de pilha na parte inferior desta postagem gera o cabeçalho das respostas a) como uma lista da solução mais curta por idioma eb) como um cabeçalho geral.

Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:

## Language Name, N bytes

onde Nestá o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:

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

Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:

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

Você também pode transformar o nome do idioma em um link que será exibido no snippet:

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

Mego
fonte
É permitido gerar números em notação científica na tarefa 1?
FUZxxl
11
embora eu adorasse ter essa entrevista, duvido que ela classifique bem as pessoas. eh, tanto faz. divertido ainda
haskeller orgulhoso
Temos que imprimir resultados ou podemos devolvê-los das funções? Se o último é permitido, para a tarefa 1, podemos retornar uma matriz ou similar?
Alex A.
A tarefa 8 parece ter 2 formatos de saída, podemos usar apenas o primeiro?
Aditsu
@aditsu Esses são dois exemplos de formatos de saída. Você pode usar qualquer formato dentro do motivo.
Mego

Respostas:

8

Pitão, 155 153 149 142 141 141 131 130 bytes

4 bytes graças a @FryAmTheEggman

1, 5 e 4 bytes graças a @Jakube

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

Construa a tabela de multiplicação da lista [1, 1, 2, 3, ...], ou seja +1SQ, imprima a xe remova seu primeiro caractere.

  1. 10 bytes :@.Om^Cd2z2

Direto.

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

Usa a fórmula sin(2 theta) * v^2/a, onde thetaestá o ângulo, vé a velocidade inicial e aé9.81

  1. 7 bytes :o_/zNSz

Direto.

  1. 15 bytes :hxeM.u,eNsNQU2Q

Gere pares de fibonacci, encontre o índice da entrada neles, adicione um.

  1. 14 bytes :IqSzSJj.-zsQQJ

Use a subtração bagwise para remover o prefixo e o sufixo da palavra e coloque o restante da palavra no meio. Se o resultado disso não for uma permutação da entrada, não imprima.

  1. 8 bytes :C.tolNQz

Classifique por comprimento. Transposição preenchida. Transponha novamente.

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

As contagens de moedas de saída estão na ordem [quarters, dimes, nickels, pennies].

Remova os 2 primeiros caracteres da entrada e faça a conversão para int para obter centavos. Salve em J. Para cada número dda lista [25, 10, 5, 1], atribua posteriormente J%da Je gere o valor /Jdcom o valor original de J. Impressão.

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

Transforme as tuplas em intervalos, combine em uma lista, desduplicar e classificar. Salve isso em J. Forma J, hMJe hMJ, J, onde hMJestá Jcada elemento aumentado em 1. Execute subtração nos dois casos. O primeiro é o limite inferior dos intervalos, o último é o limite superior. Transponha-os em pares e imprima.

isaacg
fonte
6

CJam, 223 bytes

Tarefa 1, 35 bytes

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

Experimente online.

Tarefa 2, 12 bytes

q_:i:mh\,mq/

Experimente online.

Tarefa 3, 27 bytes

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

Experimente online.

Tarefa 4, 12 bytes

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

Experimente online.

Tarefa 5, 17 bytes

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

Experimente online.

Tarefa 6, 25 bytes

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

Experimente online.

Tarefa 7, 19 bytes

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

Experimente online.

Tarefa 8, 33 bytes

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

Experimente online.

Tarefa 9, 43 bytes

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

Experimente online.

Dennis
fonte
4

Haskell, 650 bytes

Tarefa 1, 88 bytes:

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

Tarefa 2, 76 bytes:

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

Tarefa 3, 28 bytes

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

Tarefa 4, 60 bytes:

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

Tarefa 5, 64 bytes

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

Tarefa 6, 93 bytes

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

Tarefa 7, 81 bytes

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

Tarefa 8, 73 bytes

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

Tarefa 9, 87 bytes (uma cópia vergonhosa da resposta de @ MtnViewMark de um desafio semelhante)

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

Mathematica 10.3, 465 bytes

Todas essas são funções anônimas. Além disso, obrigado a Martin por ajudar no golfe, já que sou um noob no Mathematica.

Tarefa 1, 69 bytes

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

\[Transpose] é o símbolo de "transposição" de 3 bytes.

Tarefa 2, 13 bytes

Mean[#^2]^.5&

ou

√Mean[#^2]&

(√ é 3 bytes). O RootMeanSquarebuilt-in não é suficientemente curto ...

Tarefa 3, 18 bytes

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

Tarefa 4, 57 bytes

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

Tarefa 5, 33 bytes

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

ou

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

ou

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

Tarefa 6, 178 bytes (atualmente possui um 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},""]])&

Menos golfe:

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

A manipulação de cordas é horrível ...

Tarefa 7, 39 bytes

#~SortBy~StringLength~StringPadRight~#1

Tarefa 8, 46 bytes

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

ou

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

Tarefa 9, 12 bytes

Interval@##&

Intervalos passados ​​para o construtor são automaticamente unidos. Bata isso.

mbomb007
fonte