Combien parmi vous qui utilisent encore votre propre phalange pour déterminer si un mois compte 31 jours ou moins?
Votre travail consiste à écrire un programme pour compter combien de mois, dans une fourchette de mois, ont 31 jours complets et combien ont moins de 31 jours en «comptant les jointures».
Courtoisie: amsi.org.au
Contribution
Une paire de mois, dont le premier n'a pas à venir chronologiquement avant le second, donné dans n'importe quel format approprié. Par exemple: 201703 201902
- mars 2017 à février 2019. Veuillez décrire le format d'entrée que vous choisissez. Notez que l'entrée doit pouvoir inclure toutes les années de 1 à 9999. La plage de mois spécifiée comprend les mois de début et de fin.
Production
Deux nombres entiers: le nombre de mois dans la plage donnée avec 31 jours et le nombre de mois dans la plage avec moins de 31 jours.
Exemple: 14 10
- 14 phalanges, 10 rainures (cela signifie que dans cette plage de mois, nous avons 14 mois qui ont 31 jours complets et 10 mois qui ont moins de 31 jours).
Pour une entrée où le deuxième mois de la plage vient chronologiquement avant le premier, par exemple 201612 201611
, vous devez sortir une paire de zéro.
Exemples d'entrée et de sortie
| Input | Output |
|---------------|-------------|
| 201703 201902 | 14 10 |
| 201701 202008 | 26 18 |
| 000101 999912 | 69993 49995 |
| 201802 201803 | 1 1 |
| 201601 201601 | 1 0 |
| 201612 201611 | 0 0 |
Règles
- Vous pouvez choisir n'importe quelle langue que vous aimez
- Une entrée par ligne
- C'est le code-golf , donc le code le plus court en octets gagne!
- Le gagnant sera choisi le 9 avril
- Des échappatoires standard s'appliquent
- PS: c'est ma première question dans PCG, il pourrait y avoir quelques incohérences. N'hésitez pas à modifier et à confirmer ce qui n'est pas clair pour vous.
201612 201611
.Réponses:
Gelée , 21 octets
Prend l'entrée comme
[[y, m], [y, m]]
.Essayez-le en ligne!
Comment ça fonctionne
la source
JavaScript (ES6),
70686764 octetsPrend l'entrée comme deux entiers au
yyyymm
format, dans la syntaxe de curry(a)(b)
. Génère un tableau de deux entiers[knuckles, grooves]
.Formaté et commenté
Cas de test
NB : Le troisième cas de test n'est pas inclus dans cet extrait, car il ne fonctionnera que si votre navigateur a activé l'optimisation des appels de queue.
Afficher l'extrait de code
la source
Python 2 ,
92908680 octetsEssayez-le en ligne!
6 de plus en se convertissant en lambda, avec merci à @math_junkie pour l'idée. Génère maintenant une liste contenant les deux nombres.
Version précédente non lambda (86 octets)
Essayez-le en ligne ancien!
2 sauvé grâce à @ovs pour m'avoir aidé à me débarrasser de la
len(k)
. Je n'avais pas pensé à utiliserNone
.L'entrée est une liste d'entiers au format
y1,m1,y2,m2
Un crédit dû à @KeerthanaPrabhakaran qui a obtenu
bin(2741)[2:]
avant moi, ce qui économise 1 octet sur le codage en dur de la chaîne binaire.la source
len(k)
la dernière tranche. Merci.PHP ,
259256249248237221 octetsDépassé par aross : /codegolf//a/114512/38505
Format d'entrée:
yyyymm,yyyymm
Essayez-le en ligne!
Versions plus anciennes
Essayez-le en ligne!
Essayez-le en ligne!
Essayez-le en ligne!
Essayez-le en ligne!
Essayez-le en ligne!
la source
Lot, 93 octets
Accepte deux paramètres au format ymm (c'est-à-dire 101 - 999912). Solution basée sur une boucle de 129 octets précédente:
la source
Python 3.5 (
164162154 154152150148140137 octets)repl.it
prend une entrée sous la forme de aaaamm
imprime la sortie en tant que number_of_knuckles number_of_grooves
la source
n=int
et peut-être aussi quelquesexec
tromperies.2773&1<<r%12-1>0
place deint('101010110101'[r%12-1])
print([k,t-k])
asprint(k,t-k)
produirait le résultat souhaité(k,g)
, réduisant ainsi de 2 octets!split(' ')
parsplit()
Python 2 ,
147146142 octetsEssayez-le en ligne!
Décomposer le code,
la source
if-else
clauses par des recherches de tableau. Voir cet article pour plus de détailsPHP,
1201039796 octetsCourez comme ceci:
Explication
Tweaks
$e
, il suffit de comparer directementla source
$x++
au lieu de+$x++
fonctionne également.$x
chaîne non initialisée2017-12month
, ce serait un format non reconnu et les résultats en 1970+
dans la chaîne.PowerShell , 96 octets
Essayez-le en ligne!
Prend la saisie sous forme
2017-03
. Utilise les bibliothèques de dates .NET intégrées et passe en boucle des entrées$a
à$b
, chaque itération s'incrémentant$x++
et s'ajoutant à$z
si le courant.Month
est-in
2,4,6,9,11
(c'est-à-dire, un mois autre que 31 jours). Ensuite, nous affichons le total de nos mois moins les mois non 31 jours$x-$z
et les mois non 31 jours$z
.Tosses une erreur sur le
0001-01
au9999-12
cas test, parce que .NET ne supporte que des années jusqu'à9999
, de sorte que les finales.AddMonths(1)
provoque un débordement. Restitue toujours les valeurs correctes, car c'est une erreur qui ne se termine pas; cela provoque simplement la sortie de la boucle.Il serait probablement plus court de le faire de manière arithmétique, comme les réponses Python ou JavaScript, mais je voulais montrer une approche utilisant les intégrés .NET.
la source
Bash , 113 octets
Essayez-le en ligne!
a besoin de jouer au golf ...
prend l'entrée comme
2016-03
2018-10
les sorties:
non golfé:
la source
Swift, 151 octets
l'entrée est un tableau de deux entiers au format selon l'exemple
la source