Inspirado por esto
En el desafío vinculado, se nos pide que apliquemos la suma de los elementos del original y el reverso de la matriz de entrada. En este desafío, lo haremos un poco más difícil, introduciendo las otras operaciones matemáticas básicas.
Dada una matriz de enteros, recorra +, *, -, //, %, ^, donde //es la división de enteros y ^es exponente, mientras se aplica al reverso de la matriz. O, en otras palabras, aplique una de las funciones anteriores a cada elemento de una matriz, siendo el segundo argumento el reverso de la matriz, con la función aplicada recorriendo la lista anterior. Esto aún puede ser confuso, así que analicemos un ejemplo.
Input: [1, 2, 3, 4, 5, 6, 7, 8, 9]
Reverse: [9, 8, 7, 6, 5, 4, 3, 2, 1]
[ 1, 2, 3, 4, 5, 6, 7, 8, 9]
Operand: + * - / % ^ + * -
[ 9, 8, 7, 6, 5, 4, 3, 2, 1]
Result: [10, 16, -4, 0, 0, 1296, 10, 16, 8]
entonces la salida para [1, 2, 3, 4, 5, 6, 7, 8, 9]sería[10, 16, -4, 0, 0, 1296, 10, 16, 8]
Para cubrir los casos de esquina, la entrada nunca contendrá un 0, pero puede contener cualquier otro número entero en el rango de infinito negativo a infinito positivo. Puede tomar la entrada como una lista de cadenas que representan dígitos si lo desea.
Casos de prueba
input => output
[1, 2, 3, 4, 5, 6, 7, 8, 9] => [10, 16, -4, 0, 0, 1296, 10, 16, 8]
[5, 3, 6, 1, 1] => [6, 3, 0, 0, 1]
[2, 1, 8] => [10, 1, 6]
[11, 4, -17, 15, 2, 361, 5, 28] => [39, 20, -378, 7, 2, 3.32948887119979e-44, 9, 308]
Este es un código de golf, por lo que gana el código más corto (en bytes).
fuente

