Mini-golf del lunedì: una serie di sfide da golf a codice corto , pubblicate (si spera!) Ogni lunedì.
Storia vera 1 : l'altro giorno, stavo giocando sul mio tablet quando ho avuto l'idea di visitare la pagina che normalmente uso sul mio PC per testare JavaScript. Dopo aver caricato la pagina, ho inserito questo semplice programma:
alert("Hello!")
Ho quindi continuato a premere il pulsante Esegui e sono rimasto sorpreso quando mi ha detto che il codice che avevo inserito non era valido. Ho dato una seconda occhiata alla casella di testo e ho visto questo:
alllelelerlerlertlert("Heeelelellellelloello!")
Wha ??? Non è quello che ho inserito! Quindi cosa è successo qui? Per capirlo, ho inserito due semplici righe:
abcdefg
0123456
Questo si è rivelato come:
abbbcbcbcdbcdbcdebcdebcdefbcdefbcdefgbcdefg
0112123123412345123456
Ormai non avevo ancora idea di cosa fosse successo alle lettere, ma i numeri sembravano più semplici, quindi ho dato un'occhiata più da vicino. Come si è scoperto, la pagina web stava semplicemente inserendo il primo carattere, quindi ripetendo tutto il resto nella stringa ogni volta che ne veniva premuto uno nuovo:
0112123123412345123456
0
1
12
123
1234
12345
123456
Ma per quanto riguarda le sezioni di lettere? Dopo aver riflettuto per un minuto, mi sono reso conto che è lo stesso, ma invece di ripetere ogni sottosezione una volta, la ripete due volte :
abbbcbcbcdbcdbcdebcdebcdefbcdefbcdefgbcdefg
a
bb
bcbc
bcdbcd
bcdebcde
bcdefbcdef
bcdefgbcdefg
Una combinazione dei due funziona con una combinazione di queste tecniche:
abc123z
abbbcbcbc1bc12bc123bc123zbc123z
a
bb
bcbc
bc1
bc12
bc123
bc123zbc123z
Qualunque glitch causi questo sembra reimpostare alla punteggiatura e agli spazi, così abc def
diventa abbbcbc deeefef
.
A questo punto, ero così assorbito nel capirlo e trasformarlo in una sfida interessante che ho dimenticato perché ero stato lì in primo luogo. (Ho capito come digitare normalmente, tuttavia: premendo spazio-spazio dopo ogni personaggio. Piuttosto noioso, ma devi fare quello che devi fare.)
Sfida
L'obiettivo della sfida è scrivere un programma o una funzione che accetta il testo da elaborare, apporta le modifiche sopra elencate e restituisce / restituisce il risultato.
Dettagli
- L'input conterrà solo ASCII stampabile e nessuna scheda o nuova riga.
Casi test
Ingressi: (uno per riga)
Mess up text
This is some longer text.
CAPS LOCK && "Punc-tua"+'tion'
under_score_style
CaPs wItHIn loWERs
1337 numb3r5
abcdefghij 0123456789
Code-golf is the best!
Uscite:
Meeesesessess upp teeexexextext
Thhhihihishis iss sooomomomeome looononongongongeongeongeronger teeexexextext.
CAAAPAPAPSAPS LOOOCOCOCKOCK && "Puuunununcunc-tuuuaua"+'tiiioioionion'
unnndndndendendernder_scccococorcorcorecore_stttytytyltyltyletyle
CaaaPaPaPsaPs wIIItItItHItHItHIItHIItHInItHIn loooWoWoWEoWEoWERoWERoWERsoWERs
1333337 nuuumumumbumbumb3umb3rumb3rumb3r5
abbbcbcbcdbcdbcdebcdebcdefbcdefbcdefgbcdefgbcdefghbcdefghbcdefghibcdefghibcdefghijbcdefghij 0112123123412345123456123456712345678123456789
Cooodododeode-gooolololfolf iss thhhehe beeesesestest!
punteggio
Questo è code-golf , quindi vince il codice valido più breve in byte. Tiebreaker va all'invio che ha raggiunto per primo il numero di byte finale. Il vincitore verrà scelto lunedì prossimo, 2 novembre. Buona fortuna!
Modifica: E il vincitore è ... @ MartinBüttner usando Retina per un'incredibile soluzione a 43 byte !
1 Sì, questa storia è completamente vera e se hai bisogno di ulteriori chiarimenti, vedi la nota 1.
' '.join(x[0]+''.join(2*x[1:i]for i in range(1,len(x)+1)) for x in raw_input().split())