La Entrevista: Los Nueve Delanteros

18

La Entrevista: Los Nueve Delanteros

Este es el primero de una serie de desafíos inspirados en la programación de preguntas de entrevistas de trabajo.

Entras a la oficina donde se sienta tu futuro jefe potencial. "Entra y siéntate", dice. Te sientas nerviosamente, asegurándote de que tu atuendo elegante y profesional esté libre de arrugas. Te hace muchas preguntas sobre tu educación, experiencias laborales previas, etc. Las respondes honestamente, agregando un poco de adorno aquí y allá para que suenes mejor. Se inclina hacia adelante y comienza a hablar de nuevo.

"¿Alguna vez has oído hablar del golf de código?" Por qué, sí, te encanta el código de golf y lo haces con frecuencia en tu tiempo libre. "Genial. La última parte de la entrevista es un examen técnico. Tendrás que escribir un código para resolver una serie de problemas ..." Te entrega una hoja de papel. Lo miras rápidamente. Pan comido. Ahora, ¿por qué preguntó sobre el golf de código?

"Se le calificará según el tamaño total de sus soluciones a estos problemas. Si puede obtener una puntuación más baja que todos los demás candidatos, el trabajo es suyo". Oh. "Al igual que el golf, hay 18 problemas, divididos en dos conjuntos de 9. Siéntase libre de usar cualquier idioma que le guste para resolverlos; tenemos compiladores e intérpretes para cada idioma que ha escuchado, y ciertamente algunos que no tiene t. ¡Buena suerte! "

Las tareas

Tarea 1: tabla de multiplicación

Dado un número ncomo entrada, genera una tabla de multiplicación para enteros positivos en el rango [1, n]. nEstará en el rango [1, 12]. Todos los números deben estar alineados a la izquierda en la tabla. Usa el personaje xpara la esquina superior izquierda.

Ejemplos:

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

Tarea 2: RMS ordinal

Dada una cadena de caracteres ASCII, genera el promedio de raíz cuadrada media de sus ordinales ASCII. La cadena nunca contendrá un byte NULL (ordinal 0).

Ejemplos:

Input: The Interview: The Front Nine
Output: 95.08290393488019

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

Tarea 3: Movimiento de proyectiles

Dada la velocidad inicial y el ángulo con el horizonte de un proyectil disparado desde el nivel del suelo, genera la distancia horizontal que recorrerá antes de aterrizar. La velocidad inicial se dará en metros por segundo, el ángulo se dará en grados y la distancia en metros. Suponga la gravedad de la Tierra ( g=9.81 m/s/s) e ignore los efectos relativistas. En aras de este problema, puede suponer que la Tierra es plana (no necesitará tener en cuenta la curvatura de la Tierra al hacer sus cálculos). El ángulo dado estará en el rango [0, 90]. Su respuesta debe tener una precisión de al menos dos decimales (se permite redondear).

Ejemplos:

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

velocity=10, angle=60
Result: 8.82798576742547

Tarea 4: etaoin shrdlu

Dada una cadena de caracteres ASCII imprimibles no nulos (ordinales en el rango [32,127]), genera la cadena, con sus caracteres ordenados por sus frecuencias en orden descendente. En caso de empate, ordenar por ASCII ordinal, ascendente.

Ejemplos:

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

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

Tarea 5: Índice de Fibonacci

Dado un número, determine si es un número de Fibonacci y, si es así, envíe su índice (a partir de 1) en la secuencia. Si no es un número de Fibonacci, emite 0. En el caso de 1, que está en la secuencia dos veces, emite la ocurrencia más temprana (índice 1).

Ejemplos:

Input: 1
Output: 1

Input: 144
Output: 12

Input: 4
Output: 0

Tarea 6: anagramas

