Sei un project manager. Un giorno, uno dei tuoi programmatori è diventato pazzo ( non per colpa tua ) e ha preso tutte le espressioni nella base di codice e ha aggiunto parentesi casuali a loro, prima di abbandonare sul posto, lamentandosi della tua incompetenza ( anche non colpa tua ). Questa sarebbe una soluzione semplice, tuttavia, per qualche motivo non stai usando il controllo di revisione ( totalmente non per colpa tua ). E per qualche ragione, nessuno degli altri programmatori vuole esaminare ogni espressione per correggere le parentesi non corrispondenti ( a proposito, non è colpa tua ). Programmatori in questi giorni, pensi a te stesso. Dovrai farlo da solo. L'orrore! Tali compiti dovevano essere sotto di te ...
L'input sarà una riga singola, che conterrà un numero di parentesi quadre ( ( [ {
) e parentesi quadre ( ) ] }
). Può anche contenere, ma non sempre, commenti ( /* */
) e valori letterali di stringa ( " "
o ' '
) e vari numeri, lettere o simboli.
Ci sarà almeno una parentesi (al di fuori di un commento o stringa letterale) che non ha un opposto corrispondente (al di fuori di un commento o stringa letterale). Ad esempio, un errante }
senza un {
precedente. Un altro esempio: un (
che non ha un )
dopo. Il tuo programma sostituirà con uno spazio il numero minimo di parentesi necessarie per far combaciare le parentesi.
Esempi:
(4 + (2 + 3))]
==> (4 + (2 + 3))
(parentesi quadra alla fine)
][][[]]
==> [][[]]
(parentesi quadra all'inizio)
("Hel(o!"))
==> ("Hel(o!")
(parentesi alla fine)
( /* )]*/
==> /* )]*/
(parentesi all'inizio)
{()]
==> ()
(parentesi graffa e la parentesi quadra)
- L'input può essere preso nel modo più conveniente (STDIN, argomento della riga di comando, lettura da un file, ecc.)
- Se esiste più di un modo per risolvere la mancata corrispondenza con lo stesso numero di rimozioni, entrambi sono accettabili.
- Tra parentesi ci saranno solo discrepanze. I letterali e i commenti delle stringhe verranno sempre formati correttamente.
- Il titolo deriva da questo thread SO
- Non ci saranno mai citazioni nei commenti, citazioni tra virgolette, commenti nei commenti o commenti tra virgolette.
Questo è il codice golf, quindi vince il numero minimo di byte. Poni domande nei commenti se le specifiche non sono chiare.
("foo (\") bar")
)?
{{(})
dovrebbe essere { }
o equivalente, poiché lo scenario di apertura implica che il codice stava funzionando all'inizio e {(})
conta come parentesi non corrispondenti in ogni linguaggio di programmazione che conosco (cioè "causa stasi" ??). Ma poi ho già scritto una risposta, quindi sono di parte.