В нем отсутствует знак фунта (#), требуемый для выходных данных примера в вопросе.
Изи
5
PowerShell: 71 52 51 41
Благодаря @manatwork за указание ForEach-Objectможно использовать вместо forцикла.
Спасибо @Joey за указание на то, что я мог бы использовать -joinвывод цикла вместо того, чтобы помещать его в переменные.
Гольф-код:
'#'+-join(1..3|%{"{0:X2}"-f+(read-host)})
Замечания:
Здесь нет проверки ошибок на наличие неверных входных данных. Сценарий с радостью примет 256, 4096 и 65536 в качестве входных данных, а затем выведет # 100100010000 (который, очевидно, не будет работать как RGB).
Ungolfed, с комментариями:
# Put a hashtag in front of the output.
'#'+
# Join the nested code into one string.
-join(
# Pipe 1..3 to ForEach-Object to run a loop three times.
1..3|%{
# Take user input and format it as hex, with minimum two digits in output.
"{0:X2}"-f+(read-host)
}
)
Сделайте цикл, foreach($i in 1,2,3)чтобы уменьшить его до 68 символов.
manatwork
@ Manatwork Я не думаю, что это правильный синтаксис для foreachв PowerShell. (По крайней мере, я не смог заставить некоторые тестовые прогоны работать.) Однако, используя правильный синтаксис, встроенный псевдоним и другой ярлык PowerShell, который я недавно обнаружил, я думаю, что у меня есть кое-что лучше, бритье еще 12 символов от вашего предложения. (1..3)|%{...}(Вместо многоточия вставить оператор в скобках из существующего сценария.) Мне все еще нужно полностью проверить это в сценарии, но спасибо, что указали мне в этом направлении!
Изи
Не знаю, правильный ли это синтаксис или нет, но ссылка на SS64 foreachупоминает его, и он работает для меня. (
Понятия
@manatwork Это интересно. Я хотел бы покопаться и выяснить, что с этим не так (я получал "неожиданный токен в" ... "ошибках) в другой раз. Возможно, статья SS64 была написана для другой версии PowerShell - я не уверен. На данный момент я подтвердил, что (1..3)|%работает и довел сценарий до 56 символов. Я отредактирую это в ответе, и определенно благодарю вас за идею. Еще раз спасибо!
Изи
2
О, черт. Вы можете получить это до 41 с помощью -join: '#'+-join(1..3|%{"{0:X2}"-f+(read-host)}).
Джои
4
Баш 22 21 символов
(Спасибо @manatwork за использование 1 символа \вместо двойных кавычек)
c=({0..9} {a..f}) d=\#;for b;do for a in / %;do d+=${c[$b$a 020]};done;done;echo $d
Я знаю, это может быть 82 символа, если 020где написано 16, но я предпочитаю это ... Или, может быть, d+=${c[$b$a 0x10]}это был первый пост.
hexcolor() {
local a b c=({0..9} {a..f}) d=\#
for b ;do
for a in / % ;do
d+=${c[$b$a 0x10]}
done
done
echo $d
}
hexcolor 72 61 139
#483d8b
hexcolor 75 0 130
#4b0082
hexcolor 0 255 127
#00ff7f
Мне нравится этот ответ :) еще несколько, и я думаю, что я мог бы остановиться на этом, если ничего лучше не катается.
Quillion
Здорово! Просто unpackвопрос: можете ли вы сделать шестнадцатеричный верхний регистр, как в вопросе?
manatwork
@manatwork Я пытался найти способ сделать это внутри unpack, но безуспешно. Одним из способов является использование sprintfвместо unpack, но это длиннее и полностью ортодоксально. Другой способ - просто изменить строку в верхний регистр: map{uc unpack H2,chr}по цене трех символов.
хлебница
Спасибо, @breadbox. Эти хитрые маленькие packи unpackникогда не попадают в мой стиль кодирования. Так что это неортодоксально для меня достаточно.
не работает для 1 1 1, который должен вывести # 010101
freak
Привет @ratchetfreak. Меня устраивает. Только что проверил с gforth. Давать ей 1 1 1выводы #010101. Любые другие значения 0-255 также работают. Какую среду или вперед вы используете?
Даррен Стоун
2
C (67 символов без основного шаблона)
int r,g,b;
scanf("%d %d %d",&r,&b,&g);
printf("#%06x",r<<16|g<<8|b);
Хорошо сделано! Шоу мне еще многое предстоит узнать о гольфе!
Изи
О, ваша идея с переменными тоже была умной; никогда бы не приходил мне в голову. Так уж получилось, что он длиннее моего обычного фаворита: -splitи -join.
Вы можете сэкономить пару байтов, избавившись от того, что [byte]нам даны входные данные в виде целых чисел, и отредактировать ваш вывод так, чтобы "#$o"- это дает 31 байт для$args|%{$o+="{0:X2}"-f$_};"#$o"
AdmBorkBork
@TimmyD не знаю, работает ли удаление [byte] правильно во всех версиях в версии, в которой я тестировал (iirc 2.0 в xp) без [byte], оно не было конкатенацией как шестнадцатеричное, а как целые, то есть 72 61 139 было # 7261139 не # 483d8b «# $ o» внутри кавычек не является строковым литералом, но оцениваемая строка приятно знать, спасибо, что комментарии по поводу преобразования в шестнадцатеричные будут оценены
blabb
Очевидно, это разница между PowerShell v2 и v3 - должно быть, что соответствующая версия .NET обрабатывает шестнадцатеричное преобразование, но я не могу найти документацию по нему.
(Примечание: печатает «#» перед чтением ввода - задача не запрещает этого; при наличии трех чисел на стандартном выводе он выводит правильный вывод на стандартном выводе. Он также не беспокоит переводы строк, и, как вы можете видеть, это не не добавляйте '#' правильно при запуске "в интерактивном режиме".)
Запрашивает от 3 до 9 цифр RGB. Возвращает шестнадцатеричное с шестнадцатеричным знаком GML,$
d=get_string('','')if(d=='')e=""else e="00"h="0123456789ABCDEF"while(d!=''){b=d&255i=string_char_at(h,byte div 16+1)l=string_char_at(h,byte mod 16+1)e+=i+l;d=d>>8}return '$'+e
Сделайте это сценарием. Кроме того, скомпилируйте с неинициализированными переменными, обработанными как 0.
По совпадению, я закончил тем, что написал почти то же самое, что и ты, прежде чем увидел твой. Очень хорошо =) Они достаточно близки, чтобы я не стал публиковать мои, но вы можете сэкономить несколько байтов на вашем отображении с этим:x=>(x<16?0:'')+x.toString(16)
Mwr247
1
Кроме того, нет необходимости включать r=в начале. Он по-прежнему считается как функция, даже как анонимная функция, поскольку вы можете вызывать ее, не назначая ничего.
Mwr247
Упс. Имеется ввиду, что карта: x=>(x<16?0:'')+(x*1).toString(16)Ваша и моя первая там в настоящее время дают неправильные значения дляx>9 .
Mwr247
В настоящее время возвращается #7261139вместо #483D8Bпервого теста.
Деннис
0
Python 2, 40 байт
s='#';exec's+="%02X"%input();'*3;print s
Читает ввод из трех отдельных строк. Злоупотребленияexec и умножение строк.
Ответы:
Рубин: 19 символов
Образец прогона:
источник
Рубин
Я собирался больше для "неортодоксальной" части. ;)
Шрифт (в моем веб-браузере) немного высокий, поэтому выглядит искаженным, но в Courier New он выглядит лучше:
Образец прогона:
источник
к / к (3 знака)
Не совсем неортодоксальный, но довольно короткий
пример
Чтобы точно соответствовать формату вывода в вопросе, мы можем сделать (для 9 символов):
источник
PowerShell:
71525141Гольф-код:
Замечания:
Здесь нет проверки ошибок на наличие неверных входных данных. Сценарий с радостью примет 256, 4096 и 65536 в качестве входных данных, а затем выведет # 100100010000 (который, очевидно, не будет работать как RGB).
Ungolfed, с комментариями:
источник
foreach($i in 1,2,3)
чтобы уменьшить его до 68 символов.foreach
в PowerShell. (По крайней мере, я не смог заставить некоторые тестовые прогоны работать.) Однако, используя правильный синтаксис, встроенный псевдоним и другой ярлык PowerShell, который я недавно обнаружил, я думаю, что у меня есть кое-что лучше, бритье еще 12 символов от вашего предложения.(1..3)|%{...}
(Вместо многоточия вставить оператор в скобках из существующего сценария.) Мне все еще нужно полностью проверить это в сценарии, но спасибо, что указали мне в этом направлении!foreach
упоминает его, и он работает для меня. ((1..3)|%
работает и довел сценарий до 56 символов. Я отредактирую это в ответе, и определенно благодарю вас за идею. Еще раз спасибо!-join
:'#'+-join(1..3|%{"{0:X2}"-f+(read-host)})
.Баш
2221 символов(Спасибо @manatwork за использование 1 символа
\
вместо двойных кавычек)или чтение STDIN в цикле: 48 символов:
Добавлено 2015-10-06: bash (более неортодоксальный метод)
8483 символаЯ знаю, это может быть 82 символа, если
020
где написано16
, но я предпочитаю это ... Или, может быть,d+=${c[$b$a 0x10]}
это был первый пост.Еще один подход Bash
Это отобразит окно браузера с:
Где вы могли бы вращать колесико мыши, чтобы изменить значения (с нажатой клавишей Shift для шага на 15) ...
источник
printf \#%02X%02X%02X
что этого достаточно.d+=${c[$b$a 0x10]}
что-то сексуальное !d+=${c[$b$a 020]}
, сделаю работу и хорошо выглядишьPerl, 31 символ
Трудно сделать такую короткую программу неортодоксальной, но я думаю, что это работает.
источник
unpack
вопрос: можете ли вы сделать шестнадцатеричный верхний регистр, как в вопросе?unpack
, но безуспешно. Одним из способов является использованиеsprintf
вместоunpack
, но это длиннее и полностью ортодоксально. Другой способ - просто изменить строку в верхний регистр:map{uc unpack H2,chr}
по цене трех символов.pack
иunpack
никогда не попадают в мой стиль кодирования. Так что это неортодоксально для меня достаточно.Action Script 3 | 43 персонажа
Выход:
#483D8B
источник
Perl 24 символа
Извините, это не так сексуально, как использование
unpack
, но короче!Более неясная версия:
Но если вы действительно предпочитаете использовать
unpack
, то вы можете:Для примера, это не укороченная версия, но она мне нравится! (Обратите внимание на использование
rand
для оценки этого :-)источник
> <>
10360Воспользовался потраченным впустую пробелом и перенес в него некоторый код
Запустить с помощью входов командной строки:
вывод: "# FF2448"
источник
Далее 62 персонажа
источник
1 1 1
выводы#010101
. Любые другие значения 0-255 также работают. Какую среду или вперед вы используете?C (67 символов без основного шаблона)
стандартное использование printf & bit twiddler
источник
readf
? Не должно ли это бытьscanf
?Dc:
3532 символаОбразец прогона:
Dc:
2724 символа(Но нужно вводить числа в отдельных строках.)
Образец прогона:
источник
dc
этом сайте недостаточно ответов.JavaScript, 89 символов
Обращенные
72 61 139
к256*(256*(72)+61)+139
и Evals его.источник
eval('(('+DEC.replace(/ /g,'<<8)+'))
вместо того,eval('256*(256*('+DEC.replace(/ /g,')+'))
чтобы сохранить 5 символов!PowerShell, 45
Или, если это может быть использовано путем передачи данных, вы можете просто использовать
что снижает его до 42 .
источник
-split
и-join
.PowerShell 37
сэкономил один байт благодаря TimmyD
источник
[byte]
нам даны входные данные в виде целых чисел, и отредактировать ваш вывод так, чтобы"#$o"
- это дает 31 байт для$args|%{$o+="{0:X2}"-f$_};"#$o"
R, 16 байт
Вот и все. Используйте встроенный.
источник
C
67 67символов (65 символов без основного)Скучная C программа - очень православная.
источник
Python 2.7 (80 символов)
Я ищу лучший способ обработки однозначных шестнадцатеричных значений. Есть идеи?
источник
Befunge-98, 45 персонажей
Блеф, дублированный код. Ну что ж. Просто прямая реализация преобразования оснований.
Пробный прогон
(Примечание: печатает «#» перед чтением ввода - задача не запрещает этого; при наличии трех чисел на стандартном выводе он выводит правильный вывод на стандартном выводе. Он также не беспокоит переводы строк, и, как вы можете видеть, это не не добавляйте '#' правильно при запуске "в интерактивном режиме".)
источник
Game Maker Language, 175 (ошибка в позиции 81)
Запрашивает от 3 до 9 цифр RGB. Возвращает шестнадцатеричное с шестнадцатеричным знаком GML,
$
Сделайте это сценарием. Кроме того, скомпилируйте с неинициализированными переменными, обработанными как 0.
Источник
источник
Гема, 93 персонажа
Образец прогона:
источник
Бурлск, 12 байтов (10 байтов в нижнем регистре)
Если допускается также нижний регистр, то 10 байтов:
Использование:
Если вам отчаянно нужны заглавные буквы, добавьте
ZZ
:Если вы не получили целые числа, как в строке, то используйте:
Объяснение:
Попробуйте онлайн здесь .
Бонус:
Чтобы преобразовать его обратно, используйте это:
источник
Powershell, 28 байт
Тестовый скрипт:
Выход:
источник
Python3,3 @ 60 символов
Не смог устоять
источник
Clojure 76 символов
Это может быть поздно, для полноты картины:
Пример звонков:
источник
Mathematica, 40 символов
источник
Common Lisp, 39 символов
Прочитайте три целых числа, верните строку.
источник
Javascript ES6, 63 байта
источник
x=>(x<16?0:'')+x.toString(16)
r=
в начале. Он по-прежнему считается как функция, даже как анонимная функция, поскольку вы можете вызывать ее, не назначая ничего.x=>(x<16?0:'')+(x*1).toString(16)
Ваша и моя первая там в настоящее время дают неправильные значения дляx>9
.#7261139
вместо#483D8B
первого теста.Python 2, 40 байт
Читает ввод из трех отдельных строк. Злоупотребления
exec
и умножение строк.Пример использования:
источник
Питон (55 символов)
источник