ดื่มกาแฟยามเช้า


21

วาดถ้วยกาแฟ Ascii นี้:

  โอ
       โอ
    โอ
 __________
/ \ __
| J | \
| A | |
| V | |
| A | __ /
\ __________ /

คะแนนบราวนี่สำหรับกาแฟสคริปต์หรือจาวา :)

โค้ดที่สั้นที่สุดในหน่วยไบต์ฟังก์ชั่นหรือโปรแกรมขึ้นบรรทัดใหม่หรือพื้นที่สีขาวเป็นที่ยอมรับดื่ม!


37
ฉันสงสัยกาแฟสปาร์คลิ่งหนึ่งแก้วมาก ;)
Dennis

8
@Dennis เป็นกาแฟพิเศษของฉันสำหรับเช้าวันศุกร์;)
แอรอน

1
จะไม่น่าสนใจมากกว่านี้ด้วยเครื่องดื่ม 2 แก้วหรือมากกว่า: อันที่ร้อนจะมีไอระเหยที่มีสัญลักษณ์“ (” และ“)” เย็น ๆ เปล่งประกาย? และโดยการยืมจากความคิดเห็นของ Rod รหัสควรจะแสดงอย่างใดอย่างหนึ่งตามเวลาปัจจุบัน
จัดการ

1
จะยอมรับได้หรือไม่ที่จะมีช่องว่างสีขาวต่อท้ายบนเส้น?
Jonathan Allan

2
@Aaron the cup ไม่มีรูปแบบที่ดีการเข้ารหัส / บีบอัดจะสั้นลงในหลาย ๆ ภาษา
Rod

คำตอบ:


3

SOGL , 48 ไบต์

mγmλ⁶…Jcēņ▒&↓¡℮štΥ{ιE‽▼⅛÷εγ╝Ξ∫$■⌡πθ&χF׀▼ΡQ7L↓F¶‘

คำอธิบาย:

SOGL มีการบีบอัดสตริงในตัวและหนึ่งในนั้นคือการบีบอัดพจนานุกรมถ่าน ยิ่งไปกว่านั้นมันมีประเภทการบีบอัดบ็อกซ์สตริงที่ตัวอักษรที่มีให้เลือกคือ "/ \ | _- \ n" ดังนั้นโปรแกรมทั้งหมดเป็นสตริงที่ห่อหุ้มใน "" ("" นั้นเป็นนัย)

สตริงที่ฉันให้คอมเพรสเซอร์คือ (หนี):

"  o\n       o\n    o\n ",
"__________",
"\n/          \\__\n|   ",
"J",
"      |  \\\n|    ",
"A",
"     |  |\n|     ",
"V",
"    |  |\n|      ",
"A",
"   |__/\n\\",
"__________",
"/"

16

JavaScript (ES6), 110 104 ไบต์

บันทึกแล้ว 4 ไบต์ด้วย edc65

let f =

_=>`1o
6o
3o
 9
/44\\__
|2J5|1\\
|3A4|1|
|4V3|1|
|5A2|__/
\\9/`.replace(/\d/g,n=>' _'[n>>3].repeat(++n))

console.log(f())

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

การบีบอัดของศิลปะ ASCII ดั้งเดิมนั้นทำได้โดยการแทนที่ลำดับทั้งหมดของช่องว่างที่ต่อเนื่องกัน 2 ถึง 10 รายการและสองลำดับของเครื่องหมายขีดล่างที่ต่อเนื่องกัน 10 รายการด้วยตัวเลขหลักเดียว:

  • ลำดับของแต่ละพื้นที่ติดต่อกันจะถูกเข้ารหัสด้วยเลขNN-1
  • 9ลำดับขีดจะถูกเข้ารหัสด้วย

เราใช้N-1มากกว่าNเพื่อที่เราจะได้ไม่ต้องใช้มากกว่าหนึ่งหลัก ดังนั้นความต้องการ++nเมื่อถอดรหัส

การแสดงออกn>>3(กะบิตไปทางขวา) เท่ากับ 0 สำหรับn = 1การn = 7และมีค่าเท่ากับ 1 n = 8(ไม่ได้ใช้) n = 9และ ดังนั้น' _'[n>>3]ให้ขีดล่างสำหรับ9และช่องว่างสำหรับค่าอื่น ๆ ที่พบทั้งหมด

กรณีพิเศษเท่านั้นคือลำดับของช่องว่างที่ต่อเนื่องกัน 10 ช่องเหนือ "JAVA" การเข้ารหัสด้วย9จะขัดแย้งกับลำดับขีดล่าง ดังนั้นเราต้องแยกมันออกเป็นสองซีเควนซ์ของ 5 สเป44


ฉันนับ 108 ไบต์ (ไม่นับf=) คุณสามารถบันทึกได้ 4 ไบต์ด้วยวิธีนี้: n>>3แทน+!(n&7), 9แทนที่จะเป็น_8(สองครั้ง) และ44แทน9
edc65

@ edc65 ฉันไม่รู้ว่าทำไมฉันจึงนับf=ในนั้น ... ขอบคุณสำหรับการบันทึกไบต์!
Arnauld

คุณช่วยอธิบายวิธีการทำงานของ regex ได้หรือไม่ ดูเหมือนว่ามันจะถูกแทนที่ด้วยตัวเลขหลัก d โดยที่มีช่องว่าง ('4' กลายเป็น' ') แต่ไม่แน่ใจว่ามันทำอย่างไร การเปลี่ยนบิตทำอะไร ทำไมเราจึงเพิ่ม n?
Cruncher

1
@Cruncher ฉันได้เพิ่มส่วน 'วิธีการทำงาน'
Arnauld

@Arnauld ฉลาดมาก :)
Cruncher

