Il s'agit d'un défi de la taille d'un octet dans lequel vous devez convertir une température d'entrée dans l'une des trois unités (Celsius, Kelvin et Fahrenheit) en deux autres.
Contribution
Vous serait fourni avec une température sous forme de nombre suivi d'une unité (séparés par un espace). La température peut être un nombre entier ou un nombre à virgule flottante (23 vs 23,0 ou 23,678).
Vous pouvez soumettre une fonction ou un programme complet qui lit la chaîne séparée par des espaces de l'argument STDIN / ARGV / function ou de son équivalent le plus proche et imprime la sortie vers STDOUT ou son équivalent le plus proche.
Sortie
Votre sortie doit correspondre à la température convertie dans les deux autres formats, séparés par une nouvelle ligne et suivis du caractère de l'unité correspondante sur chaque ligne (éventuellement séparés par un espace). L'ordre des deux unités n'a pas d'importance.
Précision de sortie
- Le nombre converti doit être précis à au moins 4 décimales, sans arrondi.
- Les zéros ou les décimales suivants sont facultatifs, à condition que les 4 premières décimales (sans les arrondis) soient précises. Vous pouvez également ignorer les 4 zéros et / ou le point décimal au cas où la réponse aurait 4 zéros après le point décimal.
- Il ne devrait pas y avoir de zéros au début
- Tous les formats de nombres sont acceptables dans la mesure où ils répondent aux trois exigences ci-dessus.
Représentation de l'unité
L'unité de température ne peut être que l'une des suivantes:
C
pour CelsiusK
pour KelvinF
pour Fahrenheit
Exemples
Contribution:
23 C
Sortie:
73.4 F
296.15 K
Contribution:
86.987 F
Sortie:
303.6983 K
30.5483 C
Contribution:
56.99999999 K
Sortie:
-216.1500 C
-357.0700 F
C’est le code-golf, donc l’entrée la plus courte en octets est gagnante! Bon golf!
Classement
<script>site = 'meta.codegolf',postID = 5314,isAnswer = true,QUESTION_ID = 50740</script><script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'></script><script>jQuery(function(){var u='https://api.stackexchange.com/2.2/';if(isAnswer)u+='answers/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJeRCD';else u+='questions/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJO6t)';jQuery.get(u,function(b){function d(s){return jQuery('<textarea>').html(s).text()};function r(l){return new RegExp('<pre class="snippet-code-'+l+'\\b[^>]*><code>([\\s\\S]*?)<\\/code><\/pre>')};b=b.items[0].body;var j=r('js').exec(b),c=r('css').exec(b),h=r('html').exec(b);if(c!==null)jQuery('head').append(jQuery('<style>').text(d(c[1])));if (h!==null)jQuery('body').append(d(h[1]));if(j!==null)jQuery('body').append(jQuery('<script>').text(d(j[1])))})})</script>
la source
23C\n73.4F\n296.15K
? ou le format d'entrée doit-il être supprimé?2/3
=>0.666666666666
est-il précis au 4ème chiffre? (Je dirais oui). Ou devrait-il être0.6667
?0.666666666666
est correct. J'impose une précision sans arrondis. il en0.6666
va de même pour l'alternative.Réponses:
CJam,
77656059555452 octetsEssayez-le en ligne dans l' interprète CJam .
Comment ça marche
la source
Python 3,
118116 octetsEffectue les conversions
K -> F -> C -> K
deux fois dans un ordre de rotation .la source
'FCK'[u]
.JavaScript ( ES6 ), 127
130 132octetsDans l’attente d’une réponse étonnante en esolanguage, je n’ai pas trouvé grand-chose au golf ici.
En utilisant la chaîne de modèle, les 3 nouvelles lignes sont significatives et comptées.
Exécutez le fragment de code dans Firefox pour tester.
la source
Pip,
5857 octetsPrend une entrée à partir d'arguments de ligne de commande.
Formaté et légèrement non-golfé:
Explication:
La formule de conversion générale entre les unités 1 et 2 est la suivante
temp2 = (temp1 - offset1) * mult2 / mult1 + offset2
. Les décalages peuvent être au zéro absolu ou à toute autre température appropriée; utilisons 0 ° C.Nous allons construire des listes de ces valeurs et les indexer en fonction de l'unité avec laquelle nous traitons. Pip n'a pas de tableaux / hachages / dictionnaires associatifs, nous devons donc convertir les caractères en index entiers. Peut-être y aura-t-il des modèles utiles avec les valeurs ASCII.
Cela semble prometteur. Encore un fait utile: les indices dans Pip s’enveloppent. Donc, nous n’avons pas réellement besoin de
%3
tant que nous indexons dans quelque chose de longueur 3. Définiro:[32 0 273.15]
et utiliser(o (Ab)%7)
fera l’essentiel. (A
Obtient la valeur ASCII d'un caractère. La(l i)
syntaxe est utilisée pour l'indexation en iterables, ainsi que pour les appels de fonction.)Pour les multiplicateurs, nous n'avons besoin que des deux nombres 9 et 5. Comme les nombres sont identiques aux chaînes dans Pip et sont donc indexables, obtenir le multiplicateur est aussi simple que
95@Ab
(en utilisant l'autre méthode d'indexation, l'@
opérateur).En utilisant les fonctionnalités de programmation de tableaux de Pip, nous pouvons enregistrer un caractère sur la méthode naïve:
Enfin, ajoutez le décalage pour la nouvelle unité, concaténez un espace et le symbole de la nouvelle unité à la fin, puis imprimez.
Nous faisons cela pour chaque
t
entrée"CFK" RM b
, convertissant ainsi en chaque unité sauf l'original.Exemple d'invocation:
(Pour plus d'informations sur Pip, voir le référentiel .)
la source
dc, 102 octets
Je suis sûr que cela peut être joué plus souvent, mais voici un début:
DC fait à peine la note sur celui-ci. Plus précisément, la gestion des chaînes en continu n'est pas vraiment à la hauteur. Mais tout ce que nous avons à faire est de faire la différence entre "C", "F" et "K". Heureusement, dse analyse "C" et "F" en tant que nombres hexadécimaux 12 et 15. Et pour "K", il ne reste que 0 sur la pile.
Sortie:
la source
C, 160 octets
Cela lit stdin. Aucune précision de sortie n'étant spécifiée, elle imprime ce que vous
printf()
ressentez, qui est généralement plus de 4 chiffres.Version non-golfée:
Quelques explications / remarques:
f
etd
contient les facteurs de multiplication et les compensations pour convertir Celsius en toute autre unité (y compris Celsius, pour éviter les cas particuliers).u
est l'unité d'entrée,u / 5 - 13
mappeC
à 0,F
à 1 etK
à 2.int
variable au lieu d’unechar
variable pour recevoir l’scanf()
entrée. Ceci est une incompatibilité de type, qui ne produira que des résultats corrects sur les petites machines Endian (ce qui est presque toutes ces machines).la source
float v,f[]={1,1.8,1,0,32,273.15};u;main(j){scanf("%f %c",&v,&u);for(u=u/4&3,v-=f[u+3],v/=f[u];j++<3;printf("%f %c\n",f[u]*v+f[u+3],"CFK"[u]))u++,u%=3;}
. Gagné un peu avec moins de variables, déplacer le code. La nouvelle hypothèse est argc = 1 (j = 1).u = u/4 & 3
.Python 2, 168 octets
J'ai vu la solution Python 3 juste au moment de publier ceci, mais peu importe, je pratique simplement le golf.
Ungolfed:
la source
Perl,
85 8076Testez - moi .
la source
PHP,
161153http://3v4l.org/CpvG7
Serait bien de jouer au golf deux autres personnages pour entrer dans le top dix ...la source
\n
et modifié en nouvelles lignes réelles, converti en programme complet (réception des données via GET, par exemple:)http://localhost/my_file.php?t=<temperature>
et remplacé$u!=K
par$u^K
et$u!=F
avec$u^F
. Si$u
estK
en cours d'exécution$u^K
retournera une chaîne vide, qui est une valeur de fausseté. En outre, votre espace à l'intérieur de la scission a été converti enC^c
(Juste pour avoir l'air cool).Python 2, 167
Ceci est mon premier essai sur CodeGolf.
la source
Pyth, 126 octets
Cela me semble vraiment long ... ah bon.
la source
R,
150144141 octetsEn retrait, avec de nouvelles lignes:
Usage:
Merci à @AlexA. & @MickyT. !
la source
as.double()
plutôt queas.numeric()
.switch
déclaration peut être faite avecc(x,x-273.15,5*(x-32)/9)[i]
4 personnagesas.double(a[1])
parscan(t=a[1])
.Javascript,
206193187175162159156Merci à Optimizer et Ismael Miguel de m'avoir aidé à jouer au golf un peu plus loin.
la source
if
else
à?:
if ... return; return ?:
àreturn ?: ?:
a=prompt().split(" "),e=273.15,f=1.8;alert([...]
para=prompt(e=273.15,f=1.8).split(" "),alert([...]
. En outre, vous pouvez supprimer les espaces après l'unité. En outre, supprimerreturn
et déplacer l'alert
intérieur de la fonction réduisait beaucoup! Et au lieu de définira
, utilisez simplement laapply()
méthode avec la scission. Mais voila(function(b,c){alert(c=="F"&&((b-32)/f+"C\n"+((b-32)/f+e+"K"))||(c=="C"?b*f+32+"F\n"+(b+e+"K"):b*f-459.67+"F\n"+(b-e+"C")))}).apply(e=273.15,prompt(f=1.8).split(" "))
:! 166 octets ( -21 octets). Ping moi dans le chat si vous avez des doutes.Mathematica, 66
Espérons corriger cette fois.
Exemple
la source
Excel, 239 octets
Dont 112 octets sont utilisés pour séparer valeur et unité. Quelqu'un connaît une meilleure solution?
la source