< CyberCesar />
Відкрити в Telegram
حل سوالات روزانه لیت کد✅️ مطالب و دانستنی های برنامه نویسی✅️ نکات جالب کامپیوتری✅️ و موارد دیگر...
Показати більшеКраїна не вказанаКатегорія не вказана
232
Підписники
Немає даних24 години
-37 днів
-530 день
Архів дописів
+9
با درود خدمت شما دوستان محترم
این ترم هم به رسم ۳ ترم گذشته و از ترم ۳، لیست ردهبندی(Tier list) داریم.
اما این ترم تصمیم گرفتم که به جای یک پست متنی ساده؛ در قالب یک پست گرافیکی بنویسمش تا خوندنش راحت تر باشه و بشه با جزییات بیشتری نوشت.
امیدوارم براتون مفید باشه، برای دوستانتون هم بفرستید، شاید به کارشون بیاد❤️
آقا اون دو سه روزی که درگیر خوندن برای دانش خانواده بودیم به شدت ازدواجی شده بودیم قاطی این همه مشکلات. هیپنوتیزم می کنه آدمو رسما.
خدا رو شکر امتحانشو دادیم و برگشتیم به خامی و جوانی😃
و اینکه شاید بگید تو که گفتی بالایی ضرب داره، پس چرا دستور mul نیست توش؟
باید بگم که کامپایلر انقددددد باهوشه و هوشمنده، که چون عبارت (number % i == 0) فقط حاصل صفر و یکی داره، تشخیص داده که mul استفاده نکنه و از and استفاده کرده که خیلیییی سبکتره. صرفا با i عملیات and انجام میده در خطی که هایلایت کردم!
واقعا کامپایلر اختراع عجیبیه!
همونطور که می بینید نسخه if دار بدون flag خیلی کوتاه تر و سبک تر هست(کد پایینی).
نسخه ifدار فقط flag رو حذف کرده. یک if سبک اجازه داده بمونه. در حالی که جواب چیستان که به زور if رو حذف کرده، باعث شده سنگین تر بشه.(کد پایینی)
و البته نسخه if دار از نسخه flag دار که در پست اصلی معرفی شد هم خیلی بهتره.
جواب چیستان که یکی از دوستان عزیز در کامنت ها پاسخ دادند:
sum += (number % i == 0) * i;
while (number % i == 0) {number /= i;}
فقط یک نکته مهم: من یک چند تا کامپایلر رو امتحان کردم، حتی این کد هم در اسمبلی branch درست می کنه( که "حدودا" همون if هست ولی در سطح پایینتر)
و اتفاقا این کد بهینه تره که if داره:
if (number % i == 0)
{
sum += i;
do
{
number /= i;
} while (number % i == 0);
}
چون مثل کد بالایی، در هر بار اجرای حلقه نمیاد عملیات سنگین باقیمانده گیری انجام بده بعد تازه ضرب هم انجام بده که عملیات سبکی نیست.
البته خب هدف این چیستان، یک چالش فکری بود برای عدم استفاده از if، برای همین جواب چیستان همون کد بالاییه.
معادل اسمبلی دو تکه کد بالا 👇بعد از اونجایی که دستورات شرطی سربار زیادی دارند(بخصوص روی miss شدن cache)، حس کردم که باید بشه این کد رو بهتر نوشت و flag و شرط رو حذف کرد.
برای همین از chatgpt پرسیدم، و کد جایگزینی داد که نه flag داره و نه if!!!
و اینکه اصلا کار عجیب غریبی هم نکرده، صرفا با تغییر ترتیب دستورات، نیاز به فلگ و شرط رو حذف کرد.
بنظرتون چطوری این کار انجام میشه؟ ترتیب چیا رو عوض کنیم تا نیاز به شرط و فلگ نباشه و کد بهینه تری بنویسیم؟
#چیستان
2/3
داخل حلقه for، با چنین ساختاری رو به روییم. چرا؟
هدف ما اینه که شمارنده های اول ورودی رو یک بار فقط جمع بزنیم.
یعنی مثلا برای 12، دو بار 2 رو جمع نزنیم چون دو تا عامل 2 داره.
برای همین یک flag تعریف کردم که از چنین اشتباهی جلوگیری کنه.
یعنی فقط دفعه اول اون عامل رو جمع بزنه و دفعات بعدی فقط عدد ورودی رو تقسیم کنه بر عامل(برای اینکه حذف بشه و بریم سراغ عوامل بعدی)
1/3
در یک قسمت از یک سوال الگوریتمی، من چنین تابعی نوشتم. این تابع، مجموع شمارنده های اول یک عدد ورودی رو حساب کرده و خروجی می ده.
مثلا عدد 12 رو می گیره و 5(یعنی 2+3) رو خروجی می ده.
با سپاس از حمایت دوستان، 47 تایی شدیم
3 عزیز دیگر تا 50🔥
هفته آینده یا بعدش ویدیوی گیم پلی Stronghold 4 هم آپلود می شه
چرا لینک ۴ مخربه؟
استفاده از dash یا - ، یک دامنه جدید درست میکنه. یعنی شما میتونید یک دامنه arash-ebay ثبت کنید بدون اینکه ربطی به ebay داشته باشین.
اگه نقطه بود، این مشکل وجود نداشت.
برای همین همیشه باید بین قسمت های مختلف url نقطه باشه که مطمئن یشید همون دامنهاس، وگرنه ثبت اسم مشابه با -
چرا لینک ۲ مخربه؟
این مورد رو باید خیلی زوم کنید!
حرف y در واقع y نیست! یک کاراکتر دیگهاس که .y هست و نقطهاش پایین افتاده!
با قرمز هایلایتش کردم!
از این حرکت خیلی برای phising استفاده شده تا حالا!
چرا لینک ۱ مخربه؟
-اولا در جاهایی که زرد کردم، از backslash استفاده شده نه slash
یعنی \ داره، نه /
دوم اینکه تا قبل از علامت @ که سبز شده، به عنوان userinfo در نظر گرفته میشه مثل نام کاربری و گذرواژه و اسم سایت نیست! در واقع مرورگرتون رو گول میزنه اینجوری!
بعد از @، آیپی مهاجم اومده که به صورت کد اسکیه. اگه دیکدش کنیم میشه:
137.138.137.177
پس اصلا ebay نیست! کلا سرکاریم!
