Шестнадцатеричные триплеты, такие как #ffffff
(белый) или #3764ef
(голубоватый), часто используются для обозначения цветов RGB. Они состоят из #
шести шестнадцатеричных цифр (0-f) или иногда трех цифр, где реальный цвет получается путем удвоения каждой цифры. Например, #fff
есть #ffffff
и #1a8
есть #11aa88
.
К сожалению, эта трехзначная стенография была самой лучшей игрой в гольф, которую Интернет мог предложить до сих пор .
Напишите программу или функцию, которая принимает строку от 1 до 7 символов:
- Первый персонаж всегда будет
#
. - Остальные персонажи всегда будут шестнадцатеричные цифры:
0123456789abcdef
.
Ввод представляет собой сокращенную форму шестнадцатеричного триплета (или полную форму, если дано 7 символов). Вам необходимо вывести полный шестнадцатеричный триплет, который расширяет сокращенную запись на основе этих шаблонов:
Input -> Output
# -> #000000 (black)
#U -> #UUUUUU
#UV -> #UVUVUV
#UVW -> #UUVVWW (usual 3-digit shorthand)
#UVWX -> #UXVXWX
#UVWXY -> #UVWXYY
#UVWXYZ -> #UVWXYZ (not shorthand)
Каждый из U
, V
, W
, X
, Y
, и Z
может быть любой шестнадцатеричной цифрой. На выходе всегда 7 символов.
Например:
Input -> Output
# -> #000000
#0 -> #000000
#4 -> #444444
#f -> #ffffff
#a1 -> #a1a1a1
#0f -> #0f0f0f
#99 -> #999999
#1a8 -> #11aa88
#223 -> #222233
#fff -> #ffffff
#1230 -> #102030
#d767 -> #d77767
#bbb5 -> #b5b5b5
#aabbc -> #aabbcc
#00000 -> #000000
#3764e -> #3764ee
#3764ef -> #3764ef
#123456 -> #123456
#f8f8f8 -> #f8f8f8
Примечания
Ввод всегда будет начинаться с, как
#
и вывод.Вы можете предположить, что все вводимые буквы строчные (
abcdef
) или прописные (ABCDEF
), как вы предпочитаете.Буквы на выходе могут быть в любом случае по вашему усмотрению. Вы можете даже смешать дела.
Альфа / прозрачность здесь не рассматривается (хотя существуют шестнадцатеричные версии цветов RGBA).
Самый короткий код в байтах побеждает.
источник
#UVWXY -> #UVWXYY
записью, потому что она допускает однозначное представление для канала Blue, но нет аналогичных выражений для красного и зеленого (например, если бы я хотел,#889071
я не могу сокращать, но#907188
могу быть ... как#90718
) другие все отлично работает#UVWX -> #UXVXWX
. Это настолько противоречивое и произвольное поведение, что трудно поверить, что на самом деле в настоящее время не существует пары браузеров, которые его реализуют.#RGBA
и#RRGGBBAA
, поэтому # 1234 следует читать какrgba(17, 34, 51, 0.25)
Ответы:
JavaScript,
868277 байтпросто выяснить, что удалить рекурсивный сохранить 4 байта ...
идея из @Arnauld сэкономить 4 байта, +1 больше байтов
источник
([s,a=0,b=a,c,d,e,f]=x)=>f?x:e?x+e:d?s+a+d+b+d+c+d:c?s+a+a+b+b+c+c:s+a+a+a+b+b+b
для 80 байтовReferenceError: x is not defined
Желе , 24 байта
Полная программа (пустые строки - фактически пустые строки).
Попробуйте онлайн! или посмотрите набор тестов *
Как?
* программу набора тестов нужно было изменить, поменяв местами порядок
Main link
иLink 7
, в то время как нижний колонтитул сталMain Link
. Кроме того, его необходимо#
было заменить вручную, так как программа его возглавляет.источник
CJam,
454442403635 байтЗапускает различные фрагменты кода в зависимости от длины ввода.
источник
<s></s>
PHP 7.1, 88 байт
PHP 5,
9088 байтисточник
_21422112233122444113355123456[6*$i+++strlen($argn|aa)-8]
?$argn
в21422112233122444113355123456
и выбирает правильную основанный на STRLEN.aa
дополняет строку как минимум до 2 символов. На входе#
нет$argn[1]
так?:0
выходов0
. Это также работает на0
в строке. Один из лучших ответов, которые я видел! К сожалению, это не слишком дорого (ответ Йоргу был доведен до 95).PHP,
95938987По сути, ответ @ JörgHülsermann, но очень удачный, поэтому я решил опубликовать его как отдельный ответ. Я бы посчитал этот ответ коллективным усилием меня и Йорг.
источник
Python 3,
166162160152 байтаЯ создаю список заменяющих кортежей регулярных выражений для каждого шаблона, а затем извлекаю кортеж по индексу
len(x)-1
, в конце концов разбивая*
его на аргументыre.sub
:запомнил 8 байтов
r'\1'
(спасибо, Габор Фекете)источник
r'\1'
в качестве именованного параметра некоторые байты?o=r'\1'
но используетеb
в своем коде: DJava 10,
228227224182 байтаПопробуйте онлайн.
Объяснение:
источник
APL (Dyalog) , 43 байта
Требуется
⎕IO←0
по умолчанию во многих системах.Попробуйте онлайн!
1↓⍞
отбросить первый символ (хеш){
применить следующую анонимную функцию(≢⍵)⊃
использовать длину аргумента , чтобы выбрать один из следующих семи значений:'0'
Нулевое⍵
аргумент⍵
аргумента2/⍵
два (2
) каждый (/
) аргумента (⍵
)∊⍵,¨⊃⌽⍵
уплощенного (∊
) аргумент (⍵
) , а затем каждый (,¨
) с первым (⊃
) из⌽
Аргумент reversed ( ) (⍵
)⍵,⌽⍵
Аргумент (⍵
) prepended (,
) к⌽
аргументу reversed ( ) (⍵
)⍵
Аргумент6⍴
повторяйте элементы до тех пор, пока не будет достигнута длина шести}
конец анонимной функции'#',
добавить к этому хешисточник
Python 2,
167165 байт-2 байта благодаря Trelzevir
Он создает список строк и выбирает в зависимости от длины строки.
источник
z=zip
.Сед, 119 (118 байт +
-E
)Простая замена текста.
источник
PHP, 87 байт
используйте номера Base 35
Попробуйте онлайн!
или используйте номера 33 базы
Попробуйте онлайн!
PHP, 89 байт
Попробуйте онлайн!
intval(["8kn",gd8,"9ft",wqq,i3j,i3k][strlen($argn|aa)-2],36)
+ 3 байта, используя базу 36PHP, 102 байта
Попробуйте онлайн!
PHP, 180 байт
Попробуйте онлайн!
источник
Сетчатка , 90 байт
Попробуйте онлайн! Включает тестовые случаи.
Пояснение: первый перевод обрабатывает две цифры, второй три, третий четыре и четвертый ноль. Однако ни второй, ни четвертый переводы не повторяют (последнюю) цифру, как это делается в конце концов, чтобы охватить все оставшиеся случаи.
источник
Haskell ,
13012712211810995 байт (от пользователя 1472751 )Попробуйте онлайн!
источник
g
.(x:r)!(y:t)=x:y:r!t;e!_=e
короче чемa!b=id=<<[[x,y]|(x,y)<-zip a b]
.#
можно сделатьg(a:t)|l<-last t=a:[ ...
Powershell,
113111 байтПояснил тестовый скрипт:
Выход:
источник
JavaScript (ES6), 96 байт
Показать фрагмент кода
источник
Perl 61 байт
Беги с
perl -nE
. Предполагается, что ввод в точности соответствует описанию (дает неверные результаты, если ввод имеет завершающий перевод строки).Строка «g + g + ÜRÉ / Â ¥ [[» кодирует 7 16-битных чисел
11111,11111,21212,12233,42434,23455,23456
как 14 латинских символа. Вот hexdump для ясности:источник
perl -nE 'say+(/./g,0)[0,1,(unpack+S7,pack "H*","672b672bdc52c92fc2a59f5ba05b")[y/#//c]=~/./g]'
. Но когда я набираю «#a», я получаю «# a0a0a0», что я считаю неправильным. Это должно быть "#aaaaaa". (Может быть, я допустил ошибку в вызове pack ().)perl -nE 'say+(/./g,0)[0,1,(11111,11111,21212,12233,42434,23455,23456)[y/#//c]=~/./g]'
. Это все еще кажется неправильным, так как «#a» все еще дает неправильный ответ «# a0a0a0» (вместо «#aaaaaa»).-l
переключатель (это «ELL» , как в «буквы L») с-nE
переключателем, например:perl -lnE 'say+(/./g,0)[0,1,(11111,11111,21212,12233,42434,23455,23456)[y/#//c]=~/./g]'
. Теперь это работает правильно.perl -nE
» на «Выполнить сperl -lnE
». (-l
Часть переключателя избавляет вас от завершающей новой строки.)-F
в командной строке позволяет изменить это наsay+(@F,0)[0,1,(unpack+S7,"g+g+ÜRÉ/Â¥[ [")[$#F]=~/./g]
сохранение 5 байт в коде.Пакет Windows,
389 372 362 349231 байтЯ полностью скопировал код @Neil ...
источник
%s:~3,1%%s:~4,1%
можно заменить на%s:~3,2%
. Также я не уверен, что это работает для ввода#
.call:c %s:~1,1% %s:~2,1% %s:~3,1% %s:~4,1% %s:~5,1% %s:~6,1%
иfor %%r in (#%1%2%3%4%5%6.%6 #%1%2%3%4%5%5.%5 #%1%4%2%4%3%4.%4 %s%%1%2%3.%3 %s%%1%2%1%2.%2 %s%%1%1%1%1%1.%1 #000000.0)do if not %%~xr.==. echo %%~nr&exit/b
.Pyth, 35 байтов
Попробуйте это онлайн здесь , или проверьте все тестовые случаи здесь .
источник
Python 2 , 99 байт
Попробуйте онлайн!
источник
Python 2 - 179 байт
Может ли кто-нибудь помочь мне сохранить несколько байтов? Все утверждения, если они могут быть сокращены до чего-то более короткого, я просто не знаю, что.
источник
list[len(list)-x]
будет таким же, какlist[-x]
.if t==1:
вif t<2:
(иif t==2:
вif t<3:
и т. Д.). Конечно, он менее читабелен, но лучше в коде!TXR Lisp: 171 байт
Отступ:
Это анонимная функция:
do
макрос генерирует(lambda ...)
форму.Это идиоматический стиль кодирования, подходящий для производства; единственный гольф - это сжатие пустого пространства:
источник
Braingolf , 95 байт
Попробуйте онлайн!
По сути, это эквивалент Брейнгольфа в случае переключения на количество символов после
#
ввода.объяснение
Материал, который всегда работает:
Если
#X
:Если
#XX
Этот может быть немного пригодным для игры в гольф, я мог бы смотреть на это, когда я прихожу домой
Если
#XXX
Вы поняли идею
источник
Рубин , 127 байт
Попробуйте онлайн!
источник
Рубин , 118 байт
Попробуйте онлайн!
источник
05AB1E , 24 байта
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник