He estado recorriendo este sitio por un tiempo, pero recientemente me interesé realmente en probar algunos de los desafíos. Tenía la intención de probar suerte en algunos de los temas de código de golf existentes, pero ayer no tuve acceso a Internet por un tiempo, y mientras tanto, pensé en mi propio desafío.
Su tarea es crear un programa o función que tome una matriz de Flotadores a
y un número entero n
, luego establezca cada valor en a
el promedio de los dos al lado, n
veces. Cuando se usa repetidamente con valores crecientes de n
, esto genera un movimiento ondulatorio:
Detalles específicos:
- Si resulta que solo hay un elemento
a
, o sin
es 0 o menos, el programa debe devolver la matriz original. - Las entradas y salidas pueden estar en cualquier formato que desee, siempre que estén visiblemente separadas.
Para cada paso:
- El primer elemento
a
debe convertirse en el promedio de sí mismo y el siguiente elemento. - El último elemento en
a
debería convertirse en el promedio de sí mismo y el elemento anterior. - Cualquier otro elemento en
a
debería convertirse en el promedio del elemento anterior y el siguiente elemento. - ¡Asegúrate de calcular la matriz del paso anterior y no la actual!
Casos de prueba: NOTA: ¡Sus entradas / salidas no tienen que estar en este formato!
[0, 0, 1, 0, 0], 1 -> [0, 0.5, 0, 0.5, 0]
[0, 0, 1, 0, 0], 2 -> [0.25, 0, 0.5, 0, 0.25]
[0, 0, 1, 0, 0], 0 -> [0, 0, 1, 0, 0]
[0, 0, 1, 0, 0], -39 -> [0, 0, 1, 0, 0]
[0, 16, 32, 16, 0], 1 -> [8, 16, 16, 16, 8]
[0, 1, 2, 3, 4, 5], 1 -> [0.5, 1, 2, 3, 4, 4.5]
[0, 64], 1 -> [32, 32]
[0], 482 -> [0]
[32, 32, 32, 16, 64, 16, 32, 32, 32], 4 -> [33, 27, 40, 22, 44, 22, 40, 27, 33]
Este es el código de golf , por lo que la respuesta más corta en bytes gana. El ganador será elegido en una semana (el 1 de agosto). ¡Buena suerte!
Editar: ¡ Felicidades al ganador, @issacg , con la friolera de 18 bytes!
fuente
n
no suministrados ya
no suministrados; realmente no agregan mucho.n
debería ser 4, no 5.Respuestas:
Pyth,
4618 bytesEste código espera entrada en el formulario
iterations, [wave1, wave2, wave3 ...]
, como se ve en el primer enlace a continuación.Demostración. Arnés de prueba.
El programa funciona aplicando el código dentro de la función reduce (
u
) a la lista de entrada, tantas veces como el número de iteraciones.Demostraré la función de propagación de ondas en la lista
[0, 1, 2, 3, 4, 5]
, que se encuentra enG
:+hGG
anteponeG
el primer elemento aG
, formando[0, 0, 1, 2, 3, 4, 5]
.t+GeG
agregaG
el último elementoG
y elimina su primer elemento, formando[1, 2, 3, 4, 5, 5]
.sV
primeros forma pares de las listas, dando[[0, 1], [0, 2], [1, 3], [2, 4], [3, 5], [4, 5]]
con el elemento final de la primera lista truncada. Luego, los pares se suman a través de las
función, dando[1, 2, 4, 6, 8, 9]
.cR2
usos división de coma flotante para dividir todos los números por 2, dando el resultado deseado,[0.5, 1.0, 2.0, 3.0, 4.0, 4.5]
.fuente
Muñeco de nieve 1.0.0 , 219 caracteres
Con saltos de línea para "legibilidad":
Versión sin golf / sin minificar:
Ejemplo de formato de E / S:
fuente
Pyth -
2524 bytesUtiliza enumerar, reducir para hacer iteraciones.
Pruébelo en línea aquí .
fuente
Raqueta,
164145 bytesSin golf
Tenga en cuenta que puede necesitar la
#lang racket
línea para ejecutar esto.fuente
R, 109 bytes
Esto crea una función sin nombre que acepta un vector y un entero y devuelve un vector. El enfoque aquí es tratar la entrada como una serie de tiempo univariante y aplicar un filtro de convolución lineal.
Ungolfed + explicación:
Ejemplos:
fuente
Haskell, 76 personajes
El truco consiste en agregar el primer número al comienzo de la lista y el último al final de la lista en lugar de tratar con las condiciones de contorno.
Pruebas:
fuente
if then else
, es decir, sec
conviertea#n|n<1=a|1<2=iterate f a!!n
y ses
conviertex!y=(x+y)/2
(y se llama...zipWith(!)(x:a)...
).c
un operador infijo, dicen#
:a#n|n<1=a|1<2=iterate f a!!n
. Llámalo como[0, 0, 1, 0, 0] # 2
.CJam,
2322 bytesPruébalo en línea
La entrada está en formato de lista CJam, por ejemplo, para el último ejemplo:
La salida también es una lista de CJam:
El enfoque básico es que en cada paso, el vector se desplaza una posición hacia la izquierda y una posición hacia la derecha. Cada uno de los dos vectores se rellena con el primer / último elemento, y luego se calcula el promedio de los dos vectores.
Explicación:
fuente
Java, 181 bytes
Aquí está la versión de golf:
Sin golf:
Traté de acortar las tareas y condicionales tanto como sea posible con Java. Las mejoras son bienvenidas, por supuesto.
fuente
JavaScript (ES6),
15313267 caracteresVuelvo a mi primera respuesta 6 meses después y ¿qué hago? Golf 50% de descuento, eso es lo que. ;)
Esta versión se llama a sí misma repetidamente hasta que
n
sea menor que 1, disminuyendon
en 1 cada vez.Una solución no recursiva (
15113078 caracteres):Sin golf: (anticuado)
Recursivo:
No recursivo:
fuente
if(n<2)return b;return s(b,n-1)
podría reducirse areturn n<2?b:s(b,n-1)
Java, 203 bytes
Intentando mi primer puesto con Java. Consejos de mejora son bienvenidos :)
Bastante impreso:
fuente
for
bucle externo a la declaración de incremento del bucle? Al igual quefor(i=0;i<n;b[0]=...,b[s-1]=...,a=...,++i)for(...)b[j]=...;
? Entonces deberías poder deshacerte de los frenillos.++i
entre sí y con comas en lugar de punto y coma). Pruébalo. :)f(a;b;c){d;e;}
debe ser completamente idéntico af{a;b;}{d;e;c;}
, y por lo tanto también af(a;b;e,c)d;
. Sin embargo, con su código reorganizado que ya no funciona, porque no puede mover elfor
interior del otrofor
, así que supongo que todo esto ya no importa. ;)Python 2, 98 bytes
Tomó el enfoque directo, solía
exec
dejar de usar un bucle while. Creo que hay una mejor manera de hacer la lógica para descubrir posiciones de casos especiales, pero esto funciona por ahora. La entrada debe estar formateada como[list], times
.Sin golf:
fuente
Mathematica, 81 bytes
Tengo la sensación de que podría jugar más golf si pudiera encontrar una mejor manera de manejar la condición de positividad.
Vale la pena señalar: Mathematica ofrece muchas soluciones incorporadas potenciales en su rango de funciones de filtro y procesamiento de listas, así como también
CellularAutomaton
. ElegíNest[... ListConvolve ...]
porque era la forma más fácil de resolver los problemas al final de la lista, pero otros ángulos podrían resultar más cortos.fuente
Matlab, 109
Ejemplos:
fuente
Scala,
195 caracteres (186 con salida diferida, es decir187 caracteresStream
)Probablemente no sea óptimo, el mapeo
sliding(3)
es muy útil en este caso.pruebas:
fuente
q (27 caracteres)
Ejemplos
fuente
R, 93 bytes
Como una función sin nombre
Expandido
Pruebas
fuente
Japt,
3937 bytes (no competitivos)Esta respuesta no es competitiva porque el lenguaje es más nuevo que el desafío. Solo quería ver qué tan bien mi lenguaje de golf podría resistir mi primer desafío.
Pruébalo en línea!
fuente
C ++ 14, 158 bytes
Requiere entrada para ser un contenedor
value_type==double
, comovector<double>
.Sin golf:
fuente
Raqueta 223 bytes
Sin golf:
Pruebas:
Salida:
fuente
Jalea , 14 bytes
Pruébalo en línea!
Programa completo
fuente
C # (Visual C # interactivo Compilador) ,
160144 bytesUtiliza una buena recursividad.
Pruébalo en línea!
fuente