Obviamente, a rede SE tem muito conhecimento de como ser respeitoso no banheiro, mas para aqueles que precisam de uma recapitulação, ser respeitoso significa liberar o vaso sanitário, etc. dos outros quanto possível.
O desafio
Dado o plano de um conjunto de barracas com indicações de quais estão em uso como uma sequência, você deve retornar ou imprimir a partir de uma função ou programa em que seja o local mais respeitoso para fazer seus negócios.
A entrada
0 1 2 3 4 5 <- The stall number which is not actually visible in the input.
| | |-| |-|-| <- the stalls
As barracas são numeradas em ordem crescente da esquerda para a direita. Sempre haverá pelo menos uma barraca vazia. Pode haver até 50 barracas em uma entrada. Você também pode tirar a entrada como uma matriz ou string de 0
s e 1
s ou booleans se preferir fazê-lo.
As barracas em uso têm -
nelas (entre os canos).
A saída
A barraca mais respeitosa de se ir é a que fica, em média, mais distante das que estão em uso. A distância entre duas barracas é o valor absoluto da diferença dos números acima delas.
Só para esclarecer: você está encontrando a distância média de todas as barracas - não apenas das vizinhas.
Você deve produzir o número mais baixo da paralisação mais respeitosa para ir para que esteja vazio .
Exemplos
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
Isso é código-golfe , então o código mais curto em bytes vence!
Você pode usar a indexação baseada em 0 ou 1 em sua resposta - o que você preferir; se você usa uma indexação baseada em 1, deve dizê-lo explicitamente em sua resposta.
[1,0,0,1]
como um caso de teste. Nenhum dos casos de teste atuais verifica se os vínculos foram interrompidos corretamente.101000011
retornar 1 (em vez de 4 ou 5)?Respostas:
Geléia ,
109 bytesUsa indexação baseada em 1. Experimente online! ou verifique todos os casos de teste .
Como funciona
fonte
Swift,
158, 157, 128,100 bytesPega a entrada da
Array<Bool>
variáveli
, retorna resposta da última expressão.Editar 1:
Salva um byte convertendo para bools via comparação de string
Edição 2:
Retrabalhei meu algoritmo:
Edição 3:
Aproveitou a nova regra que permite receber entradas diretamente de uma matriz booleana.
Ungolfed:
fonte
Gelatina , 13 bytes
1 indexado.
Experimente online!
Algoritmo
Implementação ingênua da questão.
fonte
"Apenas" Java
270 200 196 187 196 138 148146 bytes!economizou
4 13inúmeros bytes graças ao Leaky Nun!1 byte graças a MichealGolfedUngolfed
entrada como uma matriz booleana em que true implica uma paralisação aberta.
fonte
a
.Ruby,
797876 +n
sinalizador = 77 bytesA saída é indexação baseada em 0. A entrada é a linha STDIN de 0 e 1.
fonte
0...~/$/
é um bom truque. 👍🏻MATL , 14 bytes
Experimente online!
A saída é baseada em 1.
Explicação
fonte
Perl 84 + 3 (
-alp
sinalizadores) = 87 bytesPrecisa de
-alp
sinalizadores para executar. Pega uma sequência de 1 e 0 separada por espaços como entrada. Por exemplo :Observe que eu adicionei
$m=0
no início, mas isso é apenas para testá-lo em várias entradas.fonte
+7
:F'' alp
.-
s não são contados.Matlab, 87 bytes
Toma matriz de uns e zeros; usa indexação baseada em 1.
Como algumas outras respostas, maximiza a distância total e não a média.
Provavelmente há mais possibilidades de golfe ...
fonte
JavaScript (ES6),
87868275 bytesToma uma matriz booleana (verdadeiro / falso ou 1/0). Não faz sentido calcular a distância média, pois todos eles estão usando o mesmo fator comum; portanto, basta calcular a distância total de cada estol e encontrar o primeiro índice do mais alto. Editar: salvou 1 byte usando em
*
vez de&&
. Economizou 5 bytes localizando a maior distância manualmente com base em um comentário de @Dendrobium. Economizou 7 bytes reutilizandou
como acumulador de pseudo-redução com base em um comentário de @ edc65.fonte
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
vez 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
ligações em2
e8
quando se usa absoluto,8
quando se usa o quadrado), não que isso importe, pois parece que as regras foram esclarecidas e os laços estão agora resolvidos com mais à esquerda tenda ...J, 27 bytes
Intérprete online .
fonte
Ruby,
8776 bytesJogamos esse primeiro rascunho rapidamente juntos, mas, enquanto isso, o Value Ink já havia postado uma resposta Ruby de 80 bytes ...
edit: tirou alguns bytes com a ajuda do Value Ink:
É uma função anônima que recebe uma matriz de valores de verdade / falsidade, como por exemplo:
fonte
(r=0...a.size)
e, em seguida, o mapa em que em vez de utilizarwith_index
:r.map{|j|a[j]?(i-j).abs: 0}
. Isso deve lhe dar 78 bytes.Mathematica, 53 bytes
Usa indexação baseada em 1 e recebe a entrada como uma lista de 0s e 1s.
fonte
Javascript ES6 -
989591868488 bytesEdit: Parece que o estol mais à esquerda deve ser usado em caso de empate. As distâncias quadradas não funcionam mais, revertidas para a distância absoluta.
Ungolfed:
Execuções de teste:
fonte
Lua,
165150 ByesIsso engana um pouco usando o fato de que geralmente lua passa uma tabela chamada arg que contém quaisquer entradas de linha de comando para ela.
Estou um pouco decepcionado por ter usado um loop for, mas não consegui pensar em uma maneira menor de fazer isso.
Além disso, como lua, 1 indexação baseada foi usada.
Editar 15 bytes de um gsub desperdiçado.
fonte
C #, 127 bytes
Cama de teste
fonte