for
छोरों का मेल
मान लें कि आपके पास निम्नलिखित फ़ॉर्म का कोड है:
for($pre1; $cond1; $post1) for($pre2; $cond2; $post2) $code;
इसे आम तौर पर निम्नलिखित रूप में फिर से रोल किया जा सकता है:
for($pre1; $cond2 • $post2 || $cond1 • $pre2 • $post1; ) $code;
जहां •
एक सामान्य संयोजन ऑपरेटर का प्रतिनिधित्व करता है। यह आमतौर पर एक बाइट की गिनती में कमी के परिणामस्वरूप होता है, लेकिन संभवतः कुछ रचनात्मकता की आवश्यकता होगी। $cond2
लिखने की आवश्यकता होगी ताकि यह पहली बार में विफल हो जाए। $post1
पहली बार निष्पादित करने में भी विफल होना चाहिए, हालांकि पहले से रिफ्लेक्टर करना आसान हो सकता है ताकि $post1
मौजूद न हो।
यदि आप तीन या अधिक नेस्टेड छोरों के साथ काम कर रहे हैं, तो आप पहले दो को भी जोड़ सकते हैं, और फिर दूसरे को जोड़ सकते हैं, और इसी तरह। मुझे लगता है कि आम तौर पर अंदर से बाहर की ओर गठबंधन करना आसान हो गया है।
एक उदाहरण के रूप में, एच-कालीन भग्न ( 97 बाइट्स ) के निम्नलिखित समाधान पर विचार करें :
for(;$i<$n=3**$argn;$i+=print"$s\n")for($s=H,$e=1;$e<$n;$e*=3)$s.=str_pad($i/$e%3&1?$s:'',$e).$s;
इसे निम्नलिखित तरीके से सुधारा जा सकता है:
for(;($i+=$e&&print"$s\n")<$n=3**$argn;)for($s=H,$e=1;$e<$n;$e*=3)$s.=str_pad($i/$e%3&1?$s:'',$e).$s;
$e&&print
print
पहले पुनरावृत्ति को रोकता है , और वृद्धि भी नहीं करता है $i
।
और अंत में ( 93 बाइट्स ):
for(;$H>$e*=3or$e=($i+=$e&&print"$s\n")<${$s=H}=3**$argn;)$s.=str_pad($i/$e%3&1?$s:'',$e).$s;
$H>$e*=3
पहली बार विफल होगा क्योंकि दोनों चर अपरिभाषित हैं।