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 n
como entrada, imprima uma tabela de multiplicação para números inteiros positivos no intervalo [1, n]
. n
estará no intervalo [1, 12]
. Todos os números devem estar alinhados à esquerda na tabela. Use o caractere x
para 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 é código-golfe , 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 N
está 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
Respostas:
Pitão,
155153149142141 141131130 bytes4 bytes graças a @FryAmTheEggman
1, 5 e 4 bytes graças a @Jakube
J+1SQp\xtjmsm.[`*dk\ 4JJ
Construa a tabela de multiplicação da lista
[1, 1, 2, 3, ...]
, ou seja+1SQ
, imprima ax
e remova seu primeiro caractere.@.Om^Cd2z2
Direto.
c*.t.tyvw7Z*QQ9.81
Usa a fórmula
sin(2 theta) * v^2/a
, ondetheta
está o ângulo,v
é a velocidade inicial ea
é9.81
o_/zNSz
Direto.
hxeM.u,eNsNQU2Q
Gere pares de fibonacci, encontre o índice da entrada neles, adicione um.
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.
C.tolNQz
Classifique por comprimento. Transposição preenchida. Transponha novamente.
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úmerod
da lista[25, 10, 5, 1]
, atribua posteriormenteJ%d
aJ
e gere o valor/Jd
com o valor original deJ
. Impressão.C-M.p,JS{srMQhMJ
Transforme as tuplas em intervalos, combine em uma lista, desduplicar e classificar. Salve isso em
J
. FormaJ, hMJ
ehMJ, J
, ondehMJ
estáJ
cada 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.fonte
CJam, 162
qi),0Xt_ff{*s4Se]}N*s0'xt
q_:i:mh\,mq/
(© Dennis)q~P*90/ms\_**9.81/
q$e`{0=~}$e~
(© Dennis)1_{_2$+}99*]qi#)
qS/(1+1$s{1$#Lt}/)@@**
q~{,}$_z,f{W$e]}p;
q2>i25A5]:md]W%p
q~${_0=2$1=>{+$3%}|}*]p
Dennis concordou em unir forças :)
fonte
CJam, 223 bytes
Tarefa 1, 35 bytes
Experimente online.
Tarefa 2, 12 bytes
Experimente online.
Tarefa 3, 27 bytes
Experimente online.
Tarefa 4, 12 bytes
Experimente online.
Tarefa 5, 17 bytes
Experimente online.
Tarefa 6, 25 bytes
Experimente online.
Tarefa 7, 19 bytes
Experimente online.
Tarefa 8, 33 bytes
Experimente online.
Tarefa 9, 43 bytes
Experimente online.
fonte
Haskell, 650 bytes
Tarefa 1, 88 bytes:
Tarefa 2, 76 bytes:
Tarefa 3, 28 bytes
Tarefa 4, 60 bytes:
Tarefa 5, 64 bytes
Tarefa 6, 93 bytes
Tarefa 7, 81 bytes
Tarefa 8, 73 bytes
Tarefa 9, 87 bytes (uma cópia vergonhosa da resposta de @ MtnViewMark de um desafio semelhante)
fonte
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
\[Transpose]
é o símbolo de "transposição" de 3 bytes.Tarefa 2, 13 bytes
ou
(√ é 3 bytes). O
RootMeanSquare
built-in não é suficientemente curto ...Tarefa 3, 18 bytes
Tarefa 4, 57 bytes
Tarefa 5, 33 bytes
ou
ou
Tarefa 6, 178 bytes
(atualmente possui um bug)Menos golfe:
A manipulação de cordas é horrível ...
Tarefa 7, 39 bytes
Tarefa 8, 46 bytes
ou
Tarefa 9, 12 bytes
Intervalos passados para o construtor são automaticamente unidos. Bata isso.
fonte