พิมพ์ favicon ของ Exchange Exchange


19

ท้าทาย

พิมพ์หรือส่งคืน favicon ของ Exchange Exchange ตามที่ระบุไว้ด้านล่าง:

 ___________________
/                   \
---------------------
|                   |
---------------------
|                   |
---------------------
\__________    _____/
           |  /
           | /
           |/

นี่คือดังนั้นคำตอบที่สั้นที่สุดในแต่ละภาษาจะเป็นผู้ชนะ


2
มุมซ้ายบนตั้งใจให้วางแนวผิดเล็กน้อยหรือไม่?
ETHproductions

@ETHproductions มันถูกตั้งใจ แต่ฉันเปลี่ยนได้ในขณะนี้ มันดูแปลก ๆ อย่างใดอย่างหนึ่ง
musicman523

2
เอาต์พุตที่แท้จริงคือ 219 ไบต์สำหรับการอ้างอิง
มนุษย์โดยรวม

อนุญาตให้ใช้เส้นต่อท้ายและ / หรือช่องว่างต่อท้ายบนเส้นได้ใช่ไหม
dzaima

คำตอบ:


43

ภาษาสคริปต์การทำงานของ Flashpoint , 263 195 ไบต์

f={r="                   ";t="---------------------\n";s=" ___________________\n/"+r+"\\n"+t+"|"+r+"|\n"+t+"|"+r+"|\n"+t+"\__________    _____/\n           |  /\n           | /\n           |/";s}

ไม่ใช่เครื่องมือที่เหมาะสมสำหรับงาน

โทรด้วย:

hint call f;

เอาท์พุท:

การจัดรูปแบบล้มเหลวเนื่องจากแบบอักษรไม่ได้มีการเก็บข้อมูลอย่างเดียว


49
สิ่งที่ทำให้คุณมองสิ่งที่ท้าทายและคิดว่า "โอ้ฉันควรตอบว่าใน Operation Flashpoint" ไขปริศนาฉัน ...
สิ้นเชิงมนุษย์

7
@totallyhuman ฉันคิดว่า lang scripting ของมันสนุกดีที่จะเขียนมันมีข้อ จำกัด และข้อ จำกัด เล็กน้อยดังนั้นบางครั้งคุณต้องใช้วิธีแก้ปัญหาที่แปลก ๆ ซึ่งทำให้มันน่าสนใจ
Steadybox

5
การเข้ารหัส Hardcoding อาจทำให้คุณได้คะแนนที่ดีขึ้น
NieDzejkob

2
@NieDzejkob ตอนนี้มันสั้นกว่าฮาร์ดโค้ดเอาท์พุท แต่น่าเบื่อกว่ารุ่นก่อนหน้า
Steadybox

@tallyallyhuman และด้วยความท้าทายนี้โดยเฉพาะฉันต้องการทดสอบว่าภาษาจะเป็นอย่างไรกับความท้าทายที่ซับซ้อนของ Kolmogorov (ซึ่งมันน้อยกว่าอุดมคติสำหรับ)
Steadybox

11

ถ่าน , 38 37 33 30 ไบต์

←×_χ↓F/||⟦ι¹¹⟧\×_⁹‖B_×ψ⁴↙↙³↑↑³

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด แก้ไข: จัดการเพื่อบันทึกไบต์ด้วยความช่วยเหลือของการสะท้อนแม้ว่า @CarlosAlejo แสดงให้เห็นว่าในความเป็นจริงสามารถทำได้ใน 37 ไบต์โดยไม่ต้องสะท้อน บันทึกอีก 4 ไบต์โดยการวาด left ซ้ายและสะท้อนสุดท้าย final แก้ไข: คำตอบขนาด 33 ไบต์ก่อนหน้านี้ขึ้นอยู่กับการReflectButterflyOverlap()ไม่พิมพ์ทับพื้นที่ทับซ้อนกับการสะท้อนดังนั้นในกรณีที่พฤติกรรมนี้เปลี่ยนไปฉันค้นหาวิธีการแก้ปัญหาที่ไม่พึ่งพาและผลลัพธ์ก็สั้นลงด้วยความขอบคุณ ใช้ความคิดสร้างสรรค์ในการพิมพ์อาเรย์ คำอธิบาย:

