Commit 5a6b49ee authored by Alexandr Sitchenko's avatar Alexandr Sitchenko

first

parent 815e2a02
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ComposerJsonPluginSettings">
<unboundedVersionInspectionSettings>
<excludedPackages />
</unboundedVersionInspectionSettings>
<customRepositories />
<composerUpdateOptions />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/g5test.iml" filepath="$PROJECT_DIR$/g5test.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="PhpProjectSharedConfiguration" php_language_level="7.2" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="ba25a659-c606-4511-acd9-5873cc15209c" name="Default Changelist" comment="" />
<ignored path="$PROJECT_DIR$/out/" />
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="ComposerSettings">
<execution>
<executable />
</execution>
</component>
<component name="DefaultGradleProjectSettings">
<option name="isMigrated" value="true" />
</component>
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/index.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1674">
<caret line="62" column="24" selection-end-line="146" selection-end-column="1" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/ticket.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="889">
<caret line="146" column="1" selection-start-line="146" selection-start-column="1" selection-end-line="146" selection-end-column="1" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/.gitignore">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="312">
<caret line="12" selection-start-line="12" selection-end-line="12" />
</state>
</provider>
</entry>
</file>
</leaf>
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/autoLoader.php" />
<option value="$PROJECT_DIR$/composer.json" />
<option value="$PROJECT_DIR$/index.php" />
<option value="$PROJECT_DIR$/ticket.php" />
<option value="$PROJECT_DIR$/.gitignore" />
</list>
</option>
</component>
<component name="PhpDebugGeneral" xdebug_debug_port="9009" />
<component name="PhpServers">
<servers>
<server host="localhost/" id="30778991-086d-4490-8432-5bbc7f20bdf4" name="localhost" />
<server host="localhost" id="1bb1ff4c-6a3f-427c-9a9e-b57412c58a80" name="localhost (1)" />
</servers>
</component>
<component name="PhpWebServerValidation" path_to_validation_script="C:\Server\data\htdocs\g5test" selected_validation_type="LOCAL" web_path_to_validation_script="http://localhost/g5test" />
<component name="PhpWorkspaceProjectConfiguration" interpreter_name="PHP 7.2" />
<component name="PhpXdebugProxy" ide_key="IntelliJ" host="localhost" port="9009" />
<component name="ProjectFrameBounds" extendedState="6">
<option name="x" value="2587" />
<option name="y" value="205" />
<option name="width" value="1152" />
<option name="height" value="648" />
</component>
<component name="ProjectView">
<navigator proportions="" version="1">
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="ProjectPane">
<subPane>
<expand>
<path>
<item name="g5test" type="b2602c69:ProjectViewProjectNode" />
<item name="g5test" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
</subPane>
</pane>
<pane id="PackagesPane" />
<pane id="Scope" />
</panes>
</component>
<component name="PropertiesComponent">
<property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="aspect.path.notification.shown" value="true" />
<property name="node.js.detected.package.eslint" value="true" />
<property name="node.js.path.for.package.eslint" value="project" />
<property name="node.js.selected.package.eslint" value="(autodetect)" />
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
<property name="nodejs_npm_path_reset_for_default_project" value="true" />
<property name="settings.editor.selected.configurable" value="reference.webide.settings.project.settings.php.debug" />
</component>
<component name="RecentsManager">
<key name="MoveFile.RECENT_KEYS">
<recent name="C:\Server\data\htdocs\g5test" />
</key>
</component>
<component name="Regex">
<option name="pos1" value="218" />
<option name="pos2" value="218" />
<option name="pos3" value="162" />
<option name="pos4" value="444" />
<option name="pos5" value="162" />
<option name="autoUpdate" value="true" />
<option name="referenceOn" value="false" />
<option name="referencePos" value="0" />
<option name="showLabels" value="true" />
</component>
<component name="RunDashboard">
<option name="ruleStates">
<list>
<RuleState>
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
</RuleState>
<RuleState>
<option name="name" value="StatusDashboardGroupingRule" />
</RuleState>
</list>
</option>
</component>
<component name="RunManager">
<configuration name="g5" type="PhpWebAppRunConfigurationType" factoryName="PHP Web Application" server_name="localhost" start_url="http://localhost/g5test">
<method v="2" />
</configuration>
</component>
<component name="SvnConfiguration">
<configuration />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="ba25a659-c606-4511-acd9-5873cc15209c" name="Default Changelist" comment="" />
<created>1562240726845</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1562240726845</updated>
<workItem from="1562240728127" duration="2747000" />
<workItem from="1562253476483" duration="18756000" />
<workItem from="1562574810315" duration="598000" />
<workItem from="1562580799224" duration="453000" />
</task>
<servers />
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="22554000" />
</component>
<component name="ToolWindowManager">
<frame x="1912" y="-8" width="1936" height="1096" extended-state="6" />
<editor active="true" />
<layout>
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.25" />
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
<window_info id="Designer" order="2" />
<window_info id="UI Designer" order="3" />
<window_info id="Favorites" order="4" side_tool="true" />
<window_info anchor="bottom" id="Message" order="0" />
<window_info anchor="bottom" id="Find" order="1" weight="0.3299285" />
<window_info anchor="bottom" id="Run" order="2" />
<window_info anchor="bottom" id="Debug" order="3" weight="0.4167518" />
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
<window_info anchor="bottom" id="TODO" order="6" />
<window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" />
<window_info anchor="bottom" id="Version Control" order="8" />
<window_info anchor="bottom" id="Regex" order="9" />
<window_info anchor="bottom" id="Database Changes" order="10" />
<window_info anchor="bottom" id="Terminal" order="11" weight="0.3299285" />
<window_info anchor="bottom" id="Event Log" order="12" side_tool="true" />
<window_info anchor="bottom" id="Regex Tester" order="13" />
<window_info anchor="bottom" id="Messages" order="14" />
<window_info anchor="bottom" id="PHP-CGI Server" order="15" />
<window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
<window_info anchor="right" id="Palette" order="3" />
<window_info anchor="right" id="Maven" order="4" />
<window_info anchor="right" id="Palette&#9;" order="5" />
<window_info anchor="right" id="Key Promoter X" order="6" />
<window_info anchor="right" id="Database" order="7" />
<window_info anchor="right" id="JSON Viewer" order="8" />
</layout>
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="1" />
</component>
<component name="debuggerHistoryManager">
<expressions id="evaluateExpression">
<expression>
<expression-string>checkNumbersAtRange(100000)</expression-string>
<language-id>PHP</language-id>
<evaluation-mode>EXPRESSION</evaluation-mode>
</expression>
<expression>
<expression-string>checkNumbersAtRange(333)</expression-string>
<language-id>PHP</language-id>
<evaluation-mode>EXPRESSION</evaluation-mode>
</expression>
<expression>
<expression-string>strlen((string)0004555)</expression-string>
<language-id>PHP</language-id>
<evaluation-mode>EXPRESSION</evaluation-mode>
</expression>
<expression>
<expression-string>strlen((string)4555)</expression-string>
<language-id>PHP</language-id>
<evaluation-mode>EXPRESSION</evaluation-mode>
</expression>
<expression>
<expression-string>(int)log10(4555)+1</expression-string>
<language-id>PHP</language-id>
<evaluation-mode>EXPRESSION</evaluation-mode>
</expression>
<expression>
<expression-string>log10(4555)+1</expression-string>
<language-id>PHP</language-id>
<evaluation-mode>EXPRESSION</evaluation-mode>
</expression>
<expression>
<expression-string>(int) log10(4555)+1</expression-string>
<language-id>PHP</language-id>
<evaluation-mode>EXPRESSION</evaluation-mode>
</expression>
<expression>
<expression-string>(int) log10(001)+1</expression-string>
<language-id>PHP</language-id>
<evaluation-mode>EXPRESSION</evaluation-mode>
</expression>
<expression>
<expression-string>(int) log10(001000)+1</expression-string>
<language-id>PHP</language-id>
<evaluation-mode>EXPRESSION</evaluation-mode>
</expression>
</expressions>
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/g5test.iml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="182">
<caret line="7" column="9" selection-start-line="7" selection-start-column="9" selection-end-line="7" selection-end-column="9" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/composer.json" />
<entry file="file://$PROJECT_DIR$/vendor/autoload.php" />
<entry file="file://$PROJECT_DIR$/autoLoader.php" />
<entry file="jar://$APPLICATION_PLUGINS_DIR$/php/lib/php.jar!/stubs/Core/Core.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="291">
<caret line="55" column="27" selection-start-line="55" selection-start-column="27" selection-end-line="55" selection-end-column="27" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/index.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1674">
<caret line="62" column="24" selection-end-line="146" selection-end-column="1" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/ticket.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="889">
<caret line="146" column="1" selection-start-line="146" selection-start-column="1" selection-end-line="146" selection-end-column="1" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/.gitignore">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="312">
<caret line="12" selection-start-line="12" selection-end-line="12" />
</state>
</provider>
</entry>
</component>
</project>
\ No newline at end of file
<?php
$start = microtime(true);
/**
* "Happy tickets"
*
......@@ -6,142 +7,45 @@
*
* @author Alexandr Sitchenko <alexsitch@outlook.com>
*/
define('LENGTH_NUMBER_TICKET', 6);
define('CHARACTERS_BY_HAPPY', 3);
checkStartParameters();
$data = [
'first' => (int)$_GET['first'],
'end' => (int)$_GET['end']
];
$current = $data['first'];
$ticketsHappy = 0;
/* Numbers are not prepare in the range 100000 - 999999 */
$zeroBeginNumber = checkNumbersAtRange($current);
/* Main Block */
do {
if (!$zeroBeginNumber) {
$ticketsCurrentNumber = $current;
} else {
$zeroBeginNumber = checkNumbersAtRange($current);
$ticketsCurrentNumber = prepareNumberTicketsByHappy($current);
}
if (checkHappyTicket($ticketsCurrentNumber)) {
//echo $ticketsCurrentNumber . '<br>';
$ticketsHappy++;
}
$current++;
} while ((bool)($data['end'] - $current));
echo $ticketsHappy;
/*End Main Block */
/**
* @param string $message
*/
function exitScript(string $message): void
{
exit ($message);
if (!isset ($_GET['first'], $_GET['end'])) {
exit('You haven`t passed the parameters.');
}
/**
* @return bool
*/
function checkStartParameters(): bool
{
if (!isset ($_GET['first'], $_GET['end'])) {
exitScript('You haven`t passed the parameters!');
}
$first = $_GET['first'];
$end = $_GET['end'];
if (!ctype_digit($first) || !ctype_digit($end)) {
exitScript('You must enter the correct parameters!');
}
if (checkStartLength($first) || checkStartLength($end)) {
exitScript('You must enter parameters in format 000XXX!');
}
if (((int)$end - (int)$first) <= 0) {
exitScript('The first parameter must be less than the second!');
}
return true;
if (!ctype_digit($_GET['first']) || !ctype_digit($_GET['end'])) {
exit('You haven`t passed the parameters.');
}
/**
* Numbers are checked by length at start
*
* @param string $number
*
* @return bool
*/
function checkStartLength(string $number) {
return (strlen($number) < LENGTH_NUMBER_TICKET);
}
/**
* Numbers are checked in the range 100000 - 999999
*
* @param int $number
*
* @return bool
*/
function checkNumbersAtRange(int $number): bool
{
$figureInNumber = strlen((string)$number);
return ($figureInNumber < LENGTH_NUMBER_TICKET);
}
if (strlen($_GET['first']) !== 6 || strlen($_GET['end']) !== 6) {
exit('You must enter parameters in format 000XXX!!');
/**
* Zeros are added to the beginning of the current number.
*
* @param int $number
*
* @return string
*/
function prepareNumberTicketsByHappy(int $number): string
{
return str_repeat('0', strlen((string)$number)) . $number;
}
/**
* The main function at this test :)
*
* @param string $ticketsNumber
*
* @return bool
*/
function checkHappyTicket(string $ticketsNumber): bool
{
$firstSum = sumCharacters(substr($ticketsNumber, 0, CHARACTERS_BY_HAPPY));
$endSum = sumCharacters(substr($ticketsNumber, CHARACTERS_BY_HAPPY * (-1), CHARACTERS_BY_HAPPY));
return ($firstSum === $endSum);
if (((int)$_GET['end'] - (int)$_GET['first']) <= 0) {
exit('The first parameter must be less than the second!');
}
$current = (int)$_GET['first'];
$num = $current;
$ticketsHappy = 0;
do {
$sum1 = 0;
$sum2 = 0;
$current = $num;
while ($current > 999) {
$sum1 += $current % 10;
$current = (int)$current / 10;
}
while ($current > 0) {
$sum2 += $current % 10;
$current = (int)$current / 10;
}
if ($sum1 === $sum2) {
++$ticketsHappy;
}
//$happy($current);
$stopLoop = ((int)$_GET['end'] - $num);
++$num;
} while ($stopLoop);
/**
* Summation of a number
*
* @param string $sequence
*
* @return int
*/
function sumCharacters(string $sequence): int
{
$num = (int)$sequence;
$sum = 0;
while ($num > 0) {
$modulo = $num % 10;
$sum += $modulo;
$num = (int)$num / 10;
}
return $sum;
}
\ No newline at end of file
echo $ticketsHappy;
echo '<br /><br />';
echo 'Время выполнения скрипта: ' . round(microtime(true) - $start, 4) . ' сек.';
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment