다음 색


20

도전

무지개를 7 개의 색상으로 간주하고 문자열을로 표현하십시오 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

1
"적어도 하나의 입력 및 출력 예제를 제공하십시오. 입력의 모양에 대한 설명과 일치하는지 확인하십시오." 자신의 도전 게시물을 설명하고 있습니까? 아니면 이것이 솔루션의 요구 사항입니까?
재귀 적

6
소문자 색상은 괜찮습니까?
Emigna

4
그러나 '회색'에 도달하면 어떻게됩니까? ;)
AJFaraday 11

1
@Emigna OP가 질문을 표현 한 방식에서 대문자, 소문자 또는 대소 문자를 구분할지 여부를 선택할 수 있다고 생각합니다. Provide at least one example input and output. Make sure they match your own description of what the input should look like.
sonrad10

1
후행 공백은 괜찮습니까?
ivzem

답변:


2

SOGL V0.12 , 23 바이트

k‰³d∆|ΝμHō↑≥░δ÷f‘θ⁽,WIw

여기 사용해보십시오!

설명:

...‘θ⁽,WIw  
...‘        push "red orange yellow green blue indigo violet"
    θ       split on spaces
     ⁽      uppercase the 1st letter of every item (SOGLs dictionary only has lowercase words)
      ,W    get the inputs index in the array
        I   increment
         w  and get that item in the array, wrapping if necessary

22

자바 스크립트, 68 바이트

s=>'RedOrangeYellowGreenBlueIndigoVioletRed'.match(s+'(.[a-z]*)')[1]

input "Red"의 경우이 함수는 먼저 /Red(.[a-z]*)/문자열 'RedOrangeYellowGreenBlueIndigoVioletRed'과 일치 하도록 RegExp 를 구성한 다음 첫 번째 캡처 결과를 반환합니다.


"바이올렛"입력의 결과는 무엇입니까? 난 당신이 텍스트를 변경해야 추측 'RedOrangeYellowGreenBlueIndigoVioletRed'또는 뭔가
올리비에 그레 구 아르

1
@ OlivierGrégoire Ok가 추가되었습니다. 이 규칙은 답변이 게시 된 후 OP에 의해 변경됩니다.
tsh

나는 몰랐다 : 나는 그 질문의 최종 버전만을 보았다.
Olivier Grégoire

9

펄 5 -p , 58 57 바이트

#!/usr/bin/perl -p
$_={(Red,Orange,Yellow,Green,Blue,Indigo,Violet)x2}->{$_}

온라인으로 사용해보십시오!

이제 도전 과제가 정규식 솔루션을 주기적으로 바꾸도록 변경되었습니다.

say RedOrangeYellowGreenBlueIndigoVioletRed=~/$_(.[a-z]+)/

더 이상 최적이 아닙니다 (더블 때문에 Red )

또한 57 바이트 :

#!/usr/bin/perl -p
$_=(Indigo,Blue,Violet,Yellow,Orange,Red,Green)[ord>>2&7]

온라인으로 사용해보십시오!



7

펄 6 , 56 바이트

{<Indigo Blue Violet Yellow Orange Red Green>[.ord/4%8]}

온라인으로 사용해보십시오!

각 색상의 첫 문자의 ASCII 코드 중 2-4 비트가 0-6에 매핑된다는 사실을 악용합니다.

say map (*.ord +> 2) % 8, <R O Y G B I V>
# (4 3 6 1 0 2 5)

다음은 "indigo"및 "violet"대신 "purple"을 사용하는 멋진 비경쟁 솔루션입니다 (38 자, 59 바이트).

