سئو، سئو و سئو!
سئو جدیداً به یکی از دغدغههای جدی علی تبدیل شده است. او دائماً صفحات وبسایت خود را چک میکند تا اشتباهی از او سر نزده باشد که باعث افت رنک وبسایتش شود. به همین دلیل، علی بهصورت جدی در تلاش است تا برنامهای بنویسد تا صفحات سایتش را از لحاظ سئو بررسی کند.
او از شما برای نوشتن چنین برنامهای کمک خواسته است.
## جزئیات پروژه
پروژهی اولیه را از [این لینک](/problemset/assignments/4367/download_problem_initial_project/121725/) دانلود کنید.
پروژهی اولیه شامل فایلی با نام `seoScore.php` است که تابعی با نام `seoScore` در آن تعریف شده. امضای این تابع بهصورت زیر است:
```php
function seoScore(string $html): int
{
// TODO: Implement
}
```
این تابع باید با دریافت محتویات *HTML* یک صفحه در قالب یک رشته، آن را از لحاظ سئو بررسی کند و امتیازی در قالب یک عدد صحیح برگرداند.
برای بررسی صفحه و اختصاص امتیاز به آن باید به نکات زیر توجه کنید:
+ اگر صفحه دارای تگ `title` بود و تعداد کاراکترهای محتوای این تگ کوچکتر یا مساوی ۶۰ بود، ۱۰ امتیاز و اگر بیشتر از ۶۰ کاراکتر بود، ۷ امتیاز اضافه شود. **تضمین میشود** که این تگ در صورت وجود، بدون *attribute* و به شکل زیر خواهد بود:
```html
<title><mark title="عنوان صفحه">Page Title</mark></title>
```
+ اگر صفحه دارای تگ `meta` با نام `description` بود و تعداد کاراکترهای محتوای ویژگی `content` این تگ کوچکتر یا مساوی ۱۶۰ بود، ۱۰ امتیاز و اگر بیشتر از ۱۶۰ کاراکتر بود، ۷ امتیاز اضافه شود. **تضمین میشود** که این تگ در صورت وجود، با این ترتیب از *attribute* ها خواهد بود:
```html
<meta name="description" content="<mark title="محتویات description">description-content</mark>">
```
+ اگر صفحه دارای تگ `meta` با نام `viewport` بود، ۱۰ امتیاز اضافه شود. **تضمین میشود** که این تگ در صورت وجود، با این ترتیب از *attribute* ها خواهد بود:
```html
<meta name="viewport" content="<mark title="محتویات viewport">viewport-content</mark>">
```
+ اگر صفحه دارای تگ `meta` با نام `robots` بود، ۱۰ امتیاز اضافه شود. **تضمین میشود** که این تگ در صورت وجود، با این ترتیب از *attribute* ها خواهد بود:
```html
<meta name="robots" content="<mark title="محتویات robots">robots-content</mark>">
```
+ اگر صفحه دارای تگ `meta` با ویژگی `charset` بود، ۱۰ امتیاز اضافه شود. **تضمین میشود** که این تگ در صورت وجود، با این ترتیب از *attribute* ها خواهد بود:
```html
<meta charset="<mark title="مقدار charset">charset-value</mark>">
```
+ اگر صفحه دارای یک تگ `h1` بود، ۱۰ امتیاز و اگر بیشتر از یک تگ `h1` بود، ۷ امتیاز اضافه شود. **تضمین میشود** که این تگ در صورت وجود، بدون *attribute* است.
+ اگر صفحه دارای تگهای `h2` یا `h3` بود، به ازای هر یک از این تگها ۵ امتیاز اضافه شود (تعداد تگهای `h2` و `h3` اهمیتی ندارد). **تضمین میشود** که این تگها در صورت وجود، بدون *attribute* هستند.
+ اگر صفحه دارای تگهای معنایی بود، به ازای هر یک از این تگها ۱۰ امتیاز اضافه شود (تگهای معنایی یا *semantic tags* در این سؤال شامل `header`، `section` و `footer` است؛ تعداد دفعات تکرار آنها اهمیتی ندارد). **تضمین میشود** که این تگها در صورت وجود، بدون *attribute* هستند.
## نکات
+ ممکن است در ابتدا یا انتهای محتویات تگها و *attribute* ها *whitespace* آمده باشد. برای بررسی طول این متون، باید *whitespace* ابتدا و انتها را نادیده بگیرید (آنها را `trim` کنید).
+ ممکن است محتویات تگها خالی باشد. برای مثال، اگر یک تگ `footer` بدون محتوا در *HTML* موجود باشد، باید ۱۰ امتیاز اضافه شود.
+ **تضمین میشود** که نام تگها و *attribute* ها با حروف کوچک انگلیسی هستند.
+ **تضمین میشود** که رشتهی *HTML* ورودی از نظر سینتکس معتبر است.
+ در صورت تمایل، میتوانید توابع و کلاسهای دیگری نیز در فایل `seoScore.php` پیادهسازی کنید.
## مثال
پس از پیادهسازی متد `seoScore`، با اجرای کد زیر:
```php
<?php
function seoScore(string $html): int
{
// TODO: Implement
}
$html =
'<!DOCTYPE html>
<html>
<head>
<mark title="۱۰ امتیاز"><meta charset="utf-8"></mark>
<mark title="۱۰ امتیاز"><meta name="viewport" content="width=device-width, initial-scale=1"></mark>
<mark title="۱۰ امتیاز"><title>Quera</title></mark>
<mark title="۱۰ امتیاز"><meta name="description" content="quera-codecup-college-magnet"></mark>
<mark title="۱۰ امتیاز"><meta name="robots" content="index, follow"></mark>
</head>
<body>
<mark title="۱۰ امتیاز"><header></mark>
<mark title="۱۰ امتیاز"><h1>Quera</h1></mark>
</header>
<mark title="۱۰ امتیاز"><section></mark>
<mark title="۵ امتیاز"><h2>Quera</h2></mark>
<mark title="۵ امتیاز"><h3>Quera</h3></mark>
<h3>Quera</h3>
<h3>Quera</h3>
</section>
<mark title="۱۰ امتیاز"><footer></mark>
<h2>Quera</h2>
</footer>
</body>
</html>';
echo seoScore($html);
```
خروجی باید بهصورت زیر باشد:
```
100
```
## آنچه باید آپلود کنید
یک فایل *PHP* که تابع `seoScore` در آن پیادهسازی شده است آپلود کنید.