เอาท์พุทสี HTML


30

จานสี CGA 16 สี (หรือที่เรียกว่าสี HTML ) คือชุดของ 16 สีที่ใช้โดยอะแดปเตอร์กราฟิกรุ่นแรก เป้าหมายของความท้าทายนี้คือการส่งออกทั้งหมด 16 ของพวกเขาในรูปแบบฐานสิบหก ( RRGGBB) ในลำดับจากน้อยไปหามากโดยค่าฐานสิบโดยคั่นด้วยขึ้นบรรทัดใหม่ ดังนั้นผลลัพธ์ควรตรงนี้:

000000
000080
0000FF
008000
008080
00FF00
00FFFF
800000
800080
808000
808080
C0C0C0
FF0000
FF00FF
FFFF00
FFFFFF

อนุญาตให้ขึ้นบรรทัดใหม่ที่ต่อท้ายหนึ่งบรรทัด แต่ไม่จำเป็น

คำตอบ:


13

เยลลี่ , 31 29 27 ไบต์

“×Ɗ¡‘ŒP»Ṫ¦209ṗ€3Fd⁴ịØHs3ṢQY

ลองออนไลน์!

มันทำงานอย่างไร

“×Ɗ¡‘ผลผลิตจุดรหัสของตัวละครระหว่างคำพูดในเยลลี่ของSBCSซึ่งเป็น0x11 = 17 , 0x91 = 145และ0x00 = 0

ŒP สร้าง powerset ของอาเรย์ของจุดโค้ดที่ยอมให้

[[], [17], [145], [0], [17, 145], [17, 0], [145, 0], [17, 145, 0]]

สองรายการสุดท้ายสอดคล้องกับชุดค่าผสมที่มีทั้ง80และFFดังนั้นเราต้องทิ้งมันไป

»Ṫ¦209 ประกอบด้วยสามส่วน:

  • (หาง) เอาอาร์เรย์สุดท้ายของจุดรหัสคือ[17, 145, 0]

  • »209ใช้เวลาสูงสุดของแต่ละจำนวนเต็มในส่วนที่เหลือของ powerset และ0xD1 = 209แทนที่ทั้งหมดของพวกเขาด้วย209

  • ¦(กระจัดกระจาย) วนซ้ำองค์ประกอบของส่วนที่เหลือของ powerset หากดัชนีที่สอดคล้องกันจะพบได้ใน[17, 145, 0]องค์ประกอบจะถูกแทนที่ด้วยทั้งหมด209 's หากไม่เป็นเช่นนั้นจะไม่มีการเปลี่ยนแปลง

    ¦ไม่ได้เป็นแบบแยกส่วนดังนั้นสิ่งนี้จะปรับเปลี่ยนเฉพาะอาร์เรย์สุดท้าย (ดัชนี0 ) ในส่วนที่เหลือของ powerset ดัชนี17และ145มีขนาดใหญ่เกินไปและไม่มีผลกระทบ

ผลที่ได้มีดังนี้

[[], [17], [145], [0], [17, 145], [17, 0], [209, 209]]

ṗ€3 คำนวณพลังคาร์ทีเซียนที่สามของแต่ละอาร์เรย์เช่นอาร์เรย์ขององค์ประกอบ 3 อันดับของแต่ละอาร์เรย์

Fd⁴flattens ผลและคำนวณความฉลาดและส่วนที่เหลือของแต่ละจำนวนเต็มหารด้วย16

ịØHดัชนี (อ้างอิง 1) เป็น"0123456789ABCDEFดังนั้น0x11 , 0x91 , 0x00และ0xD1จะถูกแมปกับ" 00 " , " 80 " , " FF "และ" C0 " (resp.)

s3ṢQ แยกคู่อักขระออกเป็น 3-tuples เรียงลำดับ tuples และ deduplicates

สุดท้ายYเข้าร่วมสิ่งอันดับที่ไม่ซ้ำกันโดยแยกตาม linefeeds


11

Bash + GNU Utilities, 67

  • บันทึก 2 ไบต์ด้วย @manatwork
  • บันทึก 2 ไบต์ด้วย @zeppelin