16

เยลลี่ , 67 64 ไบต์

-2 ไบต์ขอบคุณที่เดนนิส ( 1. ลบซ้ำซ้อนและ 2. แทนที่ transpose และระยะยาวถอดรหัสZŒṙกับลดองค์ประกอบซ้ำx/.)

“Ñṁ{xGgṭḷVỤɲ8ṿfƬT9Ɱ¹=qṀS“$<(ƇỤ08ØÑḌṃṘX6~cuc8HṗḞ2’Dx/ị“ ¶_/\|JAVo

ลองออนไลน์!

อย่างไร?

“...“...’ เป็นรายการของหมายเลขที่บีบอัดสองฐาน -250:

[1021021021332411532617161526181616261916162618163425334, 2117114111551155121131612111415121115141211161312111551]

D แปลงเป็นทศนิยมเพื่อให้ได้ตัวเลขสองรายการ:

[[1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 3, 3, 2, 4, 1, 1, 5, 3, 2, 6, 1, 7, 1, 6, 1, 5, 2, 6, 1, 8, 1, 6, 1, 6, 2, 6, 1, 9, 1, 6, 1, 6, 2, 6, 1, 8, 1, 6, 3, 4, 2, 5, 3, 3, 4], [2, 1, 1, 7, 1, 1, 4, 1, 1, 1, 5, 5, 1, 1, 5, 5, 1, 2, 1, 1, 3, 1, 6, 1, 2, 1, 1, 1, 4, 1, 5, 1, 2, 1, 1, 1, 5, 1, 4, 1, 2, 1, 1, 1, 6, 1, 3, 1, 2, 1, 1, 1, 5, 5, 1]]

x/ ลดโดยการทำซ้ำองค์ประกอบเพื่อให้หนึ่งรายการของตัวเลข (ซ้ำจำนวนจากรายการแรกด้วยค่าที่สอดคล้องกันของอื่น ๆ ):

[1, 1, 0, 2, 1, 1, 1, 1, 1, 1, 1, 0, 2, 1, 1, 1, 1, 0, 2, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 3, 3, 2, 6, 1, 1, 1, 7, 1, 1, 1, 1, 1, 1, 6, 1, 1, 5, 2, 6, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1, 6, 1, 1, 6, 2, 6, 1, 1, 1, 1, 1, 9, 1, 1, 1, 1, 6, 1, 1, 6, 2, 6, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 6, 3, 3, 4, 2, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4]

สั่งให้ทำดัชนีลงในรายการด้านขวาหนึ่งรายการตามและแบบแยกส่วน (0 ดัชนีลงในรายการด้านขวาสุด) รายการทางด้านขวา¶_/\|JAVoเป็นอักขระที่ใช้ในการสั่งซื้อที่ pilcrow เป็นจุดรหัสเดียวกับ linefeed ไม่จำเป็นต้องปิดบัญชีพันธมิตรเนื่องจากเป็นจุดสิ้นสุดของโปรแกรม:

[' ', ' ', 'o', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'o', '\n', ' ', ' ', ' ', ' ', 'o', '\n', ' ', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '\n', '/', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '\\', '_', '_', '\n', '|', ' ', ' ', ' ', 'J', ' ', ' ', ' ', ' ', ' ', ' ', '|', ' ', ' ', '\\', '\n', '|', ' ', ' ', ' ', ' ', 'A', ' ', ' ', ' ', ' ', ' ', '|', ' ', ' ', '|', '\n', '|', ' ', ' ', ' ', ' ', ' ', 'V', ' ', ' ', ' ', ' ', '|', ' ', ' ', '|', '\n', '|', ' ', ' ', ' ', ' ', ' ', ' ', 'A', ' ', ' ', ' ', '|', '_', '_', '/', '\n', '\\', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '/']

เยลลี่ดำเนินการพิมพ์โดยนัยของรายการนี้ซึ่งประกอบด้วยตัวอักษรเนื่องจากพิมพ์เป็นราวกับว่าเป็นสตริง:

  o
       o
    o
 __________
/          \__
|   J      |  \
|    A     |  |
|     V    |  |
|      A   |__/
\__________/

7
ฉันสาบานว่าบางภาษาเหล่านี้เป็นอัลกอริธึมการบีบอัดที่ตรงขึ้น
Cruncher

6
@Cruncher ที่จะเป็นBubblegum
Jonathan Allan

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

ใช่ถ้าสุ่ม Bubblegum ใช้การบีบอัดเป้าหมายคือความท้าทายที่ซับซ้อนของ Kolmogorov และข้อมูลที่ป้อนควรมีรูปแบบ (หรืออย่างน้อยการซ้ำซ้อนเช่นที่นี่)
Jonathan Allan

สุดท้ายเป็นนัยและคุณสามารถแทนที่ด้วยZŒṙ x/นอกจากนี้ในขณะที่ไม่มีไบต์ใด ๆ การใช้แทนที่จะขึ้นบรรทัดใหม่ตามตัวอักษรจะทำให้โค้ด imo สามารถใช้ซ้ำได้มากขึ้น
Dennis

9

CoffeeScript ES6, 214 180 ไบต์

r="replace";" 1o0n0 6o0n0 3o0n0 _9n0/0 9b0_1n0|0 2J0 5|0 1b0n0|0 3A 4|0 1|0n0|0 4V0 3|0 1|0n0|0 5A0 2|0_1/0n0b0_9/0"[r](/\d/g,(a,b,c)->c[b-1].repeat(a))[r](/n/g,"\n")[r](/b/g,"\\")

CoffeeScript ขนาด 135 ไบต์พร้อมฮาร์ดโค้ด

f=()->"""  o
       o
    o
 __________
/          \__
|   J      |  \\
|    A     |  |
|     V    |  |
|      A   |__/
\__________/"""

8
ไม่มีการโหวตขึ้น / ลง; ฉันไม่ชอบคำตอบนี้เพราะโดยทั่วไปประเด็นในคำตอบที่ซับซ้อน kolmogorov คือการสร้างผลลัพธ์โดยไม่ต้องใช้ทุกสิ่งในรหัส
HyperNeutrino

@HyperNeutrino ฉันเห็นด้วยกำลังพยายามปรับปรุงมัน
ทอม

7

Python 2, 174 172 171 167 ไบต์

ไม่มีการเข้ารหัสยาก
ไม่มีการเข้ารหัส Base-64
ไม่มี Regex

k=' '
q='_'*10
print'\n'.join([k*i+'o'for i in 2,7,4]+[k+q]+['/'+k*10+'\\__']+['|'+k*s+'JAVA'[s-3]+k*(9-s)+'|'+' _'[s==6]*2+'\\||/'[s-3]for s in 3,4,5,6]+['\\'+q+'/'])

ที่บันทึกไว้ 2 ไบต์โดย externalizing '_'*10และโดยการใช้ประโยชน์แปลงงูหลามของและTrue -> 1 บันทึก 1 ไบต์โดยลบช่องว่างที่ไม่จำเป็นออก บันทึกแล้ว 4 ไบต์ด้วย @TuukkaX! False -> 0


คุณดูเหมือนจะมี 2 ช่องว่างที่ไร้ประโยชน์ที่และ] for in [
Yytsi

ที่จริงแล้วคุณสามารถร่น[2,7,4]และ[3,4,5,6]ไปและ2,4,7 3,4,5,6
Yytsi

7

PowerShell , 136 124 123 105 ไบต์

"""2o
7o
4o
 $(($a='_'*10))
/55\__
|3J6|2\
|4A5|2|
|5V4|2|
|6A3|__/
\$a/"""-replace'(\d)','$(" "*$1)'|iex

ลองออนไลน์!

ขอบคุณ @briantist สำหรับการค้นหาที่สั้นกว่า -replaceวิธีที่ที่ฉันรู้ว่าอยู่ที่นั่นสักแห่ง

สิ่งนี้จะใช้สตริงที่มีตัวเลขแทนที่จำนวนช่องว่างที่จำเป็น จากนั้นเรา regex ตัวเลขด้วยการแสดงออกสคริปต์-replace $(" "*$1)ดังนั้นตัวอย่างเช่นบรรทัดแรกของสตริงจะเป็น$(" "*2)oที่สองจะเป็น$(" "*7)oและอื่น ๆ เนื่องจากการอ้างสามครั้งจึงถูกปล่อยให้เป็นสตริงบนไพพ์ไลน์ เราถ่ายโอนข้อมูลนั้นไปที่iex(ย่อมาจากInvoke-Expressionและคล้ายกับeval) ซึ่งประมวลผลนิพจน์สคริปต์และทำให้สตริงหลายบรรทัดเกิดขึ้นบนไพพ์ไลน์ เอาท์พุทเป็นนัย


แปลกรหัสฮาร์โค้ดสั้นกว่า ฮึ่ม +1 ต่อไป :)
HyperNeutrino

ฉันหวังว่าจะได้รับคำตอบบางอย่างจากการใช้ schema ที่เป็นนวัตกรรม (huffman) แต่การใช้งาน python ของฉันก็ยังคงดำเนินต่อไปเช่นกัน ..
Aaron

ด้วยเหตุผลบางอย่างทางลัดถ้า / อื่นดูเหมือนว่าจะไม่ทำงาน($_,' '*$_)[+$_-in48..57]- ไม่ว่าฉันจะเปลี่ยนอะไรดูเหมือนว่าจะล้มเหลวสำหรับฉัน
colsw

@ConnorLSW นั่นเป็นเพราะการแสดงออกทั้งสองมีการประเมินและอาร์เรย์ที่สร้างขึ้นก่อนที่จะมีการสร้างดัชนี เป็นผลให้ PowerShell ไม่ทราบวิธีการคูณspaceโดยoและ barfs
AdmBorkBork

1
@riantist ขอบคุณสำหรับการค้นหา! ฉันรู้ว่ามันอยู่ที่นั่นเพียงแค่ไม่สามารถคิดราคาที่ถูกต้องเพื่อให้มันทำงานได้
AdmBorkBork

4

GNU sed , 113 112 bytes

s:$:  o@SS o@S o@ UU@/SSS \\__@|SJSS|  \\@|S AS  |  |@|S  VS |  |@|SSAS|__/@\\UU/:
s:S:   :g
y:@:\n:
s:U:_____:g

การเข้ารหัสขั้นพื้นฐานจะเก็บ 3 พื้นที่เป็นS, \nเป็น@5 และขีดเส้นใต้เป็นUและขีดเส้นใต้เป็น ฉันจะลองรวมกันเพื่อหาอะไรที่สั้นกว่านี้

ลองออนไลน์!

วิธีแก้ปัญหาเล็กน้อยของการพิมพ์สตริงโดยตรงได้รับด้านล่าง มันมี 136 ไบต์ทำให้มีการบีบอัด 18% โดยใช้รูปแบบการเข้ารหัสด้านบน

c\  o\
       o\
    o\
 __________\
/          \\__\
|   J      |  \\\
|    A     |  |\
|     V    |  |\
|      A   |__/\
\\__________/

ลองออนไลน์!



@Riley ขอบคุณ ฉันยังพบเพียง 1 ไบต์น้อยวิธีการแก้ปัญหาด้วยSการจัดเก็บ 3 sช่องว่างไม่มี ฉันคิดว่าฉันจะแก้ไขอันนี้แทนเพราะมันคงจำนวนการแปลงเท่าเดิม
seshoumara

4

MATL, 87 86 83 82 78 ไบต์

[TIH][IAC]111Z?c'(ty!(OWM4J4gW{lm> >bw8ch|.FU2W"@\#2Dj!NQDeIMZ'F'_ /|\JAV'Za7e

วิธีนี้แบ่งกาแฟออกเป็นสองส่วน: "ฟองสบู่" และเหยือก ในการสร้างฟองอากาศเราสร้างเมทริกซ์เบาบางที่มี 111 ตั้งอยู่ในสามตำแหน่งและแปลงเป็นอาร์เรย์อักขระ

[TIH][IAC]111Z?c

สำหรับองค์ประกอบ mug เราพึ่งพาการบีบอัดสตริง

'(ty!(OWM4J4gW{lm> >bw8ch|.FU2W"@\#2Dj!NQDeIMZ'F'_ /|\JAV'Za7e

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

ลองใช้ที่MATL Online


4

Python 2 , 128 127 ไบต์

-1 ไบต์ต้องขอบคุณ Rod (ใช้การคูณของ tuple ('_'*10,)เพื่อหลีกเลี่ยงการประกาศ)

print''.join('0'<c<':'and' '*int(c)or c for c in'''2o
7o
4o
 %s
/ 9\__
|3J6|2\\
|4A5|2|
|5V4|2|
|6A3|__/
\%s/'''%(('_'*10,)*2))

ลองออนไลน์!

หมายเหตุ:แบ็กสแลชสองครั้งนั้นจำเป็นต้องมีก่อนการป้อนบรรทัด

ทุกอย่างระหว่าง'''และ'''เป็นสายเดียวที่ทั้งสอง%sมี formatters ซึ่งได้รับการแทนที่ด้วยเนื้อหาของต่อท้ายที่%(...)tuple ซึ่งจะมีสองฉบับผ่านการคูณ'_'*10 tuple ดำเนินสตริงคูณผลผลิต(...)*2'_'*10'__________'

รหัสสำรวจตัวอักษรcของสตริงทั้งหมดที่ใช้for c in '''...และสร้างสตริงใหม่โดยการเข้าร่วม ( join(...))
ทั้งจำนวนของช่องว่างโดยระบุว่าc, int(c)ถ้าcเป็นตัวเลข
หรือ cตัวเอง
- ถูกหลักจะถูกระบุโดยจะประหยัดกว่า'0'<c<':'c.isdigit()


คุณสามารถแทนที่u,uด้วย('_'*10,)*2และปล่อยการuประกาศ
Rod

โอ้ดีฉันดูที่และคิดว่ามีวิธี - ขอบคุณ @ Rod!
Jonathan Allan

4

Java 8, 294 289 248 ไบต์

แข็งแรงเล่นกอล์ฟ:

()->{String s="";for(char c:"\u026F\n\u076F\n\u046F\n __________\n/\u0A5C__\n|\u034A\u067C\u025C\n|\u0441\u057C\u027C\n|\u0556\u047C\u027C\n|\u0641\u037C__/\n\\__________/".toCharArray()){for(int i=0;i<c>>8;++i)s+=' ';s+=(char)(c&255);}return s;}

ในจิตวิญญาณของนี่ไม่ได้เขียนโค้ดสตริงที่จะส่งออก แต่ใช้ประโยชน์จากความจริงที่ว่ามีหลายกรณีของช่องว่างหลายช่องตามด้วยอักขระที่พิมพ์ได้ มันเข้ารหัสจำนวนช่องว่างที่นำหน้าอักขระในไบต์ลำดับสูงของอักขระด้วยอักขระ ASCII จริงในไบต์ต่ำลำดับ

Ungolfed:

import java.util.function.*;

public class DrinkYourMorningCoffee {

  public static void main(String[] args) {
    System.out.println(f(
    () -> {
      String s = "";
      for (char c : "\u026F\n\u076F\n\u046F\n __________\n/\u0A5C__\n|\u034A\u067C\u025C\n|\u0441\u057C\u027C\n|\u0556\u047C\u027C\n|\u0641\u037C__/\n\\__________/".toCharArray()) {
        for (int i = 0; i < c >> 8; ++i) {
          s += ' ';
        }
        s += (char) (c & 255);
      }
      return s;
    }
    ));
  }

  private static String f(Supplier<String> s) {
    return s.get();
  }
}

ฉันคิดว่ามันจะดีกว่าถ้าจะเข้ารหัสจำนวนช่องว่างนำหน้าตัวละครในไบต์สูง ดังนั้น 'A' \u0641นำโดยหกช่องว่างที่จะได้รับการเข้ารหัสเป็น
David Conrad

@DavidConrad ทำไมไม่ทำทั้งสองอย่าง Fมีไม่เกินสิบซ้ำติดต่อกันได้ทุกที่ในสตริงและทศนิยมสิบพอดีในฐานสิบหก มันควรจะเป็นไปได้ที่จะพอดีกับทั้งสองในนั้น

นั่นเป็นจุดที่ดี
David Conrad

1
@DavidConrad มันทำให้ขนาดไฟล์ใหญ่ขึ้นเนื่องจากลูปที่สองที่ฉันต้องเพิ่ม แต่ฉันบันทึกสองสามไบต์ด้วยการแปลงค่าฐานสิบหกเป็นค่าคงที่ การสูญเสีย0xคำนำหน้าช่วย

1
มีการเข้ารหัสสองรายการที่มีประโยชน์: จำนวนช่องว่างและจำนวนการทำซ้ำ คุณถูกต้อง: การเข้ารหัสจำนวนช่องว่างคือกำไรสุทธิ ฉันยังสามารถเล่นรหัสอื่น ๆ ( ifเช่นซ้ำซ้อน) และโกนขนาดประมาณ 1 ใน 6 ของขนาด

2

Befunge, 158 105 101 ไบต์

<v"XaXXXNYXNY77777'XXXXX2_TXQXX0XZTXDXX0X^TXXRX0X^TXXDX07]27777#"p29+55
:<_@#:,g2/+55,g2%+55
\JV/|_Ao

ลองออนไลน์!

อักขระในสตริงจะถูกเข้ารหัสเป็นดัชนีในตารางการค้นหาของค่าที่เป็นไปได้สิบค่า ดัชนีจะถูกจัดกลุ่มเป็นคู่แต่ละคู่จะรวมกันเป็นตัวเลขเดียว (i1 + i2 * 10) ในช่วง 0 ถึง 99 โดยการเลือกลำดับของตารางการค้นหาอย่างระมัดระวังเราสามารถรับประกันได้ว่าค่าเหล่านั้นจะถูกต้องเสมอ อักขระ ASCII ซึ่งสามารถแสดงในสตริงตัวอักษร

นี่คือรายละเอียดของรหัสตัวเอง:

Source code with execution paths highlighted

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


2

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

แตกต่างจากคำตอบอื่น ๆ ของฉันนี้เขียนด้วยมือ


2o¶6o¶3o¶1=¶/55\__¶|3J6|2\¶|4A5|2|¶|5V4|2|¶|6A3|__/¶\=/
=
10$*_
\d
$* 

(มีพื้นที่ท้ายท้าย)

ลองออนไลน์!

หลักการยังคงมีสตริง "บีบอัด" ซึ่งถ้วยกาแฟสามารถสร้างขึ้นใหม่ได้โดยการแทนที่ ลองใช้การทดแทนที่แตกต่างกันปรากฎว่าสิ่งเดียวที่ควรค่าแก่การทำคือ:

  • = กลายเป็น __________ (10 ขีด)
  • ตัวเลขใด ๆ จะเปลี่ยนเป็นจำนวนช่องว่างนั้น

2

เสียงกระเพื่อมสามัญ125 123 122 120 114 ไบต์

(format t"~3@{~vto
~} ~10@{_~}
/~11t\\__
|   J~11t|  \\
~2@{|~5t~a~11t|  |
~}|~7tA   |__/
\\~10{_~}/"2 7 4'A" V"1)

ฉันบันทึกได้ 6 ไบต์โดยใช้ความคิดเพียงแค่ใส่ค่าลงในสตริงแทน ~&เป็น s

แนวคิดสำหรับการปรับปรุงยินดี


1

Python3, 206 ไบต์

print('  o\n'+7*' '+'o\n'+4*' '+'o\n'+' '+10*'_'+'\n'+'/'+10*' '+'\__\n'+'|'+3*' '+'J'+6*' '+'|  \\\n'+'|'+4*' '+'A'+5*' '+'|  |\n'+'|'+5*' '+'V'+4*' '+'|  |\n'+'|'+6*' '+'A'+3*' '+'|__/\n'+'\\'+10*'_'+'/') 

2
อักขระช่องว่างมากมาย ... ควรประกาศs=' 'ตัวแปรและใช้มันดีกว่า
จัดการ

ยังไม่เจ็บที่จะกำหนดบรรทัดใหม่
ข้าวสาลีตัวช่วยสร้าง

3
การเข้ารหัสฮาร์ดไดรฟ์จะสั้นกว่า
Kritixi Lithos

@WeatWizard ฉันไม่คิดอย่างนั้น มีการขึ้นบรรทัดใหม่เพียงครั้งเดียว ส่วนอื่นอยู่ในสตริงดังนั้นการใช้ตัวแปรก็จำเป็นต้องมีตัวดำเนินการเรียงต่อกัน และ'o\n'มีความยาวเท่า'o'+nกัน
จัดการ

2
@manatwork หนึ่งสามารถ: print(*(' o',7*' '+'o',4*' '+'o',' '+10*'_','/'+10*' '+'\__','|'+3*' '+'J'+6*' '+'| \\','|'+4*' '+'A'+5*' '+'| |','|'+5*' '+'V'+4*' '+'| |','|'+6*' '+'A'+3*' '+'|__/','\\'+10*'_'+'/'),sep='\n')หรือfor x in(' o',7*' '+'o',4*' '+'o',' '+10*'_','/'+10*' '+'\__','|'+3*' '+'J'+6*' '+'| \\','|'+4*' '+'A'+5*' '+'| |','|'+5*' '+'V'+4*' '+'| |','|'+6*' '+'A'+3*' '+'|__/','\\'+10*'_'+'/'):print(x)ทั้งสอง 197 ยังคงนานกว่ายากรหัส 136
Jonathan Allan


1

C - 179

โซลูชันที่มีการใช้สตริงรูปแบบอย่างกว้างขวาง:

void f(){printf("%1$3c\n%1$8c\n%1$5c\n%2$11s\n/%3$13s\n|%4$4c%5$7c%6$3c\n|%7$5c%5$6c%5$3c\n|%8$6c%5$5c%5$3c\n|%7$7c%5$4c__/\n\\%2$s/\n",'o',"__________","\\__",74,'|',92,65,86);}

นี่คือรุ่นที่อ่านได้มากขึ้น:

void f() {
  printf("%1$3c\n"
         "%1$8c\n"
         "%1$5c\n"
         "%2$11s\n"
         "/%3$13s\n"
         "|%4$4c%5$7c%6$3c\n"
         "|%7$5c%5$6c%5$3c\n"
         "|%8$6c%5$5c%5$3c\n"
         "|%7$7c%5$4c__/\n"
         "\\%2$s/\n"
         'o',"__________","\\__",'J','|','\','A','V');
}

1
เดรัจฉานบังคับให้ศิลปะภายในรหัสให้รุ่นที่สั้นกว่าและพิมพ์ด้วยใส่: void g(){puts(" o\n o\n o\n __________\n/ \\__\n| J | \\\n| A | |\n| V | |\n| A |__/\n\__________/\n");}
Churam

1

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

การแก้ปัญหานี้ถูกสร้างขึ้นโดยอัตโนมัติโดยใช้นี้สคริปต์


0 0o¶ 1¶/32\__¶4 J24\¶|3A 34|¶| 3V34|¶|2A   |__/¶\1/
4
|  
3
    
2
      
1
__________
0
  o¶    

(มีช่องว่างต่อท้ายในหลายบรรทัด)

วิธีนี้ใช้งานได้โดยใช้หมายเลข 1,2,3,4 แทนที่ลำดับอักขระบางตัวที่ทำซ้ำในสตริงเป้าหมายจากนั้นแทนที่มันกลับ

ฉันรู้ว่ามันสามารถเล่นกอล์ฟได้มากขึ้นโดยการปรับเปลี่ยนรหัสนี้หรือวิธีการที่เปลี่ยนแปลงโดยสิ้นเชิง แต่เนื่องจากความท้าทายเมตา - กอลโมโกรอฟเมตาฟลอฟของ kolmogorov มีผลค่อนข้างน่าผิดหวังฉันจึงอยากลองใช้สคริปต์ของฉัน

ลองออนไลน์!


คุณสามารถแทนที่ช่องว่างทั้งหมดที่ท้ายบรรทัดสุดท้ายที่จะเป็น3และจากนั้นย้ายเปลี่ยนตัวถึงก่อน 3. นอกจากนี้คุณสามารถเปลี่ยน2\n ไป2\n3 และย้ายเปลี่ยนตัวนี้ก่อน 3. ลองออนไลน์!
Kritixi Lithos

นอกจากนี้คุณยังสามารถเปลี่ยน1\n__________เป็น1\n_____แล้วเปลี่ยนแต่ละรายการ1ในการทดแทนหลักเพื่อ11 ลองออนไลน์!
Kritixi Lithos

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

0

Python 3.6

(ที่ไม่ใช่การแข่งขัน)

นี่คือความพยายามของฉันในการเข้ารหัส Huffman แน่นอนว่าสามารถตีกอล์ฟต่อไปได้หากใครต้องการรับแนวคิดนี้

from bitarray import bitarray as b
a=b()
a.frombytes(bytes.fromhex('ca7fca7e53b6db6db664ffc6d9ae1fd6335e2fad1af83d68d7e2e9b218db6db6db20'))
print(''.join(a.decode({k:b(v)for k,v in zip(" _|\no/\\AJV","1 011 010 0011 00101 00100 00011 00010 00001 00000".split())})))

ตัวอักษรสามารถบีบอัดได้มากขึ้นโดยการแปลงเป็นเบส 64 หรืออื่น ๆ และต้นไม้ Huffman สามารถปรับให้เหมาะสมเพื่อให้ bitarray สั้นลง


3
ไม่ใช่การแข่งขันไม่ใช่ข้อแก้ตัวสำหรับการทุพพลภาพ
Mego

@ ฉันไม่ได้มีเวลาที่จะแก้ไขมันฉันแค่ต้องการที่จะให้กรอบของการแก้ปัญหาสำหรับคนอื่นที่จะทำงานด้วย ไม่สามารถแข่งขันได้เพราะฉันเป็นผู้ท้าทายความสามารถ
แอรอน

2
มันไม่สำคัญหรอก นโยบายของเรามีความชัดเจน
Mego

@Mego คงที่ ... เฉพาะสำหรับคุณ
Aaron


0

C, 141 Bytes

f(){printf("  o\n%7co\n    o\n __________\n/%11c__\n|   J%6c|  \\\n|    A     |  |\n|%6c    |  |\n|%7c   |__/\n\\__________/",0,92,0,86,65);}

การใช้

main(){f();}

วิธีแก้ปัญหาง่าย, 148 ไบต์:

w(){puts("  o\n       o\n    o\n __________\n/          \\__\n|   J      |  \\\n|    A     |  |\n|     V    |  |\n|      A   |__/\n\\__________/");}


0

zsh, 86 ไบต์

printf "^_<8b>^H^@^@^@^@^@^B^CSPÈçR^@^A^P^CJÆÃ^A<97>¾^B^\Ä^@¹5@Ú^KÂ^E2cÀ|^EG^X¿^FÂW^HCæÃTÔÄÇësÅÀ^L^Fq^@<92>}ý^?{^@^@^@"|zcat

คำอธิบาย: สตริงนั้นเป็น java cup ascii art ที่ถูกบีบอัด gzip ผมใช้printfเพราะด้วยecho, zcatพิมพ์คำเตือนและecho -eเป็นตัวละครตัวหนึ่งอีกต่อไป มันไม่ทำงานbashหรือshเพราะพวกเขาคิดว่ามันเป็นไฟล์ไบนารี เนื่องจากคุณไม่สามารถวางผลลัพธ์จากเบราว์เซอร์ได้อย่างมีประสิทธิภาพนี่เป็นไฟล์ที่ใช้งานได้


0

Java 9 / JShell, 299 ไบต์

()->{String s="";BigInteger b=new BigInteger("43ljxwxunmd9l9jcb3w0rylqzbs62sy1zk7gak5836c2lv5t36ej6682n2pyucm7gkm9bkfbn4ttn0gltbscvbttifvtdfetxorj6mmy3mt6r3",36);while(!b.equals(BigInteger.ZERO)){int x=b.intValue()&0x3ff;for(int i=0;i<x>>7;i++)s+=' ';s+=(char)(x&0x7f);b=b.shiftRight(10);}return s;}

Ungolfed:

() -> {
    String s = "";
    BigInteger b = new BigInteger(
        "43ljxwxunmd9l9jcb3w0rylqzbs62sy1zk7gak5836c2lv5t36ej6682n2pyucm7gkm9bkfbn4ttn0gltbscvbttifvtdfetxorj6mmy3mt6r3",
        36);
    while (!b.equals(BigInteger.ZERO)) { 
        int x = b.intValue() & 0x3ff;
        for (int i = 0; i < x >> 7; i++) s+=' ';
        s += (char)(x&0x7f);
        b = b.shiftRight(10);
    }
    return s;
}

การใช้งานใน JShell:

Supplier<String> golf = <lambda expression>
System.out.println(golf.get())

เข้ารหัสอักขระแต่ละตัวเป็นสิบบิตซึ่งประกอบด้วยการนับจำนวนช่องว่างหน้าอักขระในสามบิตสูงตามด้วยจุดรหัสในบิตต่ำเจ็ด

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

น่าเศร้าที่สูญเสียไปกับวิธีแก้ปัญหา 140- ไบต์ Java นี้:

()->"  o\n       o\n    o\n __________\n/          \\__\n|   J      |  \\\n|    A     |  |\n|     V    |  |\n|      A   |__/\n\\__________/"

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