Pixel-art ตอนที่ 1: แสดง Super Mario


47

มันคือฉัน!

ภารกิจของวันนี้เป็นเรื่องง่าย: เขียนโปรแกรมหรือฟังก์ชั่นที่แสดง Mario Sprite ขนาดเล็กที่ไม่ได้ใช้งานจาก Super Mario Bros บน NES บนพื้นหลังสีน้ำเงิน

รายการประเภทใดก็ได้ที่ถูกต้องตราบเท่าที่มันแสดงขนาด 12 * 16 พิกเซลที่ใดก็ได้บนหน้าจอ / หน้าต่าง / เบราว์เซอร์

(แก้ไข: ภาพที่แสดงสามารถปรับขนาดได้หากภาษาของคุณไม่สามารถใช้งานภาพพิกเซลได้นอกจากนี้คุณยังสามารถส่งออกงานศิลปะ ASCII หรือศิลปะ HTML ได้ แต่ใช้สีที่เหมาะสม)

ภาพ (ซูม 400%):

คุณต้องใช้สีต่อไปนี้:

  • สีน้ำเงิน: # 6B8CFF
  • สีแดง: # B13425
  • เขียว / น้ำตาล: # 6A6B04
  • สีส้ม: # E39D25

โปรแกรมที่สั้นที่สุด (จำนวนตัวอักษร) ชนะ!

มีช่องโหว่มาตรฐานใช้ (โดยเฉพาะไม่อนุญาตให้มีการเชื่อมต่อเครือข่าย) แต่อนุญาตให้เข้ารหัสและแสดงไฟล์ภาพในโปรแกรมของคุณ (รายการที่ใช้เคล็ดลับนี้จะถูกจัดอันดับแยกต่างหาก)

ไปเลย!


กระดานแต้มนำปัจจุบัน

คำตอบที่สั้นที่สุดโดยใช้รหัสเท่านั้น:

คำตอบที่สั้นที่สุดที่ใช้รูปภาพแบบฮาร์ดโค้ดบางประเภท:


2
นอกจากนี้ยังไม่อนุญาตให้สร้างไฟล์? มันจะต้องมีการแสดง?
Martin Ender

1
ฉันไม่เห็นรูปแบบใด ๆ ในภาพนั้น ดังนั้นทุกอย่างจึงมาถึงการบีบอัดที่ดีที่สุดที่สามารถใช้ได้ในภาษา
เครื่องมือเพิ่มประสิทธิภาพ

20
Nitpicking: นั่นคือมาริโอไม่ใช่ซูเปอร์มาริโอ
เดนนิส

5
เป็นความคิดที่สนุก ... นี่คือแนวคิดสำหรับความท้าทายที่ตามมา: นำรูปมาริโอ (ทุกรูปแบบ) แล้วเปลี่ยนเป็นภาพของ Luigi!
Zibbobz

3
เราสามารถสร้างโปรแกรม piet ที่ดูเหมือนเขาได้ไหม
Conor O'Brien

คำตอบ:


36

HTML / JS, 206 158 153 102


102

เคล็ดลับที่ใช้: บันทึกไฟล์ GIF ที่บีบอัดเป็นไฟล์ HTML และเพิ่ม <img src = #> ในตอนท้าย

ขอบคุณรายการนี้: https://codegolf.stackexchange.com/a/39926/10732โดย @NiettheDarkAbsol

GIF87a  ¡ kŒÿã%jk±4%,       6„‡héj„Af-ÕdÎy\%    …R˜0”ŒÈJ­³I©±²û“ú=ª$±p%i¸•¤ <img src=#>

สาธิต: http://meuziere.free.fr/mario/gif.html


รุ่นเก่ากว่า:

153

เคล็ดลับที่ใช้: บันทึกไฟล์ PNG ที่บีบอัดเป็นไฟล์ HTML และเพิ่ม <img src = #> ที่ส่วนท้าย

‰PNG


IHDR         _v”   PLTEjkkŒÿ±4%ã%ó’V   IIDAT×c[ʵj%C€ÍUŸ?|ìíœÿ02„ÿÿÊÐÊàÐÄÈÀ°ŠáÓë~†«ö3üZµž!jÚR‡P x( s6ïåÇ<img src=#>


158

เคล็ดลับที่ใช้: ตั้งค่า dataURI ที่ถูกตัดของ PNG ที่บีบอัดเป็น SRC ของแท็ก IMG และบรรจุสิ่งของทั้งหมดในตัวอักษร Unicode


ดำเนินการในคอนโซล JS ของคุณ:

document.write(unescape(escape('🁩𫑧𘁳𬡣👤𨑴𨐺𪑭𨑧𩐻𨡡𬱥𝠴𛁩𥡂𣱒𭰰𢱇𩱯𠑁𠑁𣡓𥑨𡑕𩱁𠑁𠑷𠑁𠑁𤑁𩱍𠑁𠑂𩡄𜱡𥑁𠑁𠑄𡡂𣑖𡑖𬑡𭱒𬡪𤀫𮁎𠱘𪡮𤱘𮡫𩱨𥱁𠑁𠑓𥑬𡑑𥡑𢐱𜡍𢑗𮁘𢱅𣁖𬑊𥑏𠑺𥡕𡱮𮠹𛱇𦁺𬰷𤡭𨰯𮡁𮑨𤀯𛱹𪁄𤑅𣑲𩰰𣑔𢑷𣁃𢱧𩑈𥀶𜰶𡱦𝡶𜡍𛱸𨑴𦠴𪁡𭁰𤱂𫱤𤑯𢁧𫱁𭰾').replace(/uD./g,'')))


206

คลายการแพค (206b):

<img src=data:image;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAQAgMAAABfD3aUAAAADFBMVEVqawRrjP+xNCXjnSXzkghWAAAASUlEQVQI12MIWxXKELVqJUOAzVUGnz9/GXzs7Rmc/zAyhP//yhDQEMrg0MTIwLCKgeHT636Gf6v2M/xatZ4hatpSBodQoHgoAw>

การสาธิต


เครื่องมือที่ใช้:


คุณไม่จำเป็นต้องใช้แท็ก เพียงใช้ data uri ของ chrome และใส่ไว้ในแถบ url ของคุณ 200 ตัวอักษร
เครื่องมือเพิ่มประสิทธิภาพ

อืม ... ฉันคิดว่า dataURI ไม่ใช่ "โปรแกรม" ที่ถูกต้อง แต่คุณพูดถูก เบราว์เซอร์ทั้งหมดอนุญาต dataURIs ในแถบที่อยู่
xem

ตอนนี้คุณกำลังใช้ช่องโหว่เป็น OP;) คุณกำลังออฟโหลดงานทั้งหมดไปยังการบีบอัดภายนอก / บิวด์อินของรูปแบบ GIF ถ้ามันเจ๋งเราทุกคนควรไปหารูปแบบภาพที่คลุมเครือด้วยอัตราการบีบอัดที่ดีที่สุดในตอนนี้และฉันสามารถช่วยงานเขียนของตัวเองได้เป็นอย่างมาก ;)
Martin Ender

2
@ xem ความท้าทายการโทรของคุณ แต่ดูเหมือนไม่มีจุดหมายสักเล็กน้อยถ้าตอนนี้เรากำลังมองหารูปแบบไฟล์ที่ถูกบีบอัดมากที่สุด ;)
Martin Ender

1
ดูเหมือนว่าลิงก์ rawgit จะตาย
Addison Crump

27

Mathematica, 412 292 252 212 163 148 143 141 ตัวอักษร