a={00,80,FF}
eval echo $a$a$a|fmt -w9|sed '16iC0C0C0
/F0*8\|80*F/d'
  • การขยายรั้ง {00,80,FF}{00,80,FF}{00,80,FF}นั้นต้องการการรวมกันทั้งหมดในลำดับที่ถูกต้อง (ไม่รวมC0C0C0) พร้อมกับความพิเศษบางอย่าง สิ่งที่พิเศษคือสิ่งที่มีทั้งตัวอักษรFและ8
  • ผลลัพธ์ของการขยายรั้งคือบรรทัดที่คั่นด้วยช่องว่างเดียว fmtวางแต่ละรายการในบรรทัดของตัวเอง
  • บรรทัดที่ 1 ของsedนิพจน์แทรกC0C0C0ในบรรทัดที่เหมาะสม
  • บรรทัดที่ 2 ของsedนิพจน์จะกรอง "ส่วนเสริม" ที่อธิบายไว้ข้างต้น

ไอดีโอ


6

เยลลี่ , 38 31 ไบต์

“mạ9ṣṃwɠƁ,¡ẓw’b4µża1$ị“08CF”s3Y

TryItOnline!

การบีบอัดฐาน 250 ของตัวเลข ( “...’),
แปลงเป็นฐาน 4 ( b4),
ซิป ( ż) พร้อมสำเนาของตัวเองหลังจาก vectorised ตรรกะ - และด้วย 1 ( a1$) *,
ดัชนี ( ) เป็นอักขระสี่ตัวที่ใช้ ( “08CF”)
แบ่งออกเป็นชิ้น ๆ ยาว 3 ( s3)
และเข้าร่วมกับตัวดึงข้อมูลบรรทัด ( Y)

* ดังนั้นการจับคู่แต่ละหลักศูนย์กับอีกศูนย์และแต่ละหลักอื่น ๆ ด้วยหนึ่ง พร้อมกับดึงข้อมูลดัชนีดังต่อไปนี้หมายความว่า'F'จะกลายเป็นที่จับคู่กับคนอื่น'F'ในขณะที่'0', '8'และแต่ละคู่ด้วย'C''0'


ไมเนอร์แก้ไขเพื่อแก้ไขคำตอบนี้: “0FC8”ที่เรามี00, FF, และC0 80
Sherlock9

โอ้วววฉันไม่ได้สังเกต! ขอขอบคุณ.
Jonathan Allan

3

Python 3, 134 129 125 108 91 90 ไบต์

ฉันคิดว่ายังคงมีสนามกอล์ฟให้ทำมากมายที่นี่ ยินดีต้อนรับคำแนะนำการเล่นกอล์ฟ!

แก้ไข: -9 ไบต์และขอขอบคุณ Mego สำหรับการช่วยเหลือในการจัดรูปแบบสตริง -17 ไบต์จากการหาวิธีที่ดีกว่าในการพิมพ์สตริงในสถานที่แรก -17 ไบต์จากการหาวิธีที่ดีกว่าในการเขียนลูป for ในตอนแรก -1 ขอบคุณไบต์ปลาย XNOR ที่จะใช้แทนi%3//2*"\n""\n"*(i%3<2)

