สิ่งใดที่คุณมีเคล็ดลับทั่วไปสำหรับการเล่นกอล์ฟในนิ่ม ? ฉันกำลังมองหาความคิดที่สามารถนำไปใช้กับปัญหาเกี่ยวกับ code-golf และอย่างน้อยก็ค่อนข้างเฉพาะกับ Nim (เช่น "ลบความคิดเห็น" ไม่ใช่คำตอบ)
กรุณาโพสต์หนึ่งเคล็ดลับต่อคำตอบ
สิ่งใดที่คุณมีเคล็ดลับทั่วไปสำหรับการเล่นกอล์ฟในนิ่ม ? ฉันกำลังมองหาความคิดที่สามารถนำไปใช้กับปัญหาเกี่ยวกับ code-golf และอย่างน้อยก็ค่อนข้างเฉพาะกับ Nim (เช่น "ลบความคิดเห็น" ไม่ใช่คำตอบ)
กรุณาโพสต์หนึ่งเคล็ดลับต่อคำตอบ
คำตอบ:
นิ่มเป็นสวยยืดหยุ่นเมื่อมันมาถึงฟังก์ชั่นการโทรไวยากรณ์ ตัวอย่างเช่นต่อไปนี้เป็นวิธีเรียกใช้ฟังก์ชันที่มีอาร์กิวเมนต์หนึ่งตัว:
ord(c)
ord c
c.ord
และวิธีเรียกฟังก์ชันที่มีสองอาร์กิวเมนต์:
max(a,b)
a.max(b)
a.max b
เลือกเวอร์ชัน golfiest ที่เหมาะกับสถานการณ์ของคุณโดยเฉพาะเกี่ยวกับความสำคัญ ตัวอย่างเช่นเปรียบเทียบ:
abs(n)+2
n.abs+2
(abs n)+2
ตรงข้ามกับ:
abs(n+2)
(n+2).abs
abs n+2
future
โมดูลfuture
โมดูลมีสองคุณสมบัติไบต์ประหยัดหลัก: lambdas และ comprehensions รายการ แลมบ์ดามีประโยชน์อย่างยิ่ง
ตัวอย่างเช่นสิ่งนี้:
proc f(s:any):any=s&", world!"
สามารถย่อให้สั้นลงนี้:
import future
s=>s&", world!"
ซึ่งจะช่วยประหยัดไบต์ อย่างไรก็ตามโปรดทราบว่าแลมบ์ดาไม่สามารถใช้ภายนอกรายการพารามิเตอร์ได้ดังนั้นเพื่อทดสอบโค้ดของคุณคุณจะต้องทำสิ่งนี้:
import future
proc test(f: string -> string) = echo f "Hello"
test(s=>s&", world!")
เช่นกันความเข้าใจในรายการสามารถใช้กับfuture
โมดูลได้ ตัวอย่างเช่นรหัสนี้พิมพ์ seq ( @[...]
) ของช่องสี่เหลี่ยมทั้งหมดที่น้อยกว่า 100 หารด้วย 4:
import future
echo lc[x*x|(x<-1..9,x*x mod 4==0),int]
any
แทนstring
(ฉันสมมติว่าคุณเลือกชื่อประเภทที่ยาวที่สุด) แต่สิ่งนี้ยังคงบันทึกโดยไม่คำนึงถึง
any
ขอบคุณสำหรับเคล็ดลับ! คุณควรโพสต์สิ่งนั้นเป็นคำตอบ
proc(s:any):any=s&", world!"
โดยปล่อย<space>f
ให้ไม่ระบุชื่อproc
เมื่อทำงานกับจำนวนเต็มไม่ใช่ค่าลบบางครั้งการใช้โอเปอเรเตอร์ที่ไม่ได้ลงทะเบียนดีกว่า โดยเฉพาะถ้าเป็นไปได้ใช้/%
และ%%
แทนและdiv
mod
max a,b
แม้ใช้งานได้ (บางครั้ง)