El resumen
Cree un programa que genere una matriz de longitud aleatoria con números aleatorios, luego aplique una serie de reglas que alteren la matriz. Después de que se hayan aplicado las reglas, imprima la suma de la matriz a menos que se especifique lo contrario
Configuración de matriz
La matriz debe tener una longitud aleatoria entre 5 y 10 inclusive, con enteros aleatorios entre 1 y 20 inclusive. Cada longitud de matriz debe tener la misma probabilidad de suceder y cada número entero debe tener la misma probabilidad de ser elegido por elemento.
Las 7 reglas
Las reglas deben actuar como si se aplicaran en secuencia (por ejemplo: la regla 1 actúa antes que la regla 2) y solo se aplican una vez. Para la prueba de la aplicación de la regla, la matriz debe imprimirse en la consola después de cada aplicación de la regla y una vez antes de aplicar las reglas.
- Si la matriz contiene un 7, reste 1 de cada elemento
- Si se aplica la regla 1 y la matriz ahora contiene un 0, agregue 1 a cada elemento
- Si la matriz contiene un 13, excluya la 13 y todos los elementos que siguen, de la matriz
- Si la matriz contiene un 2, excluya todos los números impares
- Si la matriz contiene un 20, y el tercer elemento es par, devuelve 20 como la suma y luego termina. Si hay un 20 presente y el tercer elemento es impar, devuelve 20 veces la longitud de la matriz como la suma y luego termina.
- Si la suma es mayor que 50, elimine el último elemento repetidamente hasta que sea menor o igual a 50
- Si la matriz contiene un 16, imprima la suma en decimales y hexadecimales.
Ejemplo
Aquí hay una matriz inicial,
[20, 2, 5, 7, 14, 8]
La regla 1 se puede aplicar:
[19, 1, 4, 6, 13, 7]
La regla 3 se aplica a continuación:
[19, 1, 4, 6]
No se necesitan otras reglas, por lo que el programa devuelve 30 como suma.
Notas
- No soy un jugador de código experimentado, aunque puedo decir que mi registro personal está en Python 3 con 369 bytes .
- Las reglas no tienen que aplicarse realmente en orden, sino que deben actuar como si lo hicieran.
fuente
[3 3 3 3 4 3]
y[4 4 3 4 4]
, cada una con una probabilidad del 50%, cumple con lo que está escrito en "configuración de la matriz". Entonces, ¿puedo simplemente salir19
cada vez? (Por supuesto, lo que realmente pienso es que la definición de "aleatorio" debe aclararse).If the array contains a 20, and the third element is even/odd
, ¿qué pasa si la matriz tiene menos de 3 elementos en este paso?Respuestas:
Python 3,
294301287356 bytesNo sé cómo va a evitar que las personas eludan las reglas, pero este utiliza el procedimiento especificado.
+7 bytes; gracias a @YamB por guardar algunos bytes; Agregó mucho más para corregir un error anterior.
-14 bytes gracias a @RootTwo y a mí y también corrigió el error.
+83 bytes; esto se está haciendo terriblemente largo porque OP sigue cambiando las reglas. -algunos bytes gracias a @ZacharyT
fuente
k=[r(1,20)for _ in'-'*r(5,11)]
. Puede guardar otro byte utilizando lask=[i+~-(1in k)*(7in k)for i in k]
reglas 1 y 2.1
, y puede cambiarloprint
en la segunda y tercera a las últimas líneasp
. Y tú ... no has actualizado tu bytecount.05AB1E , 91 bytes
Pruébalo en línea! o con entrada
fuente
Javascript (ES6),
344342340342335331333313311305298297290289283279 bytesHuzzah! Finalmente
atado con elritmo Arnauld !Después de este intercambio * en los comentarios del desafío y después de mucha deliberación, he decidido utilizarlo
new Date
como semilla para el generador de números aleatorios en lugar deMath.random()
. Hacerlo significa que todos los enteros en la matriz serán del mismo valor.Intentalo
Array(x).fill()
con[...Array(x)]
.+1
por a~
.0
se devuelva una matriz vacía.while
bucle de fecking .,
últimas 2 declaraciones con a|
y eliminando el encerramiento()
.console.log
conalert
.a.includes()
.includes()
y simplemente usando enindexOf()
todo momento.s
variable a algún lugar donde no se necesita una coma.Math.random()
connew Date
.Versión legible y comprobable
console.log
lugar dealert
para su cordura! (Se ve mejor en la consola de su navegador)Mostrar fragmento de código
* Captura de pantalla, en caso de que se elimine:
fuente
C (gcc) ,
621619593585570562557552529517500482461444442441438 bytesAquí se necesita mucho golf ... Se corrigió un error por el cual se imprimía el hexadecimal una vez por cada 16 en la lista ...
Un agradecimiento especial a ZacharyT con la ayuda de golf
Pruébalo en línea!
fuente
JavaScript (ES6),
296295290289 bytesUn programa completo que registra la matriz inicial, los resultados intermedios y la suma final en la consola.
Cómo funciona
Esto fue comprimido usando este JS Packer .
Descompostura:
226225 bytes6964 bytesA continuación se muestra el código fuente original con algunos espacios en blanco adicionales y avances de línea para facilitar la lectura. En lugar de aplicar trucos de golf estándar, fue escrito de una manera que produce tantas cuerdas repetitivas como sea posible para complacer al empacador. Por ejemplo, la sintaxis
if(k=~a.indexOf(N))
se duplica en todas partes, aunquek
solo se usa en la tercera regla.Métodos de desembalaje
El código de desempaque original es:
Todas las siguientes variantes de ES6 tienen exactamente el mismo tamaño:
La única forma que he encontrado hasta ahora para reducir algunos bytes es usar
for ... of
:fuente
n&1^1
(no se empaqueta en absoluto, pero es solo un byte más corto que!(n&1)
). Pensé en eso en algún momento y olvidé incluirlo.¡Primero prueba en code golf!
¡Ya vencido por otros javascripters! Dangit! ¡¡¡Voy a mejorar!!! =)
Javascript ->
550402 bytesDefinitivamente podría mejorarse. Comprimido ahora:
Original:
fuente
Java 7,
622619618 bytes-1 byte gracias a @Poke
Explicación:
Resultados de muestra: los
comentarios detrás de los resultados de muestra no se imprimen, pero los agregué como aclaración.
Pruébalo aquí.
fuente
List a = new ArrayList()
? Podría guardar algunos bytes. Sin embargo, es posible que deba agregar un tipo de letra al hacer la aritmética real. Si no,Long
es más corto queInteger
List
que tengo que usar un(int)
yeso cinco veces, así como el cambio del bucle para cada uno-a partirint
deObject
y añadir un sexto elenco. En cuanto aLong
: gracias, eso ahorra 1 byte :) (todavía tiene que cambiar el for-each deint
tolong
,r.nextInt(20)+1
tor.nextInt(20)+1L
).Ruby 2.4, 260 bytes
Se requiere Ruby 2.4 para
Enumerable#sum
.Pruébalo en línea! (Ni repl.it ni tio.run admiten Ruby 2.4 todavía, por lo que esta versión en línea reemplaza
sum
porinject(:+)
, que tiene el mismo comportamiento).fuente
R (3.3.1), 325 bytes
Implementación bastante ingenua; Creo que probablemente pueda hacerlo un poco más corto.
fuente
PowerShell ,
525413bytesPruébalo en línea!
Quería intentar este, aunque pensé que no superaría las respuestas que ya están aquí: PI todavía ha estado intentando descifrar esto, estoy seguro de que es posible con menos bytes. Encontré un mejor método para hexadecimal, pero probablemente aún podría mejorar.
Tuve que lanzar
$a
una cadena tantas veces que era mejor crear un filtro para ella ...Eché de menos algunos campos de golf fáciles, como paréntesis y espacios. ¿Todavía podría haber algo por ahí?
Código algo más fácil de leer:
fuente
MATLAB, 275 bytes
Originalmente planeé tal vez una respuesta Octave de una sola línea, pero requerir la producción de todas las reglas aplicadas frustró mis planes. En cambio, una respuesta MATLAB bastante sencilla con algunas optimizaciones interesantes, por ejemplo, el uso de en
cumsum
lugar de lo obviowhile
para la regla 6. Aún así, se desperdicia una gran cantidad de bytes enif
s para evitar la salida si no se aplica una regla.Pruébalo en línea!
fuente
Scala 587 bytes un trazador de líneas
Scala, 763 bytes como es
fuente
a: Array[T]
? No tienes espacioargs:Array[String]
, que es lo que resultó en mi consulta.MATLAB,
228241bytesEsto aplicará todas las reglas en orden, imprimiendo el valor de la matriz después de cada paso.
El programa se bloqueará en la regla 5 si el número resultante de elementos es inferior a tres. Actualmente no hay nada que decir qué debería suceder si no hay un tercer elemento, por lo que supongo que un bloqueo es aceptable.El programa ahora imprimirá 20 si hay menos de 3 elementos y uno o más es un 20.Curiosamente, el paso 2 se puede aplicar independientemente de si el paso 1 fue. Esto se debe a que la matriz de entrada nunca tendrá un 0, lo que significa que si hay 0 en la matriz, debe ser el resultado del paso 1.
Todas las reglas se aplican a su vez, hasta 5, incluso si no se realizan cambios. Como resultado, la matriz se imprimirá al principio y luego, después de cada paso, hasta 5. Después del paso 5, obtendrá la suma si se aplica, o no saldrá hasta después del paso 6. Se
a
podría agregar una línea adicional que contenga después. la instrucción else para garantizar que el valor de la matriz se imprima después del paso 5 a un costo de 2 bytes.También me gustaría mencionar que no miré las otras respuestas hasta después de haber escrito esto. Ahora veo que hay otra respuesta de MATLAB con algunas similitudes, todas las cuales son coincidencia.
fuente
Python 3,
297 293 289, 278 bytesComo descubrió Arnauld, no puede obtener 0 a menos que se haya aplicado la regla 1, que se guardó en la sangría. Gracias a todos los que también comentaron con sugerencias.
Pruébalo en línea
fuente
and
y~
.from random import* a=b=sample(range(1,20),randint(5,10))
ahorra algunos bytes ya que puede eliminar la línea 2.Perl 6 , 246 bytes
Sin golf:
fuente
Lisp común, 490 bytes
Aquí la matriz se representa como una lista Common Lisp.
Como de costumbre, gran uso de
and
yor
como estructuras de control.fuente