for i in range(48):print(end="F0C8F000"[0x10114abf7f75c147d745d55//4**i%4::4]+i%3//2*"\n")

Ungolfing

z = 0
a = [0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 2, 2, 2, 3, 3, 3, 1, 3, 3, 3, 1, 3, 1, 1, 3, 0, 0, 1, 1, 0, 1, 3, 3, 1, 1, 3, 1, 0, 1, 1, 3, 1, 1, 1, 1, 1]
for i in range(len(a)):
    z = (z + a[i]) * 4
z //= 4                   # we multiplied by 4 one too many times
for i in range(48):
    m = z // 4**j % 4
    s = "F0C8F000"[c::4]
    if i % 3 == 2:
        s += "\n"
    print(s, end="")

ลองแบบนี้ - คุณต้องตัดอาร์กิวเมนต์ในวงเล็บ (หรือวงเล็บเหลี่ยม) แล้ว*ต่อท้ายด้วย
Mego

i%3//2*"\n"บันทึกเป็นไบต์
xnor

สิ่งนี้ใช้ได้กับ py 3 ด้วย
Miguel

@Miguel ไม่นั่นคือการแก้ไขที่ฉันไม่ได้ทำความสะอาด มันไม่ทำงานกับ Python 2
Sherlock9

2

JavaScript (ES6), 109 107 ไบต์

บันทึก 2 ไบต์ขอบคุณ Neil

นี่คือ7 9 ไบต์ที่สั้นกว่าเพียงแค่ส่งคืนสตริงดิบใน backticks

_=>[...'1121173113106393'].map(v=>[4,2,0].map(x=>'08CF'[x=n>>x&3]+'000F'[x],n+=+v||21).join``,n=-1).join`
`

ทดสอบ


1
ที่น่าสนใจ.replace(/./g)คือความยาวเท่า.map().joinกัน แต่.map(x=>'08CF'[x=n>>x&3]+'000F'[x],n+=+v||21)บันทึกสองไบต์
Neil

2

PowerShell, 113 106 ไบต์

'777
7780
77FF
7807
78080
7FF7
7FFFF
8077
80780
80807
808080
C0C0C0
FF77
FF7FF
FFFF7
FFFFFF'-replace7,'00'

ใช่ฉันไม่พบอะไรที่สั้นไปกว่าการพิมพ์สตริงตัวอักษร ...ขอบคุณ @ Martin Smithสำหรับการลดขนาด 7 ไบต์โดยใช้การแทนที่แบบง่าย (ซึ่งฉันมองข้ามไปอย่างสิ้นเชิง) ดังนั้นเราจึงมีอย่างน้อย 7 ไบต์ที่สั้นกว่าการเข้ารหัสแบบฮาร์ดโค้ด เย้!

แต่นั่นน่าเบื่อ!

ดังนั้นแทนที่จะ ...

PowerShell v4, 128 ไบต์

[consolecolor[]](0,7+9..15)+-split'Lime Maroon Navy Olive Purple Silver Teal'|%{-join"$([windows.media.colors]::$_)"[3..8]}|sort

[system.consolecolor]namespace กำหนดสีคอนโซล (กำเนิด) ที่มีอยู่ไปยังคอนโซล PowerShell หากเราอ้างอิงพวกเขาผ่านอาร์เรย์จำนวนเต็มเช่นนี้ค่าเริ่มต้นคือชื่อ (เช่นBlackหรือWhiteหรือที่คล้ายกัน) เรารวมสิ่งนั้นเข้ากับสตริงที่เคยเป็น-splitอยู่ในช่องว่างดังนั้นตอนนี้เราจึงมีอาร์เรย์ของชื่อสี

เราวนซ้ำเหล่านั้น|%{...}และการวนซ้ำแต่ละครั้งจะดึง[system.windows.media.colors]ค่าที่สอดคล้องกันออกมา stringification เริ่มต้นสำหรับวัตถุเหล่านั้นเป็นสีใน#AARRGGBBรูปแบบที่เป็นค่า hex "$(...)"ดังนั้นเราจึงใช้ประโยชน์จากที่ห่อหุ้มเซลล์แสงอาทิตย์โดยการโทรในสตริงที่มีบล็อกสคริปต์ แต่เนื่องจากเราไม่ต้องการค่าอัลฟ่าหรือแฮชเราจึงใช้จุดสิ้นสุดด้านหลัง[3..8]ของสตริงและต้องการ-joinผลลัพธ์charนั้น - กลับมาเป็นสตริงอีกครั้ง จากนั้นง่าย ๆ ที่Sort-Objectจะนำพวกเขาในลำดับที่ถูกต้อง


1
มีทั้งหมด 21 อินสแตนซ์00และ.Replace(7,'00')<21 ตัวอักษร
Martin Smith

ฉันไม่ทราบวิธีการใช้ PowerShell แต่มันอาจคุ้มค่าที่จะแทนที่ 80 และ FF
nedla2004

@ nedla2004 การทำ-replacefor 8และ80เป็นจำนวนไบต์เดียวกัน (บันทึก 12 ศูนย์ซึ่งมี-replace8,80ความยาว) ทำมันสำหรับFFความยาวสองไบต์เพราะคำพูดที่จำเป็นรอบ"FF"ใน-replace2,"FF"คำสั่ง
AdmBorkBork

ตกลงฉันสงสัยว่าถ้าคุณสามารถรวมการทดแทนอย่างใด
nedla2004

1

Pyth - 64 48 44 ไบต์

การบีบอัดฐานที่ง่ายที่สุด

jcs@L"FC80"jC"ÿÿûÿ¿û¿ðÿ¿»¿»·wðð\0ð\0"4 6

ลองมันออนไลน์ได้ที่นี่



1

05AB1E , 57 ไบต์

•P{Ætg7«r¨ëÅ,…}ù¢Ý%Vt®£8ãøÚ$0óDÛY²Zþ…ð7ê‘Ó{òìàYëØU¥•hR6ô»

ลองออนไลน์!

สิ่งที่เราต้องการในการส่งออกเป็นพื้น (กลับและแยก):

FFFFFF00FFFFFF00FF0000FF0C0C0C080808000808080008000008FFFF0000FF00080800000800FF0000080000000000

ซึ่งในทศนิยมคือ:

39402003857025890357721060524755992261661062099432941475272448103296644696683709026793043150430945208910007869898752

ซึ่งใน Base-214 คือ:

P{Ætg7«r¨ëÅ,…}ù¢Ý%Vt®£8ãøÚ$0óDÛY²Zþ…ð7ê‘Ó{òìàYëØU¥

นี่เป็นทางออกที่ง่ายที่สุดที่ฉันจะทำได้เพราะไม่มีทางที่ฉันจะต้องโดนเดนนิส ลองใช้เวลาหนึ่งชั่วโมงและไม่มีอะไรจะเอาชนะความคิดของเขา



0

แบตช์ 137 ไบต์

@for %%c in (000000 000080 0000FF 008000 008080 00FF00 00FFFF 800000 800080 808000 808080 C0C0C0 FF0000 FF00FF FFFF00 FFFFFF)do @echo %%c

ใช่มันน่าเบื่อ ความพยายาม 148 ไบต์ก่อนหน้า:

@if "%2"=="" (call %0 000000 80&call %0 C0C0C0 FF)|sort&exit/b
@echo %1
@for %%c in (0000%2 00%200 00%2%2 %20000 %200%2 %2%200 %2%2%2)do @echo %%c

น่าเสียดายที่คุณไม่สามารถไพพ์เอาต์พุตforหรือcall:คำสั่งดังนั้นฉันต้องเรียกตัวเองซ้ำ ๆ



0

Befunge, 83 69 ไบต์

<v"UVTYZQPefij?EDA@"
v>>9\:4/:\4/>4%:3g,0`
<^_@#:,+55$_^#!-9:,g3
F08C

ลองออนไลน์!

สีถูกเข้ารหัสในสตริงที่คุณเห็นในบรรทัดแรกสองบิตต่อองค์ประกอบสีโดยมีบิตสูงเพิ่มเติมที่ตั้งค่าให้บังคับแต่ละค่าให้อยู่ในช่วง ASCII (ยกเว้นในกรณีที่ 63 ซึ่งจะอยู่นอกช่วงที่ 127 )

รายการสีบนสแต็กจะถูกประมวลผลดังนี้:

9\          9 is pushed behind the current colour to serve as a marker.
:4/:\4/     The colour is repeatedly divided by 4, splitting it into 3 component parts.

>           The inner loop deals with each of the 3 components. 
 4%         Modulo 4 masks out the 2 bits of the colour component that we care about.
 :3g,       That is used as an index into the table on line 4 to get the character to output.
 0`3g,      For component values greater than 0 the second char is a '0', otherwise an 'F'. 
 :9-!       Check if the next component is our end marker.
^           If not, repeat the inner loop.

55+,        Output a newline.
:_          Repeat the outer loop until there are no more colours on the stack. 

0

C #, 195 ไบต์

void n(){string a="000000\r\n000080\r\n0000FF\r\n008000\r\n008080\r\m00FF00\r\n00FFFF\r\n800000\r\n800080\r\n808000\r\n808080\r\nC0C0C0\r\nFF0000\r\nFF00FF\r\nFFFF00\r\nFFFFFF";Console.Write(a);}

น่าเสียดายที่การเต้นครั้งนี้เกิดขึ้นที่ขอบทางอันยิ่งใหญ่สิ่งที่น่าสนใจยิ่งกว่าคือมีความซับซ้อนมาก (ฉันมีความสนุกมากกว่าที่เขียนไว้) C #, 270 ไบต์

void n(){string a,b,c,d;a="00";b="80";c="C0";d="FF";for(int i=0;i<16;i++){Console.WriteLine((i<7?a:i<11?b:i>11?d:c)+(i<3?a:i<5?b:i<7?d:i<9?a:i<11?b:i==11?c:i<14?a:d)+(i==0||i==3||i==5|i==7||i==9||i==12||i==14?a:i==1||i==4||i==8||i==10?b:i==2||i==6||i==13||i==15?d:c));}}

คุณสามารถส่งคืนสตริงได้โดยตรงในฟังก์ชั่นของคุณ - ไม่จำเป็นต้องเก็บไว้ในตัวแปรแล้วพิมพ์มัน นอกจากนี้ a) คุณสามารถใช้แลมบ์ดาและ b) ฉันแน่ใจว่ามีวิธีแก้ปัญหาที่เพียงแค่ทำการทิ้งสตริง
Mego

@Mego นี่คือ C # โพสต์ครั้งแรกของฉันในสนามกอล์ฟไม่แน่ใจว่าฉันจะทำหน้าที่แลมบ์ดาในความซื่อสัตย์สุจริตทั้งหมด!
Alfie Goodacre

ฉันขอแนะนำให้ดูรายการนี้เพื่อค้นหาการปรับปรุงที่จะทำ
Mego

@Alfie Goodacre: C # แลมบ์ดาที่เพิ่งส่งกลับค่า: ()=>@"string_here"(สิ่งนี้จะปลดเปลื้องไปAction<string>) ฉันยังแนะนำให้ใช้สตริง verbatim ( @) เพื่อให้คุณสามารถใส่บรรทัดใหม่ในสตริงได้โดยตรงโดยไม่จำเป็นต้องหลบหนี
นม

0

C (gcc) , 99 ไบต์

f(i){for(i=48;i--;)printf("%.2s%s","FFC08000"+("#&/28MNQRSV]^_ab"[i/3]-35>>i%3*2&3)*2,"\n\0"+i%3);}

ลองออนไลน์!

หลังจากพยายามสร้างรายการตัวเลขและเอาท์พุทขณะทำการเรียงลำดับฉันเปรียบเทียบกับโซลูชันไร้เดียงสาซึ่งกำลังสติ:

f(){puts("000000\n000080\n0000FF\n008000\n008080\n00FF00\n00FFFF\n800000\n800080\n808000\n808080\nC0C0C0\nFF0000\nFF00FF\nFFFF00\nFFFFFF");}

นาฬิกานั้นมีขนาด 140 ไบต์เมื่อเปรียบเทียบกับความพยายามของฉันที่ 200 และเปลี่ยน

การแก้ปัญหาคือการคิดว่ามันเป็นข้อความเหมือนคนอื่น ๆ แม้ว่าจะมีตัวอักษรขนาดเล็ก แต่ละสีอาจถูกคิดว่าเป็น triplet ของดัชนี 2 บิตเป็นตัวอักษร {0xff, 0xc0, 0x80, 00} กระบวนการของสี -> triplet -> number -> ตัวละคร (ที่มีออฟเซ็ต +35 เพื่อให้สามารถพิมพ์ได้ทั้งหมดและหลีกเลี่ยงความต้องการหลบหนี) สามารถแสดงได้เช่น:

000000  333     63  b
000080  332     62  a
0000FF  330     60  _
008000  323     59  ^
008080  322     58  ]
00FF00  303     51  V
00FFFF  300     48  S
800000  233     47  R
800080  232     46  Q
808000  223     43  N
808080  222     42  M
C0C0C0  111     21  8
FF0000  033     15  2
FF00FF  030     12  /
FFFF00  003     3   &
FFFFFF  000     0   #

จากนั้นเป็นเรื่องของการวนซ้ำสตริงที่เกิดขึ้นและตัดส่วนที่เหมาะสมของสตริงตัวอักษรออก

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