var QUESTION_ID=65106,OVERRIDE_USER=16196;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/65106/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}#answer-list{padding-right: 100px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
Réponses:
CJam,
3935 octetsEssayez-le en ligne
La dernière version inclut des améliorations suggérées par @ MartinBüttner, en particulier en utilisant l'opérateur vectoriel par élément au lieu de transposer les deux listes.
Explication:
la source
ri60md]r"utehour"+6/W%.{1$1>'s*+}S*
(On dirait que cela vous donne une avance assez solide sur ce défi :))r"utehour"+6/W%
est en fait de la même longueur que"hour minute"S/
, de sorte qu'une partie finit par ne pas aider. Je pense que je l'avais déjà vu.
utilisé avec un bloc, mais j'avais encore oublié qu'il était supporté.Python 3,
5067119116 11611211110494 octetsJe n'aime pas revenir au%
formatage de chaînes de style, mais cela économise 6 octets.format
.Modifier: J'ai oublié d'analyser la saisie.
Edit: oublié de gérer les pluriels.
Edit: Yay lambdas!Edit: Ajout d'ungolfing
Edit: Darn it. Lambdas n'a pas aidé.
Edit: Étant donné que les minutes ont un maximum de trois chiffres et
int()
ne dérange pas les espaces dans la chaîne, je peux enregistrer quelques octets en utilisantinput()[:3]
.Non golfé:
la source
JavaScript, 78 octets
Pour la suite de tests, saisissez input comme
"61 min"
dans la zone de saisie.Explication
la source
parseInt(n)
à+n
.150 min
.2 hours 30 minutes
. Puis-je vous demander comment vous l'avez testé?"61 min"
ou'61 min'
Pyth,
3938 octetsla source
Vitsy ,
575452 octetsOh, wow, je n'ai même pas d'entiers dans ma langue. oo
Essayez-le en ligne!
la source
K5,
5551 octetsC'est plus général qu'il ne doit être strictement; pourrait encore jouer au golf.
En action:
Modifier:
Ce programme a traversé plusieurs itérations très différentes au cours du développement, et j'ai pensé qu'il pourrait être plus éclairant de montrer certaines des étapes intermédiaires.
Voici ma première tentative de résoudre le problème, avant l'introduction de l'exigence de pluralisation. Il y a ici une répétition claire:
J'ai réalisé que la manière générale de gérer la sortie des lieux était la forme de «décodage» de K5. Pour insérer des valeurs dans la chaîne, j'ai utilisé la primitive "dot-apply", qui applique une liste d'arguments à une fonction et décompresse la liste en paramètres individuels:
Pas beaucoup de redondance ici. Lorsque la pluralisation a été ajoutée, j'ai décomposé cette fonction anonyme principale en une transformation que je pouvais appliquer à chaque nombre, comme ceci:
Inscrivez - vous
x
,y
et nons
ou rien, selon quex
est égal à « 1 ». En fin de compte, cela a mieux fonctionné pour inverser l'ordre des arguments de cette fonction.Modifier 2:
Plusieurs petites améliorations ici. Une meilleure façon de sélectionner un "s" ou une chaîne vide, une constante plus courte pour "décoder" qui reflète la plage d'entrée limitée, et une manière plus simple de supprimer "min".
la source
Pyth, 46 octets
Prend l'entrée comme
x min
et les sortiesx hours y minutes
Essayez-le ici
Explication:
la source
Perl 6 ,
8073 octets80 octets d'origine
Usage:
En raison d'un changement dans la question, je peux supprimer
x?$m
la fin de la fonction, ce qui me permet de la réduire de 3 octets supplémentaires.la source
JavaScript (ES6),
100948981 octetsDémo dé-golfée (convertie en ES5, car tous les navigateurs ne prennent pas encore en charge ES6)
la source
t=parseInt(t)
et entre parenthèses, puis mettre que là où jamais vous utilisez d' abordt
si:(h=0|(t=parseInt(t))/60)
. De cette façon, vous pouvez supprimer le retour et le{}
C #, 127 octets
Cela peut être placé dans un fichier et exécuté via le shell interactif C # fourni avec Mono, en utilisant la configuration par défaut.
[C'est ma première tentative de golf de code. J'espère que ma contribution ne viole aucune règle.]
la source
C, 89 octets
la source
Rubis, 75 octets
la source
''
→p
.MATLAB,
111 108106 octetsCela fonctionne également avec Octave et peut être essayé ici . Le lien est vers un espace de travail contenant déjà le code dans un fichier nommé
runningLength.m
. Donc, pour le tester, entrez simplementrunningLength
à l'invite, puis entrez la chaîne d'entrée, par exemple,'123 mins'
et il affichera la sortie.Prend l'entrée comme une chaîne, par exemple
'123 mins'
, la convertit en un nombre (qui ignore implicitement lemins
bit).Les minutes et les heures sont ensuite calculées
Affiche ensuite la chaîne de sortie
Le bit 's' de la sortie est calculé et géré correctement - un 's' est ajouté chaque fois que le nombre n'est pas 1.
la source
Python 2, 96 octets
la source
Haskell,
117109 octetsVersion moins golfée:
f
est une fonction qui prend les 3 premiers caractères de son entrée et les convertit en entier.p#q
est une fonction qui pluraliseq
sip
n'est pas égal à 1. Afin de retourner le résultat sans guillemets, j'ai utiliséputStr
pour imprimer le résultat dans STDOUT.Merci à nimi pour l'aide!
la source
Python 2,
7977 octetsLes 3 premiers caractères de l'entrée sont simplement analysés comme un entier. Cela ne fonctionne que parce que le troisième caractère d'une entrée à 2 chiffres est un espace, qui
int
sera ignoré lors de la conversion.la source
"hour"+m/120*"s"
et de même pendant quelques minutes.m=240
, malheureusement.LabVIEW, 50 octets
Ceci est compté selon ma suggestion sur Meta .
Le code est assez simple, prenez le nombre de Modulo d'entrée par 60 et ajoutez un s pour les minutes! = 1. L'autre côté du boîtier met simplement la chaîne à travers.
la source
Scala, 135 octets
Usage:
la source
Haskell,
107101 octetsNon golfé:
s!n
ajouten
às
, en ajoutant un's'
à la fin sin /= 1
.f x
fait le formatage après utilisationdivMod
.Puisque nous pouvons supposer qu'une entrée max de
240
,take 3
est suffisante pour ne prendre que le nombre.(J'ai dû vraiment essayer de battre le score de @Craig Roy ...)
la source
R, 112 octets
Modifier : correction d'une erreur de portée, puis résolution du problème de sortie du devis.
Cas de test
J'ai essayé d'économiser de l'espace en essayant de trouver un moyen d'ajouter ou de soustraire "s" si nécessaire, mais j'ai dû jouer avec l'
sep =
argument dans lapaste()
fonction et il ne semblait pas vraiment que cela allait me faire économiser beaucoup d'espace. Aucune suggestion?Non golfé
L'arrondi vers le bas avec input / 60 ou input %% 60 (mod) donne respectivement les heures et les minutes. Enchaînez-les ensemble avec une
ifelse()
déclaration qui spécifie si les unités sont ou non des heures ou des minutes.la source
cat()
fonction.s
et en changeant vos conditions.Ruby,
971009988 octetsEdit: Correction de la sortie.
Modifier: supprimer les accolades de
divmod
.Edit: interpolation de chaîne Yay! Merci à Vasu Adari . Aussi, il vaut mieux ne pas jouer au golf.
Non golfé:
la source
divmod
méthode. De plus, en utilisant l'interpolation de chaînes, vous pouvez économiser quelques octets.Aller, 177 octets
(Il comprend uniquement la fonction et les instructions d'importation)
Jolie solution -
Le tester -
la source
Mathematica, 61 octets
la source
AutoHotkey ,
174170160 octetsRemarques:
la source
PHP,
7776 octetshorible, horible, horible!
PHP émet seulement quelques
Notice
s pour"s"[$h<2]
Pour exécuter:
php -r 'CODE' '150 minutes'
et bien sûr, désactivez / désactivez le rapport d'erreurs de stdout!
Edit: -1 octet assign in assign (crédit: insertusernamehere here)
C'est tellement moche que je dois donner une aide à l'exécution pour les utilisateurs de Linux:
la source
$m=($i=$argv[1])%60;echo$h=$i/60|0," hour","s"[$h<2]," $m minute","s"[$m<2];
.$m=($i=$argv[1])%60;echo$h=$i/60|0," hour",s[$h<2]," $m minute",s[$m<2];
.Arcyóu (non compétitif), 93 octets
Cette soumission utilise une version du langage qui a été créée après ce défi.
Yeesh! Ce langage nécessite une meilleure manipulation des chaînes.
Explication:
la source
Rubis,
747371 octets73 octets
74 octets:
Usage:
la source
Kotlin, 132 octets
Version non golfée:
Testez-le avec:
Exemples de sorties:
la source
Sérieusement , 77 octets
Sérieusement n'est vraiment pas bon à la manipulation de cordes. Essayez-le en ligne avec une explication complète (vous devrez saisir manuellement l'entrée comme
"210 mins"
parce que les permaliens n'aiment pas les guillemets).Explication rapide et sale:
la source
Java 8, 148 octets
J'ai choisi de publier une alternative à @TheAustralianBirdEatingLouse car elle est non seulement plus courte de beaucoup (~ 10%), mais aussi plus correcte pour l'impression des heures et des minutes au lieu des heures et des minutes abrégées. Les implémentations de méthodes dans les interfaces sont nouvelles pour Java 8 - donc cela serait nécessaire pour compiler / exécuter
la source