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 n
como entrada, genera una tabla de multiplicación para enteros positivos en el rango [1, n]
. n
Estará en el rango [1, 12]
. Todos los números deben estar alineados a la izquierda en la tabla. Usa el personaje x
para 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 código de golf , 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 N
está 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
Respuestas:
Pyth,
155153149142141131130 bytes4 bytes gracias a @FryAmTheEggman
1, 5 y 4 bytes gracias a @Jakube
J+1SQp\xtjmsm.[`*dk\ 4JJ
Construya la tabla de multiplicar a partir de la lista
[1, 1, 2, 3, ...]
, que es+1SQ
, luego imprima ayx
elimine su primer carácter.@.Om^Cd2z2
Sencillo.
c*.t.tyvw7Z*QQ9.81
Utiliza la fórmula
sin(2 theta) * v^2/a
, dondetheta
es el ángulo,v
es la velocidad inicial ya
es9.81
o_/zNSz
Sencillo.
hxeM.u,eNsNQU2Q
Genere pares de fibonacci, encuentre el índice de la entrada en ellos, agregue uno.
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.
C.tolNQz
Ordenar por longitud. Transposición llena. Transponer de nuevo.
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úmerod
de la lista[25, 10, 5, 1]
, asigne posteriormenteJ%d
aJ
, luego genere el valor/Jd
con el valor original deJ
. Impresión.C-M.p,JS{srMQhMJ
Convierta las tuplas en rangos, combine en una lista, deduplica y clasifique. Guarda esto en
J
. FormaJ, hMJ
yhMJ, J
, dondehMJ
estáJ
con 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.fuente
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 acordó unir fuerzas :)
fuente
CJam, 223 bytes
Tarea 1, 35 bytes
Pruébalo en línea.
Tarea 2, 12 bytes
Pruébalo en línea.
Tarea 3, 27 bytes
Pruébalo en línea.
Tarea 4, 12 bytes
Pruébalo en línea.
Tarea 5, 17 bytes
Pruébalo en línea.
Tarea 6, 25 bytes
Pruébalo en línea.
Tarea 7, 19 bytes
Pruébalo en línea.
Tarea 8, 33 bytes
Pruébalo en línea.
Tarea 9, 43 bytes
Pruébalo en línea.
fuente
Haskell, 650 bytes
Tarea 1, 88 bytes:
Tarea 2, 76 bytes:
Tarea 3, 28 bytes
Tarea 4, 60 bytes:
Tarea 5, 64 bytes
Tarea 6, 93 bytes
Tarea 7, 81 bytes
Tarea 8, 73 bytes
Tarea 9, 87 bytes (una copia descarada de la respuesta de @ MtnViewMark de un desafío similar)
fuente
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
\[Transpose]
es el símbolo de "transposición" de 3 bytes.Tarea 2, 13 bytes
o
(√ es de 3 bytes). El
RootMeanSquare
incorporado no es lo suficientemente corto ...Tarea 3, 18 bytes
Tarea 4, 57 bytes
Tarea 5, 33 bytes
o
o
Tarea 6, 178 bytes
(actualmente tiene un error)Menos golfizado:
La manipulación de cuerdas es horrible ...
Tarea 7, 39 bytes
Tarea 8, 46 bytes
o
Tarea 9, 12 bytes
Los intervalos pasados al constructor se unen automáticamente. Supera eso.
fuente