Lundi Mini-golf: Une série de défis courts en code-golf , postés (espérons-le!) Tous les lundis.
Histoire vraie 1 : L'autre jour, je jouais sur ma tablette lorsque j'ai eu l'idée de visiter la page que j'utilise normalement sur mon PC pour tester JavaScript. Après la page chargée, je suis entré dans ce programme simple:
alert("Hello!")
J'ai ensuite appuyé sur le bouton Execute (Exécuter) et j'ai été surpris de constater que le code que j'avais entré était invalide. J'ai jeté un deuxième coup d'œil à la zone de texte et j'ai vu ceci:
alllelelerlerlertlert("Heeelelellellelloello!")
Wha ??? Ce n'est pas ce que je suis entré! Alors que s'est-il passé ici? Pour le comprendre, j'ai entré deux lignes simples:
abcdefg
0123456
Cela s'est avéré comme:
abbbcbcbcdbcdbcdebcdebcdefbcdefbcdefgbcdefg
0112123123412345123456
À l'heure actuelle, je n'avais toujours aucune idée de ce qu'il était advenu des lettres, mais les chiffres semblaient plus simples, alors j'ai regardé de plus près. Il s’est avéré que la page Web saisissait simplement le premier caractère, puis répétait tout le reste de la chaîne à chaque pression sur un nouveau:
0112123123412345123456
0
1
12
123
1234
12345
123456
Mais qu'en est-il des sections de lettres? Après avoir réfléchi pendant une minute, je me suis rendu compte que c'était la même chose, mais au lieu de répéter chaque sous-section une fois, il le répète deux fois :
abbbcbcbcdbcdbcdebcdebcdefbcdefbcdefgbcdefg
a
bb
bcbc
bcdbcd
bcdebcde
bcdefbcdef
bcdefgbcdefg
Une combinaison des deux œuvres avec une combinaison de ces techniques:
abc123z
abbbcbcbc1bc12bc123bc123zbc123z
a
bb
bcbc
bc1
bc12
bc123
bc123zbc123z
Quelle que soit Glitch cause cela semble remis à zéro à la ponctuation et les espaces, donc abc def
devient abbbcbc deeefef
.
À ce stade, j'étais tellement absorbé par l'idée de le comprendre et de le transformer en un défi intéressant que j'ai oublié pourquoi je m'étais trouvé là-bas. (Cependant, j'ai compris comment taper normalement: appuyer sur espace-espace après chaque caractère. Plutôt ennuyeux, mais il faut faire ce qu'il faut faire.)
Défi
Le but du défi est d’écrire un programme ou une fonction qui intègre le texte à traiter, apporte les modifications répertoriées ci-dessus et génère / renvoie le résultat.
Détails
- L'entrée ne contiendra que de l'ASCII imprimable, sans onglets ni nouvelles lignes.
Cas de test
Entrées: (une par ligne)
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!
Les sorties:
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!
Notation
C'est le code-golf , donc le code valide le plus court en octets gagne. Tiebreaker va à la soumission qui a atteint son nombre d'octets final en premier. Le gagnant sera choisi lundi prochain, le 2 novembre. Bonne chance!
Edit: Et le gagnant est ... @ MartinBüttner utilise Retina pour une solution incroyable de 43 octets !
1 Oui, cette histoire est tout à fait vraie et, si vous avez besoin de précisions, voir la note 1.
' '.join(x[0]+''.join(2*x[1:i]for i in range(1,len(x)+1)) for x in raw_input().split())