Étant donné une chaîne de caractères alphanumériques non triés, par exemple
ABC321STPpJqZZr0
afficher une liste de plages de caractères séparées par ",", triées par valeur ASCII, en ignorant la casse et en supprimant les doublons ( c'est-à-dire en ne sortant que des caractères majuscules et numériques), par exemple
0-3, A-C, J, P-T, Z
Règles
- La durée de votre programme est votre score de base, comme d'habitude.
- Vous devez initialiser (code dur) l'exemple ci-dessus dans votre programme, mais vous pouvez actualiser la longueur de cet exemple à partir de la longueur de votre programme, par exemple pour
char* s="ABC321STPpJqZZr0";
vous pouvez actualiser 16 caractères, les 11 autres caractères comptant pour la longueur de votre programme.
Bonus (+50 primes)
- Comme c'était un vrai problème rencontré par mon collègue aujourd'hui, ayant besoin d'être écrit en Tcl 8.0.5 (une version ancienne, manquant de la plupart des dernières intégrations Tcl), je vais attribuer 50 points à celui qui écrit le Tcl 8.0 le plus court .5 solution, s'il y a au moins 2 soumissions valides dans Tcl 8.0.5.
", "
pour inclure l'espace, mais nous pouvons laisser votre modification et laisser ce commentaire servir d'indication.Réponses:
Rubis, 87-16 = 71
EDIT: J'ai dû ajouter quelques caractères pour que les plages de deux caractères s'affichent correctement. Utiliser également
?[
au lieu de?Z
pour corriger un bogue avec des plages se terminant par Z.Vous pouvez voir la course d'Ideone ici .
la source
gsub(/[]/i)
est plus court quetr(''.upcase)
2 caractères. De plus,scan(/.+/)
->split
enregistre 5, et$><<
au lieu d'puts
un autre.Julia, 131
Non pris en charge par Ideone.com, et sera probablement écrasé de toute façon.
la source
C #, 221 octets
la source
C, 193
la source
GolfScript
575452Essayez-le ici .
Le code met d'abord tout en majuscule:
Obtient ensuite des caractères uniques et l'enregistre dans une variable:
Ensuite, nous obtenons les caractères dont les prédécesseurs directs ne sont pas dans la chaîne (de sorte qu'ils sont la partie de début d'une plage):
Nous obtenons également les extrémités des plages avec
x..{)}%&-
.Maintenant, formez les plages en concaténant les listes, en les triant et en les divisant en groupes de 2:
Le reste n'est que du formatage, en utilisant
*
comme jointure de chaîne.la source
.95>{32-}{}if
->.95>32*-
enregistre 5 caractères.Q, 94
la source
Python 2.x, 304-16 = 288
Cela peut sûrement être joué plus loin, tous les commentaires sont les bienvenus!
la source
Rebol (218 - 16 = 202)
Version non minifiée:
la source
q [116 caractères]
Usage
ProductionIl est possible d'enregistrer des caractères, je vais essayer une autre méthode et la publier.
la source
Tcl 8.0.5, 344 (360 octets)
Tcl 8.0.5, 340 (356 octets)
Bricoler avec la
rename
commande a donné quelques astuces amusantes! Je les ai documentés dans un autre fil .Tcl 8.0.5, 332 (348 octets) [Instable - dépend de $ PATH]
Crédit @JohannesKuhn pour l'affaire interactive .
la source
while
par destime
constructions. codegolf.stackexchange.com/a/126236/29325