{'🍎🧡💛💚💙💜🍎'.uninames~~m/$^a.\S+.<(\S+/}

온라인으로 사용해보십시오!


전능 한 유니 코드 이름
Weijun Zhou

이 솔루션이 흥미 롭기 때문에 궁극적으로 스펙을 따르지 않습니다. 호환되는 버전을 포함 시켜서이 내용을 부록으로 게시 할 수 있습니까?
Dennis

%12코코넛에 대한 해결책 도 있지만 물론 이것은 더 깔끔합니다.
Weijun Zhou

5

루비 -n , 62 60 바이트

Asone Tuhid의 -2.

p"RedVioletIndigoBlueGreenYellowOrangeRed"[/.[a-z]+(?=#$_)/]

온라인으로 사용해보십시오!

정규식 접근 방식은 Ruby에도 유망합니다. 그러나 나는 캡쳐 그룹을 사용하는 대신 미리보기를 사용하여 경기를 직접 인쇄하는 더 짧은 솔루션에 도달했습니다. lookahead가 lookbehind보다 1 바이트 저렴하기 때문에 색상 목록은 반대 방향입니다.


아주 좋은 -2 바이트 ( /#$_/보간)
Asone Tuhid

4

빨강 , 87 바이트

func[c][print first find/tail[Red Orange Yellow Green Blue Indigo Violet Red]to-word c]

온라인으로 사용해보십시오!


4
이 언어가 무엇인지, 코드 작동 여부 또는 코드가 전혀 사용되지 않는지 모르지만이 과제에 "Red"라는 언어를 사용하는 경우 +1이 있습니다.
msh210

@ msh210 Rebol (Relative Expression-Based Object Language)과 밀접한 관련이 있습니다. 언어는 동일한 방식으로 코드, 데이터 및 메타 데이터를 나타내며 블록은 []로 표시됩니다. 현재 Red 배포판은 1.1MB에 불과하며 콘솔 / 인터 페터뿐만 아니라 다른 플랫폼과의 크로스 컴플라이언스도 포함합니다. 내 코드는 다른 솔루션을 시도하고 내가 할 수있는 모든 공간을 제거 한 것입니다. 나쁜 점은 공간이 거의 모든 곳에서 구분 기호라는 것입니다. 모든 수학 표현식에는 a : b + c (a = b + c)와 같이 연산자의 양쪽에 공백이 있어야합니다.
Galen Ivanov

4

05AB1E , 30 바이트

“†¾›ÈŠÛˆ¨‡—ëßigo°Íolet“#™DIk>è

온라인으로 사용해보십시오!

설명

“†¾›ÈŠÛˆ¨‡—ëßigo°Íolet“          # push a string of colours
                       #         # split on spaces
                        ™        # title-case each
                         D       # duplicate
                          Ik     # get the index of the input
                            >    # increment
                             è   # get the element at that index

3

엑셀, 85 바이트

=CHOOSE(MOD(CODE(A1),12),"green","indigo","yellow",,,"orange","blue",,"violet","red")

소문자 이름을 사용합니다.

대문자 86 바이트의 동일한 접근 방식 :

=CHOOSE(MOD(CODE(A1),12),"Violet","Red",,,"Green","Indigo","Yellow",,,"Orange","Blue")

3

하스켈 , 80 71 75 바이트

9 바이트를 줄인 Laikoni에게 감사드립니다!

g x=snd(span(/=x)$words"Red Orange Yellow Green Blue Indigo Violet Red")!!1

온라인으로 사용해보십시오!


약간 더 관용적 인 또 다른 솔루션이지만 더 짧게 얻을 수는 없습니다.

data R=Red|Orange|Yellow|Green|Blue|Indigo|Violet deriving(Enum,Read,Eq)
succ.read

그것은 도출 할 필요가 Read있기 때문에 입력 문자열 적어도 것을 요구의 Eq또는 Show평등이나 결과를 보여위한 하나 테스트하기 위해.



@ Laikoni 와우, 멋지다, 고마워! 나는 잊어 버렸습니다 span...
크리스티안 루파 스쿠

1
OP Violet는에 감싸 야한다고 명확히 Red했으므로 Red문자열 끝에 다시 추가해야 합니다.
Laikoni

나는 두 번째 아이디어를 많이 좋아합니다! 그러나 succ Violet작동하지 않습니다 Enum:( 주위에 포장하지의
ბიმო

@BMO 정확합니다. 그 버전을 만들었을 때 랩 어라운드 요구 사항을 알지 못했습니다.
Cristian Lupascu

3

망막 , 65 58 바이트

$
(.[a-z]+)
L$:`RedOrangeYellowGreenBlueIndigoVioletRed
$1

온라인으로 사용해보십시오!

설명

$
(.[a-z]+)

(.[a-z]+)입력 에 추가 하여 입력 색상과 일치하는 정규 표현식으로 바꾸고 바로 다음에 정확히 하나 이상의 색상을 캡처합니다 (후자를 캡처).

L$:`RedOrangeYellowGreenBlueIndigoVioletRed
$1

이제 :스테이지의 입력을 자체 정규식으로 바꿉니다. 따라서 이전 결과는 정규식이되고 색상 목록과 일치합니다. (단일) 일치는 첫 번째 캡처 그룹 (예 :주기의 다음 색상)으로 바뀌고 반환됩니다. 프로그램 종료시 출력이 자동으로 발생합니다.



네, Kevin의 해결책을 본 후 내 의견을 삭제했습니다. \1대상 을 설정 하고 점프
해야하는 것은

@TonHospel이 무언가를 찾았습니다. :)
Martin Ender

1
@KevinCruijssen 당신과 Ton의 구분없는 솔루션을 추구해 주셔서 감사합니다. ;)
Martin Ender

3

Vim, 59 56 53 52 바이트

tsh 덕분에 -1 바이트

2IYellow Green Blue Indigo Violet Red Orange <Esc>*wywVp

1
2IYellow 그린 블루 인디고 바이올렛 레드 오렌지 <Esc> * wywVp
tsh

3

자바 (JDK 10) , 77 바이트

s->"Red Orange Yellow Green Blue Indigo Violet Red".split(s)[1].split(" ")[1]

온라인으로 사용해보십시오!

크레딧



@KevinCruijssen 그게 좋은 정규식 fu!
Olivier Grégoire

1
I remembered when I once was looking for a split which keeps delimiters as separated items that the answer I found also contained options to keep the delimiter concatted as either leading or trailing part, and figured it would be useful here. :) Here is that answer including the look-ahead / look-behind for the other two options mentioned.
Kevin Cruijssen

1
Save a byte: s->"Red Orange Yellow Green Blue Indigo Violet Red".split(s)[1].split(" ")[1]
Okx

2

Coconut, 79 bytes

s->"# Violet Red # # Green Indigo Yellow # # Orange Blue".split()[ord(s[0])%12]

Try it online!


Don't know Coconut. But think you should be able to cut 2 bytes by using lowercase letters, as this reduces the max modulo value: s->"# green indigo yellow # # orange blue # violet red".split()[ord(s[0])%12]
Wernisch

@Wernisch Thanks for the suggestion. Though I'll wait until OP has responded whether lowercase letters are acceptable before updating.
Laikoni

2

Husk, 28 bytes

S!o→€⁰w¨ṙ}ΘΞĠ«ẇ₇G²€ḃλBżḃIÿö⌉

Try it online!

Maybe there are better options for managing the arguments, but this is the best I could find

Explanation

S!o→€⁰w¨ṙ}ΘΞĠ«ẇ₇G²€ḃλBżḃIÿö⌉
       ¨ṙ}ΘΞĠ«ẇ₇G²€ḃλBżḃIÿö⌉    Compressed string with all the colors
                                "Red Orange Yellow Green Blue Indigo Violet"
      w                         Split on spaces
