Este es un desafío de tamaño de byte en el que debe convertir una temperatura de entrada en una de las tres unidades (Celsius, Kelvin y Fahrenheit) a las otras dos.
Entrada
Se le proporcionará una temperatura como un número seguido de una unidad (separada por espacio). La temperatura puede ser un número entero o un número de coma flotante (23 frente a 23.0 o 23.678).
Puede enviar una función o un programa completo que lea la cadena separada por espacios del argumento STDIN / ARGV / function o el equivalente más cercano e imprima la salida en STDOUT o el equivalente más cercano.
Salida
Su salida debe ser la temperatura convertida a los otros dos formatos, separados por una nueva línea y seguidos del carácter de unidad correspondiente en cada línea (opcionalmente separados por un espacio). El orden de las dos unidades no importa.
Precisión de salida
- El número convertido debe tener una precisión de al menos 4 decimales sin redondear.
- Los ceros finales o los decimales son opcionales siempre que los primeros 4 decimales (sin redondeo) sean precisos. También puede omitir los 4 ceros y / o el punto decimal en caso de que la respuesta real tenga 4 ceros después del punto decimal.
- No debería haber ceros a la izquierda
- Cualquier formato de número es aceptable siempre que cumpla con los tres requisitos anteriores.
Representación de la unidad
La unidad de temperatura solo puede ser una de las siguientes:
C
para CelsiusK
para KelvinF
para Fahrenheit
Ejemplos
Entrada:
23 C
Salida:
73.4 F
296.15 K
Entrada:
86.987 F
Salida:
303.6983 K
30.5483 C
Entrada:
56.99999999 K
Salida:
-216.1500 C
-357.0700 F
Este es el código de golf, por lo que la entrada más corta en bytes gana. ¡Feliz golf!
Tabla de clasificación
<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>
fuente
23C\n73.4F\n296.15K
? ¿o debe suprimirse el formato de entrada?2/3
=> ¿0.666666666666
es precisa para los 4 dígitos? (Yo diría que sí). ¿O debería ser0.6667
?0.666666666666
es correcto. Estoy aplicando una precisión basada en no redondeo. Así0.6666
es la alternativa.Respuestas:
CJam,
77656059555452 bytesPruébelo en línea en el intérprete de CJam .
Cómo funciona
fuente
Python 3,
118116bytesRealiza las conversiones en un orden rotativo
K -> F -> C -> K
dos veces.fuente
'FCK'[u]
.JavaScript ( ES6 ), 127
130 132bytesA la espera de una sorprendente respuesta de ese idioma, no encontré mucho para jugar golf aquí.
Usando una cadena de plantilla, las 3 nuevas líneas son significativas y contadas.
Ejecute el fragmento en Firefox para probar.
fuente
Pip,
5857 bytesToma información de los argumentos de la línea de comandos.
Formateado y ligeramente sin golf:
Explicación:
La fórmula general de conversión entre la unidad 1 y la unidad 2 es
temp2 = (temp1 - offset1) * mult2 / mult1 + offset2
. Las compensaciones pueden ser cero absoluto o cualquier otra temperatura conveniente; usemos 0 ° C.Construiremos listas de estos valores y los indexaremos en función de la unidad con la que estamos tratando. Pip no tiene matrices / hashes / diccionarios asociativos, por lo que debemos convertir los caracteres en índices enteros. Tal vez habrá patrones útiles con los valores ASCII.
Esto parece prometedor. Un hecho más útil: los índices en Pip se envuelven. Por lo tanto, en realidad no necesitamos el
%3
tiempo que estamos indexando en algo de longitud 3. Definiro:[32 0 273.15]
y usar(o (Ab)%7)
hará el truco. (A
obtiene el valor ASCII de un carácter. La(l i)
sintaxis se usa para indexar en iterables, así como para llamadas a funciones).Para los multiplicadores, solo necesitamos los dos números 9 y 5. Dado que los números son lo mismo que las cadenas en Pip, y por lo tanto son indexables, obtener el multiplicador es tan simple como
95@Ab
(usando el otro método de indexación, el@
operador).Usando las características de programación de matriz de Pip, podemos guardar un personaje sobre el método ingenuo:
Finalmente, agregue el desplazamiento para la nueva unidad, concatene un espacio y el símbolo de la nueva unidad en el extremo e imprima.
Hacemos esto para cada uno
t
de"CFK" RM b
, convirtiendo así a cada unidad, excepto el original.Invocación de muestra:
(Para más información sobre Pip, consulte el repositorio ).
fuente
cc, 102 bytes
Estoy bastante seguro de que esto se puede jugar más, pero aquí hay un comienzo:
dc apenas califica en este caso. Específicamente, el manejo de cadenas de CC no está realmente a la altura del trabajo. Pero todo lo que necesitamos hacer es diferenciar entre "C", "F" y "K". Afortunadamente, dc analiza "C" y "F" como números hexadecimales 12 y 15. Y para "K" simplemente deja 0 en la pila.
Salida:
fuente
C, 160 bytes
Esto se lee de stdin. No se especifica la precisión de salida, por lo que imprime lo que se
printf()
siente como impresión, que en su mayoría tiene más de 4 dígitos.Versión sin golf:
Algunas explicaciones / comentarios:
f
yd
contiene los factores de multiplicación y las compensaciones para convertir Celsius a cualquier otra unidad (incluido el propio Celsius, para evitar casos especiales).u
es la unidad de entrada, seu / 5 - 13
asignaC
a 0,F
a 1 yK
a 2.int
variable en lugar de unachar
variable para recibir lascanf()
entrada. Este es un desajuste de tipo, que solo producirá resultados correctos en pequeñas máquinas endian (que es casi todas en estos días).fuente
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;}
. Ganó un poco con menos variables, moviendo el código. Nueva suposición es argc = 1 (j = 1).u = u/4 & 3
.Python 2, 168 bytes
Vi la solución Python 3 justo cuando estaba a punto de publicar esto, pero lo que sea, solo estoy practicando golf.
Sin golf:
fuente
Perl,
85 8076Ponme a prueba .
fuente
PHP,
161153http://3v4l.org/CpvG7
Sería bueno jugar dos personajes más para estar entre los diez primeros ...fuente
\n
y cambió a líneas nuevas reales, se convirtió en un programa completo (recibiendo los datos a través de GET, por ejemplo:)http://localhost/my_file.php?t=<temperature>
y reemplazado$u!=K
con$u^K
y$u!=F
con$u^F
. Si$u
es asíK
, la ejecución$u^K
devolverá una cadena vacía, que es un valor falso. Además, su espacio dentro de la división se convirtió enC^c
(Solo para verse genial).Pitón 2, 167
Este es mi primer intento en CodeGolf.
fuente
Pyth, 126 bytes
Esto me parece muy largo ... oh bueno.
fuente
R,
150144141 bytesSangrado, con nuevas líneas:
Uso:
Gracias a @AlexA. & @MickyT. !
fuente
as.double()
lugar deas.numeric()
.switch
declaración se puede hacer conc(x,x-273.15,5*(x-32)/9)[i]
4 caracteresas.double(a[1])
conscan(t=a[1])
.Javascript,
206193187175162159156Gracias a Optimizer e Ismael Miguel por ayudarme a jugar golf un poco más.
fuente
if
else
a?:
if ... return; return ?:
a unreturn ?: ?:
a=prompt().split(" "),e=273.15,f=1.8;alert([...]
pora=prompt(e=273.15,f=1.8).split(" "),alert([...]
. Además, puede eliminar los espacios después de la unidad. ¡Además, al quitarreturn
y mover elalert
interior de la función se redujo mucho! Y en lugar de configurara
, simplemente use elapply()
método con la división. Pero aquí van:(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 bytes ( -21 bytes). Hazme ping en el chat si tienes dudas.Mathematica, 66
Esperemos corregir esta vez.
Ejemplo
fuente
Excel, 239 bytes
112 bytes de los cuales se utilizan para separar el valor y la unidad. Alguien sabe una mejor solución?
fuente