←×_χ                            Print 10 `_`s leftwards (top row)
    ↓                           Move down to the next row
     F/||                       For each character in the string `/||`
          ι                     Current character
           ¹¹                   Integer 11, prints as `-----------`
         ⟦   ⟧                  Put both into an array
                                Implicitly print on separate lines
              \                 Implicitly print `\`
               ×_⁹              Implicitly print 9 `_`s
                  ‖B            Reflect right, overlapping the axis
                    _           Implicitly print `_`
                     ×ψ⁴        Implicitly delete 4 characters
                        ↙↙³     Move down left and print three `/`s
                           ↑↑³  Move up and print three '|'s

2
เล่นได้ดีมาก ฉันชอบที่Charcoal มีคำตอบสี่ข้อสำหรับคำถามนี้! ‖BOไม่ใช่ครั้งสุดท้ายที่ฉันใช้ภาษานี้ - ฉันจะต้องคำนึงถึงเรื่องนั้นในอนาคต
DLosc

ฉันต้องดูด้วยตนเองว่าคุณหมายถึงอะไรด้วย "สะท้อนสุดท้าย¼" เล่นได้ดีแน่นอน!
Charlie

8

/// , 98 ไบต์

/'/  //&/
"""
|!! |//%/\\\/
!'|//#/_____//"/-------//!/'''' / ###____
\/!! \\&&
"""
\\##''#%'% %\/

ลองออนไลน์! หรือดูมันแบบโต้ตอบ!


3
มียูทิลิตี้ที่ทำให้ฉันสามารถดู "ขั้นตอน" ของโปรแกรม /// ต่างกันได้หรือไม่? (การดำเนินการบางส่วนหลังจากการแทนที่แต่ละครั้ง) ที่สามารถช่วยให้ฉันเข้าใจพวกเขาดีขึ้น
CAD97

@ CAD97 ฉันได้เล่นซอกับล่ามออนไลน์และมันมักจะมาพร้อมกับตัวเลือกการแก้ปัญหา แต่วิธีที่ล่ามออนไลน์สั่งโต้แย้งมันไม่ทำงานแบบนั้น perl slashes.pl -d1 code.txtคุณสามารถคว้าสำเนาของล่ามตัวเองและทำสิ่งที่ชอบ ปัจจุบันฉันกำลังทำงานกับสภาพแวดล้อมการดำเนินการออนไลน์สำหรับ /// แต่อาจใช้เวลาสักครู่
Conor O'Brien

3
@ CAD97 กล่าวว่าสิ่งออนไลน์นั้นขึ้นมาดู!
Conor O'Brien

8

JavaScript (ES6) 113 112 ไบต์

(บันทึกเป็นไบต์ด้วย @Craig Ayre)

let f=

_=>` _19
/ 19\\
-21
| 19|
-21
| 19|
-21
\\_10 4_5/
 11| 2/
 11| /
 11|/`.replace(/.(\d+)/g,([a],b)=>a.repeat(b))
 
 console.log(f());


ดูเหมือนว่าคุณมีพื้นที่จรจัดก่อนฟังก์ชั่นการเปลี่ยน ฉันเพิ่งได้รับการอัปเดตที่คล้ายกันสำหรับโซลูชัน JS ของฉันที่ 113 ไบต์ ไม่ทราบว่าฉันควรโพสต์หรือให้คุณมี
Shaggy

อ๊ะเดี๋ยวก่อนแค่เห็นตอนที่คุณโพสต์คำตอบก่อนที่ฉันจะโพสต์ของฉัน replace(/.(\d+)/g,(a,b)=>a[0].repeat(b))ฉันจะลบเหมืองเมื่อฉันได้รับไปยังเครื่องคอมพิวเตอร์และคุณสามารถบันทึกไบต์ด้วย
Shaggy

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

1
คุณสามารถบันทึกตรงกันแถว byte a: ([a],b)=>a.repeat(b))?
Craig Ayre

ใช่ขอบคุณ! ฉันไม่คุ้นเคยกับไวยากรณ์นั้น
Rick Hitchcock

7

SOGL v0.12 , 32วันที่ 31 ไบต์

^$∙r↑Ψ«2τγæΕž‘╬Æ╬⁷"ƧΡ⅟?0Ξ³‘6«8ž

ลองที่นี่!

คำอธิบาย:

...‘               push a quarter of the icon
    Β             palindromize vertically
      ╬⁷           palindromize horizontally (these two should be ╬3 together, but spacing doesn't work correctly (though now it does since I fixed it))
        "...‘      push the extention
             6«8ž  at coordinates [12; 8] in the quad-palindromized image put that in

ไตรมาส:

 __________
/
-----------
|
-----------

และส่วนอื่น ๆ :

    
|  /
| /
|/

"togethe"? "ราง"? นอกจากนี้มันต้องใช้เวลาเล็กน้อยในขณะที่จะคิดออกว่าในคำอธิบายความหมาย. stringอาจจะใช้^...'และ"...'?
CalculatorFeline

@CalculatorFeline ฉันมักจะทำ...สำหรับสตริงที่บีบอัด (aka เรื่องไร้สาระ) แต่เมื่อเร็ว ๆ นี้ฉันเริ่มทำหนึ่งหรือสอง และ
อย่า

7

Python 2 , 115 ไบต์, แนวคิดที่สร้างสรรค์มากขึ้น

t,u,v,w,x,y,z='\n -/\\_|';k=w+t+11*u+z;i=t+21*v+t
print u+19*y+t+w+19*u+x+(i+z+19*u+z)*2+i+x+10*y+4*u+5*y+k+u,k,k+w

ลองออนไลน์!

Python 2 , 102 ไบต์, แนวคิดที่น่าเบื่อ

print'eNrjUojHBFz6CpgghksXG+CqwaK2hgpqYxDuASkDM/S5kDUqKKDxUbn6XADUmClx'.decode('base64').decode('zip')

ลองออนไลน์!


2
ฉันลงคะแนนนี้เพราะฉันเห็นวิธีนี้ใช้หลายครั้งเกินไป มันน่าเบื่อที่จะเห็นซ้ำแล้วซ้ำอีก
R. Kap

8
@ R.Kap เว้นแต่ว่าจะมีวิธีที่สั้นกว่านั่นเป็นเหตุผลที่ค่อนข้างเด็ดขาดในการลงคะแนน
Dennis

1
@Dennis บางที แต่ฉันยังคงยืนหยัดต่อความคิดเห็นของฉันและมีสิทธิ์ทุกอย่างที่จะแสดงออก ฉันได้เห็นวิธีการนี้ใช้เวลานับไม่ถ้วนในการท้าทายประเภทนี้และต้องใช้ความคิดสร้างสรรค์เพียงเล็กน้อยถึงไม่มีความคิดสร้างสรรค์ในส่วนของ OP ซึ่งเป็นประเด็นใหญ่อย่างน้อยในความคิดของฉันความท้าทายที่ซับซ้อนของ Kolomogorov และด้วยเหตุผลของฉัน .
R. Kap

2
@ R.Kap หากอัลกอริทึมการบีบอัดวัตถุประสงค์ทั่วไปสามารถเอาชนะด้วยตนเองได้อย่างง่ายดายนั่นเป็นปัญหาของการท้าทายไม่ใช่คำตอบ ฉันยังไม่สามารถเอาชนะ Bubblegum ด้วย Jelly และการบีบอัดมีค่าใช้จ่ายน้อยมากใน Jelly
Dennis

2
@Dennis ฉันไม่ได้พูดถึงความยาวของรหัสที่นี่ ฉันกำลังพูดถึงความพยายามและความคิดสร้างสรรค์ซึ่งคำตอบนี้ในความคิดของฉันล้มเหลวในการแสดงในภาษาที่หนึ่งสามารถทำได้มากขึ้นซึ่งเป็นเหตุผลที่ฉันลงคะแนน ตอนนี้ถ้าคุณไม่เห็นด้วยกับเหตุผลของฉันที่ไม่เป็นไร ในกรณีนี้ให้เราเห็นด้วยที่จะไม่เห็นด้วยและจบการสนทนานี้ที่นี่ก่อนที่มันจะนานเกินไป :)
R. Kap

6

Python 2, 124 ไบต์

a,b,d,e,f,g,h=' _-|/\\\n';r=d*21+h+e+a*19+e+h;n=f+h+a*11+e;print a+b*19+h+f+a*19+g+h+r*2+r[:22]+g+b*10+a*4+b*5+n+a*2+n+a+n+f

ลองออนไลน์!


คุณไม่เคยใช้งานcดังนั้นคุณสามารถกำจัดมันได้ 3 ไบต์ ลองออนไลน์!
musicman523

@ musicman523 ฉันไม่รู้ด้วยซ้ำว่าทำไม ขอบคุณสำหรับการจับ! :)
R. Kap

6

C (gcc) , 187 ไบต์

บันทึก 2 ไบต์ด้วย Cody Gray และ 3 ไบต์ขอบคุณ Keyu Gan!

#define a"         "
#define s a" "a
#define l"\n---------------------\n"
f(){puts(" ___________________\n/"s"\\"l"|"s"|"l"|"s"|"l"\\__________    _____/\n"a"  |  /\n"a"  | /\n"a"  |/");}

ลองออนไลน์!


2
putsจะสั้นลงเล็กน้อยหากบรรทัดใหม่ต่อท้ายเป็นที่ยอมรับ
โคดี้เกรย์

คุณอาจใช้แทนf() main()ฟังก์ชั่นยังเป็นที่ยอมรับ
Keyu Gan

5

สนิม 181 ไบต์

||" ___________________
/2\\
1
1
3
\\__________    _____/
4|  /
4| /
4|/".replace("1","3
|2|").replace("2",&" ".repeat(19)).replace("3",&"-".repeat(21)).replace("4",&" ".repeat(11))

ลองออนไลน์!

สนิม 184 ไบต์

รุ่นนี้อาจเล่นกอล์ฟได้มากกว่าเนื่องจากเพิ่มreplaceค่าใช้จ่ายน้อยลงในแต่ละไบต์ ครั้งแรกที่replaceไม่ได้เป็นส่วนหนึ่งของห่วงเพราะมันดึงหน้าที่สองเปลี่ยนsเป็นแทนString&'static str

||{let mut s=" 5__5__5
/2\\
1
1
3
\\55    5/
4|  /
4| /
4|/".replace("1","3
|2|");for p in vec![("2"," ",19),("3","-",21),("4"," ",11),("5","_",5)]{s=s.replace(p.0,&p.1.repeat(p.2))}s}

ลองออนไลน์!


5

C, 167 ไบต์

i;char*d=" q    /()\\   A   |()|    A   |()|    A   \\h#c/  #&|!/   #&| /   #&|/",c,b;main(j){while(c=d[i++],b=c%5==2||c>123?c:c>95?95:c>45?45:c>=32?32:++c,i<47)for(j=c;j-->=b;)putchar(b);}

ลองออนไลน์!

หมายเหตุ: ช่องว่างที่ปรากฏอยู่ด้านบนเป็นอักขระแท็บ

รุ่นที่อ่านได้:

i;
char *d = " q   /()\\   A   |()|    A   |()|    A   \\h#c/  #&|!/   #&| /   #&|/", c, b;
main(j) {
    while(
        c = d[i++],
        b = c % 5==2 || c > 123 ? c:
            c > 95 ? 95:
            c > 45 ? 45:
            c >= 32 ? 32:
            ++c,
        i < 47
    )
        for(j = c; j-- >= b;)
            putchar(b);
}

คำอธิบาย:

อาเรย์ข้อมูล, d, เข้ารหัสคำตอบในตัวอักษรเดี่ยวและตัวอักษรซ้ำรหัส อักขระแต่ละตัว c ในอาเรย์ข้อมูลจะถูกแมปกับตัวละครฐาน b และจำนวนการทำซ้ำ มันถูกพิมพ์ออกมาหลายต่อหลายครั้ง

ตัวอักษรที่จะใช้เฉพาะลำพัง (ทับและท่อ) มีรหัส ASCII 47, 92 และ 124 สองเหล่านี้เป็นหารด้วย 5 กับส่วนที่เหลือของ (c%5=2||c>123)2 ฉันไม่พบสภาพที่สั้นกว่าในการทดสอบสำหรับทั้งสาม

อักขระที่ถูกทำซ้ำ (ขีดล่างขีดกลางและวรรค) ด้วยรหัส ASCII 95, 45 และ 32 ตามลำดับจะถูกเข้ารหัสด้วยรหัส ASCII ที่สูงขึ้น - เพิ่มขึ้นหนึ่งครั้งต่อการทำซ้ำ ตัวอย่างเช่นพื้นที่เดียวเป็นเพียงช่องว่าง แต่ช่องว่างสองช่องสามารถเขียนด้วยอักขระ ASCII ถัดไปคือเครื่องหมายอัศเจรีย์ ในกรณีที่อักขระที่เขียนโค้ดไม่เหมาะสมเนื่องจากเป็นไปตามเงื่อนไขแบบโมดูโลข้างต้นก็สามารถแบ่งได้เช่นเดียวกับ # & เพื่อเป็นตัวแทนของสิบเอ็ดช่องว่าง เทคนิคเดียวกันนี้ใช้เพื่อหลีกเลี่ยงการซ้อนทับกันระหว่างช่องว่างและช่วงตัวอักษรประ

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


ทำได้ดี! ฉันรู้ว่ามีคำตอบที่ดีกว่า
musicman523

ขอบคุณ! มันเป็นความท้าทายที่สนุก ฉันใช้เวลาสี่ชั่วโมงกับมันฉันดีใจที่มันได้ผลในที่สุด
jiv

4

ถ่าน , 49 37 ไบต์

↓⁵\…_χ↓↓³↗↗³…_⁵↑/↑⁵↖\←…_¹⁹↓ /F³«P²¹¶¶

ลองออนไลน์!

ในที่สุดฉันก็สามารถเล่นกอล์ฟได้เล็กน้อย คำตอบนี้ (ต่างจากคำตอบ Charcoal อื่น ๆ ทั้งหมด) ไม่ได้ใช้การสะท้อนกลับ แต่ดึงเส้นชั้นความสูงทั้งหมดในรอบเดียวผ่านออกจากแถบแนวนอนสำหรับจุดสิ้นสุด

เชื่อมโยงไปยังรุ่นอย่างละเอียด


"ต่างจากคำตอบ Charcoal อื่น ๆ ทั้งหมด" ที่จริงแล้วคำตอบแรกของฉันไม่ได้ใช้การสะท้อนเช่นกัน แต่ฉันจะยอมรับว่าฉันไม่ได้เห็นโอกาสที่จะตีไบต์ด้วยการเริ่มวาดด้วยเส้นแนวตั้งด้านซ้าย (การเปลี่ยนแปลงอื่น ๆ เพียงอย่างเดียวระหว่างโซลูชันของเราคือคุณใช้ Range ที่ฉันใช้ Times และคุณพิมพ์\ที่ฉันเพิ่งพิมพ์:UpLeft1 ขั้นตอน)
Neil

ถึงแม้ว่าดูเหมือนว่าการสะท้อนจะมาถึง ...
Neil

นอกจากนี้ที่สองครั้งแล้วที่คีย์ของฉันไม่ทำงาน ...
Neil

3

Bubblegumขนาด 40 ไบต์

บันทึก 1 ไบต์โดยลบ newline ที่ต่อท้ายขอบคุณ @ovs!

00000000: 5388 c704 5cfa 0a98 2086 4b17 1be0 aac1  S...\... .K.....
00000010: a2b6 860a 6a63 10ee 0129 0333 f4b9 9035  ....jc...).3...5
00000020: 2a28 a0f1 51b9 fa00                      *(..Q...

ลองออนไลน์!


โดยไม่ต้องขึ้นบรรทัดใหม่นี้ได้รับ40 ไบต์
ovs

ขอบคุณ! ฉันคิดว่าตัวแก้ไขข้อความของฉันจะใส่เข้าไปโดยอัตโนมัติ
musicman523

คุณสร้างสิ่งนี้ได้อย่างไร zlib.compress(s.encode(), 9)เอาต์พุต 46 ไบต์และคำตอบน่าจะเป็น zlib
NieDzejkob

ตามคำแนะนำของ Dennisฉันใช้zopfli --deflateเพื่อสร้างสตรีม DEFLATE แบบดิบจากนั้นใช้xxdในการแปลงเป็นรูปแบบ xxd ฉันเชื่อว่าzlibออกจาก checksum หรือไม่ใช่กระแส DEFLATE ดิบด้วยเหตุผลอื่น
musicman523

3

ถ่านขนาด 38 ไบต์

←…_χP↑⁵P\F³«↑P¹¹↑»↗¹…_χ‖BM²¦⁷P↓⁴… ⁴↙↙³

ลองออนไลน์!

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

นี่คือรุ่นอย่างละเอียด


btw คุณสามารถใช้-dเพื่อแสดงแต่ละขั้นตอน (ขอโทษด้วยฉันเปลี่ยนถ่านมากฉันไม่แน่ใจว่าแนวคิดใหม่จำนวนมากมีประโยชน์มากโดยเฉพาะอย่างยิ่งแพะ ascii-art builtin และส่วนหนึ่งของภาษาวุลแฟรม haha)
ASCII เท่านั้นเท่านั้น


3

Python 2, 119 117 116 ไบต์

print''.join(' \n-/|\\_'[ord(x)/8-4]*int('1245abjl'[ord(x)%8],36)for x in' V(8&H(7(@&@(7(@&@(7(HT"S8(%@!8(%@ 8(%@8')

ลองออนไลน์!

บิตของการเข้ารหัสความยาววิ่งที่ถูกทรมาน ...

แก้ไข: บันทึก 3 ไบต์โดยแทนที่ชุดความยาว:

[1,2,4,5,10,11,19,21][ord(x)%8]

กับ

int('1245abjl'[ord(x)%8],36)


ว้าว! ฉันพยายามคิดวิธีที่มีประสิทธิภาพในการทำสิ่งนี้ด้วยตัวเอง
GarethPW

รหัสดี แต่ดูเหมือนว่ามันเป็น 119 ไบต์?
mdahmoune

@mdahmoune: ค่อนข้างถูกต้อง - ลืมใช้r''เมื่อตรวจสอบความยาว ...
Chas Brown

3

C ++ 11 - 162 159 154 152 150 ไบต์

MSVC:

void f(){char*i="b t_b\nb/t b\\b\nv-b\nb|t b|b\nv-b\nb|t b|b\nv-b\nb\\k_e f_b/b\nl b|c b/b\nl b|b b/b\nl b|b/";while(*i)cout<<string(*i++-97,*i),i++;}

GCC: (+4 ตัวอักษร)

int f(){char*i="b t_b\nb/t b\\b\nv-b\nb|t b|b\nv-b\nb|t b|b\nv-b\nb\\k_e f_b/b\nl b|c b/b\nl b|b b/b\nl b|b/";while(*i){cout<<string(*i-97,*(i+1));i+=2;}}

สตริงอินพุตiมีการเข้ารหัสเป็นคู่ถ่าน:

  1. จำนวนตัวอักษรที่ต้องทำซ้ำ (เพิ่มใน 'a' เพื่อให้เป็นอักขระที่อ่านง่าย)
  2. ถ่านที่จะพิมพ์

ฉันคิดว่ายังคงมีพื้นที่มากมายสำหรับการปรับปรุงที่นี่

แก้ไข:

  1. แทนที่ putchar ด้วย cout <<
  2. ลบออกในขณะที่ใช้ตัวสร้างสตริงเพื่อทำซ้ำตัวอักษร
  3. ลบพื้นที่ก่อนหน้าพอยเตอร์และเซมิโคลอนปลอม;
  4. การผสมคำแนะนำด้วยเครื่องหมายจุลภาคการลบเครื่องหมายวงเล็บ

C ++ 11 ไม่รองรับautoเป็นประเภทส่งคืนซึ่งเป็นคุณลักษณะ C ++ 14 อย่างไรก็ตามคุณสามารถแก้ไขปัญหานี้และintบันทึกไบต์โดยการพิมพ์กลับ ไม่ปรากฏว่ารหัสนี้ใช้งานได้; คุณช่วยทดสอบลองออนไลน์ได้ไหม! และดูว่าคุณสามารถแก้ไขได้หรือไม่
musicman523

เปลี่ยน auto return type -> void ฉันกำลังทดสอบ Visual Studio 2017 - C ++ 14 โดยอัตโนมัติ เพิ่มเวอร์ชันสำหรับ gcc
Robert Andrzejuk

โอเค gotcha ฉันใช้งาน Linux ดังนั้นฉันไม่มี VS งานที่ดี!
musicman523

สวัสดี Robert - วิธีการเข้ารหัสความยาววิ่งของคุณคล้ายกับของฉันเอง ดูที่นี่ ฉันยังบรรจุคู่ (ความยาวถ่าน) แต่ละคู่ให้เป็นอักขระเดี่ยวแทน 2 มีอักขระที่เป็นไปได้ 7 ตัวและความยาวที่แตกต่างกัน 8 แบบ; ดังนั้นฉันใช้ 56 ตัวอักษรใน ' '..'X'การเข้ารหัส; ซึ่งช่วยประหยัด 40 ไบต์พร้อมค่าใช้จ่ายพิเศษเล็กน้อยสำหรับการถอดรหัส
Chas Brown


3

ชุดประกอบ R16K1S60 , 152 144 ไบต์

เขียนเอาต์พุตไปยังหน้าจอต่อพ่วง R16K1S60 ใน ASCII 2012356ทำงานบนผงของเล่นประหยัด (ดูลิงก์ในส่วนหัวเพื่อดูข้อมูล)

ขนาดไบต์ของโปรแกรมคือผลลัพธ์ที่คอมไพล์แล้ว (Cells Used * 2) ไม่ใช่แอสเซมบลี

คุณรู้ว่าคุณทำได้ดีเมื่อโลโก้ใช้พื้นที่มากกว่าไบต์ของคุณ

a:
mov ex, ip
mov ax, .string
mov sp, ip
mov dx, 0x1000
send sp, dx
.loop:
mov bx, [ax]
cmp bx, ip
je .end
cmp bx, ip
je .newline

shr bx, cx, 8
and cx, 0x00FF
.inner:
send sp, cx
sub bx, ex
jnz .inner
.reentry:
add ax, ex
jmp .loop
.newline:
add dx, 0x0020
send sp, dx
jmp .reentry
.string:
dw 0x0120
dw 0x135F
dw 0x000C
dw 0x012F
dw 0x1320
dw 0x015C
dw 0x000C
dw 0x152D
dw 0x000C
dw 0x017C
dw 0x1320
dw 0x017C
dw 0x000C
dw 0x152D
dw 0x000C
dw 0x017C
dw 0x1320
dw 0x017C
dw 0x000C
dw 0x152D
dw 0x000C
dw 0x015C
dw 0x0A5F
dw 0x0420
dw 0x055F
dw 0x012F
dw 0x000C
dw 0x0B20
dw 0x017C
dw 0x0220
dw 0x012F
dw 0x000C
dw 0x0B20
dw 0x017C
dw 0x0120
dw 0x012F
dw 0x000C
dw 0x0B20
dw 0x017C
dw 0x012F
dw 0x0009
.end:
hlt

คำอธิบาย

แอสเซมบลีโค้ดข้างต้นใช้อัลกอริธึมการบีบอัดอย่างง่ายโดยมีคำ 0x000C เป็นบรรทัดใหม่และ 0x0009 เป็นคำสั่งเพื่อหยุดการดำเนินการ

คำอื่น ๆ นั้นถูกเข้ารหัสอย่างง่ายเช่นนี้: 0xTTCC

  • T: เวลาเพื่อทำซ้ำค่า

  • C: อักขระ ASCII ที่ต้องการพิมพ์

ASM ใช้การลงทะเบียนทุกครั้งที่มีอยู่รวมถึงการลงทะเบียนที่ใช้กันน้อย

  • Instruction Pointer เพื่อให้ทราบค่าบางอย่างในการเรียกคืนอย่างรวดเร็วเพื่อบันทึกไบต์บางค่า (ค่าคงที่ใน instuction ที่ไม่ใช่แค่การลงทะเบียนใช้ไบต์พิเศษเพื่อเก็บไว้)

  • Stack Pointer ถูกใช้เพื่อการลงทะเบียนเอนกประสงค์ที่ 6 เนื่องจากไม่มีโค้ดใดที่ใช้สแต็ก

มีการใช้เฉพาะ AX, BX, CX และ DX สำหรับข้อมูลสำคัญ EX และ SP ใช้เพื่อเก็บค่าคงที่บางค่าที่ใช้บ่อย

มันค่อนข้างง่ายและไม่มีโอกาสชนะ แต่มันสนุกที่จะเขียน!

ดูประวัติการแก้ไขสำหรับคำตอบเก่า (มันมีขนาดใหญ่ในแง่ของ ASM)

funfact: ถ้านี่เป็นหน่วยวัดเป็นคำ (ในกรณีของ R16K1S60,16 บิต) มันจะเล็กกว่าคำตอบของ pyth ที่ 72 ไบต์




2

Mathematica, 163 ไบต์

Row@Map[Column,Characters/@{" /-|-|-\\   ",r="_ - - -_   ",r,r,r,r,r,r,r,r,r,"_ - - - |||","_ - - -   /","_ - - -  / ","_ - - - /  ",r,r,r,r,r," \\-|-|-/   "},{1}]


2

Python 2, 171 ไบต์

p,u,q,v,r,s,F=' ','_','/','|','-'*21,'\\',lambda f,m:f+m*19+f;B=lambda n:p*11+v+p*n+q
print'\n'.join([F(p,u),q+p*19+s,r,F(v,p),r,F(v,p),r,s+u*10+p*4+u*5+q,B(2),B(1),B(0)])

แต่ละบรรทัดมีขนาด 85 ไบต์! hoorah!


2

Zsh, 244 ไบต์

สิ่งนี้เขียนขึ้นโดยเฉพาะสำหรับ Zsh ไม่ใช่ Bash เนื่องจากอนุญาตให้ใช้เพิ่มเติมเล็กน้อยในแง่ของไวยากรณ์แปลก ๆ

alias p=printf
function r { p "$1%.s" {0..$2}}
function l { p $1;r $2 19;p $3;p "\n"}
l " " _ " "
l / " " \\
l - - -
l \| " " \|
l - - -
l \| " " \|
l - - -
p \\
r _ 10
r " " 4
r _ 5
p "/\n"
r " " 11
p "|  /\n"
r " " 11
p "| /\n"
r " " 11
p \|/

หมายเหตุ: เมื่อฉันพยายามเรียกใช้บนtio.runเอาต์พุตต่างจากเทอร์มินัลของฉัน การแก้ไขนี้จะถูกแทนที่

function r { p "$1%.s" {0..$2}}

กับ

function r { p "$1%.0s" {0..$2}}

ซึ่งจะทำให้มัน 245 ไบต์ ( ลิงค์ )

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


ยินดีต้อนรับสู่ PPCG! โปรดสังเกตว่าขีดล่างของขีดล่างมีช่องว่างสี่ช่องว่างในนั้นซึ่งหายไปจากผลลัพธ์ของรหัสของคุณ
Steadybox

@Steadybox Ohh โง่ฉัน ฉันได้อัพเดตคำตอบแล้วขอบคุณที่ชี้ให้เห็น!
Luca_Scorpion

ไม่มีปัญหา! น่าเสียดายที่ฉันคิดว่ามันยังคงปิดอยู่เล็กน้อย แต่มันควรจะแก้ไข (และมันจะช่วยคุณประหยัดไบต์ด้วย!)
Steadybox

ฉันคิดว่าคุณสามารถบันทึกไม่กี่ไบต์โดยใช้ 'funcname () {}' แทน 'function funcname {}'
Winny


2

Python 2, 159 153 139 ไบต์

s=" "*19;e="-"*21;a=" "*9;print" %s\n/%s\\\n%s\n|%s|\n%s\n|%s|\n%s\n\%s    %s/\n%s|  /\n%s| /\n%s|/"%("_"*19,s,e,s,e,s,e,"_"*8,"_"*7,a,a,a)

ลองออนไลน์!

แก้ไข: บันทึก 6 ไบต์โดยใช้การจัดรูปแบบแทน% แก้ไข: บันทึกอีก 14 ไบต์โดยการแก้ไขเอาต์พุตขอบคุณ musicman523.format()


1
นี่ไม่ใช่การพิมพ์ข้อความที่แน่นอน (มีบรรทัดเพิ่มเติมอยู่) การแก้ไขสิ่งนี้อาจจะช่วยประหยัดไบต์ได้เช่นกัน
อย่างเป็นทางการ

นี่คือรุ่นที่แก้ไขแล้วมาที่ 139 ไบต์ร้อน
musicman523

2

Japt , 79 72 71 ไบต์

" _p
/ p\\
{"-r
| p|
"²}-r
\\_g a_b/
 h|  /
 h| /
 h|/"r".%l"_g p6nZÅnH

ทดสอบมัน

  • บันทึกได้ 7 ไบต์ด้วยคำแนะนำที่ยอดเยี่ยมของ ETHproductions ในการใช้จำนวนเต็มฐาน 32 สำหรับค่าการทำซ้ำ

วิธีการบีบอัดที่ดีมาก หากคุณใช้nHคุณสามารถบันทึกเพิ่มเติมอีกสองสามไบต์: ethproductions.github.io/japt/…
ETHproductions

1

JavaScript (ES6), 151 ไบต์

_=>` 2_________
/0\\
1
|0|
1
|0|
1
\\2    _____/
3|  /
3| /
3|/`.replace(/\d/g,a=>a.repeat.call(...[[" ",19],["-",21],["_",10],[" ",11]][a]))

ตัวอย่างการทดสอบ

f=
_=>` 2_________
/0\\
1
|0|
1
|0|
1
\\2    _____/
3|  /
3| /
3|/`.replace(/\d/g,a=>a.repeat.call(...[[" ",19],["-",21],["_",10],[" ",11]][a]))

O.innerHTML=f()
<pre id=O>




1

,,, , 115 101 98ไบต์

ฉันละอายใจอย่างยิ่งที่นี่เป็นสิ่งที่ดีที่สุดที่ฉันสามารถผลิตได้ >.>

"|/
"' 11×:"| /
"⇆:"|  /
"⇆'
'/'_5×' 4×'_10×92c'
'|' 19×'|'
'-21×+++++3×110⇆⊣"\
"' 19×'/'
'_19×' #
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.