Connaissez-vous les « Clash of Code » ? Ce sont des petites compétitions entre membres de CodinGame, de 5 à 15 min, dont l’objectif peut varier. Certains de ces Clashs consistent à produire le code le plus court. Lors de l’un deux, votre serviteur affrontait vaillamment d’autres clashers pour produire le code le plus concis répondant à l’énoncé que voici.
On donne une chaîne de caractères en entrée. En sortie, on attend une chaîne composée des mêmes caractères dans cet ordre : premier, dernier, deuxième, avant-dernier, etc.
Bien trop impatient d’utiliser toutes les pythoneries que j’avais apprises et qu’il me tardait d’essayer, j’ai produit le code suivant.
1 2 | a = input() print(''.join(list((''.join((i, j)) for i, j in zip(a, reversed(a)))))[:len(a)]) |
Détaillons.
1 | zip(a, reversed(a)) |
Nous créons ici un générateur qui associe la première et la dernière lettre, puis la deuxième et l’avant-dernière, etc jusqu’à la dernière avec la première.
1 | list((''.join((i, j)) for i, j in zip(a, reversed(a)))) |
Maintenant, nous créons une liste de chaîne de caractères, chaque chaîne étant le résultat de la concaténation de i
et j
.
1 | ''.join(list((''.join((i, j)) for i, j in zip(a, reversed(a))))) |
Le second join
sert à passer d’une liste de chaînes à une chaîne unique. Ne reste plus qu’à afficher tous les caractères de 0 jusqu’à len(a)
, d’où le code présenté au début.
Et pourtant, je fus défait par un membre qui eut l’idée d’écrire un code bien plus simple que le mien et par là, bien plus court (j’ai volontairement aéré le code.
1 2 3 4 5 6 | a = input() s = '' while a: s += a[0] a = a[1:][::-1] print(s) |
Rien d’étonnant donc si je vous annonce que la première place ne m’est pas échue.
Conclusion
- Simple is better than complex.
- Venez faire des « Clashs of Code », c’est amusant et ça dérouille pour commencer la journée.
- N’essayez pas de faire le code le plus cours en Java1, vous perdrez toujours face à Ruby, Python ou JS. Non vraiment j’insiste, c’est une très mauvaise idée. Vraiment.
-
Je vous assure, certains tentent vraiment le coup ! ↩