S                               Pass the list to both the following functions:
    €⁰                          1) Find the index of the input in the list
  o→                                  and increase it by one
 !                              2) Get the element of the list at the
                                   resulting position (indexing is cyclical)

2

Stax, 31 30 29 bytes

ÇôF┘≡▓ƒ◄╙>┘☼░⌂╪B<U[ÇQ╒eöΣQ╔÷n

Run and debug it

This uses the ring translation instruction. It replaces each element in an array with the following one from the "decoder ring". Usually, it's used to do character replacement in a string, but it can be used on an entire string too, if it's wrapped in a singleton array.

Here's the unpacked, ungolfed, commented ascii representation of the same program.

]   wrap input in singleton array
`5^bZ_9G*h]h%oM~X9e-0ZQJkb2`    compressed string literal with color names
:.j title case and split on spaces
:t  do ring translation

Run this one


ok... I love these languages =)
lolad

3
Fails for Violet -> Red
Weijun Zhou

1
@WeijunZhou: That test case was added after this submission.
recursive

1
@WeijunZhou: I fixed that test case and shaved a byte.
recursive

1
@WeijunZhou: It seems to be an inconsistency between the C# and JS implementations of stax. I'll add a test case and normalize the behavior for the next release.
recursive


2

R, 109 93 bytes

