Le mois dernier, j'ai emprunté beaucoup de livres à la bibliothèque. C'étaient tous de bons livres, pleins d'émotions et de rebondissements. Malheureusement, à certains moments, je suis devenue très en colère / triste / déçue, alors j'ai déchiré certaines pages.
Maintenant, la bibliothèque veut savoir combien de pages j'ai déchirées pour chaque livre.
Votre objectif est d’écrire un programme qui prend en entrée une liste de nombres triée et délimitée par des virgules et qui affiche le nombre de pages minimal et maximal possible que j’aurais pu déchirer. Chaque ligne représente un livre, chaque numéro représente une page manquante du livre.
Exemple d'entrée:
7,8,100,101,222,223
2,3,88,89,90,103,177
2,3,6,7,10,11
1
1,2
Exemple de sortie:
4/5
5/6
3/6
1/1
1/2
4/5
Cela signifie que j'ai peut-être déchiré 4 ou 5 pages, en fonction de quel côté commence la numérotation des pages du livre. On aurait pu déchirer page 6/7, page 8/9, page 100/101 et page 222/223 (4 pages). Alternativement, on pourrait avoir déchiré page 7/8, page 99/100, page 101/102, page 221/222 et page 223/224 (5 pages).
Rappelez-vous qu'une page de livre a toujours un recto et un verso. De plus, la numérotation des pages diffère d'un livre à l'autre. Certains livres ont même des numéros de page sur la page de gauche; certains sur la bonne page. Tous les livres sont lus de gauche à droite.
Le code le plus court en octets gagne. Le format strict d'E / S n'est pas requis. Vos programmes doivent pouvoir prendre un ou plusieurs livres en entrée. S'amuser.
4/5
et5/4
)min/max
ou tousmax/min
. (Bien que, personnellement, je préfère que cela ne fasse pas partie des spécifications!)programs must be able to take one or more books as input
gouverner? La plupart (si ce n'est tous) vont simplement envelopper le code pour vérifier un livre dans une boucle ou quelque chose. IMHO, il suffit d'ajouter un overhead à la réponse avec peu ou pas de gains pour le défi. Ces questions ont déjà reçu de nombreuses réponses, il est donc préférable de les conserver telles quelles, mais gardez cela à l'esprit pour vos futurs défis.1,3,5,7,9,11,13,15,17,18
- au profit des langues dont lasort
méthode intégrée trie lexicographiquement par défaut (en supposant que l'exigence d'une sortie triée de manière cohérente soit ajoutée à la spécification).Réponses:
05AB1E , 13 octets
Essayez-le en ligne!
Merci à Emigna pour son avertissement concernant les modifications apportées aux spécifications.
Explication
la source
Python 2 ,
72566867 octetsEssayez-le en ligne!
la source
JavaScript,
104939285807974 octetsCe serait 57 octets sans l'exigence inutile (à mon avis) que chaque paire de nombres de la sortie soit systématiquement triée, ou 47 octets si nous n'avions besoin que de prendre un livre en entrée.
L'entrée et la sortie sont à la fois un tableau de tableaux.
Cas de test
Les cas de test sont divisés en livres individuels pour une meilleure lisibilité. Le dernier cas (qui inclut le
[1,2]
cas du bord) sert à illustrer le fait que cette solution prend en charge plusieurs livres en entrée.Histoire
Afficher l'extrait de code
la source
[1,3,5,7,9,11,13,15,17,18]
.[0,.5]
lieu d'utiliserg
quand j'ai repéré votre commentaire. Je ne sais pas pourquoi j'ai un tel blocage mental avec des opérateurs au niveau des bits! J'espérais que le tri de la sortie ne deviendrait pas une exigence et que personne ne remarquerait mon cassesort()
entre-temps;) Il faut que certains travaux soient terminés, de sorte qu'il faudra de temps en temps pour mettre à jour.y/2
? Quel est le raisonnement de la division du numéro de page en deux pour cet algorithme?Retina 0.8.2 , 60 octets
Essayez-le en ligne! Explication:
Convertissez les numéros de page en unaires.
Dupliquer la liste en interposant a
/
.Incrémenter les numéros de page dans une copie de la liste.
Comptez le nombre de pages, mais les nombres pairs et impairs consécutifs ne comptent que pour une page.
Trier les comptes dans l'ordre.
Convertissez les décomptes en décimal.
la source
,(?=.*/)¶1,
être quelque chose comme la,.*/¶1$&
place?Haskell , 62 octets
Essayez-le en ligne!
la source
Your goal is to write a program, which takes a sorted, comma-delimmited list of numbers as input
)Java (OpenJDK 9) , 163 octets
Essayez-le en ligne!
Des explications
Remarque: comme il n’existe aucune exigence à ce sujet, les nombres minimum et maximum de pages ne sont pas ordonnés.
la source
size
avecadd
Java pour peut-être économiser quelques octets? par exemples.add(p/2).size
.APL (Dyalog Unicode) , 37 octets
Essayez-le en ligne!
Cela peut être fait pour moins de la moitié du nombre d'octets si l'ordre de sortie des pages n'a pas d'importance:
Comment?
la source
Perl 5 , 95 + 1 (
-a
) = 96 octetsEssayez-le en ligne!
la source
Wolfram Language (Mathematica) , 37 octets
Merci @MartinEnder pour 8 octets!
Essayez-le en ligne!
Explication
Dans:
{3, 4, 5}
Prenez (entrée) et (entrée + 1).
{{3, 4, 5}, {4, 5, 6}}
Pour chaque nombre d'en haut, prenez le plus grand nombre pair moins.
{{2, 4, 4}, {4, 4, 6}}
Pour chaque liste ci-dessus, divisez la liste par les mêmes éléments
{{{2}, {4, 4}}, {{4, 4}, {6}}}
et prendre la longueur de chacun:
{2, 2}
Trier la sortie.
la source
SplitBy
:Length@Split@⌊#/2⌋&/@{#,#+1}&
travaux. Mais il est encore plus facile à faire le plancher avant la carte:Length@*Split/@⌊{#,#+1}/2⌋&
. Et si vous le souhaitez, vous pouvez obtenir le même nombre d'octets sans Unicode:Length@*Split/@{#,#+1}~Floor~2&
Propre ,
222210204196 octetsEssayez-le en ligne!
Les exigences du programme complet rendent absolument impossible la capacité de Clean de concourir.
Pour ceux qui ont prêté attention à mes réponses dans Clean, vous remarquerez
import qualified
qu’il s’agit d’un vilain hack de se déplacer en utilisant des modules qui ne devraient pas être utilisés ensemble, ce qui n’est nécessaire ici que pour un autre vilain hack à faire. avecGenLib
dépendre de auData.Maybe
lieu deStdMaybe
, ce qui est le résultat d' un autre hack laid dans les bibliothèques traduites à partir de HaskellData
pour obtenir des fonctionnalités avant que les propres bibliothèques de Clean ne soient également complètes.Prend une entrée via des arguments en ligne de commande.
la source
Perl, 40 octets
Inludes
+1
poura
La sortie n'est pas ordonnée.
Suppose des numéros de page positifs (surtout aucune page
0
). Suppose que les pages manquantes ne sont mentionnées qu'une fois. Peu importe si l'entrée est commandée ou non.Le traitement d'un seul livre par cycle enregistre des
3
octets pour37
:la source