ฉันรัก BATCH แม้จะไม่มีคำสั่งที่ใช้งานได้อย่างน่าตกใจแม้ว่าจะเป็นเพราะขาดการสนับสนุนที่ไม่ใช่จำนวนเต็มก็ตาม ทำไม? เพราะสิ่งนี้ได้ผล:
SET var=SET
%var% i=0
สิ่งนี้จะประเมินว่า:
SET var=SET
SET i=0
เยี่ยมเลยใช่มั้ย ฉันเคยใช้เทคนิคนี้ในโปรแกรม BATCHมาก่อนเพราะมันช่วยประหยัดไบต์!
ความท้าทายของคุณคุณควรยอมรับมันคือโปรแกรม "กอล์ฟ" BATCH ด้วยวิธีนี้ คุณจะต้องลดขนาดไบต์ของโปรแกรม BATCH อินพุตโดยการรวมSET
คำสั่งที่จะประเมินเป็นส่วนของโปรแกรมและไม่มีทางแก้ไขโปรแกรม (สิ่งนี้ไม่อนุญาตให้พูดการเปลี่ยนชื่อตัวแปรเป็นชื่อที่สั้นกว่าโปรดจำไว้ว่า BATCH นอกเหนือจากตัวแปรนั้นไม่คำนึงถึงขนาดตัวพิมพ์) คะแนนของคุณจะถูกคำนวณดังนี้:
score = # of characters in your program + 5*(net result bytes in test cases below)
ฉันขอสงวนสิทธิ์ในการเพิ่มกรณีทดสอบเพิ่มเติมเพื่อขัดขวางการทำงานเพื่อเพิ่มประสิทธิภาพโปรแกรมสำหรับกรณีทดสอบ
เพื่อประโยชน์ของความท้าทายนี้, คุณSET
งบไม่สามารถมีตัวควบคุม ( |
, <
, >
, %
) หรือขึ้นบรรทัดใหม่ คุณไม่สามารถแก้ไขรหัสอื่นนอกเหนือจากการย้ายชิ้นส่วนของรหัสภายในชุดคำสั่ง (นั่นคือคุณไม่อาจลบช่องว่างที่ไม่จำเป็นแทนที่EQU
ด้วย==
ฯลฯ ) \n
เราจะสมมติว่าเส้นที่จบลงด้วยการ
กรณีทดสอบ
แต่ละกรณีทดสอบอยู่ในบล็อกรหัสแยกต่างหากและแต่ละกรณีทดสอบนั้นมีในตัวเองซึ่งหมายความว่าคุณควรเล่นกอล์ฟโดยสมมติว่ามีสิ่งใดอยู่ในนั้น (เช่นหากคุณSET d=SET
อยู่ในโปรแกรมเดียวคำสั่งนั้นจะไม่ถูกส่งให้กับโปรแกรมอื่นโดยอัตโนมัติ) ตัวอย่างผลลัพธ์แต่ละตัวอย่างสามารถพบได้หลังจากแต่ละกรณีทดสอบ มีเส้นแบ่งระหว่างกรณีทดสอบ
@ECHO OFF การเพิ่ม SET = 10 : ห่วง IF% เพิ่มขึ้น% EQU 0 GOTO จบ ECHO% เพิ่มขึ้น% SET / A% เพิ่มขึ้น% - = 1 GOTO ลูป : ปลาย EXIT
@ECHO OFF ชุด / p อินพุต = ป้อนอินพุตที่นี่: SET R =% 1 ECHO อักขระตัวสุดท้ายของอินพุตที่นี่:% R: ~ -1%
@ECHO OFF การเพิ่ม SET = 10 : อี GOTO f ECHO f : F GOTO กรัม ECHO กรัม : กรัม GOTO ชั่วโมง ECHO ชั่วโมง : เอช GOTO i ECHO i :ผม GOTO j ECHO j : J หาก 3 == 4 (ECHO 4) อื่น ๆ (ECHO 5) ถ้า 5 == 3 (GOTO l) อื่น ๆ (GOTO k) : k ECHO เสร็จแล้ว ECHO BATCH OUT !! EXIT : L GOTO กรัม
ECHO สวัสดี, สวัสดี, สวัสดี, สวัสดี, สวัสดี, สวัสดี, Hello!, hello, ello !, Lello
ตัวอย่างผลลัพธ์:
@ECHO OFF การเพิ่ม SET = 10 : ห่วง IF% เพิ่มขึ้น% EQU 0 GOTO จบ ECHO% เพิ่มขึ้น% SET / A% เพิ่มขึ้น% - = 1 GOTO ลูป : ปลาย EXIT(บันทึก 0 ไบต์)
@ECHO OFF SET% i% = อินพุตที่นี่: SET / p INPUT = ป้อน% i% SET R =% 1 ECHO อักขระสุดท้ายของ% i %% R: ~ -1%(ได้รับ 3 ไบต์)
@ECHO OFF การเพิ่ม SET = 10 ชุด g = GOTO SET e = ECHO : อี % g f% E% f% : F % g% g %เช่น : กรัม % g% h E%% h : เอช % g% ฉัน E%% ฉัน :ผม % g j% E% j% : J หาก 3 == 4 (% e% 4) อื่น ๆ (% e% 5) หาก 5 == 3 (% g% l) ELSE (% g% k) : k E%% เสร็จสิ้น % e% BATCH OUT !! EXIT : L % g% g(บันทึก 10 ตัวอักษร)
SET% h% = ello ECHO H% h% H% h% H% h% h% h% h% h% h% h% h% สวัสดี!! h% h% ello !, Lello(บันทึก 1 ตัวอักษร)
AAA %increment%
→ set a=increment¶AAA %%a%%
ไม่ถูกต้องและAAA %1 BBB %2
→ set a= BBB ¶AAA %1%a%%2
ถูกต้อง (iirc) ดังนั้นคุณต้องทำมันให้เป็นระเบียบ ( ¶
หมายถึงการขึ้นบรรทัดใหม่)
@
มาก่อนSET
) เป็นเอาต์พุตภายนอกที่ยอมรับได้จากโปรแกรมกอล์ฟ?