Вызов
Рассмотрим радугу как семь цветов, представленных в виде строк Red Orange Yellow Green Blue Indigo Violet
.
Ваша задача состоит в том, чтобы создать программу, которая получает один из этих цветов на входе и выводит следующий в порядке цвета радуги. Это включает в себя перекрытиеViolet -> Red
вход
Строка, содержащая один из цветов радуги.
Выход
Следующий по порядку цвет радуги.
правила
- Названия цветов чувствительны к регистру. Они должны соответствовать случаю, включенному в этот пост.
- Ввод всегда будет действительным. Любое поведение допускается для неверного ввода.
- Это код гольф, поэтому выигрывает самое короткое количество байтов!
Пример ввода и вывода
Input -> Output
Red -> Orange
Orange -> Yellow
Yellow -> Green
Green -> Blue
Blue -> Indigo
Indigo -> Violet
Violet -> Red
Provide at least one example input and output. Make sure they match your own description of what the input should look like.
Ответы:
SOGL V0.12 , 23 байта
Попробуй здесь!
Объяснение:
источник
JavaScript, 68 байт
Для ввода
"Red"
эта функция сначала создает RegExp/Red(.[a-z]*)/
для соответствия строке,'RedOrangeYellowGreenBlueIndigoVioletRed'
а затем возвращает первый результат захвата.Показать фрагмент кода
источник
'RedOrangeYellowGreenBlueIndigoVioletRed'
или что-тоPerl 5
-p
,5857 байтПопробуйте онлайн!
Теперь, когда задача изменена на циклическую, решение регулярных выражений
больше не является оптимальным (из-за двойного
Red
)Также 57 байтов:
Попробуйте онлайн!
источник
Python , 79 байт
Попробуйте онлайн!
Рукоятки
Violet -> Red
. Желаемая функция указана анонимно во второй строке.80 байт
Попробуйте онлайн!
источник
Perl 6 , 56 байт
Попробуйте онлайн!
Использует тот факт, что биты 2-4 кодов ASCII первой буквы каждого цвета отображаются в 0-6.
Вот хорошее неконкурентное решение, которое использует «фиолетовый» вместо «индиго» и «фиолетовый» (38 символов, 59 байт):
Попробуйте онлайн!
источник
%12
решение для кокосового ореха, но, конечно, это аккуратнее.Рубин
-n
,6260 байт-2 Асоне Тухид.
Попробуйте онлайн!
Подход Regex выглядит многообещающе и для Ruby. Тем не менее, я пришел к более короткому решению, используя прогноз и прямую печать матча, вместо того, чтобы играть с группами захвата. Список цветов в обратном направлении, так как просмотр вперед на 1 байт дешевле, чем просмотр назад.
источник
/#$_/
интерполирует)Красный , 87 байт
Попробуйте онлайн!
источник
05AB1E , 30 байтов
Попробуйте онлайн!
объяснение
источник
Excel, 85 байт
Используются строчные имена.
Тот же подход, с заглавными буквами 86 байтов:
источник
Haskell ,
80 7175 байтСпасибо Laikoni за сокращение 9 байт!
Попробуйте онлайн!
Другое решение, немного более идиоматическое, но я не мог получить его короче:
Он должен быть получен
Read
из-за требования, что вход является строкой и, по крайней мере,Eq
илиShow
для того, чтобы либо проверить на равенство, либо показать результат.источник
span
: Попробуйте онлайн!span
...Violet
должен обернутьсяRed
, поэтому нужноRed
снова добавить в конец строки.succ Violet
не будет работать дляEnum
s, не оборачивайтесь :(Сетчатка ,
6558 байтПопробуйте онлайн!
объяснение
Мы начинаем с добавления
(.[a-z]+)
ввода, тем самым превращая его в регулярное выражение, соответствующее входному цвету, за которым сразу следует ровно еще один цвет (захватывая последний).Теперь
:
обменивает входные данные стадии своим собственным регулярным выражением. Таким образом, предыдущий результат становится регулярным выражением и сопоставляется со списком цветов. (Одно) совпадение заменяется его первой группой захвата (т. Е. Следующим цветом в цикле) и возвращается. Вывод в конце программы происходит автоматически.источник
\1
и прыжок к цели приводит к потере многих байтов: :-)Vim,
59565352 байт-1 байт благодаря tsh
источник
Java (JDK 10) , 77 байт
Попробуйте онлайн!
кредиты
источник
s->"RedOrangeYellowGreenBlueIndigoVioletRed".split(s)[1].split("(?=[A-Z])")[0]
s->"Red Orange Yellow Green Blue Indigo Violet Red".split(s)[1].split(" ")[1]
Кокос , 79 байт
Попробуйте онлайн!
источник
s->"# green indigo yellow # # orange blue # violet red".split()[ord(s[0])%12]
Шелуха , 28 байт
Попробуйте онлайн!
Может быть, есть лучшие варианты для управления аргументами, но это лучшее, что я мог найти
объяснение
источник
Stax ,
313029 байтЗапустите и отладьте его
Это использует инструкцию перевода кольца. Он заменяет каждый элемент в массиве следующим из «кольца декодера». Обычно он используется для замены символов в строке, но также может использоваться и для всей строки, если он заключен в одноэлементный массив.
Вот распакованное, ungolfed, прокомментированное представление ascii той же программы.
Запустите этот
источник
J ,
67 6462 байт-2 байта спасибо FrownyFrog
Попробуйте онлайн!
источник
&.
на самом деле работает для этого. Попробуйте онлайнR ,
10993 байтаПопробуйте онлайн!
-16 спасибо Джузеппе за
match
советыисточник
match(y,x)%%7+1
короче для индексации, чем вашеif
заявление. Кроме того, встроенный файлcolors()
содержит много названий цветов, если вы найдете индексы :)colors()
, не содержитindigo
! Ах, ну все равно +1!match
лучше здесьcolors()
: /Пакетный, 97 байт
Объяснение: Операция
call
во второй строке заменяет параметр в команде и оценивает его, превращая его в, напримерset s=%s:Red =%
, удаляя префикс строки, содержащей параметр. Подстановка в третьей строке заменяет все пробелы разделителями операторов и комментариями. Это работает, потому что замена строки происходит перед анализом.источник
Рубин
-n
,7569 байтПопробуйте онлайн!
источник
i&&
вещь? Не нужно проверятьnil
, так как «Игнорируйте любые ошибки, если это не цвет».Юлия 0,6 , 76 байт
Попробуйте онлайн!
Это обрабатывает Violet-> Red путем переработки струны с
^
оператором питания .Вот немного более длинное решение без регулярных выражений:
источник
PowerShell , 74 байта
Попробуйте онлайн!
Принимает строку
"Red ... Violet "
и умножает ее на два, чтобы правильно обработатьViolet -> Red
контрольный пример. Затем мы вводим-split
эту строку для ввода$args
массива из двух строк. Мы берем вторую его строку[1]
, затем-split
на пустом месте, чтобы получить массив строк, и берем первую[0]
.Например, для ввода
"Yellow"
первый шаг приведет к@("Red Orange ", " Green Blue Indigo ... Indigo Violet ")
. Мы берем второе из этого, разбиваем его на пустое пространство (которое удаляет пустое пространство), в результате чего@("Green", "Blue", ... "Violet")
, взятие[0]
одного из них приводит к правильной следующей строке.источник
Язык
формулIBM / Lotus Notes,7974 байтаПредыдущая версия для 79:
Принимает ввод из редактируемого текстового поля с именем
a
.Для языка формул TIO не существует, так что вот пара скриншотов.
источник
PHP, 92 байта
Попробуйте онлайн!
источник
Котлин , 73 байта
Попробуйте онлайн!
Воспользовавшись тем фактом, что многие цвета имеют 6 символов, к тем, которые не имеют префикса, добавляются пробелы, чтобы сделать их длиной 6 символов. Надеюсь, что некоторые цвета выводятся с пробелами перед ними.
Например, красный
" Red"
, синий" Blue"
источник
SmileBASIC,
9484 байтаисточник
Гема , 67 знаков
Образец прогона:
Гема , 59 знаков
Скучный Самый тупой подход, но довольно короткий.
Образец прогона:
источник
q / kdb + ,
5955 байтРешение:
Примеры:
Объяснение:
Создайте словарь цвета => следующий цвет, вход является ключом к словарю:
Бонус:
Это 53 байта в K4:
источник
Japt ,
4543 байта-2 байта благодаря Shaggy
Попробуйте онлайн!
источник
N
sed, 72 байта
Попробуйте онлайн
Пример 1:
Входные данные:
Выход:
Пример 2:
Входные данные:
Выход:
источник