Analisar os resistores

8

O objetivo é simples: dada a sequência de valores de resistência, desenhe a parte do "circuito elétrico" desses resistores. Seguem exemplos.

  1. Entrada: 3. Resultado:

    --3--
    
  2. Entrada: 1,2,3. Resultado:

    --1----2----3--
    

Em seguida, os resistores podem ser unidos em paralelo (por 2 ou 3 resistores por junção), mas a profundidade necessária das junções paralelas é de apenas 1.

  1. Entrada: 1|2. Resultado:

     |--1--|
    -|     |-
     |--2--|
    
  2. Entrada: 1|2|3. Resultado:

     |--1--|
    -|--2--|-
     |--3--|
    

    Observe que esse --2--resistor está agora centralizado.

  3. Entrada: 1|2,3|4|5. Resultado:

     |--1--|  |--3--|
    -|     |--|--4--|-
     |--2--|  |--5--|
    

Junções combinadas:

  1. Entrada: 1,2,3|4,5,6|7|8,9. Resultado:

               |--3--|       |--6--|
    --1----2---|     |---5---|--7--|---9--
               |--4--|       |--8--|
    

Se for mais conveniente, a entrada pode ser uma matriz bidimensional. Ou seja, a entrada para o último exemplo ficaria assim: [1,2,[3,4],5,[6,7,8],9].

Algumas notas:

  • Nenhuma outra forma de (entrada | saída) de venda é permitida.
  • A resistência de cada resistor pode variar de 1 a 9. Outros valores, como -, 42ou 0não , são permitidos.
  • As junções como 1|2|3|4são inválidas. Como já mencionado, no máximo 3 por junção paralela. Junções vazias, ...,|,...ou seja, ...,,...são inválidas.
  • Ah, e isso é código de golfe :)
nicael
fonte
Obrigado pela correção, é um número fixo de traços. Os resistores separados são precedidos e seguidos por dois traços.
Nicael
A primeira e a terceira linha podem ser preenchidas com espaços iguais ao comprimento das linhas?
TFeld
@Tfeld Os espaços à direita / à esquerda são permitidos antes / depois de toda a saída, mas não entre os resistores.
Nicael
Linhas vazias iniciais / finais são permitidas quando não há resistores paralelos?
PurkkaKoodari
@Pietu Hm, que seja sim :)
nicael

Respostas:

2

Python 2, 195 bytes

a=b=c=''
B=' '*5
H='--'
S=' |'+H;E=H+'| '
for x in input():
 if x>9:a+=S+`x[0]`+E;c+=S+`x[-1]`+E;b+='-|'+[B,H+`x[1]`+H][len(x)>2]+'|-'
 else:b+=H+`x`+H;a+=B;c+=B
print[b,a+'\n'+b+'\n'+c]['|'in a]

Toma entrada como:

[1,2,[3,4],5,[6,7,8],9]

Resultado:

           |--3--|       |--6--|      
--1----2---|     |---5---|--7--|---9--
           |--4--|       |--8--|      
TFeld
fonte