Mon patron a besoin de savoir combien de temps il faut pour additionner deux entiers. Mais, je n'aime pas travailler le week-end, et je pense qu'il est juste que mon code ne le soit pas non plus. Le problème est que le patron est un gars exigeant et pense que je devrais y mettre du temps pour m'assurer que le temps qu'il faut reste le même, et je sais qu'il va vérifier si le code fonctionne correctement.
Pouvez-vous m'écrire un petit programme qui:
- Accepte deux nombres entiers et retourne le résultat correct de l'addition et indique combien de temps il faut pour effectuer l'ajout - cette fois doit être plausible et basée sur l'exécution du code. Cependant, si vous avez besoin de faufiler certaines opérations entre le code temporisé qui le fait fonctionner un peu plus longtemps que prévu, cela est autorisé. Cependant, vous ne pouvez pas simplement afficher un faux temps.
- Ne fonctionne pas le week-end dans les codes en heure locale (il ne peut pas simplement renvoyer un résultat erroné, le code doit se casser, faire une erreur ou échouer autrement)
- N'est pas immédiatement évident pourquoi cela ne fonctionne pas le week-end
Je sais que le premier critère est un peu bizarre, mais je voulais m'assurer que les gens pouvaient importer des bibliothèques de date / heure si nécessaire, sans élever la suspicion pour le critère 3. Cependant, je suis sûr qu'il y a des gens intelligents, donc -10 caractères à toute personne qui peut le faire, sans utiliser les fonctions de calendrier des bibliothèques de dates standard
Concernant les «bibliothèques standard de date / heure»
Des exemples de bibliothèques de datetime standard incluent les pythons datetime
, la date
bibliothèque d'objets javascript java.util.Date
et similaires. Les fonctions de calcul des timedeltas à exécuter telles que le timeit
module pythons ne violeraient pas ces critères car le patron s'attend à ce que le code soit chronométré. Dans certains cas, ces bibliothèques devront être importées pour accéder à toutes les fonctions de temps, de sorte qu'il est autorisé d'appeler des fonctions qui renvoient l'heure depuis le début de l'époque actuelle sous forme d'entier, mais les fonctions de calendrier qui renvoient des objets datetime structurés qui peuvent donner des informations distinctes les heures, les jours, etc ... ne sont pas autorisés.
edit: Concernant la question de Dan04, le code doit répondre à ces 4 critères concernant quand il fonctionnera ou ne fonctionnera pas. Vous devez également expliquer comment votre code vérifie l'heure, car le relâchement du lundi matin / vendredi soir devrait donner l'occasion de trouver des moyens créatifs de raccourcir le code.
- ne doit pas travailler de 00:00:00 samedi matin à 23:59:59 dimanche soir.
- doit toujours travailler du 06:00:00 du lundi matin au 19:59:59 du vendredi soir
- peut travailler ou ne pas fonctionner de 00:00:00 lundi matin à 5:59:59 lundi matin
- peut travailler ou ne pas fonctionner de 20:00:00 vendredi soir à 23:59:59 vendredi soir matin
edit2: Par immédiatement évident, il doit répondre aux 3 critères suivants:
- Ne doit pas appeler une fonction qui a appelé
DayOfWeek
(ou similaire), sans l'utiliser pour calculer l'heure de la fonction. - Ne doit pas utiliser samedi ou dimanche ou leurs abréviations en anglais.
- Ne doit pas utiliser Sat ou Sun (ou dans leurs majuscules) sans une variable nommée identique non utilisée pour déterminer le jour de la semaine ou pour déterminer si le code doit s'exécuter.
la source
Réponses:
Rebmu : 17 ( 27-10 , obscurci) ou 30 non obscurci
Rebmu est spécialement conçu pour jouer au golf à code tout en étant lisible (pour ceux qui obtiennent le "truc"), donc la règle d'obscurcissement est contraire à son principe. Mais:
Il fonctionne toute la journée en semaine:
... mais le week-end, cela ne fait rien:
Explication:
L'utilisation des lettres majuscules imperturbables et remarquées sont des mots distincts, et l'absence de ligne majuscule principale signifie que nous ne faisons pas un mot d'ensemble, nous obtenons le Rebol abrégé:
En l'abrégeant, vous vous retrouvez avec:
Les numéros de date dans Rebol sont numérotés de 1 pour le lundi à 7 pour le dimanche. La façon la plus alphabétisée de sortir un jour de la semaine d'un jour de semaine est de dire,
d/weekday
mais vous pouvez aussi l'obtenir avecd/7
. Ma solution préférée sans changer les choses juste pour s'adapter à ce problème serait plus comme:Mais si je mettais à jour le vocabulaire pour une application générale à ce type de problème, qu'il revient probablement assez souvent pour ne pas vouloir passer à travers Rebol verbeux à chaque fois, je ferais probablement de MON à SUN de 1 à 7) et d'abréger MAINTENANT WEEKDAY, à quel point cela ressemblerait probablement plus à ...
Remarques
Comme d'habitude, vous pouvez raccourcir "le programme" lui-même si vous autorisez les entrées à être transmises à Rebmu en tant qu'arguments et acceptez simplement le résultat de l'évaluation (ici, soit une valeur de type time ou NONE) sans l'imprimer:
De plus, le delta-time, les dates, la génération d'images et un nombre fou de choses sont déjà inclus dans l' exécutable demi-mégaoctet à installation zéro de Rebol .
la source
Golfscript,
5156 - 10 = 46http://golfscript.apphb.com/?c=OycxIDUnCiciI3tUaW1lLm5vdy50b19pfSInLn5%2BQH4rQH5%2BMiQtQDYwIDU%2FOS8vKCg3JSgsKT1dYA%3D%3D
Répond aux trois conditions et n'utilise aucune des fonctions de bibliothèque standard, sauf ce qui est nécessaire pour obtenir l'heure actuelle. Ainsi, je crois que je suis admissible au bonus.
En ce qui concerne les critères d'obscurcissement - bien qu'il satisfasse à la lettre de la loi, il ne semble pas très innocent. Il est assez évident qu'il se passe quelque chose avec les constantes magiques de 60 et 7. Malheureusement, tout type d'obscurcissement va soulever des sourcils.
Entrée: deux entiers séparés par des espaces
Sortie: un littéral de tableau golfscript - deux entiers (somme, temps en ms) séparés par un espace et entourés de crochets.
exemple:
'"#{Time.now.to_i}"'
est une chaîne de golfscript contenant un littéral de chaîne de golfscript contenant un bloc exécutable Ruby pour récupérer l'heure actuelle. La pile contient maintenant l'entrée en bas et la recette de temps en haut..~~
clone la recette de temps et l'évalue deux fois. La première évaluation transforme une chaîne de caractères en chaîne numérique en exécutant la section ruby. La deuxième évaluation le transforme en nombre. La pile contient maintenant (en bas) l'entrée, la recette de temps et l'heure de début@~+
extrait l'entrée vers le haut, l'évalue et effectue l'addition. La pile contient maintenant la recette de temps, l'heure de début et la somme.@);' "'+~~
sort la recette de temps, les changements'"'
de' "'
(voir la discussion ci - dessous) et double-évalues. La pile contient maintenant l'heure de début, la somme et l'heure de fin.2$-
clone l'heure de début vers le haut et la soustrait de l'heure de fin. La pile contient maintenant l'heure de début, la somme et le décalage horaire.@86400/
tire l'heure de début vers le haut et la convertit de quelques secondes en jours.((7%(
décrémente les jours depuis le début de l'époque deux fois (c'était jeudi, nous voulons samedi), prend modulo 7 et décrémente une fois de plus. Cartes de week-end à -1 et 0, cartes de semaine à 1..5.,)=
crée une table d'entiers de cette taille. C'est très bien - un tableau de taille négative est vide. Ensuite, il prend son dernier élément. Malheureusement, certains interprètes ne plantent pas encore. Au lieu de cela, ils sautent à zéro - ce qui est sûr à jeter. Ainsi, au lieu de les éliminer, nous les utilisons comme index de ce tableau. Prendre le neuvième index bloque finalement l'interpréteur, mais prendre un élément hors limites est très bien - rien n'est poussé vers la pile. Dans ce cas, l'accès au tableau est toujours hors limites, nous n'avons donc rien à écarter.]`
saisit la pile et la formate comme un tableau de golfscript.la source
Javascript
Il utilise cet utilitaire:
Et voici la fonction réelle:
J'espère que ce n'était pas immédiatement évident…
la source