Clause de non-responsabilité: bien que je sois sur ce site à des fins de divertissement depuis un moment, c’est ma première question, alors n’oubliez pas les erreurs mineures.
Contexte
Lorsqu’il nous donne des devoirs, mon professeur est vraiment énervant et écrit tous les problèmes que nous devons faire individuellement. En tant que tel, il me faut une éternité pour noter les problèmes que je dois résoudre. J'ai pensé que pour me simplifier la vie, je lui enverrais un programme qui permettrait de réduire la liste des problèmes.
Lors de la rédaction d'une liste de numéros de pages ou de problèmes, nous utilisons un tiret pour indiquer une plage. Par exemple, 19-21
devient 19, 20, 21
. S'il existe un espace entre les deux, deux plages séparées par des virgules sont utilisées: 19-21, 27-31
devient 19, 20, 21, 27, 28, 29, 30, 31
.
En ce moment, vous pensez probablement: "cela semble assez trivial". En fait, cela a déjà été répondu ici et ici .
Cependant, il y a un hic. Si nous avons une plage avec des chiffres égaux consécutifs, les chiffres répétés peuvent être omis. Par exemple: 15, 16, 17
devient 15-7
et 107, 108, 109
devient 107-9
. Pour un bonus, si le dernier chiffre égal consécutif est supérieur de 1 et si le dernier chiffre de la limite supérieure est inférieur ou égal à celui du chiffre inférieur, vous pouvez omettre les éléments suivants (désolé si cela vous a semblé déroutant; peut-être que quelques exemples le clarifieront) . 109-113
devient 109-3
, comme un dernier chiffre inférieur implique une augmentation de la place 10s.
Défi
Votre programme devrait prendre une liste d’entiers via l’entrée (tout ce qui est standard pour votre langue ou une fonction). Vous pouvez décider si cette liste est séparée par des virgules, par des espaces ou par une liste / un tableau réel.
Générez le chemin le plus court (en commençant par le nombre de plages, puis la somme des caractères inclus dans les plages) pour représenter cette liste à l'aide de cette notation. Chaque plage en pointillés doit être sur la même ligne, mais les plages peuvent être séparées par des virgules ou des nouvelles lignes (les lignes nouvelles ou les virgules sont autorisées). Ces plages doivent être en ordre.
Comme notre école a un réseau Wi-Fi terrible , je dois réduire au maximum le fichier pour le lui envoyer. Le code le plus court (en octets) gagne.
Bonus
Mon professeur est négligent, alors il y a quelques choses qui pourraient l'aider. Les bonus multiples se cumulent, par exemple un bonus de -10% (x 90%) et un bonus de -25% (x 75%) = 90% * 75% = x 67,5% (bonus de -32,5%).
- Parfois, il les met dans le mauvais ordre (ce n'est pas un professeur de mathématiques). Bénéficiez d'un bonus de -20% si votre programme peut accepter des entiers non triés du moins au plus élevé.
- Notre livre est bizarre et chaque section commence à compter les problèmes à -10. Si votre programme accepte les nombres négatifs, prenez -25%.
- S'il accepte le bonus d'un dernier chiffre inférieur augmentant la place de 10, par exemple en le
25-32
réduisant à25-2
, prenez un bonus de -50%.
Cas de test
In: 1, 2, 3, 4, 5
Out: 1-5
In: 3, 4, 5, 9, 10, 11, 12
Out: 3-5, 9-12
In: 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160
Out: 149-60
In: 1 2 3 4
Out: 1-4
For bonuses:
In: 109, 110, 111, 112, 113
Out: 109-3
In: 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29
Out: 19-9
In: -3, -2, -1, 0, 1, 2
Out: -3-2
In: -3, -2, -1
Out: -3--1
Une réponse sera acceptée le samedi 19 décembre 2015.
GL HF!
149 150 151 152 153 154 155 156 157 178 159 160
?
19-9
pour 19,20,...,29
et non 19-29
comme le texte l'indique. Alors, lequel est correct?
1-4 9-2
-elle pas ?