Desafío
Los trabajadores de las fábricas suelen ser muy trabajadores. Sin embargo, su trabajo ahora está siendo reemplazado comúnmente por máquinas.
Tienes que escribir un programa que tome un número como entrada. Imprimirá una fábrica de 10 trabajadores 10 veces. Cada vez, cada trabajador tiene la 1/input
posibilidad de ser 'despedido' y reemplazado por una máquina.
Entrada
Un número entero, proveniente de STDIN o una llamada de función.
Salida
10 casos de la fábrica, cada uno con generalmente más trabajadores despedidos.
Formato de salida: cómo imprimir una fábrica
Una fábrica se ve así:
|0000000000|
o |0000011001|
Una tubería representa las paredes, un 0 representa un trabajador y un 1 representa una máquina, por lo que la primera impresión de la fábrica siempre será |0000000000|
.
Ejemplo
Entrada: 10
Salida:
|0000000000| //always start off with this
|0000000010| //a 1/10 chance means that this worker lost his job
|0000010010|
|0010010010|
|1010010010|
|1010110010|
|1010110011|
|1010111011|
|1010111111|
|1110111111|
Entrada: 5
Salida:
|0000000000| //always start here
|0000001001| //a 1/5 chance means that 2 workers got fired
|1000101001|
|1000101111|
|1101101111|
|1111111111| //after achieving all machinery, the machines continue to be printed
|1111111111|
|1111111111|
|1111111111|
|1111111111|
NOTA
El número de trabajadores despedidos es ALEATORIO: en mis ejemplos 1/5 chance
, siempre habrá 2 trabajadores despedidos, pero su programa tiene que hacer esto al azar, a veces 1 y a veces 3, solo tienen 1/5 de posibilidades de ser despedidos.
Respuestas:
Japt
-R
,2221201918 bytesIntentalo
Explicación
fuente
R ,
9289 bytesPruébalo en línea!
Sin golf:
fuente
replicate
yfor
bucles sin éxito, sin embargo, pero con sus consejosDo-while loops
, finalmente me di cuenta de cuán abusivo es{
potencialmente esto. He extendido este abuso a un ejemplo confor()
una solución de 92 bytes. Tal vez ya te diste cuenta de las implicaciones del{
abuso cuando escribiste esa sugerencia, pero me di cuenta hace un momento. tio.run/##K/r/…"for"
que casi siempre no es mejor quefor
, y en ocasiones es peor !pmax
se puede utilizar. Aquí está mi punto anterior sobre el{
operador. tio.run/##PZDBasNADETv@xVDfKhNjcGHXAKl5OJTT2l/…JavaScript (ES6), 84 bytes
Pruébalo en línea!
Versión recursiva, 88 bytes.
Pruébalo en línea!
¿Cómo?
Comenzamos con k = s = '5000000000' .
En cada iteración:
Obligamos a cada carácter i de s a un número, calculamos i módulo 5 , de modo que el 5 inicial se trata como un 0 , y realizamos aleatoriamente un OR bit a bit con 1 con la probabilidad esperada 1 / n , excepto en la primera iteración .
El contador k se desplaza a la derecha en 3 bits. Paramos la recursión tan pronto como k = 0 , lo que da 10 iteraciones.
Es importante tener en cuenta que 5000000000 es un poco más grande que un entero de 32 bits, por lo que se convierte implícitamente en 5000000000 & 0xFFFFFFFF = 705032704 justo antes de que ocurra el primer desplazamiento a nivel de bits. De ahí los siguientes pasos:
fuente
APL (Dyalog) , 37 bytes
Pruébalo en línea!
¿Cómo?
10⍴0
- Comience con 10 ceros.⎕←' '~⍨⍕'|'⍵'|'
- cada vez que imprima la matriz formateada,?10⍴⍺
- generar una matriz aleatoria con valores que van1
a la entrada,⍺=
- comparación de elementos sabios con la entrada. debe marcar1
/ entrada de los elementos, dando cada a1
/ entrada cada vez,⍵+
- agregar a la matriz,×
- Signum. cero permanece cero, cualquier cosa mayor que uno vuelve a uno.⍣10
- Repite 10 veces.fuente
Retina , 30 bytes
Pruébalo en línea!
Me estoy divirtiendo mucho con la aleatoriedad en Retina ^^
Explicación
La primera etapa configura la cadena con la que trabajaremos:
Reemplaza toda la entrada con
|
una nueva línea y luego 10 líneas que contienen tantos0
s como dice la entrada. El primer carácter en cada línea representará a un trabajador de la fábrica.La siguiente etapa significa:
La primera línea de la cadena de trabajo contiene solo un
|
, que será el primer carácter impreso por cada iteración del bucle (siendo el primer carácter de la primera línea), y también se imprimirá al final de cada iteración (siendo el primero carácter de toda la cadena). El reemplazo nunca tendrá ningún efecto en esta línea porque no contiene ningún dígito.Cada otra línea contiene
n
dígitos, por lo que hay un 1 enn
posibilidad de convertir el primer carácter de la línea (que es el único significativo) en a1
.fuente
PowerShell ,
828069 bytesPruébalo en línea!
Toma entrada
$x
. Crea una matriz de todos los ceros, los guarda$a
y luego los repite muchas veces. Convenientemente, la fábrica es tan amplia como el valor de las iteraciones. Cada iteración, sacamos nuestra fábrica actual con"|$(-join$a)|"
, luego recorremos cada elemento de$a
.En el interior, estamos seleccionando el elemento actual
$_
que se ha-b
inutilizado,or
ya sea en1
función de laRandom
posibilidad basada en la entrada$x
. Por ejemplo, para la entrada10
,Get-Random -max 10
oscilará entre0
y9
y será0
aproximadamente 1/10 del tiempo. Por lo tanto, con una!(...)
envolturaRandom
, obtendremos una cantidad1
aproximada1/input
de tiempo y la otra1-1/input
cantidad de tiempo$_
. Sí, esto a veces significa que estamos sobrescribiendo un1
con otro1
, pero está bien.Esa matriz resultante se almacena de nuevo en
$a
la siguiente ronda. Todas las cadenas resultantes quedan en la tubería, y lo implícitoWrite-Output
en la finalización del programa nos da nuevas líneas de forma gratuita.-2 bytes gracias a Veskah.
-11 bytes gracias a ASCII-only.
fuente
$a
cuando ya lo estamos recorriendo? jajaja Y eso es un truco inteligente con el-bor
. ¡Gracias!Perl 6 , 58 bytes
Pruébalo en línea!
+(1 > $_ * rand)
genera un solo bit con la frecuencia requerida de1
s.xx 10
replica esa expresión diez veces para producir una única instancia de fábrica como una lista de bits, y[~]
une esa lista en una sola cadena.xx 9
replica esa expresión generadora de cadenas de fábrica nueve veces, y luego[\~|]
realiza una reducción triangular (que algunos otros lenguajes llaman "exploración") con stringwise u operador~|
, de modo que un trabajador despedido en una iteración anterior permanece activado en las posteriores.fuente
for
. Supera la solución basada en números en la{say "|{.join}|"for [\<<+|>>] (?$++X*!<<^$_).roll(10)xx 10}
que estaba trabajando en dos bytes. Con[\Z+|]
él serían 56 bytes, pero esto no funciona por alguna razón.$_*rand
con.rand
. La forma en que interpreto las reglas, devolviendo una lista de cadenas de "fábrica" también debería estar bien.Python 2 ,
104103 bytesPruébalo en línea!
fuente
Jalea , 22 bytes
Un programa completo que acepta el entero como una entrada de línea de comando e imprime la salida a STDOUT.
(Como enlace monádico, devuelve una lista de caracteres y enteros).
Pruébalo en línea!
¿Cómo?
Decide de manera efectiva en cada etapa si cada trabajador (incluidas las máquinas) pierde su trabajo (con una posibilidad de N), sin embargo, las máquinas se reemplazan por máquinas (usando OR lógico).
fuente
MATL , 26 bytes
Pruébalo en línea!
(Larga) explicación
Ejemplos de contenido de la pila se muestran en el camino. En cada paso, el contenido de la pila se muestra de abajo hacia arriba.
fuente
JavaScript (Node.js) ,
1059390 bytesPruébalo en línea!
+2 bytes para colocar la matriz dentro de la función, gracias a @Shaggy por señalar eso
Pruébalo en línea!
fuente
w
lo que deberán declararse dentro de su función.C (gcc) ,
110106 bytes-4 bytes de @ceilingcat
Pruébalo en línea!
Itera a través de una lista de caracteres para cada ronda de reemplazos.
Sin golf:
fuente
SmileBASIC, 75 bytes
fuente
Perl 5 , 44 bytes
Pruébalo en línea!
fuente
05AB1E , 22 bytes
Pruébalo en línea!
Debería haber más espacio para jugar al golf.
TÅ0
- Empuje una lista de 10 ceros.TF...
- Haz esto 10 veces:DJ
- Duplicar el elemento actual y unirlo.'|.ø=
- Rodéelo con dos|
sy imprima en STDOUT.ITи
- Repita la entrada 10 veces.€L€Ω
- Y para cada aparición, obtenga un elemento aleatorio de [1 ... N] . (Puede haber una función incorporada para esto que aún no he visto)Θ
- Presione 05AB1E truthified ™. Para cada uno, verifique si es igual a 1 .s...~
- Lógico O el resultado por el elemento actual.fuente
JavaScript, 83 bytes
Mostrar fragmento de código
fuente
Java 10,
153152131 bytes-18 bytes gracias a @ OlivierGrégoire , y -3 bytes más al convertir Java 8 a Java 10.
Explicación:
Pruébalo en línea.
fuente
var
porString
Java 9 y versiones inferiores y por 3 bytes adicionales. Básicamente fusioné los dos bucles que tienes.Carbón ,
302927 bytesPruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Empuje una cadena de 10
0
s a la lista vacíau
.Repita el siguiente comando 10 veces.
Para cada carácter de la última cadena, repítalo
n-1
veces, agregue un1
y elija un carácter aleatorio de la cadena. Esto da la1/n
posibilidad de cambiar el personaje a a1
. El resultado es empujado au
.Mapee sobre la lista de cadenas, rodeando cada una de ellas
|
, luego imprima implícitamente cada una en su propia línea.fuente
Python 3 , 132 bytes
Pruébalo en línea!
fuente
APL + WIN,
30 4035 bytesPerdí el bit sobre no espacios; (- arreglado y gracias a Uriel por -3 bytes
Solicita la entrada en pantalla del número
Explicación similar a la de Uriel:
fuente
9 10⍴?90⍴5
→?9 10⍴5
. También necesitas eliminar espaciosVBA, 144 bytes
Sangrado para facilitar la lectura:
Aprovecha 2 puntos: las matrices de VBA pasarán por defecto a Base 0 (por lo que
w(9)
es lo mismo quew(0 to 9)
) y la creación de la matriz como larga la inicializará automáticamente a 0.(De manera molesta, 20 bytes tienen un formato automático que VBA agrega pero que en realidad no se requiere: 19 espacios y un punto y coma)
fuente
Todavía no veo la respuesta para Ruby, así que:
Ruby , 92 bytes
Pruébalo en línea!
fuente
rand(n)<1
lugar derand(n)==0
, y guarde algunos usando en{..}
lugar dedo..end
, por ejemplox.times{puts'|'+z...}
Ruby, 67 bytes
Creo que he engañado algunas cosas aquí. En primer lugar, esta función imprime la salida con comillas alrededor de cada línea, por ejemplo:
Si esto es inaceptable (dado que esto es ascii-art , ese es probablemente el caso), aquí hay una solución que imprime sin comillas para 70 bytes :
Explicación:
fuente
PHP,
7170 bytesfusionar bucles guardados 5 bytes (nuevamente):
Ejecutar como tubería
-nR
o probarlo en línea .edición 1: formato fijo y primera salida (sin cambios en el recuento de bytes gracias al golf adicional)
edición 2: golfó un byte más: después de la última impresión, ya no hay necesidad de despedir a nadie.
fuente
C # (compilador interactivo de Visual C #) , 131 bytes
Oye, al menos me até con Java.
Pruébalo en línea!
fuente