Это задача размером в байт, в которой необходимо преобразовать входную температуру в одной из трех единиц (градусы Цельсия, Кельвина и Фаренгейта) в две другие.
вход
Вам будет предоставлена температура в виде числа, за которым следует единица измерения (разделенная пробелом). Температура может быть целым числом или числом с плавающей запятой (23 против 23,0 или 23,678).
Вы можете передать функцию или полную программу, которая считывает разделенную пробелами строку из аргумента STDIN / ARGV / function или ближайшего эквивалента и печатает вывод в STDOUT или ближайший эквивалент.
Выход
Выходные данные должны быть температурой, преобразованной в два других формата, разделенных новой строкой, за которыми следует соответствующий символ единицы в каждой строке (необязательно, разделенный пробелом). Порядок двух единиц не имеет значения.
Точность вывода
- Преобразованное число должно быть с точностью не менее 4 десятичных знаков без округления.
- Конечные нули или десятичные разряды являются необязательными, если первые 4 десятичных разряда (без округления) являются точными. Вы также можете пропустить 4 нуля и / или десятичную точку, если фактический ответ имеет 4 нуля после десятичной точки.
- Там не должно быть никаких ведущих нулей
- Любой числовой формат является приемлемым, если он удовлетворяет вышеуказанным трем требованиям.
Единица представления
Единицей температуры может быть только одно из следующего:
C
для ЦельсияK
для КельвинаF
для Фаренгейта
Примеры
Входные данные:
23 C
Выход:
73.4 F
296.15 K
Входные данные:
86.987 F
Выход:
303.6983 K
30.5483 C
Входные данные:
56.99999999 K
Выход:
-216.1500 C
-357.0700 F
Это код-гольф, поэтому выигрывает самая короткая запись в байтах! Счастливого гольфа!
Leaderboard
<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>
источник
23C\n73.4F\n296.15K
? или формат ввода должен быть подавлен?2/3
=> с0.666666666666
точностью до 4-х цифр? (Я бы сказал ДА). Или это должно быть0.6667
?0.666666666666
правильно. Я применяю точность без округления. так0.6666
это альтернатива.Ответы:
CJam,
77656059555452 байтаПопробуйте онлайн в интерпретаторе CJam .
Как это работает
источник
Python 3,
118116 байтВыполняет преобразования в ротационном порядке
K -> F -> C -> K
дважды.источник
'FCK'[u]
.JavaScript ( ES6 ), 127
130 132байтаВ ожидании какого-то удивительного языкового ответа, я не нашел много для игры в гольф здесь.
Используя строку шаблона, 3 новых строки значимы и подсчитаны.
Запустите сниппет в Firefox для проверки.
источник
Пип,
5857 байтПринимает данные из аргументов командной строки.
Отформатированный и слегка расклееный:
Объяснение:
Общая формула преобразования между блоком 1 и блоком 2:
temp2 = (temp1 - offset1) * mult2 / mult1 + offset2
. Смещения могут быть равны абсолютному нулю или любой другой удобной температуре; давайте использовать 0 ° C.Мы будем строить списки этих значений и индексировать их в зависимости от того, с какой единицей мы имеем дело. Pip не имеет ассоциативных массивов / хэшей / словарей, поэтому нам нужно преобразовать символы в целочисленные индексы. Возможно, будут полезные шаблоны со значениями ASCII.
Это выглядит многообещающе. Еще один полезный факт: индексы в Pip оборачиваются. Так что нам на самом деле не нужно,
%3
пока мы индексируем что-то длиной 3. Определениеo:[32 0 273.15]
и использование(o (Ab)%7)
сделают свое дело. (A
получает значение ASCII символа.(l i)
Синтаксис используется для индексации в итерациях, а также для вызовов функций.)Для множителей нам нужны только два числа 9 и 5. Так как числа совпадают со строками в Pip и, следовательно, являются индексируемыми, получить множитель так же просто, как
95@Ab
(используя другой метод индексации,@
оператор).Используя возможности программирования массива в Pip, мы можем сохранить символ поверх наивного метода:
Наконец, добавьте смещение для нового модуля, объедините пробел и символ нового модуля в конце и напечатайте.
Мы делаем это для каждого
t
входа"CFK" RM b
, таким образом, конвертируем в каждую единицу, кроме оригинала.Пример вызова:
(Подробнее о Пипе см. В хранилище .)
источник
постоянный ток, 102 байта
Я уверен, что это может быть больше в гольфе, но вот начало:
DC едва делает оценку на этом. В частности, обработка строки постоянного тока не совсем подходит для работы. Но все, что нам нужно сделать, это провести различие между «С», «F» и «К». К счастью, dc анализирует "C" и "F" как шестнадцатеричные числа 12 и 15. А для "K" он просто оставляет 0 в стеке.
Выход:
источник
C 160 байт
Это читает со стандартного ввода. Точность вывода не указывается, поэтому она печатает все,
printf()
что похоже на печать, которая в основном состоит из более чем 4 цифр.Безголовая версия:
Некоторые пояснения / замечания:
f
иd
содержит коэффициенты умножения и смещения для преобразования Цельсия в любую другую единицу (включая сам Цельсий, чтобы избежать особых случаев).u
это единица ввода,u / 5 - 13
отображаетсяC
на 0,F
на 1 иK
на 2.int
переменную вместоchar
переменной для полученияscanf()
входных данных. Это несоответствие типов, которое будет давать правильные результаты только на машинах с прямым порядком байтов (что почти все из них в наши дни).источник
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;}
. Получил немного с меньшим количеством переменных, перемещая код. Новое предположение argc = 1 (j = 1).u = u/4 & 3
,Python 2, 168 байт
Я видел решение Python 3 как раз в тот момент, когда собирался опубликовать это, но как бы то ни было, я просто занимаюсь гольфом.
Ungolfed:
источник
Perl,
85 8076Проверь меня .
источник
PHP,
161153http://3v4l.org/CpvG7
Было бы неплохо сыграть в гольф еще двух персонажей, чтобы попасть в первую десятку ...источник
\n
и изменили на настоящие новые строки, преобразовали в полную программу (получение данных через GET, например:)http://localhost/my_file.php?t=<temperature>
и заменили$u!=K
на$u^K
и$u!=F
с$u^F
. Если$u
естьK
,$u^K
run вернет пустую строку, которая является ложным значением. Кроме того, ваше пространство внутри раскола было преобразовано вC^c
(просто чтобы выглядеть круто).Python 2, 167
Это моя первая попытка на CodeGolf.
источник
Pyth, 126 байтов
Это очень долго для меня ... да ладно.
источник
Р,
150144141 байтС отступом, с новыми строками:
Использование:
Спасибо @AlexA. & @MickyT. !
источник
as.double()
вместоas.numeric()
.switch
заявление может быть сделаноc(x,x-273.15,5*(x-32)/9)[i]
для 4 символовas.double(a[1])
наscan(t=a[1])
.Javascript,
206193187175162159156Спасибо Оптимизатору и Исмаилу Мигелю за помощь в игре в гольф.
источник
if
else
в?:
if ... return; return ?:
сreturn ?: ?:
a=prompt().split(" "),e=273.15,f=1.8;alert([...]
наa=prompt(e=273.15,f=1.8).split(" "),alert([...]
. Также вы можете убрать пробелы после блока. Кроме того, удалениеreturn
и перемещениеalert
внутри функции значительно сократилось! И вместо установкиa
, просто используйтеapply()
метод с разделением. Но вот, пожалуйста(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 байт ( -21 байт). Пинг мне в чате, если у вас есть сомнения.Математика, 66
Надеюсь исправить это время.
пример
источник
Excel, 239 байт
112 байтов из которых используются для разделения значения и единицы. Кто-нибудь знает лучшее решение?
источник