Java - 126 ตัวอักษร
ลดลง:
class hjq{public static void main(String...w){for(char z='"'|0;++z!='a';)if("'()+.0;=OS".indexOf(z)==~0)System.out.print(z);}}
unminimized:
class hjq {
public static void main(String... w) {
for (char z = '"'|0; ++z != 'a';) {
if ("'()+.0;=OS".indexOf(z) == ~0) {
System.out.print(z);
}
}
}
}
นี่เป็นปัญหาที่น่าสนใจเพราะโทเค็นส่วนบุคคลอาจได้รับประโยชน์จากรูปแบบที่ยาวขึ้นเพราะใช้อักขระซ้ำ ตัวอย่างเช่นโดยทั่วไปString[]
จะสั้นกว่า แต่ไม่String...
จำเป็นต้องใช้วงเล็บเหลี่ยมในสตริงที่มีเงื่อนไข
ฉันพบว่ากลอุบายคือการพยายามและใช้อักขระที่จุดเริ่มต้นและจุดสิ้นสุดของช่วงเพื่อให้คุณสามารถแยกพวกเขาออกจากผลลัพธ์ได้โดยเพียงแค่เปลี่ยนลูปเริ่มต้นและสิ้นสุด
สำหรับ Java เป็นตัวละครสำคัญที่จะไม่รวมเป็น"
เพราะมีว่าในสตริงต้องหลบหนีมันซึ่งจะเพิ่มให้กับโปรแกรมของคุณซึ่งต้องไปในสตริงซึ่งจะเพิ่ม\
\\
ด้วยการลบ"
สตริงที่มีเงื่อนไขของคุณคุณจะลบอักขระ 4 ตัว นี้สามารถทำได้โดยการทำให้แน่ใจว่าคุณใช้
และและเริ่มต้นของคุณจากวง!
#
ทุกตัวอักษรตัวพิมพ์เล็กปรากฏอยู่ใกล้กับจุดสิ้นสุดของช่วงมีเพียง{
, |
, }
และ~
มาหลังจากที่พวกเขา เนื่องจากการใช้คำฟุ่มเฟือยของ Java ตัวอักษรตัวเล็กส่วนใหญ่จึงใช้สำหรับหม้อไอน้ำ ในทำนองเดียวกัน{
และ}
เป็นเรื่องเล็กน้อยสำหรับโปรแกรม Java เพราะต้นแบบต้องใช้พวกเขา
|
สามารถใช้ถ้าคุณมีหรือเงื่อนไข แต่ฉันไม่สามารถหาวิธีที่จะใช้ประโยชน์จากหนึ่งที่นำไปสู่โปรแกรมที่สั้นกว่าเพียงแค่ใช้|
เป็นผู้ประกอบการระดับบิต |0
ทำให้ฉันรู้สึกเล็ก ๆ น้อย ๆ ที่สกปรกเพราะมันเป็นเพียงส่วนหนึ่งที่ nop เพียงเพื่อให้ได้ตัวอักษรที่อยู่ในนั้น
~0
อัตราผลตอบแทนซึ่งเป็นประโยชน์เพราะนั่นคือสิ่งที่เราจะต้องตรวจสอบกับ-1
indexOf
การรวมสิ่งนี้เข้ากับการใช้!=
สำหรับลูปแบบมีเงื่อนไขจะกำจัด<
อักขระทั้งหมดซึ่งหมายความว่าไม่จำเป็นต้องเข้าไปในสตริงที่มีเงื่อนไข
0x20
การ0x7e
ซึ่งได้รับการกำหนดให้เป็น "ตัวอักขระ ASCII" แท็บทางเทคนิคและการขึ้นบรรทัดใหม่เป็นอักขระควบคุมจริง ๆ