Por supuesto, la red SE está muy bien informada sobre cómo ser respetuoso en el baño, pero para aquellos de ustedes que necesitan un resumen, ser respetuoso significa tirar la cadena del inodoro, etc. Lo más importante, sin embargo, es usar el puesto lo más lejos posible de otros como sea posible.
El reto
Dado un plano de un conjunto de puestos con indicaciones de cuáles están en uso como una cadena, debe devolver o imprimir desde una función o programa donde esté el lugar más respetuoso para hacer su negocio.
La entrada
0 1 2 3 4 5 <- The stall number which is not actually visible in the input.
| | |-| |-|-| <- the stalls
Los puestos están numerados en orden ascendente de izquierda a derecha. Siempre habrá al menos un puesto vacío. Puede haber hasta 50 puestos en una entrada. También puede tomar la entrada como una matriz o cadena de 0
sy 1
s o booleanos si lo prefiere.
Los puestos en uso tienen -
en ellos (entre las tuberías).
La salida
El puesto más respetuoso es el que, en promedio, está más alejado de los que están en uso. La distancia entre dos puestos es el valor absoluto de la diferencia de los números por encima de ellos.
Para ser claros: está encontrando la distancia promedio de todos los puestos, no solo de los vecinos.
Debe generar el número más bajo del puesto más respetuoso para ir a que esté vacío .
Ejemplos
Input:
|-| |-| OR 101
Output:
1
Input:
| | |-| |-|-| OR 001011
Output:
0
Input:
|-| |-| | | | |-|-| OR 101000011
Output:
1
Input:
|-| | | | | |-|-| | | | | OR 100000110000
Output:
11
Input:
|-|-|-|-| | | | | | |-| OR 11110000001
Output:
9
Input:
|-| | OR 10
Output:
1
Input:
|-| | |-| OR 1001
Output:
1
Este es el código de golf , por lo que gana el código más corto en bytes.
Puede usar indexación basada en 0 o 1 en su respuesta, lo que prefiera; si usa una indexación basada en 1, debe decirlo explícitamente en su respuesta.
[1,0,0,1]
como un caso de prueba. Ninguno de los casos de prueba actuales verifica si los lazos se rompen correctamente.101000011
devuelve 1 (en lugar de 4 o 5)?Respuestas:
Jalea ,
109 bytesUtiliza indexación basada en 1. Pruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
Swift,
158, 157, 128,100 BytesToma información de la
Array<Bool>
variablei
, devuelve la respuesta de la última expresión.Editar 1:
Guardado un byte mediante la conversión a bools mediante la comparación de cadenas
Edición 2:
Reelaborado mi algoritmo:
Edición 3:
Aprovechó la nueva regla que permite tomar datos directamente de una matriz booleana.
Sin golf:
fuente
Jalea , 13 bytes
1 indexado.
Pruébalo en línea!
Algoritmo
Implementación ingenua de la pregunta.
fuente
Java "sólo"
270 200 196 187 196 138 148146 bytes!ahorrado
4 13innumerables bytes gracias a Leaky Nun!1 byte gracias a MichealGolfedSin golf
input como una matriz booleana donde true implica una parada abierta.
fuente
a
.Ruby,
797876 +n
bandera = 77 bytesLa salida es indexación basada en 0. La entrada es la línea STDIN de 0 y 1.
fuente
0...~/$/
Es un buen truco. 👍🏻MATL , 14 bytes
Pruébalo en línea!
La salida está basada en 1.
Explicación
fuente
Perl 84 + 3 (
-alp
banderas) = 87 bytesNecesita
-alp
banderas para correr. Toma una cadena de 1 y 0 separados por espacios como entrada. Por ejemplo :Tenga en cuenta que agregué
$m=0
al principio, pero eso es solo para probarlo en varias entradas.fuente
+7
:F'' alp
.-
s no se cuentan.Matlab, 87 bytes
Toma una variedad de unos y ceros; usa indexación basada en 1.
Como algunas otras respuestas, maximiza la distancia total, no la media.
Probablemente hay más golf posible ...
fuente
JavaScript (ES6),
87868275 bytesToma una matriz booleana (verdadero / falso o 1/0). No tiene sentido calcular la distancia promedio ya que todos usan el mismo factor común, así que solo calcula la distancia total para cada puesto y encuentra el primer índice del más alto. Editar: guardado 1 byte usando en
*
lugar de&&
. Ahorró 5 bytes al encontrar la distancia más alta manualmente en base a un comentario de @Dendrobium. Se guardaron 7 bytes reutilizándolosu
como el acumulador de pseudo-reducción basado en un comentario de @ edc65.fuente
a=>(x=0,a.map((o,i)=>x<(t=a.reduce((r,u,j)=>r+(b=i-j)*b*u*!o,0))&&(x=t,r=i)),r)
reduce
lugar demap
- mmmms=>s.map((u,i)=>u||(s.map((w,j)=>u-=w*Math.abs(j-i)),u<x&&(x=u,r=i)),x=0)|r
1100011101
vínculos en2
y8
cuando se usa absoluto,8
cuando se usa al cuadrado), no es importante ya que parece que las reglas se han aclarado y los lazos ahora se resuelven con el puesto más a la izquierda ...J, 27 bytes
Intérprete en línea .
fuente
Ruby,
8776 bytesLancé este primer borrador rápidamente, pero mientras tanto Value Ink ya había publicado una respuesta de Ruby de 80 bytes ...
editar: despegó algunos bytes con la ayuda de Value Ink:
Es una función anónima que toma una serie de valores de verdad / falsedad, como por ejemplo:
fuente
(r=0...a.size)
y, a continuación mapear en que en lugar de utilizarwith_index
:r.map{|j|a[j]?(i-j).abs: 0}
. Esto debería darte 78 bytes.Mathematica, 53 bytes
Utiliza la indexación basada en 1 y toma la entrada como una lista de 0s y 1s.
fuente
Javascript ES6 -
989591868488 bytesEditar: Parece que el puesto más a la izquierda debe usarse en caso de empate. Las distancias al cuadrado ya no funcionan, revertidas a la distancia absoluta.
Sin golf:
Pruebas de funcionamiento:
fuente
Lua,
165150 ByesEsto engaña un poco usando el hecho de que, generalmente, lua pasa una tabla llamada arg que contiene cualquier entrada de línea de comando.
Estoy un poco decepcionado de haber usado un bucle for, pero no se me ocurrió una forma más pequeña de lograrlo.
Además, debido a lua, se usó 1 indexación basada.
Editar Snipped 15 bytes de un gsub derrochador.
fuente
C #, 127 bytes
Banco de pruebas
fuente