Dadas tres cadenas de letras minúsculas en inglés ( [a-z]), genera una cadena que usa todas las letras en la primera cadena, comienza con la segunda cadena y termina con la tercera cadena. Si no se puede construir una cadena de este tipo, envíe una cadena vacía. Las cadenas de entrada siempre tendrán al menos una letra. El "medio" de la cadena de salida (entre la cadena de prefijo y postfix) puede estar vacío, si las cadenas de prefijo y postfix juntas usan todas las letras en la cadena de origen.

Ejemplos:

Input: geobits bi es
Possible output: bigtoes

Input: mariatidaltug digital trauma
Output: digitaltrauma

Input: mego go lf
Output: (empty string)

Tarea 7: Rellenar los espacios en blanco

Dada una lista de cadenas y un carácter de relleno, genera el resultado de rellenar todas las cadenas a la longitud de la cadena más larga con el carácter de relleno, ordenadas en orden ascendente por las longitudes originales de las cadenas, conservando el orden original en el caso de un empate. Debería poder manejar listas de cualquier longitud finita, que contengan cadenas de cualquier longitud finita, delimitadas solo por restricciones de memoria.

Ejemplos:

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

Tarea 8: Hacer cambios

Dado un número en el rango [0.01,0.99], genere el número de cada una de las 4 monedas estándar de EE. UU. Que se deben usar para representar este valor de modo que se minimice el número total de monedas. La entrada siempre tendrá exactamente 2 lugares detrás del decimal.

Referencia del valor de la moneda:

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

Ejemplos:

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

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

Tarea 9: fusión de rangos

Dada una lista finita de 2 tuplas que contienen enteros que representan rangos, genera el resultado de fusionar todos los rangos superpuestos o adyacentes. Todos los rangos serán al menos de longitud 1, y el valor inicial siempre será menor que el valor final. El orden de la salida no importa.

Ejemplos:

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)

Reglas

  • Este es el , por lo que gana la respuesta más corta (en bytes).
  • Su puntaje será la suma de los conteos de bytes para todas sus soluciones.
  • Las lagunas estándar están prohibidas.
  • La entrada y la salida se pueden realizar de cualquier manera que se considere estándar para su idioma.
  • Puede escribir programas o funciones completos para cada desafío, y puede intercambiar entre los dos desafíos.
  • Debes usar el mismo idioma para todos los desafíos. Si las diferencias de versión son lo suficientemente significativas como para que se consideren entradas separadas en los desafíos, debe usar la misma versión en todo momento. Por ejemplo, si usa Python, debe usar Python 2 o Python 3 para todos los desafíos.
  • Debes resolver todos los desafíos. Las respuestas que solo resuelvan algunos de los desafíos se considerarán no competitivas.
  • Puede usar idiomas incorporados o bibliotecas estándar.

Tabla de clasificación

El Fragmento de pila al final de esta publicación genera la tabla de clasificación a partir de las respuestas a) como una lista de la solución más corta por idioma yb) como una tabla de clasificación general.

Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:

## Language Name, N bytes

¿Dónde Nestá el tamaño de su envío? Si mejora su puntuación, se puede mantener viejas cuentas en el título, golpeándolos a través. Por ejemplo:

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

Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:

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

También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento:

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

Mego
fuente
¿Se nos permite generar números en notación científica en la tarea 1?
FUZxxl
1
aunque me encantaría tener una entrevista así, dudo que clasifique bien a las personas. eh, como sea. sigue siendo divertido
orgulloso Haskeller
¿Tenemos que imprimir resultados o podemos devolverlos de las funciones? Si esto último es permisible, para la tarea 1, ¿podemos devolver una matriz o similar?
Alex A.
La tarea 8 parece tener 2 formatos de salida, ¿podemos usar el primero?
Aditsu
1
@pppery, esta pregunta es anterior al enlace que proporcionó, por lo que no creo que se aplique a esta pregunta.
Noche2

Respuestas:

8

Pyth, 155 153 149 142 141 131 130 bytes

4 bytes gracias a @FryAmTheEggman

1, 5 y 4 bytes gracias a @Jakube

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

