Là questo sito sono alcune domande sul bilanciamento delle parentesi e sul controllo del bilanciamento delle parentesi. Propongo che è ora di usare quelle parentesi bilanciate per qualcosa!
In matematica e programmazione, le parentesi sono come bolle, isolando tutto dentro da tutto fuori, in modo che tutto ciò che è dentro possa fare la sua cosa in pace e tutto ciò che è fuori vede solo un oggetto. Tuttavia, una stringa di parentesi è monodimensionale, mentre le bolle di solito sono almeno bidimensionali. Ciò significa che le bolle sono libere di muoversi l'una intorno all'altra purché non si tocchino mai o si incrociano tra l'interno e l'esterno di altre bolle.
Sfida
L'input è una stringa di parentesi corrispondenti di un singolo tipo, rotonda ()
, quadrata []
, riccia{}
o angolare <>
. Sta a te decidere quale tipo accettare il tuo programma e viene accettato un programma che accetta solo un solo tipo di parentesi. (Bonus immaginario se il tuo programma è in grado di gestirne uno qualsiasi, enormi punti bonus immaginari se può gestirli tutti nello stesso input.) L'input non può contenere nulla tra le parentesi, sebbene siano consentiti spazi bianchi finali.
L'output è tutte le possibili riorganizzazioni (in ordine arbitrario e incluso l'input originale) di quelle parentesi che producono la stessa configurazione di bolle, senza due stringhe identiche. Ciò significa che con un input di ()()
, anche l'output è giusto ()()
, anche se tecnicamente sono due bolle che potrebbero scambiare posizioni. Per l'enorme bonus immaginario, un input di {}[]()
volontà ovviamente porta ad un output di 6 diversi elementi / stringhe / linee.
Due configurazioni di bolle sono "uguali" se riesci a farne una spostando le bolle in giro, senza far attraversare alcuna bolla dall'interno verso l'esterno o dall'interno verso l'esterno. Se si paragonano parentesi annidate ad alberi (ogni coppia abbinata è un nodo e ogni coppia abbinata all'interno è un nodo secondario, e ogni coppia abbinata all'interno contiene di nuovo un nodo secondario, e così via) in cui sono ordinati i nodi secondari di un dato nodo , quindi una singola configurazione di bolle è un albero in cui i nodi non sono ordinati.
Qualsiasi formato di output ragionevole farà, come restituire un elenco di stringhe o un elenco di elenchi di singoli caratteri o una singola stringa con un qualche tipo di spazio bianco, oppure stampare su stdout
o stderr
con una qualche forma di carattere di spazio bianco visibile (più comunemente newline o spazio) tra ogni riorganizzazione.
Spazi di trascinamento per ogni riorganizzazione e trascinamento e precedenti righe precedenti / elementi di elenco vuoti prima e dopo l'output effettivo sono consentiti. Dovresti usare lo stesso tipo di parentesi nell'output che accetti nel tuo input. A parte le parentesi, le nuove linee e gli spazi specificati qui e qualunque sia il separatore che usi, non dovrebbe essere stampato nulla (inclusi i caratteri invisibili / di larghezza zero).
Il punteggio è il numero di byte nel codice; vince il conteggio più basso per ogni lingua. Puoi notare se ricevi un bonus immaginario, regolare o massiccio, ma non influisce sul tuo punteggio. I bonus effettivi sono troppo difficili da bilanciare nel modo giusto.
Esempi di input-output
Esempio 1:
Ingresso:
()(())
Produzione:
()(())
(())()
Esempio 2:
Ingresso:
(()())()()
Produzione:
(()())()()
()(()())()
()()(()())
Esempio 3:
Ingresso:
(()(()))()
Produzione:
((())())()
()((())())
(()(()))()
()(()(()))
((()))
nell'esempio 1? o()()()
? Sembra che manchi le permutazioni per ogni input.