สีต่อไป


20

ท้าทาย

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

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

JavaScript, 68 ไบต์

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

สำหรับอินพุต"Red"ฟังก์ชันนี้สร้าง RegExp ก่อน/Red(.[a-z]*)/เพื่อจับคู่สตริง'RedOrangeYellowGreenBlueIndigoVioletRed'จากนั้นส่งคืนผลลัพธ์การจับภาพแรก


ผลลัพธ์สำหรับอินพุต "Violet" คืออะไร ฉันเดาว่าคุณควรเปลี่ยนข้อความเป็น'RedOrangeYellowGreenBlueIndigoVioletRed'หรืออะไรบางอย่าง
Olivier Grégoire

1
@ OlivierGrégoire Ok ได้เพิ่ม กฎนี้มีการเปลี่ยนแปลงโดย OP หลังจากคำตอบที่โพสต์
tsh

ฉันไม่รู้: ฉันเห็น แต่คำถามสุดท้ายเท่านั้น
Olivier Grégoire

9

Perl 5 -p , 58 57 ไบต์

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

ลองออนไลน์!

ตอนนี้ความท้าทายได้รับการเปลี่ยนเป็นวงจรการแก้ปัญหา regex

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

ไม่เหมาะอีกต่อไป (เนื่องจากการเพิ่มเป็นสองเท่าRed)

ยัง 57 ไบต์:

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

ลองออนไลน์!


7

Pythonขนาด 79 ไบต์

z="Red Orange Yellow Green Blue Indigo Violet".split()*2
dict(zip(z,z[1:])).get

ลองออนไลน์!

Violet -> Redจับ ฟังก์ชั่นที่ต้องการจะได้รับโดยไม่ระบุชื่อในบรรทัดที่สอง


80 ไบต์

lambda x:"Red Orange Yellow Green Blue Indigo Violet Red".split(x)[1].split()[0]

ลองออนไลน์!


7

Perl 6 , 56 ไบต์

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

ลองออนไลน์!

ใช้ประโยชน์จากข้อเท็จจริงที่ว่าบิต 2-4 ของรหัส ASCII ของตัวอักษรแรกของแต่ละสีเกิดขึ้นกับแผนที่เป็น 0-6

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

ต่อไปนี้เป็นโซลูชันที่ไม่มีการแข่งขันที่ดีซึ่งใช้ "สีม่วง" แทน "สีคราม" และ "สีม่วง" (38 ตัวอักษร 59 ไบต์):

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

ลองออนไลน์!


ชื่อ Unicode ผู้ทรงอำนาจ
Weijun Zhou

วิธีแก้ปัญหาที่น่าสนใจที่สุดคือในที่สุดมันก็ไม่ได้ตามสเป็ค คุณสามารถรวมเวอร์ชันที่เข้ากันได้ในคำตอบและโพสต์สิ่งนี้เป็นภาคผนวกหรือไม่?
Dennis

นอกจากนี้ยังมี%12วิธีแก้ปัญหาสำหรับ Coconut แต่แน่นอนว่านี่คือ neater
Weijun Zhou

5

Ruby -n , 62 60 ไบต์

-2 โดย Asone Tuhid

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

ลองออนไลน์!

วิธีการ Regex ดูมีแนวโน้มสำหรับ Ruby เช่นกัน อย่างไรก็ตามฉันมาถึงโซลูชันที่สั้นกว่าโดยใช้ lookahead และพิมพ์การจับคู่โดยตรงแทนที่จะเล่นกับกลุ่มจับภาพ รายการของสีอยู่ในทิศทางตรงกันข้ามเนื่องจาก lookahead มีค่า 1 ไบต์ที่ถูกกว่า lookbehind