Construya la tabla de multiplicar a partir de la lista [1, 1, 2, 3, ...], que es +1SQ, luego imprima ay xelimine su primer carácter.

  1. 10 bytes :@.Om^Cd2z2

Sencillo.

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

Utiliza la fórmula sin(2 theta) * v^2/a, donde thetaes el ángulo, ves la velocidad inicial y aes9.81

  1. 7 bytes :o_/zNSz

Sencillo.

  1. 15 bytes :hxeM.u,eNsNQU2Q

Genere pares de fibonacci, encuentre el índice de la entrada en ellos, agregue uno.

  1. 14 bytes :IqSzSJj.-zsQQJ

Use la resta en forma de bolsa para eliminar el prefijo y el sufijo de la palabra, luego coloque el resto de la palabra en el medio. Si el resultado de esto no es una permutación de la entrada, no la imprima.

  1. 8 bytes :C.tolNQz

Ordenar por longitud. Transposición llena. Transponer de nuevo.

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

Los recuentos de monedas de salida están en el orden [quarters, dimes, nickels, pennies].

Elimine los primeros 2 caracteres de entrada y envíe a int para obtener centavos. Guardar en J. Para cada número dde la lista [25, 10, 5, 1], asigne posteriormente J%da J, luego genere el valor /Jdcon el valor original de J. Impresión.

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

Convierta las tuplas en rangos, combine en una lista, deduplica y clasifique. Guarda esto en J. Forma J, hMJy hMJ, J, donde hMJestá Jcon cada elemento aumentado en 1. Realizar resta en ambos casos. El primero es el extremo inferior de los rangos, el segundo es el extremo superior. Transponerlos en pares e imprimir.

isaacg
fuente
6

CJam, 223 bytes

Tarea 1, 35 bytes

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

Pruébalo en línea.

Tarea 2, 12 bytes

q_:i:mh\,mq/

Pruébalo en línea.

Tarea 3, 27 bytes

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

Pruébalo en línea.

Tarea 4, 12 bytes

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

Pruébalo en línea.

Tarea 5, 17 bytes

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

Pruébalo en línea.

Tarea 6, 25 bytes

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

Pruébalo en línea.

Tarea 7, 19 bytes

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

Pruébalo en línea.

Tarea 8, 33 bytes

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

Pruébalo en línea.

Tarea 9, 43 bytes

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

Pruébalo en línea.

Dennis
fuente
4

Haskell, 650 bytes

Tarea 1, 88 bytes:

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

Tarea 2, 76 bytes:

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

Tarea 3, 28 bytes

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

Tarea 4, 60 bytes:

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

Tarea 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)

Tarea 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

Tarea 7, 81 bytes

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

Tarea 8, 73 bytes

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

Tarea 9, 87 bytes (una copia descarada de la respuesta de @ MtnViewMark de un desafío similar)

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

Mathematica 10.3, 465 bytes

Todas estas son funciones anónimas. Además, gracias a Martin por su ayuda en el golf, ya que soy un novato en Mathematica.

Tarea 1, 69 bytes

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

\[Transpose] es el símbolo de "transposición" de 3 bytes.

Tarea 2, 13 bytes

Mean[#^2]^.5&

o

√Mean[#^2]&

(√ es de 3 bytes). El RootMeanSquareincorporado no es lo suficientemente corto ...

Tarea 3, 18 bytes

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

Tarea 4, 57 bytes

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

Tarea 5, 33 bytes

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

o

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

o

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

Tarea 6, 178 bytes (actualmente tiene un error)

({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 golfizado:

({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 manipulación de cuerdas es horrible ...

Tarea 7, 39 bytes

#~SortBy~StringLength~StringPadRight~#1

Tarea 8, 46 bytes

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

o

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

Tarea 9, 12 bytes

Interval@##&

Los intervalos pasados ​​al constructor se unen automáticamente. Supera eso.

mbomb007
fuente