জুলিয়া, 90 টি চরিত্র
s->all(cumsum(map(i->i∈"!|.\":"?-1:i∈"()_@\$&",mapfoldl(collect,hcat,split(s,"
")))').>-1)
মূল সমাধান (নীচে) এর বিপরীতে, সমাধানটি নির্ধারণ করতে এটি গণিত ব্যবহার করে। mapfoldl(collect,hcat,split(s,"\n"))(উপরে বর্ণিত \nঅক্ষর সংরক্ষণের জন্য একটি নতুন নিউলাইন দিয়ে প্রতিস্থাপিত) স্ট্রিংটিকে অক্ষরের 2d অ্যারে রূপান্তর করে। map(i->i∈"!|.\":"?-1:i∈"()_@\$&",...)অক্ষরের একটি অ্যারে তৈরি করে, 1 টি অক্ষর মেঘ হলে, -1 অক্ষরটি বৃষ্টি হয় এবং অন্যথায় 0 হয়।
cumsum(...')সারিগুলির সংশ্লেষক অঙ্কগুলি গণনা করে (সাধারণত এটি লেখা হবে cumsum(...,2), তবে যেহেতু আমরা এই দিক থেকে অভিমুখীকরণের বিষয়ে চিন্তা করি না, কেবল স্থান পরিবর্তন করার জন্য একটি চরিত্রের ব্যয় হয়) এবং তারপরে all(... .>-1)একটি নেতিবাচক সংখ্যার জন্য পরীক্ষা করা হয় - negativeণাত্মকতা কেবলমাত্র বৃষ্টিপাতের অক্ষর হলেই ঘটতে পারে মেঘের চরিত্রের আগে না উপস্থিত উপস্থিত হয়।
জুলিয়া, 139 136 টি অক্ষর
s->(t=join(mapfoldl(i->split(i,""),.*,split(s,"
")),"
");while t!=(t=replace(t,r"[()_@$&](.*?)[!|.\":]",s"\g<1>"))end;∩("!|.\":",t)==[])
এই ফাংশনটি প্রথমে পাঠ্য স্থানান্তর করে যাতে সারিগুলি কলাম এবং বিপরীত হয়ে যায়। নোট করুন যে নিউলাইনগুলি কোডটিতে প্রকৃত নিউলাইনগুলির আকারে উপস্থিত রয়েছে, উদাহরণস্বরূপ একটি অক্ষর সংরক্ষণ করতে।
ফাংশনটি পুনরাবৃত্তভাবে মেঘ / বোঁটা জোড়াগুলিকে স্পেসের সাথে প্রতিস্থাপন করে এবং এই জাতীয় সমস্ত জোড়া সরিয়ে ফেলা হলে, যদি সেখানে কোনও ফোঁটা অবশিষ্ট থাকে এবং অন্যথায় মিথ্যা থাকে তবে তা সত্য হয়।
r"[()_@$&](.*?)[!|.\":]"- এটি এমন একটি রেইজেক্স যা মেঘ / বোঁটা জোড়গুলি অলসভাবে মেলে, গ্রুপ 1 এর সাথে মেঘ এবং বোঁটাগুলির মধ্যে সমস্ত কিছু থাকবে। তারপরে s"\g<1>"এটি মেলে যাওয়া মেঘ এবং ফোঁটাগুলি সরিয়ে ফেলতে বলেছে, তবে জিনিসটি মাঝখানে রাখুন (এটিতে মেঘ থাকতে পারে প্রয়োজনীয়) - যা \g<1>হ'ল রেজেক্সের 1 গোষ্ঠীতে মিলেছে। ∩("!|.\":",t)==[]চূড়ান্ত স্ট্রিংয়ের সাথে বোঁটার অক্ষরের ছেদটি উত্পন্ন করবে এবং যদি এটি খালি হয় তবে বিন্দু বিন্দুর কোনও উপস্থিত নেই এবং বৃষ্টি হচ্ছে।