วาดถ้วยกาแฟ Ascii นี้:
โอ โอ โอ __________ / \ __ | J | \ | A | | | V | | | A | __ / \ __________ /
คะแนนบราวนี่สำหรับกาแฟสคริปต์หรือจาวา :)
โค้ดที่สั้นที่สุดในหน่วยไบต์ฟังก์ชั่นหรือโปรแกรมขึ้นบรรทัดใหม่หรือพื้นที่สีขาวเป็นที่ยอมรับดื่ม!
วาดถ้วยกาแฟ Ascii นี้:
โอ โอ โอ __________ / \ __ | J | \ | A | | | V | | | A | __ / \ __________ /
คะแนนบราวนี่สำหรับกาแฟสคริปต์หรือจาวา :)
โค้ดที่สั้นที่สุดในหน่วยไบต์ฟังก์ชั่นหรือโปรแกรมขึ้นบรรทัดใหม่หรือพื้นที่สีขาวเป็นที่ยอมรับดื่ม!
คำตอบ:
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\\",
"__________",
"/"
บันทึกแล้ว 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 รายการด้วยตัวเลขหลักเดียว:
N
N-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
ซ
f=
) คุณสามารถบันทึกได้ 4 ไบต์ด้วยวิธีนี้: n>>3
แทน+!(n&7)
, 9
แทนที่จะเป็น_8
(สองครั้ง) และ44
แทน9
f=
ในนั้น ... ขอบคุณสำหรับการบันทึกไบต์!
' '
) แต่ไม่แน่ใจว่ามันทำอย่างไร การเปลี่ยนบิตทำอะไร ทำไมเราจึงเพิ่ม n?
-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 |__/
\__________/
”
เป็นนัยและคุณสามารถแทนที่ด้วยZŒṙ
x/
นอกจากนี้ในขณะที่ไม่มีไบต์ใด ๆ การใช้¶
แทนที่จะขึ้นบรรทัดใหม่ตามตัวอักษรจะทำให้โค้ด imo สามารถใช้ซ้ำได้มากขึ้น
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,"\\")
f=()->""" o
o
o
__________
/ \__
| J | \\
| A | |
| V | |
| A |__/
\__________/"""
ไม่มีการเข้ารหัสยาก
ไม่มีการเข้ารหัส 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
] for
in [
[2,7,4]
และ[3,4,5,6]
ไปและ2,4,7
3,4,5,6
"""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
) ซึ่งประมวลผลนิพจน์สคริปต์และทำให้สตริงหลายบรรทัดเกิดขึ้นบนไพพ์ไลน์ เอาท์พุทเป็นนัย
($_,' '*$_)[+$_-in48..57]
- ไม่ว่าฉันจะเปลี่ยนอะไรดูเหมือนว่าจะล้มเหลวสำหรับฉัน
space
โดยo
และ barfs
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 |__/\
\\__________/
S
การจัดเก็บ 3 s
ช่องว่างไม่มี ฉันคิดว่าฉันจะแก้ไขอันนี้แทนเพราะมันคงจำนวนการแปลงเท่าเดิม
[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
-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
ประกาศ
แข็งแรงเล่นกอล์ฟ:
()->{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;}
ในจิตวิญญาณของkolmogorov-complexนี่ไม่ได้เขียนโค้ดสตริงที่จะส่งออก แต่ใช้ประโยชน์จากความจริงที่ว่ามีหลายกรณีของช่องว่างหลายช่องตามด้วยอักขระที่พิมพ์ได้ มันเข้ารหัสจำนวนช่องว่างที่นำหน้าอักขระในไบต์ลำดับสูงของอักขระด้วยอักขระ 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();
}
}
\u0641
นำโดยหกช่องว่างที่จะได้รับการเข้ารหัสเป็น
F
มีไม่เกินสิบซ้ำติดต่อกันได้ทุกที่ในสตริงและทศนิยมสิบพอดีในฐานสิบหก มันควรจะเป็นไปได้ที่จะพอดีกับทั้งสองในนั้น
0x
คำนำหน้าช่วย
<v"XaXXXNYXNY77777'XXXXX2_TXQXX0XZTXDXX0X^TXXRX0X^TXXDX07]27777#"p29+55
:<_@#:,g2/+55,g2%+55
\JV/|_Ao
อักขระในสตริงจะถูกเข้ารหัสเป็นดัชนีในตารางการค้นหาของค่าที่เป็นไปได้สิบค่า ดัชนีจะถูกจัดกลุ่มเป็นคู่แต่ละคู่จะรวมกันเป็นตัวเลขเดียว (i1 + i2 * 10) ในช่วง 0 ถึง 99 โดยการเลือกลำดับของตารางการค้นหาอย่างระมัดระวังเราสามารถรับประกันได้ว่าค่าเหล่านั้นจะถูกต้องเสมอ อักขระ ASCII ซึ่งสามารถแสดงในสตริงตัวอักษร
นี่คือรายละเอียดของรหัสตัวเอง:
เราเริ่มต้นด้วยการเริ่มต้นองค์ประกอบสุดท้ายของตารางการค้นหาด้วยอักขระขึ้นบรรทัดใหม่ (ASCII 10)
จากนั้นเราจะใช้ตัวอักษรสตริงเพื่อผลักดันเนื้อหาที่เข้ารหัสไปยังสแต็ก
ในที่สุดเราก็วนซ้ำค่าของสแต็คถอดรหัสและส่งออกอักขระสองตัวในเวลาเดียวกัน
บรรทัดสุดท้ายถือตารางการค้นหา: องค์ประกอบที่ 9 เป็นช่องว่างโดยนัยและตั้งค่าที่ 10 (ขึ้นบรรทัดใหม่) ด้วยตนเองตามที่อธิบายไว้ก่อนหน้า
แตกต่างจากคำตอบอื่น ๆ ของฉันนี้เขียนด้วยมือ
2o¶6o¶3o¶1=¶/55\__¶|3J6|2\¶|4A5|2|¶|5V4|2|¶|6A3|__/¶\=/
=
10$*_
\d
$*
(มีพื้นที่ท้ายท้าย)
หลักการยังคงมีสตริง "บีบอัด" ซึ่งถ้วยกาแฟสามารถสร้างขึ้นใหม่ได้โดยการแทนที่ ลองใช้การทดแทนที่แตกต่างกันปรากฎว่าสิ่งเดียวที่ควรค่าแก่การทำคือ:
=
กลายเป็น __________
(10 ขีด)(format t"~3@{~vto
~} ~10@{_~}
/~11t\\__
| J~11t| \\
~2@{|~5t~a~11t| |
~}|~7tA |__/
\\~10{_~}/"2 7 4'A" V"1)
ฉันบันทึกได้ 6 ไบต์โดยใช้ความคิดเพียงแค่ใส่ค่าลงในสตริงแทน ~&
เป็น s
แนวคิดสำหรับการปรับปรุงยินดี
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*'_'+'/')
s=' '
ตัวแปรและใช้มันดีกว่า
'o\n'
มีความยาวเท่า'o'+n
กัน
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
r" o
7 o
4 o
10_
/10 \__
|3 J6 | \\
|4 A5 | |
|5 V4 | |
|6 A3 |__/
\\10_/"9
ถอดรหัสการรันความยาวได้ง่าย
โซลูชันที่มีการใช้สตริงรูปแบบอย่างกว้างขวาง:
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');
}
void g(){puts(" o\n o\n o\n __________\n/ \\__\n| J | \\\n| A | |\n| V | |\n| A |__/\n\__________/\n");}
การแก้ปัญหานี้ถูกสร้างขึ้นโดยอัตโนมัติโดยใช้นี้สคริปต์
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. ลองออนไลน์!
1\n__________
เป็น1\n_____
แล้วเปลี่ยนแต่ละรายการ1
ในการทดแทนหลักเพื่อ11
ลองออนไลน์!
นี่คือความพยายามของฉันในการเข้ารหัส 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 สั้นลง
show_message(" o# o# o# __________#/ \__#| J | \#| A | |#| V | |#| A |__/#\__________/")
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();}
w(){puts(" o\n o\n o\n __________\n/ \\__\n| J | \\\n| A | |\n| V | |\n| A |__/\n\\__________/");}
for(;$c="1o
6o
3o
9
/44\\__
|2J5|1\\
|3A4|1|
|4V3|1|
|5A2|__/
\\9/"[$i++];)echo$c>0?str_repeat(" _"[$c>8],$c+1):$c;
นี่ดูเหมือนคำตอบของ Arnauld - และก็เหมือนกันมาก -r
ทำงานด้วย
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
เพราะพวกเขาคิดว่ามันเป็นไฟล์ไบนารี เนื่องจากคุณไม่สามารถวางผลลัพธ์จากเบราว์เซอร์ได้อย่างมีประสิทธิภาพนี่เป็นไฟล์ที่ใช้งานได้
()->{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\\__________/"
•1d'uì[_ÍpH»Ð]jŠ$ÿ{ɘß|ªpå±W¾Ö:ÞjÇ&@è$´Öàˆå]Á¢šBg¦ï&-ã¥ønØ7Ñà'?•9B8ÝJ"o _/\|JAV"‡15ô»