Odesk PHP Frontend Developer Test v2 answer

In this test there are 4 questions they are following.


Question no 1:- Fantastic three sequence

Solution :-
<?php
function fantastic3($n) {
$series = array(0,1,1,1);
for($i=3 ; $i<=$n ; $i++){
$a = (isset($series[ (int)$i-3 ]))?$series[ (int)$i-3 ]:0;
$b = (isset($series[ (int)$i-2 ]))?$series[ (int)$i-2 ]:0;
$c = (isset($series[ (int)$i-1 ]))?$series[ (int)$i-1 ]:0;
$d = ($a+$b+$c)-1;
if($d<0){
$d = 0;
}
$series[$i] = $d;
}
echo $series[ (int)$n-1 ];
}
// Do NOT call the fantastic3 function in the code
// you write. The system will call it automatically.
?>

Question no 2 :-Counts Days


Solution :-
<?php
function countDays($dateInString) {
$date = explode(".",$dateInString);
if(count($date) == 3 && checkdate($date[0], $date[1], $date[2])){
$formatted_date = $date[2]."-".$date[0]."-".$date[1]."00:00:00";
$diff = strtotime($formatted_date);
$diff2 =  strtotime($date[2]."-01-01 00:00:00");
$diff3 = $diff -$diff2;
echo round($diff3/86400)+1;
} else {
echo "Bad format";
}
}
// Do NOT call the countDays function in the code
// you write. The system will call it automatically.
?>

Question no 3 :- Change Nickname.

Solution :-
<?php
function changeNickname($oldNickname, $newNickname, $users){
$valid = preg_match('/^(([^0-9])+([A-Za-z0-9\$\#\<\>\-\_]+))$/i', $newNickname, $matches);
if($valid == true){
$old_found = false;
$new_exists = false;
foreach($users as $id => $user){
if($user['nickname'] == $oldNickname){
$old_found = true;
}
if($user['nickname'] == $newNickname){
$new_exists = true;
}
}
if($old_found == true && $new_exists == false){
echo 'Your nickname has been changed from '.$oldNickname.' to '.$newNickname;
} else {
echo 'Failed to update';
}
} else {
echo 'Failed to update';
}
}
// Do NOT call the changeNickname function in the code
// you write. The system will call it automatically.
?>

Question no 4 :- Calculate shipping fees.

Solution :-
<?php
// Do not modify the Shipping class.
abstract class Shipping
{
private $_itemsCount;
private $_distance;
public function __construct($itemsCount, $distance)
{
$this->_itemsCount = $itemsCount;
$this->_distance = $distance;
}
abstract public function getFees();
public function getDistance()
{
return $this->_distance;
}
public function getItemsCount()
{
return $this->_itemsCount;
}
}
// You can modify code below this comment.
class InternationalShipping extends Shipping

{

private $_internationalDistance;

private $_percent_d;

private $_percent_i_d;

public function __construct($itemsCount, $distance, $internationalDistance){

parent::__construct($itemsCount, $distance);

$this->_internationalDistance = $internationalDistance;

$this->_percent_d = 0.8;

$this->_percent_i_d = 1.2;

}

public function getInternationalDistance(){

return $this->_internationalDistance;

}

#local shipping: number of items * distance * .8

#international shipping: number of items *

#( local distance * .8 + international distance * 1.2)

public function getFees(){

$number_of_items = $this->getItemsCount();

$local_distence = $this->getDistance();

$internalDistance= $this->getInternationalDistance();

$_percent_d = $this->_percent_d;

$_percent_i_d = $this->_percent_i_d;

return $number_of_items * ( $local_distence * $_percent_d + $internalDistance * $_percent_i_d );

}

}

class LocalShipping extends Shipping

{

private $_percent_d;

public function __construct($itemsCount, $distance){

parent::__construct($itemsCount, $distance);

$this->_percent_d = 0.8;

}

#number of items * distance * .8

public function getFees(){

$number_of_items = $this->getItemsCount();

$local_distence = $this->getDistance();

$_percent_d = $this->_percent_d;

return $number_of_items * ( $local_distence * $_percent_d );

}

}

function calculateShippingFees($items, $out = 'print') {

// To print results to the standard output you can use print
// Example:
// print "Hello world!";

$sum = 0;

foreach ($items as $item){
if(! is_a($item, "Shipping"))
$sum += 0;
else
$sum += $item->getFees();
}
if($out == 'print')
print( $sum );
return $sum;
}
// Do NOT call the calculateShippingFees function in the code
// you write. The system will call it automatically.
?>

Tips:-
Do not make any white spaces between codes and test you code before submit question. Enjoy....!

No comments:

Post a Comment