Mi sono imbattuto in questa domanda su SO e ho pensato che sarebbe stata una bella sfida di golf. Quindi eccolo qui:
Sfida:
Scrivi un programma che legge una sequenza di stringhe di caratteri, una per riga, e genera un elenco di tutte le posizioni in cui ogni stringa ha lo stesso carattere.
Ingresso e uscita:
L'input è costituito da una o più righe di caratteri ASCII non bianchi stampabili, ciascuno seguito da una nuova riga. Si può presumere che tutte le linee di input abbiano la stessa lunghezza. La nuova riga non deve essere considerata parte dell'input (ovvero non dovresti emetterlo come carattere corrispondente).
Input di esempio (rubato spudoratamente dalla domanda SO):
abcdefg
avcddeg
acbdeeg
Dopo aver letto l'input, il programma dovrebbe stampare le posizioni di ciascuna colonna corrispondente e i caratteri che contengono. (Il tuo programma potrebbe, ma non è necessario, interrompere la lettura di ulteriori input se può determinare in anticipo che non ci sono colonne corrispondenti.) È consentito qualsiasi formato di output ragionevole; in particolare, è possibile utilizzare l'indicizzazione basata su 0 o 1 per le posizioni.
Esempio di output per l'input sopra (usando l'indicizzazione basata su 0):
0: a
3: d
6: g
punteggio:
Questo è il golf del codice, quindi vince la risposta più breve. In caso di pareggio, i caratteri frazionari del tie-breaker possono essere assegnati per funzioni aggiuntive:
- ½ caratteri per gestire correttamente le linee di input di lunghezza diversa. (L'output non deve contenere posizioni oltre la fine della riga di input più breve.)
- ¼ caratteri per gestire correttamente l'input costituito da caratteri Unicode codificati UTF-8 arbitrari.
Per ispirazione, potresti trovare alcune soluzioni non golfate alla domanda SO (vedi sopra).
chiarimenti:
Il semplice concatenamento di posizioni e caratteri, come in
0a3d6g, non conta come "output ragionevole". Dovresti fornire un tipo di separatore (come uno spazio) tra ogni elemento dell'output in modo che possa essere analizzato in modo univoco.L'input verrà fornito sul flusso di input standard (
stdin) o utilizzando qualsiasi meccanismo di input del file di testo più naturale per la lingua scelta. (Se la lingua scelta non ha un meccanismo naturale per l'input dei file, fai quello che sembra più vicino nello spirito.)L'input termina quando non ci sono più dati da leggere (cioè quando si verifica una condizione di fine file). Se si desidera, è possibile richiedere che l'ingresso essere terminato da una riga vuota (che poi non dovrebbe contare come parte dell'ingresso, ovviamente). Se lo fai, ti preghiamo di menzionarlo nella tua risposta in modo che altri possano fornire input corretti per il test.
Ogni riga di input, compresa l'ultima, termina con un carattere di nuova riga. La tua risposta non deve riportare questa riga come una colonna corrispondente. (Va bene se la tua soluzione può anche gestire input in cui l'ultima riga non termina in una nuova riga, ma ciò non è necessario.)