Codewars: обзор и рекомендации
Содержание:
My Solutions
kyu | Codewars Kate | My Solutions |
---|---|---|
4 | BattleShipsSunkDamagedOrNotTouched.java | |
4 | DecodeTheMorseCodeAdvanced.java | |
4 | HumanReadableDurationFormat.java | |
4 | RomanNumeralsEncoder.java | |
4 | TenPinBowling.java | |
4 | ReversePolishNotationCalculator.java | |
4 | LongestCommonSubsequencePerformanceVersion.java | |
4 | NumberOfProperFractionsWithDenominatorD.java | |
4 | SquareIntoSquaresProtectTrees.java | |
4 | RecoverASecretStringFromRandomTriplets.java | |
4 | SumByFactors.java | |
4 | CodewarsStyleRankingSystem.java | |
5 | Scramblies.java | |
5 | ConvertStringToCamelCase.java | |
6 | DecodeTheMorseCode.java | |
6 | SortTheOdd.java | |
6 | VasyaClerk.java | |
6 | Dubstep.java | |
6 | TripleTrouble.java | |
6 | GiveMeADiamond.java | |
6 | BouncingBalls.java | |
6 | YourOrderPlease.java | |
6 | EqualSidesOfAnArray.java | |
6 | FindTheMissingLetter.java | |
6 | BuildAPileOfCubes.java | |
6 | FindTheOddInt.java | |
7 | ShortestWord.java | |
7 | JadenCasingStrings.java | |
7 | OnesAndZeros.java | |
7 | MoneyMoneyMoney.java | |
7 | DescendingOrder.java | |
7 | GrowthOfAPopulation.java | |
8 | RemoveStringSpaces.java | |
8 | Multiply.java |
Интерфейс
Итак, войдя под своей учетной записью вы попадаете на страницу, где вам будет предложена следующая задача для решения. Но лучше перейти к списку всех задач и выбрать для себя подходящие. В панели слева нажмите на Kata. Слово “ката” взято из восточных боевых искусств и в данном случае употребляется как упражнение в программировании, повышающее навыки программиста через практику и повторение.
Итак, нажали на Kata и появляется страница с задачами:
По умолчанию здесь собраны последние каты. В разделе Diffuculty вы можете выбрать для себя подходящий уровень сложности. Всего 8 уровней. 8 kyu — самый простой и 1 kyu самый сложный. Термин kyu (кю) — также взят из карате и означает сколько степеней еще осталось до мастера (1 dan).
- Sort by: Most Completed (наиболее решенные)
- Language: My Languages
- Status: Approved
- Progress: Kata I have not trained on (Каты, которые я не решал)
- Difficulty: сложность любая
Добавьте эту страницу в закладки. Так не придется каждый раз выставлять эти настройки и всегда будет предложена актуальная для вас задача.
Решать задачи, с которыми справились большинство участников — это почти гарантия, что в ней отсутствуют недочеты, а также то, что вы её скорее всего решите сами, и как следствие — захотите ещё.
Нажав на заголовок задачи, вы попадете на страницу с её описанием:
- Здесь дается описание и примеры.
- Если готовы приступить, нажмите кнопку TRAIN.
- Язык программирования, выбранный для этой задачи.
- Во вкладке Solutions можно подсмотреть решения, но тогда вам не засчитают очки.
- Задачу можно добавить в избранное, чтобы решить её позже, нажав на звездочку.
Нажав на кнопку TRAIN появится следующее окно:
- Здесь также присутствует описание.
- В этом окне нужно вставить свое решение.
- Здесь представлена часть тестов, через которые будет проходить ваше решение.
- RUN SAMPLE TESTS запускает тесты, упомянутые в пункте 3.
- ATTEMPT — запускает все тесты. Их может быть 100 и больше. Я всегда нажимаю сразу на эту кнопку, потому что я могу пройти тесты из пункта 3, но не пройти случайные тесты, так что смысла в RUN SAMPLE TESTS практически нет.
Писать код можно прямо на месте (в окне, помеченным номером 2) и тут же его проверять, но я предпочитаю делать это в стороннем сервисе, таком как repl.it (онлайн редактор кода). Это связано с тем, что когда на работе выпадает свободная минутка и я могу порешать задачку, такие сервисы, как repl.it — это быстро и удобно.
Итак, вы нашли решение, вставили его в нужное окно и нажали ATTEMPT.
- В данном случае — мое решение.
- Показывается количество пройденных тестов. Когда все тесты подсвечены зеленым цветом, это значит, что они пройдены. Если красным, то не пройдены.
- Сообщение о том, что вы еще можете сделать рефакторинг или добавить комментарии к коду.
- Нажав на SUBMIT FINAL вы отправляете финальную версию вашего решения, которое увидят остальные участники сайта.
После окончательного подтверждения своего кода, откроется окно с решениями остальных участников. Первыми идут самые популярные, с высоким рейтингом. Сразу хочу предупредить, что чаще всего в первых рядах будут решения длинною в несколько строк. Это больше выглядит на шифр, который иногда трудно разобрать. Пусть такие решения не наводят вас на мысль, что вы, наверное, плохой программист. Поначалу вы можете просто не знать какие-то встроенные методы или регулярные выражения, которые сильно сокращают код. Попробуйте разобраться хотя бы с одним таким “умным” кодом и решить задачу еще раз, но уже с новыми знаниями.
- Самое популярное решение. В принципе, очень схожее с моим.
- “Умное” решение. Как видно, его понять несколько сложнее, чем пример выше.
- Можно поднимать репутацию решения, как “Лучшие практики”, если вы находите их таковыми. Но здесь это довольно спорно и не всегда объективно. Например, 419 человек отметили, что решение придерживается лучших практик написания кода. Но в нем отсутствует, например, проверка на тип введенных данных пользователем. Если он введет вместо числа какое-нибудь слово, то код уже не будет работать. Напомню, что в данном случае речь идет о JavaScript.
- Или можно отметить решение, как “Умное”. Но я уже выше писал про “умный” код — пусть он вас не подавляет, но учит.
How we use your information
When you use our website
Like most website operators, Codewars collects non-personally-identifying information of the sort that web browsers and servers typically make available, such as the browser type, language preference, referring site, and the date and time of each visitor request. Our purpose in collecting non-personally identifying information is to better understand how our visitors use its website. From time to time, Codewars may release non-personally-identifying information in the aggregate, e.g., by publishing a report on trends in the usage of its website.
When you use our website to browse our content and view the information we make available, a number of cookies are used by us and by third parties to allow the website to function, to collect useful information about visitors and to help to make your user experience better.
Some of the cookies we use are strictly necessary for our website to function. Codewars visitors who do not wish to have cookies placed on their computers should set their browsers to refuse cookies before using our websites, with the drawback that certain features of our websites may not function properly without the aid of cookies.
A visitor’s IP address may be logged within our system, typically for debugging purposes, separate from our system application databases. The IP address may remain stored within our logs for up to 3 months.
When you purchase a subscription from our website
We require this information in order to process your payment, deliver your products or services and fulfill our contract with you.
Your information is stored on our website and on our cloud servers, both of which are based within the United States. Your credit card details are passed directly to a third-party payment processor which is based in the United States and is certified to the EU-US Privacy Shield (which requires effective safeguards for your information). We do not retain your credit card information.
We keep your order information for an indefinite period, for our accounting purposes.
When you take or create kata via our website
The primary function of Codewars is to create and/or solve coding challenges, which we call kata. Each time you complete a kata, your solution with the username that you specify may be shown within a list of other solutions for that kata. Each time you publish a kata that you created, your kata will be displayed within our public kata directory, with your username and profile link associated to the content.
We keep your user information for as long as you have a user account with us.
You may decide to delete your account at any time. A deleted account will result in the username being removed from all content, including kata and solutions, associated with that name. In its place will be a generated non-personally identifiable name. The related profile page will be deleted.
When you take part in our feedback survey
We use this information to develop and improve our products and services and our customer relationships. Your job role, organization and some or all of your comments may be publicly displayed on our website as a testimonial. We will do this based on our legitimate interest in marketing our products and services.
Your details are shared with a third party surveys system which is based within the United States.
We do not use the information you provide to make any automated decisions that might affect you.
Your personal data is stored for three years, or for as long as we are marketing the product or services that the review refers to, whichever is shorter. You may ask us to remove a testimonial that is based on your feedback from our website at any time.
User
We support the following actions:
Action | Meaning |
---|---|
rank_upgraded | The user’s rank has been upgraded. Could be a global rank, or a language rank |
honor_changed | The user’s honor has changed (usually in a positive direction) |
Errors
Codewars uses conventional HTTP response codes to indicate success or failure of an API request.
In general, codes in the 2xx range indicate success, codes in the 4xx range indicate an error that resulted from
the provided information (e.g. a required parameter was missing, a charge failed, etc.), and codes in the
5xx range indicate an error with Codewars’ servers.
Error Code | Meaning |
---|---|
400 | Bad Request – Something went wrong |
401 | Unauthorized – Your API key is wrong |
403 | Forbidden – You do not have permission to access this resource |
404 | Not Found – The specified resource could not be found |
405 | Method Not Allowed – You tried to access a resource with an invalid method |
406 | Not Acceptable – You requested a format that isn’t json |
422 | Unprocessable Entity – Your input failed validation. |
429 | Too Many Requests – You’re making too many API requests. |
500 | Internal Server Error – We had a problem with our server. Try again later. |
503 | Service Unavailable – We’re temporarily offline for maintenance. Please try again later. |
Your rights as a data subject
By law, you can ask us what information we hold about you, and you can ask us to correct it if it is inaccurate. If we have asked for your consent to process your personal data, you may withdraw that consent at any time.
If we are processing your personal data for reasons of consent or to fulfill a contract, you can ask us to give you a copy of the information in a machine-readable format so that you can transfer it to another provider.
If we are processing your personal data for reasons of consent or legitimate interest, you can request that your data be erased.
You have the right to ask us to stop using your information for a period of time if you believe we are not doing so lawfully.
Finally, in some circumstances you can ask us not to reach decisions affecting you using automated processing or profiling.
Статистика
В правом верхнем углу вы можете увидеть:
- Сохраненные в избранное задачки.
- Уведомления, которые будут появляться крайне редко.
- Текущий разряд. 8 кю самый низкий, 1 кю — самый высокий, а после 1 кю идут 1 — 4 дан, это уже мастера.
- Очки репутации. Они даются за каждую решенную задачу, а также некоторые действия в сообществе. Чем больше очков, тем больше у вас привилегий, которыми вы пользоваться скорее всего не будете. Например, скрывать самостоятельно комментарии, если они содержат спойлер.
Перейдя в профиль можно ознакомиться со статистикой поподробнее:
- Разряд.
- Очки репутации.
- Позиция в рейтинговой таблице.
- Процентный показатель репутации относительно других участников.
- Общее количество выполненных задач.
- Визуальное представление сколько еще осталось до следующего разряда. В моем случае я прошел только 15,2%.
Несколько слов о рейтинге. Несмотря на то, что на данный момент у меня 4 kyu, фактически я не могу еще решать задачи с таким же уровнем сложности. Более менее комфортно я себя чувствую на задачах уровня 6 kyu. 5 kyu уже заставляют меня поломать голову, но еще вполне могу решить
Как же так получилось, что у меня 4 разряд? Дело в том, что системе не важно, какой сложности задачи вы решаете. Главное — количество
Было бы логичнее, если бы прогресс учитывался при решении конкретных задач. Например, если я решил 30 задач 6 kyu, мне присваивают 6 разряд. А так, решая задачи только для 8 разряда вы получите 6-й. Просто это будет дольше. Чем ниже сложность задачи, тем меньше очков она дает.
Однако, цифра позиции в рейтинговой таблице куда интереснее. Глядя на нее вы можете вспомнить, как занимали ~234,567 место, но своими стараниями обогнали большинство участников этого сайта.
Напоследок, хочу посоветовать никогда не подсматривать ответы до того, как найти своё решение. Даже если несколько часов у вас ничего не получается, ответ может прийти завтра. И пусть ваш код не будет элегантным и коротким, но зато вы нашли нужный алгоритм самостоятельно и повысили свой уровень решения задач. А это самое главное. Сделать рефакторинг кода никогда не будет поздно. Игнорируйте мысли о том ,что всё должно быть идеально с самого начала. Особенно интересно получается, когда вы видите другое хорошее решение, в этот момент новая информация закрепляется намного эффективнее, чем, если бы узнали её не промучившись целый день над своим решением.
Также, берите задачи, которые вам больше нравятся. К примеру, я пропускаю математические задачи, потому что даже не понимаю о чем в них речь вообще. Это касается не только математических задач — иногда описание бывает очень плохим. В этом случае может быть полезным почитать дискуссию, где, возможно кто-то оставил более понятное объяснение.
Успехов!
Регистрация
Впервые попав на этот сайт, вам предлагают пройти небольшое задание. (Хотя, я не уверен, возможно его можно обойти.)
Я выбираю . Появляется окно, где мне предлагается выяснить, почему представленный код не работает должным образом.
В этом коде мы видим функцию , суть которой умножить два числа друг на друга. В JavaScript, чтобы функция возвращала какой-то результат, должно использоваться ключевое слово .
После того, как я исправил код, я нажимаю Submit для запуска тестов. Итак, мой код прошел все тесты и далее предлагается завести учетную запись или подключить свой GitHub аккаунт.
(Если у вас еще нет аккаунта на github.com, очень рекомендую завести, поскольку вам не нужно будет впоследствии постоянно регистрироваться на подобных сайтах — достаточно просто войти под учетной записи GitHub.)
По сути, это задание является наглядной демонстрацией (в упрощенном варианте), как происходит решение задач на сайте Codewars. Но я расскажу еще немного подробнее.
Kata Ranking (kyu)
source: Codewars Wiki Honor & Ranks and Codewars Wiki Kata Ranking
Ranks are used to indicate progression and difficulty. Code Warriors complete Kata which are assigned a rank, which in turn earns them a higher rank once they complete enough of them. There are two classes of ranks, Kyu and Dan. You begin with Kyu at level 8 and work your way down to level 1. Then you progress to Dan, where you work your way up from level 1 to level 8.
4 kyu kata represent a competent programming level.
At this level the kata begin to take some serious thought to complete. They include tasks that may handle:
- Computer science concepts utilizing complex algorithms
- Advanced design patterns
- Understanding intricate business requirements
- Advanced concepts such as concurrency, parallelism, meta programming and cryptography
5 kyu kata represent a novice programming level.
At this level the kata are similar to 6 kyu but more challenging. It includes:
- Complex language features that require mature OOP/Functional concepts
- Advanced OOP/Functional concepts
- Complex Design Patterns
- Advanced regular expression usage
6 kyu kata represent a novice programming level.
At this level the kata will start to include more advanced algorithmic challenges and more complex language features. It includes:
- Complex language features (closures, scopes, monads, etc)
- Complex OOP/Functional concepts
- Basic Design Patterns
- Complex Regular Expressions
7 kyu kata represent a beginner programming level.
At this level the kata will generally challenge users on their core language and API reference knowledge. Tasks such as:
- Iterating arrays and returning a subset of values
- Basic data type manipulations
- Basic functional or object-oriented concepts
- Basic Regular Expressions
8 kyu kata represent a beginner level.
At this level the kata is only challenging for users new to programming. This includes programming tasks such as:
- Defining a simple function (i.e. hello world)
- Basic variable assignments
- Fixing basic syntax issues
- Trivial algorithms such as basic if/else statements