Dividere le stringhe in pezzi di uguale lunghezza n
Come nella maggior parte delle lingue "normali" TMTOWTDI (esiste più di un modo per farlo). Suppongo qui che l'input non contenga avanzamenti di riga e che "suddividere" significhi suddividerlo in righe. Ma ci sono due obiettivi abbastanza diversi: se la lunghezza della stringa non è un multiplo della lunghezza del blocco, vuoi mantenere il blocco finale incompleto o vuoi scartarlo?
Mantenere un pezzo finale incompleto
In generale, ci sono tre modi per affrontare la scissione in Retina. Sto presentando tutti e tre gli approcci qui, perché potrebbero fare una differenza maggiore quando provi ad adattarli a un problema correlato. Puoi utilizzare un sostituto e aggiungere un avanzamento riga a ogni corrispondenza:
.{n}
$&¶
Sono 8 byte (o un po 'meno se n = 2o n = 3perché allora puoi usare ..o ...rispettivamente). Questo ha un problema però: aggiunge un ulteriore avanzamento di riga se la lunghezza della stringa è un multiplo della lunghezza del blocco.
Puoi anche utilizzare una fase divisa e sfruttare il fatto che le acquisizioni vengono mantenute nella divisione:
S_`(.{n})
L' _opzione rimuove le righe vuote che altrimenti risulterebbero dalla copertura dell'intera stringa con corrispondenze. Sono 9 byte, ma non aggiunge un avanzamento riga finale. Per i n = 3suoi 8 byte e per i n = 2suoi 7 byte. Nota che puoi salvare un byte complessivo se le linee vuote non contano (ad es. Perché elaborerai solo linee non vuote e in ogni caso eliminerai gli avanzamenti di riga): quindi puoi rimuovere il file _.
La terza opzione è utilizzare una corrispondenza. Con l' !opzione possiamo stampare tutte le partite. Tuttavia, per includere il pezzo finale, dobbiamo consentire una lunghezza di corrispondenza variabile:
M!`.{1,n}
Anche questo è di 9 byte e non includerà un avanzamento riga finale. Questo diventa anche 8 byte n = 3facendo ..?.?. Tuttavia, si noti che si riduce a 6 byte per n = 2perché ora abbiamo solo bisogno ..?. Si noti inoltre che Mpuò essere eliminato se questo è l'ultimo stadio del programma, salvando in ogni caso un byte.
Scartare un pezzo finale incompleto
Questo diventa molto lungo se provi a farlo con una sostituzione, perché devi sostituire il pezzo finale con nulla (se esiste) e anche con una divisione. Quindi possiamo tranquillamente ignorare quelli. È interessante notare che per l'approccio della partita è l'opposto: si accorcia:
M!`.{n}
Ecco 7 byte o meno per n = 2, n = 3. Ancora una volta, nota che puoi omettere Mse questo è l'ultimo stadio del codice.
Se vuoi un feed di riga finale qui, puoi ottenerlo aggiungendo |$a regex.
Bonus: pezzi sovrapposti
Ricorda che Mha l' &opzione che restituisce corrispondenze sovrapposte (che normalmente non è possibile con regex). Ciò consente di ottenere tutti i pezzi sovrapposti (sottostringhe) di una stringa di una determinata lunghezza:
M!&`.{n}