Todos a menudo escuchamos el modismo "caminar a través de la matriz" que significa "asignar la función sobre la siguiente matriz". Sin embargo, lo necesito hecho (¡ahora!), Así que quiero que ejecutes la matriz.
¿Cómo corro?
Imagina que hay una jauría salvaje de lobos detrás de ti
Correr a través de una matriz es como caminar a través de una, excepto que puede saltear elementos. Sí, a veces es desordenado, pero (en general) funciona. "¿Qué elementos se omiten?", Puede preguntar. Bueno, esto se hace al azar. ¡Caminemos corriendo por la matriz!
- Dejar
e
ser el elemento actual. - Deje
random
generar un flotador aleatorio[0,1)
. Sirandom() < 0.5
, entonces va al siguiente elemento y luego al paso 1. (Puede generar un número por otros medios, siempre que sea (idealmente) la misma posibilidad de saltar y permanecer. Por ejemplo, puede usar elegir un elemento de un conjunto de dos miembros y realizar la acción en función del resultado). - De lo contrario, realiza la función
f
ene
.
Objetivo
Dada una matriz / lista / cadena como cualquiera A
y un número K
, ejecute la matriz, agregando K
a cada miembro accedido. Salida / retorno de esta matriz. A
solo contendrá enteros no negativos, y K
solo serán enteros no negativos. Este es un código de golf , por lo que gana el programa más corto en bytes.
Casos de prueba (ejemplos)
K, A => possible K'
[1, 2, 3, 4], 0 => [1, 2, 3, 4]
[1, 2, 3, 4], 1 => [1, 3, 3, 5]
[0, 0, 0, 0], 2 => [2, 0, 0, 2]
fuente
[0,1)
¿error de tipografía? 2 más para ir ...x
tal que0 ≤ x < 1
.Respuestas:
Pyth, 7
Pruébalo aquí
Utiliza una elección aleatoria en lugar de una comparación de punto flotante, pero no debe distinguirse.
Expansión:
Usando coma flotante:
Pruébalo aquí
fuente
Clojure,
4137 bytesEliminó un par de bytes multiplicando por 0 o 1 y soltando el "si". ¡Crédito a la mayoría de todos los otros remitentes!
fuente
for
es más corto quemap
, vea mi respuesta como referencia :) También evita tener una función anónima interna, por lo que en lugar de iniciar el código(fn[a k]
puede usarlo#(
.Jalea,
987 bytesDe
8
a7
gracias a @FryAmTheEggman .Pruébalo en línea!
Explicación
fuente
MATL , 11 bytes
Utiliza números aleatorios de coma flotante.
Pruébalo en línea!
Explicación
fuente
Japt, 6 bytes
Pruébalo
Explicación
Entrada implícita de matriz
U
y enteroV
. Map (®
) sobre la matriz y, a cada elemento, sumaV
multiplicado porMq
, que genera aleatoriamente uno0
o1
. Salida implícita de la matriz resultante.fuente
Rubí, 28 bytes.
fuente
Julia,
332927 bytesEsta es una función anónima que acepta una matriz con una función anónima interna que acepta un entero y devuelve una matriz. Para llamarlo, asígnelo a una variable y llame como
f(x)(k)
.Generamos una matriz con la misma longitud que la matriz de entrada que consta de ceros y unos elegidos al azar con igual probabilidad. Multiplicamos esto por el entero de entrada y lo agregamos a la matriz de entrada.
Pruébalo en línea!
¡Ahorré 2 bytes gracias a Dennis!
fuente
Python 2,
6058 bytesEste programa resultó realmente simple. No hay muchos trucos de golf allí, aparte del obvio "
from module import*
", usando una lambda en lugar de una función regular y la falta general de espacios en blanco. Aparte de eso, en realidad es bastante idiomático. Si estuviera escribiendo esto de verdad, probablemente lo haría de una manera muy similar:O tal vez algo más elegante:
Pero eso es suficiente para presumir :)
Esta es la versión anterior de 60 bytes de cuando se requería usar un flotante para aleatoriedad:
Para cada elemento de la lista, agregue
k*(random()<.5)
. Los booleanos de Python evalúan a 0 y 1, por lo que esto agrega 0 a cualquier elemento para el que la condición no sea verdadera.El
random.random()
regreso de Python flota[0, 1)
, así que no tuve que preocuparme por eso.fuente
e+choice([0,k])
JavaScript (ES6), 38 bytes
fuente
PowerShell v2 +, 34 bytes
Toma entrada
$a
y$k
, la matriz y el int respectivamente. Luego recorremos la matriz y cada iteración del ciclo genera el elemento actual más las$k
veces(random 2)
que se ejecutaráGet-Random -Maximum 2
(es decir, a0
o a1
). Todos estos quedan en la tubería y la salida como una matriz está implícita.fuente
CJam, 10 bytes
Espera la matriz y el número en la parte superior de la pila en ese orden y los reemplaza con la nueva matriz.
Pruébalo aquí.
fuente
php 71 bytes
fuente
k (12 bytes)
p.ej
De manera más general, ¿dónde
f
se puede pasar como argumento para 16 caracteres?p.ej
fuente
Python 3
15211098 bytesEsta es mi primera solución de código de golf, así que no conozco ningún truco. Probé esto usando una función principal con casos de prueba. El tamaño del archivo es solo esta función.
Gracias a @ Cᴏɴᴏʀ O'Bʀɪᴇɴ por los consejos para eliminar espacios en blanco. Elogios adicionales a @undergroundmonorail por consejos que ahorraron 12 bytes.
fuente
import *
,a(x, y)
,x[ptr]=z+y
, etc También puede reemplazar los 4 espacios con un solo espaciox[ptr]=z+y
en la misma líneaif random()>0.5
para ahorrar 3 bytes de espacio en blanco. En Python 20.5
se puede escribir.5
para guardar un byte, aunque no sé si eso es cierto en Python 3. Si cambia el nombreptr
alp
que se ahorrará 6 bytes en total. Además, ¿estás en Windows? Windows almacena nuevas líneas como dos bytes, pero dado que a python no le importa si la nueva línea es de un byte o dos, puede contarla como 1, lo que hace que su solución actual sea de solo 103 bytes. Por cierto, bienvenido a PPCG :)Clojure, 32 bytes
Gracias David por la
rand-int
idea, definitivamente más corta que elif(>(rand)0.5)
enfoque. Aquífor
latemap
.fuente
Octava, 28 bytes
Ejecución de muestra en ideone .
fuente
05AB1E , 10 bytes
Código:
Pruébalo en línea! .
fuente
Java, 84 bytes
Sin golf
Notas
return A;
. El tipo de retorno necesitaría ser cambiado deint[]
avoid
. Sin embargo, esto no ahorra bytes adicionales ya que se necesita un espacio adicional entrevoid
yr
.Versión más corta (como se menciona en la nota), 75 bytes
Salida
fuente
Mathcad, bytes
Aún no se ha decidido el recuento de bytes formal como protocolo de recuento de Mathcad
fuente
Java
1081078582 bytes14 bytes guardados gracias a @TimmyD
fuente
main
,String[]
,int[]
, y salvar a otro pocos bytes cambiandonextFloat()>0.5
anext(1)==0
.new java.util.Random().nextFloat()
aMath.random()
, ya que es mucho más corto.s
, solo eli
método tiene el tipo de retorno,void
pero está tratando de regresarint[]
. También hay un punto y coma que falta despuésreturn s
.Perl 5 , 30 + 1 (-a) = 31 bytes
Pruébalo en línea!
fuente