function(x){y=c("Red","Orange","Yellow","Green","Blue","Indigo","Violet");y[match(x,y)%%7+1]}

Try it online!

-16 thanks to Giuseppe for the use of match advice


welcome to PPCG! this is a nice first answer. I think match(y,x)%%7+1 is shorter for indexing than your if statement. Additionally, the builtin colors() contains a lot of color names, if you find the indices :)
Giuseppe

oops, looks like colors() doesn't contain indigo! Ah well, still, +1!
Giuseppe

thanks! match is better here
DS_UNI


and yeah I first tried to use colors() :/
DS_UNI

1

Batch, 97 bytes

@set s=Red Orange Yellow Green Blue Indigo Violet Red
@call set s=%%s:*%1 =%%
@echo %s: =&rem %

Explanation: The call on the second line has the effect of substituting the parameter into the command and evaluating it, turning it into e.g. set s=%s:Red =%, which deletes the prefix of the string that includes the parameter. The substitution on the third line then replaces all the spaces with statement separators and comments. This works because string substitution happens before parsing.


1

Ruby -n, 75 69 bytes

a=%w{Red Orange Yellow Green Blue Indigo Violet};p a[-~(a.index$_)%7]

Try it online!


1
Why the i&& thing? No need to check for nil, as “Ignore any errors if this is not a colour.”
manatwork

@manatwork I understood it as "catch and ignore any errors" but alright.
Asone Tuhid

1

Julia 0.6, 76 bytes

f(s)=match(Regex("$s(.[a-z]*)"),"RedOrangeYellowGreenBlueIndigoViolet"^2)[1]

Try it online!

This handles the Violet->Red by recycling the string with the power ^ operator.

Here's a slightly longer solution without regexes:

g(s,l=split("Red Orange Yellow Green Blue Indigo Violet"," "))=l[(findin(l,[s])[1])%7+1]

1

PowerShell, 74 bytes

(-split("Red Orange Yellow Green Blue Indigo Violet "*2-split$args)[1])[0]

Try it online!

Takes the string "Red ... Violet " and string-multiplies it out by two to properly handle the Violet -> Red test case. We then -split that string on input $args to give us an array of two strings. We take the second string thereof [1], then -split that on whitespace to give us an array of strings and take the first [0].

For example, for input "Yellow", the first step will result in @("Red Orange ", " Green Blue Indigo ... Indigo Violet "). We take the second one of that, split it on whitespace (which removes the whitespace), resulting in @("Green", "Blue", ... "Violet"), so taking the [0] one thereof results in the proper next string.


1

IBM/Lotus Notes Formula Language, 79 74 bytes

@Left(@Right("Red Orange Yellow Green Blue Indigo Violet Red ";a+" ");" ")

Previous version for 79:

R:=@Explode("Red,Orange,Yellow,Green,Blue,Indigo,Violet,Red");R[@Member(a;R)+1]

Takes input from an editable text field called a.

There is no TIO for formula language so here's a couple of screenshots.

enter image description here

enter image description here

enter image description here


1

PHP, 92 bytes

