Inspirado por este desafio .
Objetivo:
Dado um painel de controle pré-configurado e uma lista de índices, inverta os switches nos índices fornecidos.
Um quadro de distribuição é composto por um número de interruptores ( v
ou ^
) enrolados em -
's' e organizados em linhas de comprimento variável. Aqui está um quadro de distribuição de exemplo:
-v-^-v-
-^-v-
-v-^-v-
Inverter / inverter um interruptor significa alterá-lo de v
para ^
ou de ^
para v
.
Os comutadores são indexados da esquerda para a direita, de cima para baixo. Por exemplo, no exemplo acima, o último v
na primeira linha estaria na posição 3 e o ^
na linha do meio estaria em 4 (usando a indexação 1).
Entrada:
- Uma sequência (ou lista de sequências) representando o quadro de distribuição. É garantido que corresponda ao regex
((-[v^])+-)(\n(-[v^])+-)*
. - Uma lista possivelmente vazia de números representando índices pode ser 0 ou 1 (ou algum número arbitrário, se você quiser) indexado. Esses são os comutadores que precisam ser invertidos.
Saída:
- Um quadro de distribuição na mesma forma que a entrada com os interruptores especificados invertidos. Quaisquer opções não especificadas devem manter seu estado inicial.
Regras:
- A entrada sempre será formatada corretamente e nenhum índice fornecido ficará fora dos limites.
- A lista de índices será classificada e não terá duplicatas.
- Declare em sua resposta qual indexação você usa, seja 0, 1 ou alguma arbitrária.
- O espaço em branco à direita é bom, desde que a saída se pareça com a entrada.
- Isso é código-golfe, então o código mais curto vence.
Exemplos:
#Using 1-indexing
input: #Empty Case
[],
-v-^-v-
output:
-v-^-v-
input: #Single switch
[1],
-v-
output:
-^-
input: #Skip a line
[3,5],
-^-v-v-
-v-
-^-^-
output:
-^-v-^-
-v-
-v-^-
input: #Flip one in each line + number wrap
[3,4,6],
-^-v-v-
-v-
-^-^-
output:
-^-v-^-
-^-
-^-v-
input: #Flip 'em all
[1,2,3,4,5,6],
-^-v-v-
-v-
-^-^-
output:
-v-^-^-
-^-
-v-v-
>"-"
: Como é garantido o início da sequência de entrada-
, você pode verificar o parâmetro / argumento / nome da variável que está usando para isso.Respostas:
Vim,
60, 46, 38, 37 bytes / pressionamentos de tecla<esc>
e<C-r>
são ambos 1 byte / pressionamento de tecla. Contador de bytesCaso de teste 1 (modo detalhado)
Caso de teste 2 (modo detalhado)
Agradecimentos a Grimy pelas idéias que levaram a uma redução de 22 bytes :)
fonte
:s/\%V./\='v^'[submatch(0)=='v']
sercl<C-R>='v^'['<C-R>"'=='v']
de -13 bytes? (cada <CR> é apenas um byte).s == cl
, de modo-14
geral.s^v!<Esc>?\<C-R>"<CR>xhf!x
ous<CR>^v<Esc>:s/\V<C-R>"<CR>kgJ
.-
, então realmente funciona! Duh.JavaScript,
6359 bytesExperimente online!
Economizou 4 bytes graças a Arnauld .
fonte
K (oK) ,
3127 bytesSolução:
Experimente online!
Explicação:
Resposta rápida, tentará jogar golfe. Indexado a 0.
Notas:
>93
truquefonte
Python 3 ,
140134103 bytes(-30 graças a DJMcMayhem ♦, -1 mais graças a Black Owl Kai)
Experimente online!
Oof, segunda tentativa de jogar golfe. Isso apenas usa um loop pouco sofisticado sobre a string, usando
x
para acompanhar o índice atual do switch. Usa indexação 1.Ungolfed:
fonte
Gelatina , 12 bytes
Um programa completo que aceita uma string e uma lista de números inteiros que imprime o resultado.
Experimente online!
Quão?
fonte
Python 3.8 (pré-lançamento) ,
80,78,77,71, 70 bytes-1 byte, graças a @Shaggy
Experimente online!
fonte
c>s
salva um byte.Perl 6 , 31 bytes
Experimente online!
(-2 bytes graças a Jo King)
O operador de substituição do Perl 6
S
leva convenientemente umnth
advérbio que aceita não apenas um índice único para fazer a substituição, mas uma lista deles, exatamente como necessário aqui.A substituição é
$/ ~^ '('
, onde$/
está o texto correspondente (sejav
ou^
),~^
é o stringwise ou-exclusivo do operador, e(
é o personagem cujos bits transformarv
em^
e vice-versa.fonte
MATL , 29 bytes
Experimente online! Ou verifique todos os casos de texto .
Input é uma matriz de células de strings e um vetor de linha de números, com indexação baseada em 1. A saída é preenchida à direita com espaços.
fonte
Python 2 ,
1059791 bytesExperimente online!
6 bytes salvos por
roubarusando transformada de Fourier de Rin 'sc>'-'
, em vez dec in'^v'
.0
-indexed.fonte
Gelatina , 14 bytes
Experimente online!
Programa completo.
Isso parece muito longo ...
fonte
”-
pelo nome do primeiro argumento (³
?), Que é garantido que começa com a-
, em vez disso?>
vetoriza. Você pode ver que isso não funciona .³
,⁴
,⁵
,⁶
e⁷
, para o primeiro ao quinto CLA, respectivamente. Você pode ler a página Átomos para descobrir se existe uma função interna específica.Stax , 13 bytes
Execute e depure
Isso usa índices baseados em 0.
[v^]
.40
. Isto éxor('v', '^')
.fonte
Limpo , 93 bytes
Experimente online!
Define a função
$ :: [Int] -> [Char] -> [Char]
obtendo uma lista de índices indexada a zero e retornando uma função que pega a string e retorna a string alterada.fonte
JavaScript (Node.js) ,
1019893917767 bytesExperimente online!
10 bytes, thx às sugestões de Shaggy .
Porta da minha resposta Python . Não está acostumado a jogar javascript!
fonte
V , 20 bytes
Experimente online!
Usa alguns novos recursos, como o
Ñ
que é incrivelmente útil.fonte
JavaScript, 111 bytes
Código
Recebe a entrada no formato f (x) (y) em que x são os índices e y é o quadro de distribuição. Os índices são indexados 0
Experimente online!
Explicação
Para cada índice
construa o regex que encontra o índice + 1 th "^" ou "v"
insira-o em uma string para substituí-lo pelo símbolo oposto "v" <-> "^"
então avalie a string como uma função
Depois de percorrer os índices para alternar, retorne o quadro de distribuição
fonte
Geléia , 17 bytes
Experimente online!
Um programa completo, tendo os índices como primeiro e string como segundo argumento. Imprime a saída com os interruptores indicados virados.
fonte
Retina 0.8.2 ,
6662 bytesExperimente online! O link inclui caso de teste. 1 indexado. Explicação:
Converta os números de entrada em unário.
Transliterate entre
v
e^
todos os personagens com a propriedade de que o número dev
s e^
s tão longe (inclusive) é igual a um dos números de entrada.Exclua os números de entrada.
fonte
Carvão , 23 bytes
Experimente online! Link é a versão detalhada do código. Indexado a 0. Explicação:
fonte
Rubi , 56 bytes
1 indexado.
Experimente online!
fonte
C # (compilador interativo do Visual C #) , 73 bytes
Experimente online!
fonte
Japonês , 15 bytes
Tente
fonte
Japonês ,
1614 bytesTente
fonte
:D
)