f=FromDigits[ToCharacterCode@#,2^16]~IntegerDigits~#2&;Image@Partition[f["넴╫賿橫ӣ鴥",256][[3#+1;;3#+3]]/256&/@"吀啐^A媾핮﻽溿뽫ﺩ埿⩕樨ꦪª⿼?ཐᐅ橕ꦪ喪"~f~4,12]

นี้ใช้สัญกรณ์เครื่องหมายสำหรับตัวควบคุมที่จุดรหัส^A 1ใน Mathematica ฉันสามารถฝังตัวอักษรได้อย่างแท้จริงแม้ว่าจะนำไปสู่ความอัปลักษณ์ทุกประเภทเมื่อคัดลอกสิ่งต่าง ๆ อย่างไรก็ตามข้างต้นคือ 2 ตัวอักษรที่สั้นกว่าเวอร์ชั่นเก่าของฉันและฉันได้ตัวละครจากการใช้เบส -4 แทนเบส -5 เพื่อเข้ารหัสดัชนีจานสี ตอนนี้ฉันไม่สามารถแก้ไขคำอธิบายและภาพหน้าจอด้านล่างได้ดังนั้นฉันจึงฝากคุณไว้ที่นี่ด้วยคำตอบเวอร์ชันเดิมของฉัน:


f=FromDigits[ToCharacterCode@#,2^16]~IntegerDigits~#2&;Image@Partition[f["넴╫賿橫ӣ鴥",256][[3#-2;;3#]]/256&/@"ᯱ曎㌟뱮䚻륏Σ襺ﺦ您汜豈塘ᙉ雬儥衰ꐰꃾ纔ㆯ쭴뫋澖ᕿ蓉"~f~5,12]

ฉันกำลังเข้ารหัสพิกเซลเป็นอักขระ Unicode (yay สำหรับการนับตามตัวอักษร!)

นี่คือสิ่งที่ดูเหมือนใน Mathematica:

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

นี่คือวิธีการทำงาน:

ก่อนอื่นเรากำหนดฟังก์ชั่นfที่เปลี่ยนสตริง Unicode (ส่งผ่านเป็นอาร์กิวเมนต์แรก#) เป็นรายการของจำนวนเต็ม ก่อนอื่นเราจะได้รหัสของตัวละคร สามารถตีความได้ว่าเป็นตัวเลขของตัวเลขฐาน 65536 #2และจากนั้นเราแปลงตัวเลขที่ไปยังฐานอื่นผ่านเป็นอาร์กิวเมนต์ที่สอง

ทีนี้ลองทำเพื่อให้ได้ Unicode string ที่ยาวขึ้น ToCharacterCodeให้ผลรายการนี้:

{7153, 26318, 13087, 48238, 18107, 47439, 931, 35194, 62191, 65190, \
 24744, 57782, 27740, 35912, 22616, 5705, 38636, 20773, 34928, 42032, \
 41214, 32404, 12719, 52084, 47819, 28566, 5503, 33993}

การปฏิบัติเช่นนี้เป็นฐาน 65536:

7933607912575313477287527915733176998797205587959732019781370103381...
4831246938139171755469819519515972565671101475553962564506286523593

และแปลงเป็นฐาน 5:

{2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
 2, 2, 2, 3, 3, 3, 4, 4, 3, 4, 2, 2, 2, 2, 3, 4, 3, 4, 4, 4, 3, 4, 4, \
 4, 2, 2, 3, 4, 3, 3, 4, 4, 4, 3, 4, 4, 4, 2, 3, 3, 4, 4, 4, 4, 3, 3, \
 3, 3, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 3, 3, 1, 3, 3, 3, \
 2, 2, 2, 2, 2, 3, 3, 3, 1, 3, 3, 1, 3, 3, 3, 2, 3, 3, 3, 3, 1, 1, 1, \
 1, 3, 3, 3, 3, 4, 4, 3, 1, 4, 1, 1, 4, 1, 3, 4, 4, 4, 4, 4, 1, 1, 1, \
 1, 1, 1, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 1, 1, 1, \
 2, 2, 1, 1, 1, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 2, 3, 3, 3, 3, \
 2, 2, 2, 2, 3, 3, 3, 3}

นั่นคือดัชนีสีของพิกเซลตามลำดับสีน้ำเงิน, แดง, เขียว, ส้ม เราใช้สิ่งเหล่านั้นเพื่อจัดทำดัชนีในรายการตัวเลขซึ่งเป็นจานสี

ตอนนี้สำหรับจานสี "넴╫賿橫ӣ鴥"ที่ เราใช้ดัชนีด้านบนเพื่อเลือกสตริงที่ถูกต้อง จากนั้นเราใช้ฟังก์ชันของเราอีกครั้ง แต่ใช้ฐาน 256 นั่นทำให้รายการของ 12 จำนวนเต็ม:

{177, 52, 37, 107, 140, 255, 106, 107, 4, 227, 157, 37}

เราใช้การ;;จัดทำดัชนีช่วงเพื่อดึงส่วนที่เกี่ยวข้องสำหรับสีปัจจุบัน

สุดท้ายเราเพียงแค่ใช้Partitionในการแยกนี้ลงในแถวและอาหารมัน12 ImageVoila!

แก้ไข:ด้วย Unicode ที่บรรจุ RLE ไม่คุ้มค่าอีกต่อไป การลบมันบันทึก 50 ตัวอักษร

แก้ไข:แน่นอนถ้าไม่มี RLE ก็ไม่จำเป็นต้องไปที่ฐาน 16

แก้ไข:และในขณะที่เราอยู่ในนั้นทำไมไม่ Unicode แพ็คจานสีด้วย? (ฉันมีลางสังหรณ์ที่ฉันสามารถบันทึกได้อีกเล็กน้อยโดยการทำให้จานสีทั้งหมดเป็นสายเดียวและใช้ที่Partitionนั่นด้วยฉันจะลองอีกครั้งในภายหลัง)

แก้ไข:ใช่แล้วมันโกนได้อีก 5 ไบต์


1
คุณต้องการเพิ่มภาพหน้าจอของผลลัพธ์หรือไม่ (ไม่ใช่ว่าฉันไม่เชื่อถือรหัสของคุณ แต่อยากรู้เกี่ยวกับวิธีการแสดงผล: ในหน้าต่างหรือไม่เบราว์เซอร์หรือไม่?)
xem

@xem จะทำ มันเป็นสภาพแวดล้อม REPL ที่มีความสามารถในการกราฟิกและการส่งออก
Martin Ender

ไม่แน่ใจ แต่คุณกำลังสะท้อนส่วนล่างของภาพหรือไม่?
เครื่องมือเพิ่มประสิทธิภาพ

1
@Optimizer ไม่ฉันสงสัยว่าฉันจะสามารถทำได้ด้วยตัวอักษรน้อยกว่าที่ฉันจะประหยัดได้
Martin Ender

เมื่อฉันดูในเอกสาร Mathematica ฉันไม่เห็นการใช้ tilde ใด ๆ แต่ปรากฏว่าคุณกำลังใช้มันเพื่อป้อนผลลัพธ์ของฟังก์ชันหนึ่งไปยังอีกฟังก์ชันหนึ่งแล้วใช้อาร์กิวเมนต์เพิ่มเติมกับฟังก์ชันที่สอง (IntegerDigits)? นอกจากนี้จานสี: ดูที่ภาพปรากฏว่ามีเพียงสี่สี แต่จานสีของคุณดูเหมือนจะมีมากกว่านั้น: {177, 52, 37, 107, 140, 255, 106, 107, 4, 227 , 157, 37} ดูเอกสารประกอบสำหรับ Image ดูเหมือนว่าจะพิมพ์เฉดสีเทาเว้นแต่จะมีตัวเลือกเพิ่มเติมเช่น ColorScale -> RGB
CryptoCommander

20

Java: 398 377

void s(){new java.awt.Frame(){public void paint(java.awt.Graphics g){int i=0,x,m[]={12226,44085194,467839834,0x5abea55a,0x5bbd5d50,0x5ffe9540,0x5ffe9540,0x5aee5d50,531408218,334277466,333492170,0xc02fc2},c[]={7048447,0xB13425,6974212,0xE39D25};for(setSize(99,99);i<192;g.setColor(new java.awt.Color(c[m[x]&3])),m[x]/=4,g.drawLine(x+40,60-i%16,x+40,60-i++%16))x=i/16;}}.show();}

เพียงดึงสไปรต์โดยการแกะกล่อง int สำหรับแต่ละคอลัมน์ แสดงในโปรแกรมเต็มรูปแบบ:

class P{
    public static void main(String[]a){
        new P().s();
    }

    void s(){
        new java.awt.Frame(){           
            public void paint(java.awt.Graphics g){
                int i=0,x,m[]={12226,44085194,467839834,0x5abea55a,0x5bbd5d50,0x5ffe9540,
                               0x5ffe9540,0x5aee5d50,531408218,334277466,333492170,0xc02fc2},
                          c[]={7048447,0xB13425,6974212,0xE39D25};
                for(setSize(99,99);i<192;
                    g.setColor(new java.awt.Color(c[m[x]&3])),m[x]/=4,
                    g.drawLine(x+40,60-i%16,x+40,60-i++%16)
                )x=i/16;
            }
        }.show();
    }
}

ภาพหน้าจอที่บังคับใช้:

มันคือฉันมาริโอ


1
คุณสามารถบันทึก 9 import java.awt.*ไบต์โดยใช้
Kevin Cruijssen

15

x86 รหัสเครื่อง 102 ไบต์

วิธีการทำงาน: ภาพจะถูกเก็บไว้เป็นภาพ 2 บิตโดยใช้จานสี แต่ละแถวของรูปภาพจะถูกจัดเก็บเป็น 3 ไบต์ตามด้วยหนึ่งไบต์ 1 ของจานสี สิ่งนี้อนุญาตให้โหลดข้อมูลเป็น DWORD เดียว พิกเซลที่สิบสองจะถูกส่งออกโดยการปิดบังค่าต่ำสุด 2 บิตเขียนไปยังหน่วยความจำวิดีโอแล้วเปลี่ยนค่าทั้งสองบิตไปทางขวา เมื่อพิกเซลสำหรับแถวได้รับการส่งออกไบต์จานสีจะถูกเขียนไปยังจานสี VGA เมื่อภาพวาดรูปเสร็จแล้วโปรแกรมจะเข้าสู่วงวนไม่สิ้นสุด

รหัสการประกอบเพื่อสร้างไบนารี:

org 100h
mov al,13h
int 10h
les ax,[bx]

mov si,image_data
draw:
add di,320-12
lodsd
xchg eax,ebx
mov cl,12
row:
mov ax,bx
and al,3
stosb
shr ebx,2
loop row
xchg ax,bx
mov dx,0x3c9
out dx,al
test al,al
jnz draw

image_data: db 21,0,85,0xb1/4, \
5,0,64,0x34/4,            \
165,190,87,0x25/4,        \
185,191,127,0x6b/4,       \
185,254,254,0x8c/4,       \
233,191,106,0xff/4,       \
213,255,95,0x6a/4,        \
165,168,85,0x6b/4,        \
169,40,106,0x4/4,         \
170,0,170,0xe3/4,         \
47,195,248,0x9d/4,        \
63,0,252,0x25/4,          \
15,0,240,111,             \
5,20,80,111,              \
169,85,106,111,           \  
170,85,170 

ไบนารีฐาน -64 ที่เข้ารหัสแล้วให้บันทึกเป็น Mario.com เพื่อเรียกใช้งาน: sBPNEMQHvigBgcc0AWatZpOxGQFVGVFG8XAQFVGVFG8VQVFGGQFQGQFGARN 6XF6X6F6X

ตัวอย่างผลลัพธ์: ป้อนคำอธิบายรูปภาพที่นี่


10

GIF - 93 ไบต์

เห็นได้ชัดว่าการเข้ารหัสภาพนั้นไม่เป็นไรดังนั้น ... ใช่ไหม : D

GIF87a  ¡ kŒÿã%jk±4%,       6„‡héj„Af-ÕdÎy\%    …R˜0”ŒÈJ­³I©±²û“ú=ª$±p%i¸•¤  ;

เท่าที่เห็นใน Notepad ++

สกรีนช็อตใน NP ++

เป็น PHP - 131 ไบต์

<? header("Content-Type:image/gif");?>GIF87a  ¡ kŒÿã%jk±4%,       6„‡héj„Af-ÕdÎy\%  …R˜0”ŒÈJ­³I©±²û“ú=ª$±p%i¸•¤  ;

1
คุณช่วยอัปโหลด gif ของคุณที่อื่นได้ไหม (เช่น ctrlv.in)? ฉันต้องการใช้มันในรายการของฉันแทน PNG :)
xem


@NiettheDarkAbsol ฉันไม่แน่ใจว่าคุณนับขนาดของมันได้อย่างไร แต่ฉันนับ 150 ไบต์ ไม่ว่าคะแนนจะเป็นตัวละครและดูเหมือนจะเป็น 114 ตัวอักษร
Martin Ender

2
ใช่ข้อมูลโค้ด PHP นั้นใช้ได้สำหรับฉัน (แม้ว่าคุณสามารถลบ 2 ไบต์สุดท้าย) แต่ตัวอย่างข้อมูลดิบ gif ไม่ใช่โปรแกรม
xem

1
@xem: หากเบราว์เซอร์ถือเป็น "ล่าม" สำหรับ HTML / javascript / etc และให้ข้อมูลโค้ด gif ดิบผ่านกลไกเดียวกันส่งผลให้ผลลัพธ์ที่ต้องการ ... ความแตกต่างมีขนาดเล็ก
Mooing Duck

10

Bash + ImageMagick: 350 331 321 ตัวอักษร

(จานสีถูกขโมยอย่างไร้จุดหมายจากคำตอบของMartin Büttner )

p=(B13425 6B8CFF 6A6B04 E39D25)
for c in 21 0 85 5 0 64 165 190 87 1{85,91,27,85} 254{,} 233 191 106 213 255 95 165 168 85 169 40 106 170 0 170 47 195 248 63 0 252 15 0 240 5 20 80 169 85 106 170 85 170;{
for j in 0 2 4 6;{
d+=(-fill \#${p[c>>j&3]} -draw point\ $[i%12],$[i++/12])
}
}
convert -size 12x16 xc: "${d[@]}" x:

ตัวอย่างผลลัพธ์:

มาริโอ

ในการตรวจสอบได้อย่างง่ายดายเพิ่ม-scale 120เพื่อconvertพารามิเตอร์ 'ที่จะได้รับรุ่น 10x ปรับขนาด:

มาริโอสเกล 10


2
s/185 191 127 185 254 254/1{85,91,27,85} 254{,}/; s/do/{/; s/done/}/
grawity

Doh ฉันยัง upvoted DigitalTrauma 's เกี่ยวข้องปลายแต่ฉันให้ลืมว่า..{ }ขอบคุณ @grawity
จัดการ

8

Octo / XO-Chipขนาด 70 ไบต์

Octo เป็นภาษาแอสเซมบลีระดับสูงที่รวบรวมลงในคำแนะนำแบบแบ่งส่วนสำหรับเครื่องเสมือนCHIP-8 Octo จัดเตรียมส่วนขยายที่กำหนดเองบางส่วนที่เรียกว่า "XO-Chip" ให้กับชิพ CHIP-8 พื้นฐานรวมถึงความสามารถในการวาดบิตแมป 4 สีผ่านทางบิตเพลย์ที่ซ้อนทับ

ไบต์ที่คอมไพล์มีดังนี้:

0xA2 0x08 0xF3 0x01 0xD0 0x00 0x1F 0x00 0x3F 0xC0 0x39 0x00 0x51 0x00 0x58 0x80
0x21 0xE0 0x00 0x00 0x3F 0x00 0x7F 0xE0 0xFF 0xF0 0x36 0xC0 0x1F 0x80 0x3F 0xC0
0x39 0xC0 0x70 0xE0 0xF0 0xF0 0x00 0x00 0x00 0x00 0x3F 0x80 0x7F 0xE0 0x7F 0xF0
0x3F 0xE0 0x1F 0xC0 0x37 0x00 0x76 0xE0 0xF0 0xF0 0xE9 0x70 0xE0 0x70 0xC0 0x30
0x00 0x00 0x70 0xE0 0xF0 0xF0

มาริโอ

รันที่นี่ในเบราว์เซอร์ของคุณ: http://johnearnest.github.io/Octo/index.html?gist=33aa37d4717a425ccd4f

มันอาจให้ความสว่างมากกว่าที่จะเห็นภาษาแอสเซมบลีของอ็อคโตซึ่งผลิต bytecode นั้น:

: main
    i := mario
    plane 3
    sprite v0 v0 0

: mario
    0x1F 0x00 0x3F 0xC0 0x39 0x00 0x51 0x00 
    0x58 0x80 0x21 0xE0 0x00 0x00 0x3F 0x00 
    0x7F 0xE0 0xFF 0xF0 0x36 0xC0 0x1F 0x80 
    0x3F 0xC0 0x39 0xC0 0x70 0xE0 0xF0 0xF0 
    0x00 0x00 0x00 0x00 0x3F 0x80 0x7F 0xE0 
    0x7F 0xF0 0x3F 0xE0 0x1F 0xC0 0x37 0x00 
    0x76 0xE0 0xF0 0xF0 0xE9 0x70 0xE0 0x70 
    0xC0 0x30 0x00 0x00 0x70 0xE0 0xF0 0xF0 

โปรแกรมหลักคือสามคำแนะนำสองไบต์ ตั้งค่าดัชนีหน่วยความจำลงทะเบียนiที่จุดเริ่มต้นของเซ็กเมนต์ข้อมูลเลือก drawing plane 3 (3 เป็นบิตมาสค์นี่เป็นการระบุว่าคุณต้องการวาดในโหมด 4 สีด้วย bitplanes ทั้งสอง) จากนั้นวาด sprite ที่ตำแหน่ง x และ y ที่กำหนดโดย register v0(เริ่มต้นเป็นศูนย์) 0 สุดท้ายให้ขนาดของสไปรต์ซึ่งในชุดคำสั่ง SuperChip และ XO-Chip จะวาดสไปรต์ 16x16 ในโหมด 4 สีบิตแมปสำหรับระนาบแรกจะตามมาทันทีด้วยบิตแมปสำหรับระนาบที่สอง

หากต้องการดูว่าเครื่องบินทำงานอย่างไรให้พิจารณาโปรแกรมที่ปรับเปลี่ยนนี้ซึ่งเลื่อนเครื่องบินหนึ่งไปทางขวาหลังจากวาดมาริโอ:

mario2

: main
    i := mario
    plane 3
    sprite v0 v0 0
    plane 2
    scroll-right
    scroll-right
    scroll-right
    scroll-right

: mario
    0x1F 0x00 0x3F 0xC0 0x39 0x00 0x51 0x00 
    0x58 0x80 0x21 0xE0 0x00 0x00 0x3F 0x00 
    0x7F 0xE0 0xFF 0xF0 0x36 0xC0 0x1F 0x80 
    0x3F 0xC0 0x39 0xC0 0x70 0xE0 0xF0 0xF0 
    0x00 0x00 0x00 0x00 0x3F 0x80 0x7F 0xE0 
    0x7F 0xF0 0x3F 0xE0 0x1F 0xC0 0x37 0x00 
    0x76 0xE0 0xF0 0xF0 0xE9 0x70 0xE0 0x70 
    0xC0 0x30 0x00 0x00 0x70 0xE0 0xF0 0xF0 

หากคุณสนุกกับเรื่องนี้คุณอาจชอบหนึ่งในโซลูชันอื่นของฉันที่เขียนด้วย Octo จริงๆแล้วมีเกมติดขัดเกิดขึ้นในเดือนตุลาคมโดยใช้เครื่องมือนี้


6

Groovy 417 386

สนุกเหมือนนรก แต่ด้วยจำนวนถ่านที่น่ากลัว GroovyFXต้องการ

m=[b:'6B8CFF',r:'B13425',g:'6A6B04',o:'E39D25'];groovyx.javafx.GroovyFX.start{stage(visible:!0){scene(width:60,height:80){flowPane{"3b5r4b2b9r1b2b3g2o1g1o3b1b1g1o1g3o1g3o1b1b1g1o2g3o1g3o1b2g4o4g1b3b7o2b2b2g1r3g4b1b3g1r2g1r3g1b4g4r4g2o1g1r1o2r1o1r1g2o3o6r3o2o8r2o2b3r2b3r2b1b3g4b3g1b4g4b4g".toList().collate 2 each{l->(l[0]as int).times{rectangle(width:5,height:5,fill:"#"+m[l[1]])}}}}}}

ungolfed:

m=[b:'6B8CFF',
   r:'B13425',
   g:'6A6B04',
   o:'E39D25']           

s=5

groovyx.javafx.GroovyFX.start {bd->
  stage(visible: !0) {
    scene(width:s*12, height:s*16) {
      flowPane {
        "3b5r4b 2b9r1b 2b3g2o1g1o3b 1b1g1o1g3o1g3o1b 1b1g1o2g3o1g3o 1b2g4o4g1b 3b7o2b 2b2g1r3g4b 1b3g1r2g1r3g1b 4g4r4g 2o1g1r1o2r1o1r1g2o 3o6r3o 2o8r2o 2b3r2b3r2b 1b3g4b3g1b 4g4b4g"
          .replaceAll(" ", "")
          .toList()
          .collate(2) 
          .each { l->
            t=l[0] as int
            cr=m[l[1]]
            t.times {
              rectangle(width:s, height:s, fill:"#"+cr) 
            }
          }
      }
    }
  }
}

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


grep()แทนtoList()
cfrick

5

HTML / JS, 427 408 264 256 239 226 ตัวอักษร

Obfuscatweet, 271 270 264 256 239 226 ตัวอักษร

การใช้ obfuscatweet สามารถจัดการให้สั้นลงเหลือ <250: D

document.write(unescape(escape('🁳𨱲𪑰𭀾𨰽𦰢𝡂𞁃𡡆𘠬𘡂𜐳𝀲𝐢𛀢𝡁𝡂𜀴𘠬𘡅𜰹𡀲𝐢𧐻𨐽𙰰𜐵𝐰𜀰𝐵𝐵𝀰𠑂𡑃𜀲𡑆𡑆𠰲𡑂𡡂𡠲𠡆𡑁𞀰𜱆𡡆𜀰𠐶𠐰𜀲𠐶𞑁𞁁𠐵𝑁𠑆𞑄𝰶𡡆𡀵𝐷𡡆𝐵𝐵𡠰𝐴𜐵𜀲𠐰𜁁𞁁𠐰𜁁𠐧𞱷𪑴𪀨𩁯𨱵𫑥𫡴𚑦𫱲𚁩🐰𞱩🀹𝠻𭱲𪑴𩐨𙰼𨡲🠧𚐩𮱨🐨𙰰𜀰𙰫𬁡𬡳𩑉𫡴𚁡𛡳𫁩𨱥𚁩𛁩𚰽𝠩𛀱𝠩𛡴𫱓𭁲𪑮𩰨𝀩𚐮𬱬𪑣𩐨𛐱𜠩𞱦𫱲𚁪🐰𞱪🀱𜠻𭱲𪑴𩐨𙰼𬡰𘁳𭁹𫁥🐢𬁡𩁤𪑮𩰺𜐠𞀻𨡡𨱫𩱲𫱵𫡤𞠣𙰫𨱛𪁛𪠫𚱝𧐫𙰢🠼𛱲𬀾𙰩𚐻𯐼𛱳𨱲𪑰𭀾').replace(/uD./g,'')))

รหัสด้านล่างคือสิ่งที่ประกอบด้วย

เคล็ดลับที่ใช้: รูปภาพที่แปลงเป็น base4 สตริงของกระเบื้องสีแปลงเป็นสตริงฐานสิบหก ดัชนีของฐาน 4 แสดงถึงสี (0 = สีฟ้า, 1 = สีแดง, ฯลฯ ) CSS ที่มี inline p ใช้เนื่องจาก divs ต้องการเนื้อหาที่จะขยาย (เช่น p จะสั้นกว่า) เนื่องจาก CSS ต้องเริ่มต้นด้วยตัวอักษร 'A' จึงถูกเติมไว้ก่อนแท็ก CSS

Padding จาก CSS ให้พิกเซล ไม่มีสิ่งนี้ใช้ตัวอักษร Unicode ซึ่งฉันไม่คุ้นเคยกับอะไรมากไปกว่านั้นแม้ว่ามันอาจจะเป็น sub-300 ในกรณีนี้ ข้อได้เปรียบที่สัมพัทธ์กับการใช้การขยายคือคุณสามารถขยายภาพให้มีขนาดเท่าที่คุณต้องการให้แต่ละพิกเซลเป็นเช่นนี้ ฉันใช้ 9 พิกเซล แต่ถ้าคุณใช้ตัวละครพิเศษคุณสามารถรับได้มากถึง 99 พิกเซลต่อพิกเซลที่เป็นตัวแทน


CSS, 127 119 118 114 100 13 0 ตัวอักษร

เปลี่ยนจากpเป็นrpขจัดความจำเป็นสำหรับdisplay:inlineค่าใช้จ่าย +1 ถ่าน, -15! ตัวอักษร!

ลบสีทั้งหมดและใส่ลงในอาร์เรย์ในตัวอักษร JS -87 จากนั้นฉันเพิ่งลบ css ทั้งหมด

JS, 300 289 280 275 329 325 ตัวอักษร

c=["6B8CFF","B13425","6A6B04","E39D25"];a='0155000555540ABEC02EFEFC2EBFBF2BFEA803FFF00A6A002A69A8AA55AAF9D76FFD557FF5555F0541502A00A8AA00AA';with(document)for(i=0;i<96;write('<br>')){h=('000'+parseInt(a.slice(i,i+=6),16).toString(4)).slice(-12);for(j=0;j<12;write('<rp style="padding:1 8;background:#'+c[h[j++]]+'"></rp>'));}

ฉันพยายามตัดให้มากที่สุดเท่าที่จะทำได้จาก JS ธรรมดาที่ประมวลผลสตริง hex แต่เมื่อลองครั้งแรกของฉันนี่คือระยะเวลาที่ฉันได้ใช้เฉพาะสิ่งที่ฉันรู้ การเขียน HTML สั้นลงโดยฟังก์ชั่นที่เพิ่มแท็กและคลาสใช้ค่าฐาน 4 เพื่อกำหนดสีที่จะแสดง

การใช้การย่อเพิ่มเติมแทนที่ charAt ด้วยเครื่องหมายวงเล็บ [] และลบคลาส A0 และตั้งค่าสีน้ำเงินเป็นสีเริ่มต้นสำหรับ p โดยบันทึกเพิ่มเติม 10 อักขระ ค่าใช้จ่ายเพิ่มเติมในการใช้rpแท็กถูกชดเชยด้วยการสูญเสียอย่างมากใน CSS

ชดเชยเพิ่มเติมจากการลบห่วงแผ่นแปะในขณะที่เพียงแค่เพิ่ม '000' สำหรับกรณีการใช้งานและการตัด -12 จากมัน

เพิ่ม JS เพิ่มเติมสำหรับสีจากนั้นใส่ช่องว่างภายใน สังเกตเห็นข้อบกพร่องด้วยการขยายที่ต้องใช้อักขระพิเศษ 2 ตัวเพื่อแก้ไข อัดพวงของลูป

ไฟล์ HTML, 430 429 419 399 366 342 ตัวอักษร

การสาธิต

<script>c=["6B8CFF","B13425","6A6B04","E39D25"];a='0155000555540ABEC02EFEFC2EBFBF2BFEA803FFF00A6A002A69A8AA55AAF9D76FFD557FF5555F0541502A00A8AA00AA';with(document)for(i=0;i<96;write('<br>')){h=('000'+parseInt(a.slice(i,i+=6),16).toString(4)).slice(-12);for(j=0;j<12;write('<rp style="padding:1 8;background:#'+c[h[j++]]+'"></rp>'));}</script>

ดี! ฉันแนะนำให้คุณลบตัวแบ่งบรรทัดทั้งหมดในรหัสของคุณและให้ลิงก์สำหรับการสาธิต ( c99.nl ) เป็นโบนัสคุณสามารถแพ็คในรายการของคุณ Unicode ตัวอักษรโดยใช้xem.github.io/obfuscatweet ที่จะปรับปรุงคะแนนของคุณ
xem

นอกจากนี้คุณสามารถลบ & lt; html> แท็กวางแท็ก & lt; style> ที่ท้ายและลบ / style และ trailing "}" ของกฎ CSS ล่าสุด
xem

@ xem ตกลงฉันตัดเส้นทุกเส้นออกแล้วบีบทุกอย่างออก ฉันจะพยายามหาวิธีที่เหมาะสมที่สุดในการแยก JS สำหรับ obfuscatweet
เข็มทิศ

1
obfuscatweet ยอมรับรหัส js ใด ๆ (เพื่อให้คุณใส่ 289 js chars ของคุณ) หรือรหัส html ใด ๆ (เพื่อให้คุณสามารถคัดลอกไฟล์ html ของคุณที่นี่) เอาต์พุตของ obfuscatweet สามารถดำเนินการได้ในคอนโซลของเบราว์เซอร์หรือในไฟล์ HTML โดยใช้เมตาแท็ก charset ที่ถูกต้อง
xem

psst คุณลืมลบ "}" สุดท้ายของส่วน CSS มันใช้งานไม่ได้
xem

5

MATLAB, 194 193 ไบต์

รหัส:

imagesc(dec2base(base2dec(reshape('5FVQL5VVVT50A4L4HA594GAHA45A015DAL551G2L41GO101VO0A7FMAANVVAAVVVQ5VLVL40L8100L80',5,[])',32),4)-48);colormap([106 107 4;107 140 255;227 157 37;177 52 37]/255)

และผลลัพธ์:

มาริโอ

โดยทั่วไปฉันแปลงอิมเมจมาริโอเพื่อให้แต่ละพิกเซลมีจำนวน 2 บิต ฉันเข้ารหัสแล้วในฐาน 32 ซึ่งเป็นสตริงที่แสดงในรหัส สตริงนี้ถูกเปลี่ยนโฉมหน้าครั้งแรกให้เป็น 5 x 16 (แต่ละแถว (12px) ของตัวเลข 2 บิตถูกเข้ารหัสเป็นฐาน 32) จากนั้นแปลงกลับเป็นฐาน 10 ผลลัพธ์จะถูกแปลงอีกครั้งคราวนี้เป็นฐาน 4 ที่ให้อาร์เรย์ 12x16 ของ ตัวเลข 2 บิต imagesc()ตัวเลขเหล่านี้จะใช้พล็อต จากนั้นกำหนดสีให้colormap()กับแผนที่สีแบบกำหนดเองของค่าเลขฐานสิบหกที่ต้องการ

อย่างน่าประหลาดใจหนึ่งในสามของจำนวนไบต์ที่ใช้เพียงเพื่อให้ MATLAB ตั้งค่าสีที่ถูกต้องหลังจากที่ได้มีการลงจุด รหัสสีเกือบเท่ากับจำนวนไบต์เท่ากับสตริง base32 ทั้งหมด!

โดยไม่ต้องแก้ไขสี (ลบการcolormap()โทร) มันคือ135ไบต์และนี่คือผลลัพธ์สำหรับการแมปสีเริ่มต้นบน MATLAB R2013a:

มาริโอไม่มีแผนที่


4

JavaScript / CSS / HTML 446 430 407 353 328 316

ฉันเล่นกอล์ฟให้มากที่สุดและลงเอยด้วย HTML / JS ที่สกปรก แต่ไม่ว่า ... มันทำงานอย่างไร

แก้ไข : นี่มัน ... ฉันทำเสร็จแล้ว

แก้ไข ในครั้งนี้อย่างจริงจัง

JavaScript

for(i=0;i<192;)document.body.innerHTML+=(i%12?"":"<br>")+"<font color=#"+["6B8CFF","B13425","6A6B04","E39D25"]["000111110000001111111110002223323000023233323330023223332333022333322220000333333300002212220000022212212220222211112222332131131233333111111333331111111133001110011100022200002220222200002222"[i++]]+">█"

JSFiddle


JSFiddle ที่เชื่อมโยงนั้นไม่มีเวอร์ชันเดียวกับที่โพสต์ที่นี่และใช้งานไม่ได้ (อย่างน้อยก็ไม่ใช่สำหรับฉันใน Firefox) โดยวิธีการสำหรับการส่งออกดีกว่า*{line-height:1}จะช่วย
จัดการ

@manatwork ลองอีกครั้ง
SomeShinyObject

ดี แต่ทำไม div? เพียงแค่ความอยากรู้ของฉันฉันลองรุ่น ECMAScript มี 372 ตัวอักษร: jsfiddle.net/768h7brb
จัดการ

เพราะจะสั้นกว่า<div></div> document.createElement('div')และ JSFiddle ไม่ชอบdocument.write
SomeShinyObject

1
ย้อนกลับเงื่อนไขของผู้ประกอบการที่ประกอบไปด้วยเพื่อกำจัดด้านขวาของการเปรียบเทียบ: i%12?"":"<br>".
จัดการ

4

Matlab - 449/332 305 ไบต์

การบีบอัดบางส่วน + ใช้สัญลักษณ์ภาพล่าง:

a=[0,0];b=[2,2];c=[3,3];d=[a,0];f=[b,2];g=[c,3];h=[b,b];i=[a,a];k=[1,1];l=[0,f,1,2;h,k;c,2,1,3,1;g,k,1;c,k,k;a,k,1,0;0,f,a;h,a];imshow(uint8([d,k,1,k,i;a,k,k,k,k,1,0;a,f,c,2,3,d;0,2,3,2,g,2,g,0;0,2,3,b,g,2,g;0,b,c,c,h,0;d,g,g,3,a;a,b,1,f,i;[l fliplr(l)]]),[107 140 255;177 52 37;106 107 4;227 157 37]/255)

- เวอร์ชันบีบอัดบางส่วน (332 ไบต์):

a=[0,0]
b=[2,2]
c=[3,3]
d=[a,0]
e=[1,1,1]
f=[b,2]
g=[c,3]
h=[b,b]
i=[a,a]
imshow(uint8([d,e,1,1,i;a,e,e,e,0;a,f,c,2,3,d;0,2,3,2,g,2,g,0;0,2,3,b,g,2,g;0,b,c,c,h,0;d,g,g,3,a;a,b,1,f,i;0,f,1,b,1,f,0;h,e,1,h;c,2,1,3,1,1,3,1,2,c;g,e,e,g;c,e,e,1,1,c;a,e,a,e,a;0,b,2,i,f,0;h,i,h]),[107 140 255;177 52 37;106 107 4;227 157 37]/255)

เวอร์ชันที่ไม่มีการบีบอัดอย่างเต็มที่ (449 ไบต์):

imshow(uint8([0,0,0,1,1,1,1,1,0,0,0,0;0,0,1,1,1,1,1,1,1,1,1,0;0,0,2,2,2,3,3,2,3,0,0,0;0,2,3,2,3,3,3,2,3,3,3,0;0,2,3,2,2,3,3,3,2,3,3,3;0,2,2,3,3,3,3,2,2,2,2,0;0,0,0,3,3,3,3,3,3,3,0,0;0,0,2,2,1,2,2,2,0,0,0,0;0,2,2,2,1,2,2,1,2,2,2,0;2,2,2,2,1,1,1,1,2,2,2,2;3,3,2,1,3,1,1,3,1,2,3,3;3,3,3,1,1,1,1,1,1,3,3,3;3,3,1,1,1,1,1,1,1,1,3,3;0,0,1,1,1,0,0,1,1,1,0,0;0,2,2,2,0,0,0,0,2,2,2,0;2,2,2,2,0,0,0,0,2,2,2,2]),[107 140 255;177 52 37;106 107 4;227 157 37]/255)

ทั้งสองกรณีเอาท์พุท (ขยายบนหน้าจอเห็นได้ชัดว่าของจริงคือ 12x16pix):
MarioMagnified


เฮ้ฉันสงสัยว่าใครจะใช้ประโยชน์จากความสมมาตรได้บ้าง ฉันไม่สามารถหาวิธีที่จะไปด้วยในที่สุด
Bumpy

4

C, 4999 ไบต์

สิ่งนี้ไม่สามารถแข่งขันกับคำตอบบางส่วนได้ที่นี่ แต่ฉันคิดว่าฉันจะให้คำตอบ C รหัสคือหนึ่งบรรทัดยาวดังนั้นนี่คือลิงก์ pastebin หากคุณต้องการนี่คือการเข้ารหัส base64 ของรหัส gzipped:

H4sICAzFGFYCA21hcmlvLmMA3Zc9DsIwDIXv0qndUqchkXwUurAgdYiFEEyIu4NYaZBI7PzNT3Lsz4mf408bjdPjct3odh6HVeujdgg4K4vzohCM8esdjHOpkrVoALUtIrBX8y1R04DKNCGZmTp85CVdAHifYuxO3mElIlju6xaRICOgCo4pD64PoiTzHnkZcHYnRhAYcEEpFznxB1mXP4TdS/KeVGYPZbmVaQHlnRVZFi65OkhoGodq+RHrby4xsTj8i6RmapXrPvfa0Q8ZWZY1/UPbSiC7Z2bYA7r0zla57Xmo8sOEzxdNYIXFhxMAAA==

เป็นที่น่าสังเกตว่ามันไม่จำเป็นต้องเรียกใช้ไลบรารีภายนอก

ต้องการเทอร์มินัล xterm, Konsole หรือ GNOME เนื่องจากใช้การขยาย RGB กับรหัสสี ANSI เพื่อส่งออกสีที่ถูกต้อง (ANSI ไม่ได้กำหนดสีส้ม) ด้วยเหตุผลที่ชัดเจน ideone จะไม่ทำงาน มันสามารถเรียกใช้ใน Windows ภายใต้ Cygwin ซึ่งใช้ xterm (อันที่จริงนั่นคือวิธีที่ฉันทดสอบ) MSYS อาจทำงานได้; ฉันไม่แน่ใจ.

เอาท์พุทบนเครื่องของฉัน (xterm):

มันคือฉันมาริโอ!


2
-1 ไม่ใช่ตัวคูณของ 10
Conor O'Brien

ขออภัยมีการอ้างอิงถึงคะแนน
Conor O'Brien

4

Excel VBA, 310 307 295 ไบต์

ไม่ระบุชื่อ VBE ฟังก์ชันหน้าต่างทันทีที่ส่งออกมาริโอไปยังวัตถุ Activesheet ที่เซลล์ A1:L16

o=2465251:Cells.RowHeight=48:a[A1:L16],-29589:a[C4:K5,D3:I7,J7,L5,A11:L13],o:a[C3:E3,H3:H4,B4:B6,C6,D4:D5,E5,I5,H6:K6,C8:H8,B9:K10,A10:L10,C11,J11,B15:D16,A16,I15:K16,L16],289642:a[D1:H1,C2:K2,E8:E10,F10:H10,H9,D11:I13,C13:E14,H13:J14],2438321:a[E11,H11],o

ผู้ช่วยSubประจำ

Sub a(r,c):r.Interior.Color=c:End Sub

เวอร์ชันที่ไม่ดี

Public Sub b()
    o = 2465251
    Cells.RowHeight = 48
    a [A1:L16], -29589
    a [C4:K5,D3:I7,J7,L5,A11:L13], o
    a [C3:E3,H3:H4,B4:B6,C6,D4:D5,E5,I5,H6:K6,C8:H8,B9:K10,A10:L10,C11,J11,B15:D16,A16,I15:K16,L16], 289642
    a [D1:H1,C2:K2,E8:E10,F10:H10,H9,D11:I13,C13:E14,H13:J14], 2438321
    a [E11,H11], o
End Sub


Private Sub a(ByRef r As Range, ByVal c As Integer)
    r.Interior.Color = c
End Sub

-3 ไบต์สำหรับการลบช่องว่าง -12 ไบต์สำหรับการใช้[...]สัญกรณ์มากกว่าRange(...)สัญกรณ์; เปลี่ยนจากสีฐานสิบหกเป็นสี int

เอาท์พุต

มันเป็นฉัน


3

Bash 346

ทุบตีบริสุทธิ์กับ VT100 เช่นลำดับหนี (ขออภัยไม่มีสีส้มในจานสีนั้น)

C="  "
B="\033[44m$C"
R="\033[41m$C"
G="\033[42m$C"
O="\033[43m$C"
N="\033[00m\n"
A="BBBRRRRRBBBBNBBRRRRRRRRRBNBBGGGOOGOBBBNBGOGOOOGOOOBNBGOGGOOOGOOONBGGOOOOGGGGBNBBBOOOOOOOBBNBBGGRGGGBBBBNBGGGRGGRGGGBNGGGGRRRRGGGGNOOGRORRORGOONOOORRRRRROOONOORRRRRRRROONBBRRRBBRRRBBNBGGGBBBBGGGBNGGGGBBBBGGGGN"
while read -n1 v
do
  printf "${!v}"
done <<< "$A"

1
คุณสามารถลดได้โดยใช้อาร์เรย์สำหรับจานสีแทนอักขระที่แยกกัน เนื่องจากการประกาศอาเรย์แบบเชื่อมโยงนั้นมีความยาวจึงควรทำการเรนเดอร์ให้เป็นจำนวนเต็ม รหัสเวอร์ชั่นของคุณ 295 ตัวอักษร: pastebin.com/d0LW0HM1
จัดการ

3

Pyth, 83 ไบต์

คำเตือน: นี่ไม่ใช่ผู้สมัครที่ชนะเพราะคุณสมบัติภาษาบางอย่างถูกสร้างขึ้นหลังจากโพสต์คำถาม

.wc16@Lc4CM"±4%kÿjkã%"jC"T\0UP\0Z¾Õnþýn¿¿kþ©WÿõZ*Uj(©ª\0ªøÃ/ü\0?ð\0PjU©ªUª"4

นี่คือ hex-dump:

00000000   2E 77 63 31  36 40 4C 63  34 43 4D 22  B1 34 25 6B  .wc16@Lc4CM".4%k
00000010   8C FF 6A 6B  04 E3 9D 25  22 6A 43 22  54 5C 30 55  ..jk...%"jC"T\0U
00000020   50 5C 30 01  5A BE D5 6E  FE FD 6E BF  BF 6B FE A9  P\0.Z..n..n..k..
00000030   57 FF F5 5A  2A 55 6A 28  A9 AA 5C 30  AA F8 C3 2F  W..Z*Uj(..\0.../
00000040   FC 5C 30 3F  F0 5C 30 0F  50 14 05 6A  55 A9 AA 55  .\0?.\0.P..jU..U
00000050   AA 22 34                                            ."4

คุณสามารถดาวน์โหลดโปรแกรมได้ที่นี่และเปิดใช้งานด้วย

python3 pyth.py mario.pyth

สิ่งนี้จะสร้างไฟล์o.png:

มาริโอ

คำอธิบาย:

มีเพียง 4 สีที่แตกต่างกันดังนั้นฉันต้องการเพียง 2 บิตในการบันทึกสีของแต่ละพิกเซล

.wc16@Lc4CM"..."jC"..."4
                  "..."   the colors of the image, 2 bit per pixel
                 C        convert these bytes to a number
                j      4  and convert it to base 4 (extracting the colors)
           "..."          the hexcodes of the 4 colors (3 byte per color)
         CM               convert each byte into its number
       c4                 split into 4 lists
     @L                   for each pixel, pick the correct list of color-list
  c16                     split into 16 rows
.w                        save it as "o.png"

สิ่งนี้ใช้ได้กับ Pyth เวอร์ชันสุดท้ายก่อนที่จะโพสต์ความท้าทายหรือไม่
lirtosiast

@ThomasKwa ใช่ลืม ฉันจะแก้ไขข้อมูล
Jakube

2

กำลังประมวลผล 2 - 359 ตัวอักษร

ฉันเห็นความท้าทายนี้และคิดถึงฟังก์ชั่น pixel [] ของการประมวลผลทันที ฉันหวังว่ามันจะสั้นกว่านี้ แต่ฉันก็ยังค่อนข้างพอใจกับผลการพิจารณาว่านี่เป็นความพยายามครั้งแรกของฉันที่การตีกอล์ฟ

int i,l;i=l=0;size(12,16);loadPixels();for(char c:"3b5r6b9r3b3g2o1g1o4b1g1o1g3o1g3o2b1g1o2g3o1g3o1b2g4o4g4b7o4b2g1r3g5b3g1r2g1r3g1b4g4r4g2o1g1r1o2r1o1r1g5o6r5o8r2o2b3r2b3r3b3g4b3g1b4g4b4g".toCharArray()){while(l>0){pixels[i]=#6B8CFF;if(c=='r')pixels[i]=#B13425;if(c=='g')pixels[i]=#6A6B04;if(c=='o')pixels[i]=#E39D25;i++;l--;}if(c<58){l=c-48;}}updatePixels();

ungolfed:

int i,l;i=l=0;
size(12,16);
loadPixels();
for(char c:"3b5r6b9r3b3g2o1g1o4b1g1o1g3o1g3o2b1g1o2g3o1g3o1b2g4o4g4b7o4b2g1r3g5b3g1r2g1r3g1b4g4r4g2o1g1r1o2r1o1r1g5o6r5o8r2o2b3r2b3r3b3g4b3g1b4g4b4g".toCharArray())
{
    while(l>0)
    {
        pixels[i]=#6B8CFF;
        if(c=='r')pixels[i]=#B13425;
        if(c=='g')pixels[i]=#6A6B04;
        if(c=='o')pixels[i]=#E39D25;
        i++;
        l--;
    }
    if(c<58){l=c-48;}
}
updatePixels();

คุณสามารถดาวน์โหลดการประมวลผลได้ที่นี่


2

Javascript 515

str='';
"000111110000|001111111110|002223323000|023233323330|023223332333|022333322220|000333333300|002212220000|022212212220|222211112222|332131131233|333111111333|331111111133|001110011100|022200002220|222200002222"
.split("|").forEach(function(ov, ok) {
str += '<div>'
    ov.split("").forEach(function(iv, ik) {
    str += '<div style="width:1px;height:1px;background-color:' + ['#6B8CFF','#B13425','#6A6B04','#E39D25'][iv] + ';display:inline-block"></div>';
    });
    str+= '</div>';
});
document.write(str);

เพิ่งได้รับการทำงานยังคงต้องไปและกอล์ฟขึ้น


1
คุณสามารถแทนที่divs ที่ประกอบขึ้นเป็นแถวด้วยแท็กที่เป็นแบบอินไลน์โดยค่าเริ่มต้น ฉันยังไม่ได้ทดสอบ แต่การใช้aควรจะใช้ได้ นอกจากนี้คุณยังสามารถใช้แทนbackground background-color
NinjaBearMonkey

2

Perl - Ungolfed 927

ฉันจะเล่นกอล์ฟนี้ภายหลัง Image::Magickครั้งแรกที่พยายามออก

#!/usr/local/bin/perl
use Image::Magick;
use strict;
use warnings;

my @p = (
[0,0,0,1,1,1,1,1,0,0,0,0],
[0,0,1,1,1,1,1,1,1,1,1,0],
[0,0,2,2,2,3,3,2,3,0,0,0],
[0,2,3,2,3,3,3,2,3,3,3,0],
[0,2,3,2,2,3,3,3,2,3,3,3],
[0,2,2,3,3,3,3,2,2,2,2,0],
[0,0,0,3,3,3,3,3,3,3,0,0],
[0,0,2,2,1,2,2,2,0,0,0,0],
[0,2,2,2,1,2,2,1,2,2,2,0],
[2,2,2,2,1,1,1,1,2,2,2,2],
[3,3,2,1,3,1,1,3,1,2,3,3],
[3,3,3,1,1,1,1,1,1,3,3,3],
[3,3,1,1,1,1,1,1,1,1,3,3],
[0,0,1,1,1,0,0,1,1,1,0,0],
[0,2,2,2,0,0,0,0,2,2,2,0],
[2,2,2,2,0,0,0,0,2,2,2,2],
);
my $image = Image::Magick->new;
$image->Set(size=>'12x16');
$image->ReadImage('canvas:white');
for my $i (0..$#p) {
    for (0..(@{$p[$i]} - 1)) {
        my $color;
        $color = ($p[$i][$_] < 1 ? "#6B8CFF" : $p[$i][$_] < 2 ? "#B13425" : $p[$i][$_] < 3 ? "#6A6B04" : "#E39D25");
        print "$i : $_ : $color \n";
       $image->Set("pixel[$_,$i]"=> $color);
    }
}
#$image->Write("mario.png");
$image->Display();

ฉันแน่ใจว่าเรามีสิ่งเหล่านี้มากมาย แต่ที่นี่เป็นของฉัน: มาริโอ!


2

Bash พิมพ์ได้: 179 158 ไบต์

แรงบันดาลใจจากคำตอบของ user2485710

คุณต้องปรับแต่งเครื่องของคุณให้ตรงกับสีทุกประการ

eval "$(base64 -d<<</AD/8AAD9Wm/2amr2Wpq1qlX/qqv9RX/1RRXVQBVpIIaqAAqoAAK8DwP1f9XVf9V|xxd -b -c3 -g0|cut -c10-33|sed $'s/../\e[4$[2#&+1]m \e[0m/g;s/^/echo /')"

นี่คือสิ่งที่ฉันเห็น ฉันกำลังทำอะไรผิดหรือเปล่า?
ardnew

2
@ardnew: BSD base64ใช้-Dสำหรับการถอดรหัสและ-dสำหรับการแก้ปัญหา
เดนนิส

2

Tcl 298

package require base64
set d [base64::decode AVUABVVUCr7ALv78Lr+/K/6oA//wCmoAKmmoqlWq+ddv/VV/9VVfBUFQKgCoqgCq]
binary scan $d B* z
set i 0
foreach {a b} [split $z ""] {
if {$i % 12 == 0} {puts "\033\[0m"}
puts -nonewline "\033\[4[string map {00 4 01 1 10 2 11 3} $a$b];m  "
incr i
}
puts "\033\[0m"

มันคือภาพ 2 บิตต่อพิกเซลในฐาน 64 พิกเซลถูกแมปกับรหัสหลบหนีแบบ ANSI

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


รหัสของคุณดูเหมือนจะเล่นกอล์ฟได้เล็กน้อย: tio.run/ …
sergiol

2

JavaScript - 256 ตัวอักษร (161 obfusc-a-tweeted)

d=v=>{for(i=v&15;i--;)O.innerHTML+=`<i style="color:#${'6B8CFF6A6B04B13425E39D25'.substr(x%4*6,6)}">█</i>`+(++f%12?'':'<br>');x++},f=x=0,[..."fhilsswsssuss££cgÓdcddc¤g£stcucds³c¹cefefcc¤c§"].map(v=>(d(v=v.charCodeAt(0)-99),d(v>>4)))
<p id=O>

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

วิธี:

  1. การใช้ bitmasking สตริง 63x8 บิตให้อาร์เรย์ค่า 126x4 บิตซึ่งประกอบด้วยตัวเลขในช่วง 0-9 (เฉื่อยชา ... บันทึกตัวละคร 63 ตัวด้วยการใช้ 4 บิต แต่ใช้เวลา 50 ตัวอักษรเพื่อแกะบิตอีกครั้ง lol ยังคง 13 ตัวอักษรคือ 13 ตัวอักษร! :-)
  2. สีของสีทั้ง 4 จะถูกหมุนเวียนตามลำดับ: B, G, R, O. ในการวนซ้ำแต่ละครั้งจะมีการเรนเดอร์ 0-9 divs สำหรับสีปัจจุบัน (โดยมีตัวแบ่งบรรทัดทุก 12

ในการกำหนดลำดับที่ดีที่สุดสำหรับรอบสีผมใช้อัลกอริธึมการบีบอัดเทียบกับข้อมูลดิบสำหรับพีชคณิต 24 ชนิดของ [R, G, B, O] และเลือกอันที่ให้ผลผลิตที่สั้นที่สุด (126 ดีที่สุดอย่างน้อยที่สุดก็คือ ประมาณ 150- บางอย่าง)

การทางพิเศษแห่งประเทศไทยค้นพบนี้หลังจากอ่านคำตอบอื่น ๆ โดยใช้ obfusca-tweet ...

eval(unescape(escape`𩀽𭠽🡻𩡯𬠨𪐽𭠦𜐵𞱩𛐭𞰩𣰮𪑮𫡥𬡈𥁍𣀫👠🁩𘁳𭁹𫁥🐢𨱯𫁯𬠺𘰤𮰧𝡂𞁃𡡆𝡁𝡂𜀴𠠱𜰴𜠵𡐳𞑄𜠵𙰮𬱵𨡳𭁲𚁸𙐴𚠶𛀶𚑽𘠾ﶈ�𛱩🡠𚰨𚰫𩠥𜐲🰧𙰺𙰼𨡲🠧𚐻𮀫𚱽𛁦👸🐰𛁛𛠮𛠢𩡨𪑬𬱳𭱳𬱳𭑳𬲣𸱣𩳓𩁣𩁤𨲤𩲣𬱴𨱵𨱤𬲳𨲹𨱥𩡥𩡣𨲤𨲧𘡝𛡭𨑰𚁶🐾𚁤𚁶👶𛡣𪁡𬡃𫱤𩑁𭀨𜀩𛐹𞐩𛁤𚁶🠾𝀩𚐩𒠼𬀠`.replace(/u../g,'')))

แนวคิดเพิ่มเติม - ลองใช้ช่วงข้อมูลแบบ 3 บิต 0-6 โดยมีค่าหายาก 7,8,9 เพิ่ม 4 พิเศษแต่ละอัน: 60000N - ตรวจสอบพีชคณิตวงรอบสีในทุกทิศทางและความเร็วอื่น ๆ นอกเหนือจากแนวนอนทีละพิกเซล - ลองใช้การเรนเดอร์หลายครั้งเพื่อให้สามารถกำหนดสีได้


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

1

Javascript, 253 240 238 236

Obfuscatweet ed source - 253 240 238 236

document.write(unescape(escape('🁳𨱲𪑰𭀾𘠵𫐲𫰹𫑨𜰰𞐷𫁯𩰹𜐰𜑰𪰹𮡰𝱵𞑶𭁸𭰹𜱱𭐸𞐸𝡷𭰹𭑯𩱫𞐳𨱳𬁨𞐶𪡭𪡥𞐶𬁬𫡵𞐶𭠷𮐲𞑭𝐸𜀹𭁨𮡯𞐳𨡥𨰵𘠮𬱰𫁩𭀨𞐩𛡦𫱲𡑡𨱨𚁦𭑮𨱴𪑯𫠨𨰩𮱤👤𫱣𭑭𩑮𭀻𨰽𬁡𬡳𩑉𫡴𚁣𛀳𝠩𛡴𫱓𭁲𪑮𩰨𝀩𞱷𪁩𫁥𚁣𛡬𩑮𩱴𪀼𜐲𚑣🐢𜀢𚱣𞱣𛡳𬁬𪑴𚀢𘠩𛡦𫱲𡑡𨱨𚁦𭑮𨱴𪑯𫠨𭠩𮱤𛡷𬡩𭁥𚀢🁰𘁳𭁹𫁥🐧𩁩𬱰𫁡𮐺𪑮𫁩𫡥𞱰𨑤𩁩𫡧𞠹𞱢𨑣𪱧𬡯𭑮𩀺𘰢𚱛𘠶𠠸𠱆𡠢𛀢𝡁𝡂𜀴𘠬𘡅𜰹𡀲𝐢𛀢𠠱𜰴𜠵𘡝𦰫𭡝𚰢𙰾🀯𬀾𘠩𯐩𞱤𛡷𬡩𭁥𚀢🁢𬠾𘠩𯐩🀯𬱣𬡩𬁴🠠').replace(/uD./g,'')))

ไม่คลี่คลาย - 395 370 365 361

<script>"5m2o9mh3097log9101pk9zp7u9vtxw93qu8986ww9uogk93csph96jmje96plnu96v7y29m5809thzo93bec5".split(9).forEach(function(c){d=document;c=parseInt(c,36).toString(4);while(c.length<12)c="0"+c;c.split("").forEach(function(v){d.write("<p style='display:inline;padding:9;background:#"+["6B8CFF","6A6B04","E39D25","B13425"][+v]+"'></p>")});d.write("<br>")})</script>

ขอบคุณ @compass สำหรับเคล็ดลับการ<p>แท็กและ @xem สำหรับตัวอักษร 2 (5) ตัว

การสาธิต

มันแปลงข้อมูลจากฐาน 36 และแปลงเป็นฐาน 4


ฉันไม่สามารถทดสอบได้ แต่ฉันไม่คิดว่าpadding:9จะทำสิ่งใดโดยไม่มีหน่วยหลังจากนั้น นอกจากนี้คุณยังสามารถใช้องค์ประกอบหนึ่งตัวอักษรเหมือนaหรือว่าเป็นแบบอินไลน์โดยปริยายแทนq p
NinjaBearMonkey

@hsl ฉันได้อัปเดตลิงก์สาธิตแล้วและทำงานได้ดีอย่างน้อยกับ Chrome, Firefox และ Safari บน Mac
สแน็

-2 ไบต์: แทนที่ "|" โดย 9 ในสตริงและการแยก นอกจากนี้คุณใช้ 3 ครั้ง "document.write" คุณควรใส่ไว้ใน var เพื่อบันทึกเช่น 24b)
xem

@xem ขอบคุณที่เตือนฉันถึงเคล็ดลับการแบ่งตัวเลข และเนื่องจากเราไม่สามารถกำหนดให้document.writeกับตัวแปร (เราควรใช้document.write.bind(document)) สิ่งที่ดีที่สุดของฉันคือกำหนดให้documentกับตัวแปร
สแน็

หรือคุณสามารถทำสิ่งนี้เป็นครั้งแรก: (d = document) [w = "write"] (/ * สิ่งที่จะเขียน * /) และทำอย่างนั้นหลังจาก: d [w] ("Hi")
xem

1

JavaScript ES6 (HTML + CSS), 199 307 3195 3630

ใช้Obfusc-a-tweet :

eval(unescape(escape('𬰽𦱝𒠧𜰹𮡲𬀳𝁤𩡬𜱪𩱴𜐴𨡷𭐵𝁢𪱣𩠴𝱰𜡨𜱦𫁹𭀳𪑮𪀱𝀵𝀸𞐶𫑳𫱡𞑰𩡥𝰹𭁺𝑲𞑤𝁢𜰳𝁨𩁸𝀵𩀴𞐶𫠹𩱱𙰮𫑡𭁣𪀨𛰮𮰵𯐯𩰩𛡦𫱲𡑡𨱨𚀨𫠬𪐩🐾𦰮𛠮𬁡𬡳𩑉𫡴𚁮𛀳𝠩𛡴𫱓𭁲𪑮𩰨𝀩𧐮𩡯𬡅𨑣𪀨𚁭𛁪𚐽🡳𛡰𭑳𪀨𪠫𜐫𙱰𮀠𙰫𚀫𪐫𜐩𚰧𬁸𘀣𙰫𦰧𠠱𜰴𜠵𙰬𙰶𠠸𠱆𡠧𛀧𝡁𝡂𜀴𙰬𙱅𜰹𡀲𝐧𧑛𚱭𧐩𚐩𒡤𫱣𭑭𩑮𭀮𭱲𪑴𩐨𙰼𬀠𬱴𮑬𩐽𘡷𪑤𭁨𞠱𬁸𞱨𩑩𩱨𭀺𜑰𮀻𨡯𮀭𬱨𨑤𫱷𞠧𚱳𚰧𘠧𚐠').replace(/uD./g,'')))

สิ่งนี้แสดงสไปรท์โดยไม่ใช้ภาพหรือองค์ประกอบหลาย ๆ มันแค่ใช้box-shadowคุณสมบัติCSS ในการสร้างแต่ละพิกเซลในทางที่ผิด ลองมันที่http://jsbin.com/pozohiyezo/ รุ่นที่ไม่ได้ทำให้รำลึกถึงนี้คือ307 ตัวอักษร :

s=[]
'39zrp34dfl3jgt14bwu54bkcf47p2h3flyt3inh1454896msoa9pfe79tz5r9d4b334hdx45d496n9gq'.match(/.{5}/g).some((n,i)=>[...parseInt(n,36).toString(4)].forEach((m,j)=>s.push(j+1+'px '+(+i+1)+'px #'+['B13425','6B8CFF','6A6B04','E39D25'][+m])))
document.write('<p style="width:1px;height:1px;box-shadow:'+s+'"')

นี่เป็นเวอร์ชัน HTML ดั้งเดิมของ vanilla ธรรมดา เห็นมันในการกระทำที่http://jsfiddle.net/gfeLn1ey/1/

<p style="width:1px;height:1px;box-shadow:4px 1px 0 #B13425,5px 1px 0 #B13425,6px 1px 0 #B13425,7px 1px 0 #B13425,8px 1px 0 #B13425,12px 1px 0 #6B8CFF,3px 2px 0 #B13425,4px 2px 0 #B13425,5px 2px 0 #B13425,6px 2px 0 #B13425,7px 2px 0 #B13425,8px 2px 0 #B13425,9px 2px 0 #B13425,10px 2px 0 #B13425,11px 2px 0 #B13425,12px 2px 0 #6B8CFF,3px 3px 0 #6A6B04,4px 3px 0 #6A6B04,5px 3px 0 #6A6B04,6px 3px 0 #E39D25,7px 3px 0 #E39D25,8px 3px 0 #6A6B04,9px 3px 0 #E39D25,12px 3px 0 #6B8CFF,2px 4px 0 #6A6B04,3px 4px 0 #E39D25,4px 4px 0 #6A6B04,5px 4px 0 #E39D25,6px 4px 0 #E39D25,7px 4px 0 #E39D25,8px 4px 0 #6A6B04,9px 4px 0 #E39D25,10px 4px 0 #E39D25,11px 4px 0 #E39D25,12px 4px 0 #6B8CFF,2px 5px 0 #6A6B04,3px 5px 0 #E39D25,4px 5px 0 #6A6B04,5px 5px 0 #6A6B04,6px 5px 0 #E39D25,7px 5px 0 #E39D25,8px 5px 0 #E39D25,9px 5px 0 #6A6B04,10px 5px 0 #E39D25,11px 5px 0 #E39D25,12px 5px 0 #E39D25,2px 6px 0 #6A6B04,3px 6px 0 #6A6B04,4px 6px 0 #E39D25,5px 6px 0 #E39D25,6px 6px 0 #E39D25,7px 6px 0 #E39D25,8px 6px 0 #6A6B04,9px 6px 0 #6A6B04,10px 6px 0 #6A6B04,11px 6px 0 #6A6B04,12px 6px 0 #6B8CFF,4px 7px 0 #E39D25,5px 7px 0 #E39D25,6px 7px 0 #E39D25,7px 7px 0 #E39D25,8px 7px 0 #E39D25,9px 7px 0 #E39D25,10px 7px 0 #E39D25,12px 7px 0 #6B8CFF,3px 8px 0 #6A6B04,4px 8px 0 #6A6B04,5px 8px 0 #B13425,6px 8px 0 #6A6B04,7px 8px 0 #6A6B04,8px 8px 0 #6A6B04,12px 8px 0 #6B8CFF,2px 9px 0 #6A6B04,3px 9px 0 #6A6B04,4px 9px 0 #6A6B04,5px 9px 0 #B13425,6px 9px 0 #6A6B04,7px 9px 0 #6A6B04,8px 9px 0 #B13425,9px 9px 0 #6A6B04,10px 9px 0 #6A6B04,11px 9px 0 #6A6B04,12px 9px 0 #6B8CFF,1px 10px 0 #6A6B04,2px 10px 0 #6A6B04,3px 10px 0 #6A6B04,4px 10px 0 #6A6B04,5px 10px 0 #B13425,6px 10px 0 #B13425,7px 10px 0 #B13425,8px 10px 0 #B13425,9px 10px 0 #6A6B04,10px 10px 0 #6A6B04,11px 10px 0 #6A6B04,12px 10px 0 #6A6B04,1px 11px 0 #E39D25,2px 11px 0 #E39D25,3px 11px 0 #6A6B04,4px 11px 0 #B13425,5px 11px 0 #E39D25,6px 11px 0 #B13425,7px 11px 0 #B13425,8px 11px 0 #E39D25,9px 11px 0 #B13425,10px 11px 0 #6A6B04,11px 11px 0 #E39D25,12px 11px 0 #E39D25,1px 12px 0 #E39D25,2px 12px 0 #E39D25,3px 12px 0 #E39D25,4px 12px 0 #B13425,5px 12px 0 #B13425,6px 12px 0 #B13425,7px 12px 0 #B13425,8px 12px 0 #B13425,9px 12px 0 #B13425,10px 12px 0 #E39D25,11px 12px 0 #E39D25,12px 12px 0 #E39D25,1px 13px 0 #E39D25,2px 13px 0 #E39D25,3px 13px 0 #B13425,4px 13px 0 #B13425,5px 13px 0 #B13425,6px 13px 0 #B13425,7px 13px 0 #B13425,8px 13px 0 #B13425,9px 13px 0 #B13425,10px 13px 0 #B13425,11px 13px 0 #E39D25,12px 13px 0 #E39D25,1px 14px 0 #6B8CFF,2px 14px 0 #6B8CFF,3px 14px 0 #B13425,4px 14px 0 #B13425,5px 14px 0 #B13425,6px 14px 0 #6B8CFF,7px 14px 0 #6B8CFF,8px 14px 0 #B13425,9px 14px 0 #B13425,10px 14px 0 #B13425,11px 14px 0 #6B8CFF,12px 14px 0 #6B8CFF,1px 15px 0 #6B8CFF,2px 15px 0 #6A6B04,3px 15px 0 #6A6B04,4px 15px 0 #6A6B04,5px 15px 0 #6B8CFF,6px 15px 0 #6B8CFF,7px 15px 0 #6B8CFF,8px 15px 0 #6B8CFF,9px 15px 0 #6A6B04,10px 15px 0 #6A6B04,11px 15px 0 #6A6B04,12px 15px 0 #6B8CFF,1px 16px 0 #6A6B04,2px 16px 0 #6A6B04,3px 16px 0 #6A6B04,4px 16px 0 #6A6B04,5px 16px 0 #6B8CFF,6px 16px 0 #6B8CFF,7px 16px 0 #6B8CFF,8px 16px 0 #6B8CFF,9px 16px 0 #6A6B04,10px 16px 0 #6A6B04,11px 16px 0 #6A6B04,12px 16px 0 #6A6B04,6px 6px 0 5px #6B8CFF"

จนกว่าคุณจะไม่สามารถปิด <p แท็ก :)
xem

รหัสนี้สามารถมีการบีบอัดที่ดีมากในเครื่องมือเช่น regpack นี่คือตัวอย่างใน 729b (JS ใช้ในการเขียน HTML): goo.gl/7fF7kx
xem

@xem ฉันไม่ได้คิดจะสร้างรหัสด้วย JS แต่ฉันสามารถซื้อได้สั้นกว่ามากตามรูปแบบของรหัส
NinjaBearMonkey

1

Javascript, 256 หรือ 245 252 หรือ 241

256

document.write("k6n56kcraqlaqasasjaqbsasibtdlstlb2cmc2b2cid5dra2q3q2au7u55rj4j4kclcidld".replace(/./g,function(x){return new Array((x=parseInt(x,36))&7).join("<li style=padding:4%;float:left;background:#"+['B13425','6A6B04','6B8CFF','E39D25'][x>>3]+">")}))

เป็นเรื่องน่าเศร้าที่จะลบล้าง 256 แต่เป็นไปได้245ถ้าใช้อักขระที่ไม่สามารถพิมพ์ได้:

document.write(btoa(">§ç©­ª¥j¦¬jÈÚ©»²&ív[-½ÍÙÈåÚÚÚ­êÙ«»»køÉ\\Ù]").replace(/./g,function(x){return new Array((x=parseInt(x,36))&7).join("<li style=padding:4%;float:left;background:#"+["B13425","6A6B04","6B8CFF","E39D25"][x>>3]+">")}))

มีปัญหาในการส่งวิธีแก้ปัญหาด้วยตัวอักษรที่ไม่สามารถพิมพ์ได้ อาร์กิวเมนต์ของbtoaต้องเป็นผลลัพธ์ของการเพิ่มatob("ij6n56kcraqlaqasasjaqbsasibtdlstlb2cmc2b2cid5dra2q3q2au7u55rj4j4kclcidld")1 สัญลักษณ์ของความยาวเพื่อหลีกเลี่ยงแบ็กสแลช

ย่อโซลูชันทั้งสองด้วย 4 สัญลักษณ์: เราไม่ต้องการสิ่งใหม่สำหรับการสร้างอาร์เรย์

252

document.write("k6n56kcraqlaqasasjaqbsasibtdlstlb2cmc2b2cid5dra2q3q2au7u55rj4j4kclcidld".replace(/./g,function(x){return Array((x=parseInt(x,36))&7).join("<li style=padding:4%;float:left;background:#"+['B13425','6A6B04','6B8CFF','E39D25'][x>>3]+">")}))

241

document.write(btoa("©ùêG+j©Z©«²6ªnƬ»]Ëeog&sför'yv¶¶«z¶jîîçãâ>$rVÚÙ]").replace(/./g,function(x){return Array((x=parseInt(x,36))&7).join("<li style=padding:4%;float:left;background:#"+['B13425','6A6B04','6B8CFF','E39D25'][x>>3]+">")}))

ไม่จำเป็นต้องมีการหลบหนีในรุ่นนี้ btoaอาร์กิวเมนต์ 's เป็นผลมาจากatob("k6n56kcraqlaqasasjaqbsasibtdlstlb2cmc2b2cid5dra2q3q2au7u55rj4j4kclbaidld")


ฉันสังเกตเห็นปัญหาที่ไม่สามารถพิมพ์ได้เกี่ยวกับเรื่องนี้และความท้าทายสุดท้ายของฉันเช่นกัน ฉันคิดว่ามันเป็นเพียงตัวอักษร 8, 9 และ 13 ว่าจะช่วย (แม้ว่าฉันได้อย่างง่ายดายสามารถจะเข้าใจผิด)
เป็นหลุมเป็นบ่อ

1

Perl, 266 260 257 249 245 ไบต์

$_="444111114444441111111114442223323444423233323334423223332333422333322224444333333344442212224444422212212224222211112222332131131233333111111333331111111133441114411144422244442224222244442222";s/\d/\033[4$&m  /g;s/.{84}/$&\033[00m\n/g;print

ใช้วิธีการคล้ายกับโซลูชัน bash ของผู้ใช้ 2485710 เพื่อเขียนเอาต์พุตสไตล์ VT100 แยก N อย่างชัดเจนสำหรับการขึ้นบรรทัดใหม่โดยการแทรกบรรทัดใหม่ทุก 12 "vt100 พิกเซล", 12 * 7 = 84


1

SmileBASIC, 147 136 ตัวอักษร

P$="xxxxxxxx
FOR I=0TO 191C=ASC("xxxxxxxxxxxxxxxxxxxxxxxx"[I/8])>>I MOD 8*2AND 3GPSET I/16,15AND I,ASC(P$[C*2])<<16OR ASC(P$[C*2+1])NEXT

ผลผลิต (ครอบตัด): ภาพหน้าจอ

ฉันแทนที่อักขระทั้งหมดในสตริงข้อมูลด้วยx's นี่คือรหัสอักขระ (ใน UCS-2):
P$(Palette): FF6B,8CFF,FFB1,3425,FF6A,6B04,FFE3,D925
ข้อมูลรูปภาพ:0000,83F8,0A80,A3FA,8BE4,A5EA,BEA5,A55A,7EE5,0575,BFF5,0156,BFF5,0156,BBA5,0575,3AF4,A55A,3BC4,A5EA,0BC4,A3FA,0300,83F8

จานสีจะถูกเก็บไว้ในสตริงแต่ละสี (32 บิต) จะถูกเก็บไว้ในตัวละครสองตัว (แต่ละ 16 บิต) ข้อมูลรูปภาพ (2 บิตต่อพิกเซล) ถูกเก็บไว้ในสายอักขระอื่น (8 พิกเซลต่อตัวอักษร)
โชคดีที่ความท้าทายนั้นได้คะแนนเป็นตัวอักษรเนื่องจากไฟล์นี้มีขนาดใหญ่กว่ามากหากบันทึกใน UTF-8


1

05AB1E , 87 ไบต์ (ไม่แข่งขัน)

•8,vkJíÝ1¢tt6,9XÂck$XSãõO©Ú"›qf®¸Ì#}„K0ÝCìxý}É~ð_áú•4BSvy•3«WKyÛòèz*Ðeb•16B6ôè'#ì})12ô»

ลองออนไลน์!

ขาออก:

#B13425 #B13425 #B13425 #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6B8CFF #B13425 #B13425 #B13425 #B13425
#B13425 #B13425 #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6B8CFF #B13425
#B13425 #B13425 #6A6B04 #6A6B04 #6A6B04 #E39D25 #E39D25 #6A6B04 #E39D25 #B13425 #B13425 #B13425
#B13425 #6A6B04 #E39D25 #6A6B04 #E39D25 #E39D25 #E39D25 #6A6B04 #E39D25 #E39D25 #E39D25 #B13425
#B13425 #6A6B04 #E39D25 #6A6B04 #6A6B04 #E39D25 #E39D25 #E39D25 #6A6B04 #E39D25 #E39D25 #E39D25
#B13425 #6A6B04 #6A6B04 #E39D25 #E39D25 #E39D25 #E39D25 #6A6B04 #6A6B04 #6A6B04 #6A6B04 #B13425
#B13425 #B13425 #B13425 #E39D25 #E39D25 #E39D25 #E39D25 #E39D25 #E39D25 #E39D25 #B13425 #B13425
#B13425 #B13425 #6A6B04 #6A6B04 #6B8CFF #6A6B04 #6A6B04 #6A6B04 #B13425 #B13425 #B13425 #B13425
#B13425 #6A6B04 #6A6B04 #6A6B04 #6B8CFF #6A6B04 #6A6B04 #6B8CFF #6A6B04 #6A6B04 #6A6B04 #B13425
#6A6B04 #6A6B04 #6A6B04 #6A6B04 #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6A6B04 #6A6B04 #6A6B04 #6A6B04
#E39D25 #E39D25 #6A6B04 #6B8CFF #E39D25 #6B8CFF #6B8CFF #E39D25 #6B8CFF #6A6B04 #E39D25 #E39D25
#6A6B04 #6A6B04 #6A6B04 #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6A6B04 #6A6B04 #6A6B04
#6A6B04 #6A6B04 #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6A6B04 #6A6B04
#B13425 #B13425 #6B8CFF #6B8CFF #6B8CFF #B13425 #B13425 #6B8CFF #6B8CFF #6B8CFF #B13425 #B13425
#B13425 #6A6B04 #6A6B04 #6A6B04 #B13425 #B13425 #B13425 #B13425 #6A6B04 #6A6B04 #6A6B04 #B13425
#6A6B04 #6A6B04 #6A6B04 #6A6B04 #B13425 #B13425 #B13425 #B13425 #6A6B04 #6A6B04 #6A6B04 #6A6B04

เนื่องจาก 05AB1E ไม่สามารถทำสีหรือกราฟิกใด ๆ ... หากไม่เป็นที่ยอมรับฉันจะลบมัน


คุณสามารถเขียน Bash wrapper และพูดคำตอบของคุณคือBash + 05AB1E
Pavel

1
@Pavel ฉันคิดว่าจะทำอย่างนั้นฉันเดาว่าฉันจะไปหาทางออกนี้ร่วมกับคนอื่น;
Magic Octopus Urn

ฉันไม่สามารถพูดว่า "ชนะ" แต่โปรดให้มันเป็นมันคะแนนการบีบอัดที่ดี :)
xem

0

Sinclair BASIC - 573 ไบต์

ตกลงดังนั้นสเปกตรัมไม่สามารถแสดงสี RGB ตามที่ระบุได้ดังนั้นจึงควรใช้สีที่ใกล้เคียงที่สุด

10 let x=0:let y=0:let i=0
20 let a$="1c2e1f2i1c4c6b461d4646c46c1b464b6c46c14b6d4d1d6g1d4b24c1e4c24b24c14d2d4d6b4262b6246e2f6e2c1b2c6b1b2c1b2c1c4c1d4c14d1d4d"
30 let l=len a$
40 let i=i+1:let c=1:let p=0:let k=val a$(i)
50 if a$(i+1)>="a" then let c=code a$(i+1)-96:let i=i+1
60 print at y,x;ink k;"\::":let p=p+1:let x=x+1:if x=12 then let x=0:let y=y+1
70 if p<c then goto 60
80 if i<l then goto 40

สตริงคือสี (1 = สีฟ้า, 2 = สีแดง ฯลฯ ) ตามด้วยตัวอักษรเพื่อแสดงจำนวนครั้งที่บล็อกนั้นซ้ำ (โดยใช้ค่า ASCII ลบ 96 ถึงกลายเป็น 1,2,3 ฯลฯ ) ตัวเลขที่ไม่มีตัวอักษรหลังจากวาดเพียงหนึ่งช่วงตึก

"\::"ในบรรทัดที่ 60 เป็นวิธีการป้อนกราฟิกในโปรแกรมแก้ไขข้อความก่อนที่จะเปลี่ยนเป็นไฟล์ TAP เพื่อโหลดลงใน Fuse emulator (แสดงเป็นกราฟิกบล็อกของแข็งบนหน้าจอ)

คำหลักแต่ละคำคือหนึ่งไบต์ใน Sinclair BASIC ได้รวมการนับจากคำสั่ง PEEK หลังจากที่ถูกสร้างขึ้น

มันเป็นมาริโอ


0

Perl - 399 171 ไบต์

use MIME::Base64;$_='R0lGODdhDAAQAKEEAGuM/+OdJWprBLE0JSwAAAAADAAQAAACNoSHaAvpaoQMQQRmLdUXZM55XCUJDIVSmDCUjMhKrQSzSamxAbKP+5P6PQaqBiSxcCVpuJWkAAA7';
print decode_base64($_)

เขียนไฟล์ gif ไปที่ stdout

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