Respuestas:
Gelatina, 10 bytes ( tenedor )
Estaba trabajando en implementar un rápido para esto el otro día, por lo que es bastante sorprendente ver un uso tan pronto. Todavía existe como una bifurcación, por lo que no puede probarlo en línea.
Salida de muestra
Explicación
fuente
ƭpara admitir nilads (reemplazar valor) y mónadas (aplicar en el argumento de la izquierda) también2 1”q3ƭ€de[7,4,9,0]devoluciones[2, 1, 'q', 2]Casco , 16 bytes
Este desafío favorece los idiomas que pueden crear infinitas listas de funciones.Quizás no,evalFTWPruébalo en línea!
¿Cómo?
Solución alternativa de 17 bytes:
fuente
ë+*-÷%^? ¿Por qué hacer loenecesario?ëtoma 4 argumentos,etoma 2. No hay uno para 605AB1E , 18 bytes
Pruébalo en línea!
Explicación
fuente
Ig∍si quisieras usar el comando "newish" (no has visto mucho∍aquí).Bash + utilidades GNU, 53
Este script toma un nombre de archivo como parámetro de línea de comando.
Pruébalo en línea .
Lo bueno aquí es que
paste -dpermite dar una lista de separadores, que se usan cíclicamente. El resto es solo obtener la entrada en el formato correcto para hacer esto.fuente
Jalea , 15 bytes
Pruébalo en línea!o ver el conjunto de pruebas .
¿Cómo?
fuente
ż“+×_:%*”;"ṚVż“+×_:%*”ṁ$;"ṚVque también es de 15 bytes.Python 2 , 67 bytes
-3 bytes gracias a los ovs.
Pruébalo en línea!
Python 2 , 95 bytes
Pruébalo en línea!
evales malvado ... pero quizás más golfista. :PAGfuente
JavaScript (ES7),
6867 bytesMostrar fragmento de código
fuente
odentro de los paréntesis.pop()para guardar algunos bytes.otambién se utiliza como condición del operador ternario. Eso rompería ese esquema.Perl 6 ,
6766 bytesGuardado 1 byte gracias a @nwellnhof.
Pruébalo en línea!
Solución muy poco imaginativa (y probablemente mala). Comprime el argumento consigo mismo invertido. La lista resultante se asigna con el bloque que
EVALes la cadenaa (operator) b. El operador se elige de la lista de cadenas<+ * - div % **>utilizando la variable librestate(piensestaticen C: el valor persiste en todas las llamadas del bloque)$. Esto se crea para cada bloque por separado y se establece en 0. Puede hacer lo que quiera con él, pero puede hacer referencia a él solo una vez (cada aparición se$refiere a otra variable, en realidad). Entonces, en$++%6realidad es 0 durante la primera llamada, 1 durante la segunda, ... 5 durante la sexta, 0 durante la séptima y así sucesivamente.Al principio intenté prescindir de un
EVAL. De hecho, los operadores son solo subs (= funciones), pero sus nombres son tan extremadamente despiadados (&infix:<+>y así sucesivamente) que tuve que renunciar a ese enfoque.fuente
map {EVAL ".[0] ... .[1]"},zip $_,.reversees 1 byte más corto.Haskell ,
74117105 bytesPruébalo en línea!
Guardado 12 bytes gracias a @nimi
Ciertamente hay una mejor manera de lograr esto.
EDITAR 1. Exponente fijo para enteros; 2. Definitivamente hay una mejor manera, vea el comentario a continuación:
9591 bytesPruébalo en línea!
fuente
zipWith3($)(cycle[(+),(*),(-),div,mod,(^)])<*>reverseEs una versión más corta, ahora eliminada de la suya.hen la llamada deo:o a by sin eso puede en líneah( TIO ).Python 2 , 71 bytes
Pruébalo en línea!
¡Ahorré 2 bytes gracias a los ovs!
fuente
J,
4442 bytesTachado 44, yada yada ...
-2 bytes gracias a @ ConorO'Brien
Pruébalo en línea!
Tantos parens e insertos ... Seguramente hay una mejor manera de hacer esto (¿tal vez usando insert en lugar de infix?)
Explicación
Algunas notas:
J no tiene división entera, por lo que
%componimos -división con -floor>.. J's mod (|) hace el orden inverso de lo que esperaríamos, por lo que tenemos que invertir su orden usando~-reflexive.A pesar de que nos movemos en intervalos de 2, tenemos que usar
/-insertar para insertar los verbos para que se usen de forma periódica, ya que así es como\funciona -infix.fuente
()y repetirlo/- No pude resolverlo .../una matriz invertida (ya que funciona al revés ...) con verbos como(,+)`(,*)pero eso no ayuda mucho ... (tampoco funciona)+/`(*/)`...Ruby ,
6357 bytesNada lujoso, de verdad. Simplemente itere en la matriz, use un índice como iterador inverso, únase a una cadena usando el operador correcto, evalúe, enjuague y repita.
Pruébalo en línea!
fuente
k , 40 bytes
Pruébalo en línea!
fuente
MAT ,
2723 bytes-4 bytes gracias a @LuisMendo
Pruébalo en línea!
Explicación:
fuente
Perl 5 , 68 + 1 (-p) = 69 bytes
Pruébalo en línea!
Toma la entrada como una lista de números separados por espacios.
fuente
R , 74 bytes
Pruébalo en línea!
Esta es la respuesta final que se me ocurrió. Devuelve una lista de longitud
length(l)donde cada elemento es una lista que contiene el elemento correspondiente. Un poco horrible, pero todos están ahí. Si eso es inaceptable, cualquiera de los dosMappuede reemplazarsemapplypor +3 bytes.Como los operadores R son todas funciones (la notación infija solo es azúcar sintáctica), intenté seleccionar una de una lista; por ejemplo, la solución de 94 bytes a continuación.
Para intentar deshacerme del ciclo, lo intenté
sapply, pero eso solo funciona con una sola función y lista de entrada. Luego recordé la forma multivariadamapply, que toma unan-aryfunciónFUNynargumentos posteriores, aplicandoFUNal primero, segundo, ..., elementos de cada uno de los argumentos, reciclando si es necesario . También hay una función de contenedor amapply,Mapque "no hace ningún intento de simplificar el resultado" . Como es tres bytes más corto, es una buena oportunidad para jugar al golf.Así que definí una función trinaria (como en la solución de 80 bytes a continuación) que toma una función como su primer argumento y la aplica a su segunda y tercera. Sin embargo, me di cuenta de que
Mapes una función que toma una función como primer argumento y la aplica a las sucesivas. ¡Ordenado!Finalmente, subconjunto al final para asegurarnos de que solo devolvamos el primer
length(l)valores.R , 80 bytes
Pruébalo en línea!
Este no funciona, ya que devolverá 6 valores para listas con menos de 6 elementos.
R , 94 bytes
Pruébalo en línea!
Explicación (levemente no golfista):
Debido a que cada una de las funciones está vectorizada, podemos indexar al final (
res[i]). Esto es mejor que elevalenfoque a continuación.R , 100 bytes
Pruébalo en línea!
Este es el
evalenfoque más corto que pude encontrar; porque tenemos que recopilar los resultados en un vector, necesitamospasteunc( )alrededor de todas las expresiones, lo que agrega una tonelada de bytes innecesariosfuente
Casio-Basic, 108 bytes
Eso fue doloroso. Especialmente porque
mod(x,y)regresaxcuando realmente no debería, lo que significa que tuve que hacer mi propia función de mod: de ahí elx-int(x/y)y.Recorre
ide 0 alength(l)-1, tomando elementos sucesivos en laolista y solicitandol[i]porxyl[-i]paray. (Sin embargo, los índices negativos no funcionan, por lo que restoide la longitud de la lista y tomo ese índice).107 bytes para la función, +1 byte para agregar
len el cuadro de parámetros.fuente
Java 8, 336 bytes
Pruébalo aquí
Suspiro ..
Entrada como
int[], salida comojava.math.BigInteger[].Sin la regla " Para cubrir los casos de esquina, la entrada nunca contendrá un 0, pero puede contener cualquier otro número entero en el rango de infinito negativo a infinito positivo. ", Usando números enteros en el rango
-2147483648de2147483647, sería 186 bytes (entrada comoint[], y sin salida porque modifica esta matriz de entrada en su lugar para guardar bytes):Pruébalo aquí
Explicación:
fuente