$a=" Red   OrangeYellowGreen Blue  IndigoVioletRed";echo substr($a,strpos($a,$argv[1])+6,6)

Try it online!


1

Kotlin, 73 bytes

x->"RedOrangeYellow Green  BlueIndigoVioletRed".substringAfter(x).take(6)

Try it online!

Taking advantage of the fact that many colors are 6 characters, the ones that are not are prefixed with spaces to make them 6 characters long. Hopefully it's acceptable that some of the colors are outputted with spaces before them.
e.g. Red is " Red", Blue is " Blue"


1

SmileBASIC, 94 84 bytes

C$="Red   OrangeYellowGreen Blue  IndigoViolet
INPUT I$?MID$(C$*2,INSTR(C$,I$)+6,6)

1

Gema, 67 characters

*=@subst{*\?<J>=\?\$2\;\?=;RedOrangeYellowGreenBlueIndigoVioletRed}

Sample run:

bash-4.4$ echo -n Yellow | gema '*=@subst{*\?<J>=\?\$2\;\?=;RedOrangeYellowGreenBlueIndigoVioletRed}'
Green

bash-4.4$ echo -n Violet | gema '*=@subst{*\?<J>=\?\$2\;\?=;RedOrangeYellowGreenBlueIndigoVioletRed}'
Red

Gema, 59 characters

R=Orange
O=Yellow
Y=Green
G=Blue
B=Indigo
I=Violet
V=Red
*=

Boring one. Dumbest approach ever, but quite short.

Sample run:

bash-4.4$ gema 'R=Orange;O=Yellow;Y=Green;G=Blue;B=Indigo;I=Violet;V=Red;*=' <<< 'Yellow'
Green

bash-4.4$ gema 'R=Orange;O=Yellow;Y=Green;G=Blue;B=Indigo;I=Violet;V=Red;*=' <<< 'Violet'
Red

1

q/kdb+, 59 55 bytes

Solution:

.[!;2 8#($)`Red`Violet`Indigo`Blue`Green`Yellow`Orange]

Examples:

q).[!;2 8#($)`Red`Violet`Indigo`Blue`Green`Yellow`Orange]"Red"
"Violet"
q).[!;2 8#($)`Red`Violet`Indigo`Blue`Green`Yellow`Orange]"Orange"
"Red"
q).[!;2 8#($)`Red`Violet`Indigo`Blue`Green`Yellow`Orange]"Blue"
"Green"

Explanation:

Create a dictionary of colour => next colour, the input is the key to the dictionary:

.[!;2 8#($)`Red`Violet`Indigo`Blue`Green`Yellow`Orange] / the solution
.[ ;                                                  ] / apply multiple args to function
           `Red`Violet`Indigo`Blue`Green`Yellow`Orange  / list of colours
         ($)                                            / convert to strings
    2 8#                                                / reshape into 2x8 grid
  !                                                     / create dictionary

Bonus:

It's 53 bytes in K4:

.[!;2 8#$`Red`Violet`Indigo`Blue`Green`Yellow`Orange]


1

sed, 72 bytes

s/$/%RedOrangeYellowGreenBlueIndigoVioletRed/;s/(.+)%.*\1(.[a-z]+).*/\2/

Try it Online

Example 1:

Input:

Red
Orange
Yellow
Green
Blue
Indigo
Violet

Output:

Orange
Yellow
Green
Blue
Indigo
Violet
Red

Example 2:

Input:

Indigo
Yellow
Red
Red
Blue
Green
Orange
Violet
Green
Green
Green
Blue
Blue
Violet

Output:

Violet
Green
Orange
Orange
Indigo
Blue
Yellow
Red
Blue
Blue
Blue
Indigo
Indigo
Red

Welcome to the site! Could you provide a link to an online interpreter, such as Try It Online! where we can test this solution?
caird coinheringaahing

@cairdcoinheringaahing: Hi, thank you very much for the welcome and the website recommendation! I've updated my answer with a link to the page where you can test the code online.
lucasb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.