Analiza las resistencias

8

El objetivo es simple: dada la cadena de valores de resistencia, dibuje la parte del "circuito eléctrico" de esas resistencias. Siguen ejemplos.

  1. Entrada: 3. Salida:

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

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

A continuación, las resistencias se pueden unir en paralelo (por 2 o 3 resistencias por unión), pero la profundidad requerida de las uniones paralelas es de solo 1.

  1. Entrada: 1|2. Salida:

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

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

    Tenga en cuenta que esa --2--resistencia ahora está centrada.

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

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

Uniones combinadas:

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

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

Si fuera más conveniente, la entrada puede ser una matriz bidimensional. Es decir, la entrada para el último ejemplo sería el siguiente: [1,2,[3,4],5,[6,7,8],9].

Algunas notas:

  • No se permiten otras formas de put (in | out).
  • La resistencia de cada resistencia puede variar en el rango de 1 a 9. Otros valores, como -, 42o 0no están permitidos.
  • Las combinaciones como 1|2|3|4no son válidas. Como ya se mencionó, máximo 3 por unión paralela. Uniones vacías, es decir, ...,|,...o ...,,...no son válidas.
  • Ah, y este es el código de golf :)
nicael
fuente
Gracias por la corrección, es un número fijo de guiones. Las resistencias separadas están precedidas y seguidas por dos guiones.
nicael
¿Se puede rellenar la primera y tercera línea con espacios para igualar la longitud de las líneas?
TFeld
@Tfeld Se permiten espacios iniciales / iniciales antes / después de toda la salida, pero no entre las resistencias.
nicael
¿Se permiten líneas vacías iniciales / finales cuando no hay resistencias paralelas?
PurkkaKoodari
@Pietu Hm, que sea sí :)
nicael

Respuestas:

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]

Salida:

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