Dada uma posição com uma fileira de torres e / ou espaços vazios, produza quantos movimentos diferentes de torres são possíveis. Uma torre pode se mover para a esquerda ou direita para um espaço vazio, mas não para uma que exija passar por outra torre. Quando uma torre se move, as outras torres permanecem no lugar.
Por exemplo, nesta posição, são possíveis 6 movimentos :
.R..RRR.
- A primeira torre (mais à esquerda) pode mover 1 espaço para a esquerda ou 1 ou 2 espaços para a direita (3 movimentos)
- A próxima torre só pode mover 1 ou 2 espaços para a esquerda (2 movimentos)
- A terceira torre não pode se mover porque está espremida entre outras duas (0 movimentos)
- A última torre só pode mover 1 espaço para a direita (1 movimento)
Observe que uma posição pode não ter torres ou espaços vazios.
Entrada: Uma lista não vazia (string, array, etc.) de torres e espaços vazios. Você pode representá-los como True
/ False
, 1
/ 0
, 'R'
/ '.'
, ou quaisquer dois caracteres consistentes de byte distinto ou números de um dígito de sua escolha. Depende de você qual significa torre e qual significa espaço vazio.
Saída: Um número inteiro não negativo. Flutuadores de número inteiro também são bons.
Casos de teste
A saída é o número à esquerda.
6 .R..RRR.
0 .
0 R
4 R..RR
3 ...R
8 ..R..R..
0 ......
Para mais casos de teste, aqui estão todas as entradas até o comprimento 5.
0 .
0 R
0 ..
1 .R
1 R.
0 RR
0 ...
2 ..R
2 .R.
1 .RR
2 R..
2 R.R
1 RR.
0 RRR
0 ....
3 ...R
3 ..R.
2 ..RR
3 .R..
3 .R.R
2 .RR.
1 .RRR
3 R...
4 R..R
3 R.R.
2 R.RR
2 RR..
2 RR.R
1 RRR.
0 RRRR
0 .....
4 ....R
4 ...R.
3 ...RR
4 ..R..
4 ..R.R
3 ..RR.
2 ..RRR
4 .R...
5 .R..R
4 .R.R.
3 .R.RR
3 .RR..
3 .RR.R
2 .RRR.
1 .RRRR
4 R....
6 R...R
5 R..R.
4 R..RR
4 R.R..
4 R.R.R
3 R.RR.
2 R.RRR
3 RR...
4 RR..R
3 RR.R.
2 RR.RR
2 RRR..
2 RRR.R
1 RRRR.
0 RRRRR
Python 3 ,
3029 bytesExperimente online!
-1 byte graças a @JoKing
A função usa uma string de bytes Python como entrada. Cada espaço vazio é codificado como uma guia e cada torre é codificada como um byte
b'\x00'
com valor0
.O cálculo é equivalente a
lambda s:(s+s).strip().count(b'\t')
uma contagem de bytes mais baixa.fonte
JavaScript (ES6),
3833 bytesGuardado 5 bytes graças a @JoKing
Recebe a entrada como uma sequência. Espera um espaço para um quadrado vazio e qualquer outro personagem para uma torre.
Experimente online!
Comentado
Python 2 ,
4033 bytesGuardado 7 bytes graças a @Grimy
Experimente online!
fonte
count
vez desplit
( TIO )Japt , 5 bytes
Tente
fonte
Perl 6 , 16 bytes
Experimente online!
Uma regex que corresponde a todas as instâncias exaustivas de torres seguidas por espaços ou espaços seguidos por uma torre e retorna o número de correspondências.
fonte
05AB1E , 5 bytes
Experimente online!
fonte
Retina ,
2315 bytesDobre o número de espaços entre as torres, linhas grep com pelo menos uma torre e conte o número de espaços.
Experimente online!
Embora o programa use espaços em vez de pontos, eu adicionei o código do prefixo para que os casos de teste fornecidos possam ser facilmente colados e usados.
Eu esperava poder usar partidas sobrepostas
(?<=R.*) | (?=.*R)
, mas as sobreposições não são tão agressivas. Seria necessário contar todas as maneiras possíveis de obter uma correspondência para retornar o resultado correto com esse método.fonte
.R.R.R.
embora a alteração da primeira linhaR.+R
possa ajudar?Gelatina , 6 bytes
Experimente online!
Um link monádico obtendo uma lista de
0
para torre e1
espaço e retornando um número inteiro com o número de movimentos. O link TIO pega a lista colada de possíveis painéis fornecidos na pergunta, converte para o formato correto e depois gera as respostas calculadas e corretas.Explicação
fonte
Japonês , 6 bytes
Espaços para espaços, qualquer outro personagem para gralhas.
Tente
fonte
Caracóis, 7 bytes
Pelo menos, bate Retina :)
Experimente online!
fonte
Gelatina , 5 bytes
Experimente online!
-1 graças a Jonathan Allan .
0
representa uma torre,1
representa um espaço vazio.fonte
Ẉ
os cinco:ḲẈ+ƝS
Ẉ
mas usandoṣ0
...Stax ,
765 bytesExecute e depure
Use a guia para quadrado vazio e qualquer outro caractere para torre.
fonte
C (clang) , 57 bytes
Experimente online!
Percebi que não funcionava para listas vazias. Agora funciona! Além disso, salvou alguns bytes!
1 = torre. 0 = espaço.
for (.. i + = n ++? - i: 1) // conta espaços ou redefine movimentos extras => i = - ~ i ! * n ++ (@ceilingcat)
o + = * n? r = 1, i: r; // adiciona à saída -i- (movimentos extras) quando uma torre é alcançada mais os conjuntos -r- (torre alcançada), -i- serão limpos para aumentar a sentença.
adiciona -r- para cada espaço (a torre é garantida)
fonte
Haskell , 36 bytes
Experimente online!
Usa 1 para espaço vazio, 0 para torre. Conta o número de 1s que não estão no bloco inicial de unidades e adiciona isso ao resultado da sequência invertida.
fonte
Haskell , 33 bytes
Experimente online!
Função anônima que recebe entrada como uma lista de 1s (espaços) e 0s (torres). Isso apara os espaços desde o início e o final da lista, concatena as duas versões da lista e as soma.
Isso usa o GHC 8.4.1 ou posterior para ter acesso ao
<>
operador sem importá-lo.fonte
Python 2 , 59 bytes
Experimente online!
fonte
Japonês , 6 bytes
Experimente online
fonte
Wolfram Language (Mathematica) ,
4338 bytesExperimente online!
Solução Retina do Porto de Neil . Usa 1 para espaços e 0 para torres.
fonte
Haskell ,
685854 bytesExperimente online!
fonte
Vermelho , 46 bytes
Experimente online!
Apenas uma porta vermelha das soluções JavaScript / Python da Arnauld . Ocupa um espaço como um quadrado vazio.
fonte
Java 11,
3532 bytesPorto de @ Joel Python 3 resposta 's .
-3 bytes também graças a @Joel .
Usa bytes nulos (
\0
) para torres e tabulações (\t
) para espaços.Experimente online.
Tentei usar
s->(s+s).trim().chars().sum()/9
inicialmente como 31 bytes, mas isso não funciona porque oString#trim
builtin não apenas remove espaços / guias / linhas iniciais e finais, mas também todos os outros bytes menores ou iguais aU+0020
(unicode 32; um espaço) , portanto, ele removerá os bytes nulos também.Obrigado a Joel por me recomendar o novo Java 11+
String#strip
builtin (que eu esqueci que eles adicionaram) como alternativa. Este também remove partes finais / iniciais, mas neste caso apenas espaços em branco , portanto os bytes nulos são retidos.Explicação:
fonte
String.strip()
para remover apenas os espaços em branco: 32 bytesPerl 5
-MList::Util=sum -pF/R/
, 40 bytesExperimente online!
fonte
C # (compilador interativo do Visual C #) , 27 bytes
Guardou um byte graças a @someone
Experimente online!
fonte
Stax ,
76 bytes-1 byte graças ao recursivo
Execute e depure
fonte
v
, o que economizará um byte.Befunge-98 (PyFunge) , 73 bytes
Experimente online!
fonte
C ,
1831561511379691 bytesObrigado ao ceilingcat por 91 bytes.
R é uma torre, todo o resto é um espaço.
TIO
fonte
82
ou'R'
mais curto para usee+e*d
thane*(1+d)
,e=0,d=1;else e++; can be changed to
e = -1, d = 1; e ++;, and
b [a] `eb[++a]
pode ser substituído por*b
e*++b
Pitão , 7 bytes
Experimente online!
Utiliza uma sequência de
R
para gralhas,(espaço) para espaços vazios
fonte
x86-64 - 26 bytes
A entrada é uma matriz de até 32 bits e um número inteiro representando o número de quadrados, 1 representando a torre, 0 representando vazio.
Copia os bits para que sejam adicionados à esquerda e remove os zero bits à direita. Em seguida, obtém o número de zero bits à esquerda e o subtrai do número total de zero bits.
Código da máquina x86-64 - 22 bytes - apenas nas classificações regulares de xadrez.
A entrada é um número inteiro de 32 bits com o byte menos significativo feito de 8 bits, representando as torres. 1 é uma torre, 0 está vazio.
Copia os bits no próximo byte significativo e remove os zero bits à direita. Em seguida, obtém o número de zero bits à esquerda e o subtrai do número total de zero bits.
fonte