ดีมาก-2 ไบต์ ( /#$_/แทรก)
Asone Tuhid

4

สีแดง 87 ไบต์

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

ลองออนไลน์!


4
ไม่ทราบว่าภาษานี้เป็นอย่างไรรหัสของคุณทำงานอย่างไรหรือว่าเป็นภาษาใด ๆ แต่มี +1 สำหรับการใช้ภาษาที่เรียกว่า "สีแดง" สำหรับความท้าทายนี้
msh210

@ msh210 มีความสัมพันธ์อย่างใกล้ชิดกับ Rebol (ภาษาวัตถุตามนิพจน์เชิงสัมพันธ์) ภาษาแสดงถึงรหัสข้อมูลและข้อมูลเมตาในลักษณะเดียวกันโดยมีบล็อกที่แสดงด้วย [] การแจกจ่ายสีแดงในปัจจุบันมีเพียง 1.1 MB และรวมคอนโซล / interpeter เช่นเดียวกับคอมไพเลอร์ที่สามารถข้ามไปยังแพลตฟอร์มที่แตกต่างกัน รหัสของฉันเล่นกอล์ฟในขณะที่ฉันลองใช้วิธีแก้ไขปัญหาต่าง ๆ และลบช่องว่างทั้งหมดที่ฉันสามารถทำได้ สิ่งที่ไม่ดีคือพื้นที่คือตัวคั่นเกือบทุกที่ นิพจน์ทางคณิตศาสตร์ทั้งหมดต้องมีช่องว่างทั้งสองด้านของตัวดำเนินการเช่น 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

Excel, 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

Haskell , 80 71 75 ไบต์

ขอบคุณ Laikoni ที่ย่อขนาด 9 ไบต์!

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เพื่อทดสอบความเท่าเทียมกันหรือแสดงผลลัพธ์


71 ไบต์ด้วยspan: ลองออนไลน์!
Laikoni

@Laikoni ว้าวเยี่ยมเลยขอบคุณมาก! ฉันลืมspan...
Cristian Lupascu

1
OP ชี้แจงว่าVioletควรล้อมรอบไปRedดังนั้นคุณต้องเพิ่มRedอีกครั้งที่ส่วนท้ายของสตริง
Laikoni

ฉันชอบความคิดที่สองมาก! แต่succ Violetจะไม่ทำงานสำหรับEnums ไม่ห่อรอบ :(
ბიმო

@BMO ตรงทั้งหมด เมื่อฉันทำให้รุ่นนั้นฉันไม่ได้ตระหนักถึงความต้องการล้อมรอบ
Cristian Lupascu

3

เรติน่า65 65ไบต์

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

ลองออนไลน์!

คำอธิบาย

$
(.[a-z]+)

เราเริ่มต้นด้วยการต่อท้าย(.[a-z]+)อินพุตดังนั้นจึงเปลี่ยนเป็น regex ที่ตรงกับสีอินพุตตามด้วยสีอีกหนึ่งสีทันที

L$:`RedOrangeYellowGreenBlueIndigoVioletRed
$1

ตอนนี้:สลับอินพุตของสเตจด้วย regex ของตัวเอง ดังนั้นผลลัพธ์ก่อนหน้าจะกลายเป็น regex และจับคู่กับรายการสี การจับคู่ (เดี่ยว) จะถูกแทนที่ด้วยกลุ่มการจับภาพแรก (เช่นสีถัดไปในวงรอบ) และส่งคืน เอาต์พุตเมื่อสิ้นสุดโปรแกรมเกิดขึ้นโดยอัตโนมัติ


นี่คืออีกหนึ่งทางเลือก 65 ไบต์
Kevin Cruijssen

ใช่ฉันลบความคิดเห็นของฉันหลังจากที่เห็นวิธีการแก้ปัญหาของเควิน ต้องตั้งค่า\1และกระโดดไปที่เป้าหมาย
เสียหลาย

@ TonHospel พบบางสิ่ง :)
Martin Ender

1
@KevinCruijssen ขอบคุณคุณและ Ton ที่ผลักดันโซลูชั่นที่ไม่มีตัวคั่นฉันสิ้นสุดการหา 58 byter ;)
Martin Ender

3

เป็นกลุ่ม, 59 56 53 52 ไบต์

-1 ไบต์ต้องขอบคุณ tsh

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

1
2IYellow สีเขียวสีน้ำเงินสีครามสีม่วงสีแดงสีส้ม <Esc> * wywVp
TSH

3

Java (JDK 10) , 77 ไบต์

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

ลองออนไลน์!

เครดิต

  • -10 ไบต์ขอบคุณKevin Cruijssen
  • -1 ไบต์ต้องขอบคุณOkx


@KevinCruijssen นั่นเป็น regex fu ที่ยอดเยี่ยมที่คุณมี!
Olivier Grégoire

1
ฉันจำได้เมื่อครั้งหนึ่งที่ฉันกำลังมองหารอยแยกที่เก็บตัวคั่นเป็นรายการแยกซึ่งคำตอบที่ฉันพบยังมีตัวเลือกเพื่อให้ตัวคั่นคั่นรูปแบบเป็นส่วนนำหน้าหรือต่อท้ายและคิดว่ามันจะมีประโยชน์ที่นี่ :) นี่คือคำตอบนั้นรวมถึงการมองไปข้างหน้า / มองไปข้างหลังสำหรับอีกสองตัวเลือกที่กล่าวถึง
Kevin Cruijssen

1
บันทึกเป็นไบต์:s->"Red Orange Yellow Green Blue Indigo Violet Red".split(s)[1].split(" ")[1]
Okx

2

มะพร้าวขนาด 79 ไบต์

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

ลองออนไลน์!


ไม่รู้จักโคโคนัท แต่คิดว่าคุณควรจะสามารถตัดได้ 2 ไบต์โดยใช้ตัวอักษรตัวพิมพ์เล็กเนื่องจากจะช่วยลดค่าสูงสุดของโมดูโล:s->"# green indigo yellow # # orange blue # violet red".split()[ord(s[0])%12]
Wernisch

@Wernisch ขอบคุณสำหรับคำแนะนำ แม้ว่าฉันจะรอจนกว่า OP ตอบว่าอักษรตัวพิมพ์เล็กเป็นที่ยอมรับก่อนที่จะอัปเดตหรือไม่
Laikoni

2

Husk , 28 ไบต์

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

ลองออนไลน์!

อาจมีตัวเลือกที่ดีกว่าสำหรับการจัดการข้อโต้แย้ง แต่นี่คือสิ่งที่ดีที่สุดที่ฉันสามารถหาได้

คำอธิบาย

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 ไบต์

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

เรียกใช้และแก้ไขข้อบกพร่อง

วิธีนี้ใช้คำแนะนำการแปลเสียงกริ่ง มันจะแทนที่แต่ละองค์ประกอบในอาร์เรย์ด้วยองค์ประกอบต่อไปนี้จาก "ถอดรหัสแหวน" โดยปกติจะใช้เพื่อแทนที่อักขระในสตริง แต่สามารถใช้กับทั้งสตริงได้เช่นกันหากมีการห่อในอาร์เรย์แบบซิงเกิล

นี่คือการแสดง ascii ที่ยังไม่ได้บรรจุและไม่แสดงความคิดเห็นของโปรแกรมเดียวกัน

]   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

เรียกใช้อันนี้


ตกลง ... ฉันรักภาษาเหล่านี้ =)
lolad

3
Fails for Violet -> Red
Weijun Zhou

1
@WeijunZhou: เพิ่มกรณีทดสอบหลังจากการส่งนี้
เรียกซ้ำ

1
@ WeijunZhou: ฉันแก้ไขกรณีทดสอบและโกนไบต์
เรียกซ้ำ

1
@ WeijunZhou: ดูเหมือนจะไม่สอดคล้องกันระหว่างการใช้งาน C # และ JS ของ stax ฉันจะเพิ่มกรณีทดสอบและทำให้พฤติกรรมเป็นปกติสำหรับรุ่นถัดไป
เรียกซ้ำ


2

R , 109 93 ไบต์

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

ลองออนไลน์!

-16 ขอบคุณGiuseppeสำหรับการใช้งานmatchคำแนะนำ


ยินดีต้อนรับสู่ PPCG! นี่เป็นคำตอบแรกที่ดี ฉันคิดว่าmatch(y,x)%%7+1การทำดัชนีสั้นกว่าifคำสั่งของคุณ นอกจากนี้ในตัวcolors()มีจำนวนมากของชื่อสีถ้าคุณพบว่าดัชนี :)
จูเซปเป้

อ๊ะดูเหมือนว่าcolors()ไม่มีindigo! อ่ายังดี +1!
Giuseppe

ขอบคุณ! matchดีกว่าที่นี่
DS_UNI


และใช่ฉันพยายามใช้ครั้งแรกcolors(): /
DS_UNI

1

แบตช์ 97 ไบต์

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

คำอธิบาย: callในบรรทัดที่สองมีผลกระทบจากการแทนที่พารามิเตอร์ในคำสั่งและประเมินมันเปลี่ยนเป็นเช่นset s=%s:Red =%ซึ่งจะลบคำนำหน้าของสตริงที่มีพารามิเตอร์ การทดแทนในบรรทัดที่สามจะแทนที่ช่องว่างทั้งหมดด้วยตัวคั่นคำสั่งและข้อคิดเห็น วิธีนี้ใช้ได้เนื่องจากการแทนที่สตริงเกิดขึ้นก่อนการแยกวิเคราะห์


1

Ruby -n , 75 69 ไบต์

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

ลองออนไลน์!


1
ทำไมถึงเป็นอย่างi&&นั้น ไม่จำเป็นต้องตรวจสอบในnilฐานะ“ ละเว้นข้อผิดพลาดใด ๆ หากนี่ไม่ใช่สี”
manatwork

@ การทำงานฉันเข้าใจว่าเป็น "จับและเพิกเฉยข้อผิดพลาดใด ๆ " แต่ก็ไม่เป็นไร
Asone Tuhid

1

Julia 0.6 , 76 ไบต์

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

ลองออนไลน์!

สิ่งนี้จัดการกับสีม่วง -> สีแดงโดยการรีไซเคิลสตริงด้วยตัว^ดำเนินการพลังงาน

นี่เป็นวิธีแก้ปัญหาที่ยาวกว่าเล็กน้อยโดยไม่มี regexes:

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

1

PowerShell , 74 ไบต์

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

ลองออนไลน์!

ใช้สตริง"Red ... Violet "และสตริงคูณด้วยสองเพื่อจัดการViolet -> Redกรณีทดสอบอย่างเหมาะสม จากนั้นเรา-splitสตริงที่อินพุต$argsเพื่อให้อาร์เรย์สองสตริง เราจะใช้สายที่สองดังกล่าว[1]แล้วว่าในวันที่ช่องว่างที่จะให้เราอาร์เรย์ของสตริงและใช้ครั้งแรก-split[0]

ตัวอย่างเช่นสำหรับการป้อนข้อมูลขั้นตอนแรกจะส่งผลให้"Yellow" @("Red Orange ", " Green Blue Indigo ... Indigo Violet ")เรารับอันที่สองแยกจากกันบนช่องว่าง (ซึ่งจะลบช่องว่าง) ทำให้เกิดผลลัพธ์@("Green", "Blue", ... "Violet")ดังนั้นการนำอันที่[0]หนึ่งออกมาจะทำให้เกิดสตริงถัดไปที่เหมาะสม


1

ภาษาสูตร IBM / Lotus Notes, 79 74 ไบต์

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

รุ่นก่อนหน้าสำหรับ 79:

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

aนำข้อมูลจากช่องข้อความที่สามารถแก้ไขได้เรียกว่า

ไม่มี TIO สำหรับภาษาสูตรดังนั้นนี่เป็นภาพหน้าจอสองภาพ

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่



1

Kotlin , 73 ไบต์

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

ลองออนไลน์!

การใช้ประโยชน์จากข้อเท็จจริงที่ว่ามีหลายสีคือ 6 ตัวอักษรสีที่ไม่ได้ถูกเติมหน้าด้วยช่องว่างเพื่อให้มีความยาว 6 ตัวอักษร หวังว่าจะเป็นที่ยอมรับได้ว่าสีบางส่วนจะถูกแสดงด้วยช่องว่างด้านหน้า
เช่นสีแดงคือ" Red"สีน้ำเงินคือ" Blue"



1

Gema , 67 ตัวอักษร

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

วิ่งตัวอย่าง:

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 ตัวอักษร

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

เบื่อหนึ่ง วิธีการโง่เง่ามาก แต่ค่อนข้างสั้น

วิ่งตัวอย่าง:

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 ไบต์

วิธีการแก้:

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

ตัวอย่าง:

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"

คำอธิบาย:

สร้างพจนานุกรมสี => สีถัดไปอินพุตเป็นกุญแจสำคัญในพจนานุกรม:

.[!;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

โบนัส:

มันคือ53 ไบต์ใน K4:

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


1

sed, 72 ไบต์

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

ลองออนไลน์

ตัวอย่างที่ 1:

การป้อนข้อมูล:

Red
Orange
Yellow
Green
Blue
Indigo
Violet

เอาท์พุท:

Orange
Yellow
Green
Blue
Indigo
Violet
Red

ตัวอย่างที่ 2:

การป้อนข้อมูล:

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

เอาท์พุท:

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

ยินดีต้อนรับสู่เว็บไซต์! คุณช่วยระบุลิงก์ไปยังล่ามออนไลน์เช่นTry It Online! เราจะทดสอบวิธีนี้ได้ที่ไหน?
caird coinheringaahing

@cairdcoinheringaahing: สวัสดีขอบคุณมากสำหรับการต้อนรับและคำแนะนำเว็บไซต์! ฉันได้อัปเดตคำตอบแล้วพร้อมลิงก์ไปยังหน้าที่คุณสามารถทดสอบโค้ดออนไลน์ได้
lucasb
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.