Skip to content

Commit 3440a23

Browse files
committed
PHP and Javascript solutions to 8 more moderate challenges (#5 - Detecting cycles, #84 - Balanced Smileys, #35 - Email Validation, #133 - City blocks Flyover, #81 - Sum to Zero, #17 - Sum of integers, #34 - Number pairs, #15 - Endianness)
1 parent b6dc4bd commit 3440a23

File tree

16 files changed

+709
-0
lines changed

16 files changed

+709
-0
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// https://www.codeeval.com/open_challenges/133/
2+
3+
var fs = require("fs");
4+
fs.readFileSync(process.argv[2]).toString().split('\n').forEach(function (line) {
5+
line = line.trim();
6+
if( line !== '' ){
7+
var tmp = line.split(' ');
8+
var streets = tmp[0].substr(1, tmp[0].length - 2).split(',');
9+
var avenues = tmp[1].substr(1, tmp[1].length - 2).split(',');
10+
11+
var smax = streets.length - 1;
12+
var amax = avenues.length - 1;
13+
14+
var tan = avenues[amax] / streets[smax];
15+
var crossed = 0;
16+
17+
for( var s=0 ; s < smax ; s++ ){
18+
for( var a=0 ; a < amax ; a++ ){
19+
var curr_x = streets[s];
20+
var curr_y = avenues[a];
21+
22+
var next_x = streets[s+1];
23+
var next_y = avenues[a+1];
24+
25+
if ( (next_x > (curr_y / tan)) && (next_y > (tan * curr_x)) ){
26+
crossed++;
27+
}
28+
}
29+
}
30+
console.log(crossed);
31+
}
32+
});
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?php
2+
header('Content-Type: text/plain; charset=utf-8');
3+
4+
// https://www.codeeval.com/open_challenges/133/
5+
6+
if( isset($_GET['f_i_l_e']) && $_GET['f_i_l_e'] ) $argv[1] = $_GET['f_i_l_e'];
7+
8+
if( isset($argv[1]) && $argv[1] ){
9+
$filename = $argv[1];
10+
if( file_exists($filename) ){
11+
if( is_readable($filename) ){
12+
$fp = fopen($filename, 'r');
13+
if( $fp ){
14+
while ( $fp && !feof( $fp ) ) {
15+
$line = trim(fgets($fp));
16+
if( $line ){
17+
// echo $line."\n";
18+
list($streets, $avenues) = explode(' ',$line);
19+
$streets = explode(',',trim($streets,'()'));
20+
$avenues = explode(',',trim($avenues,'()'));
21+
22+
$smax = count($streets) - 1;
23+
$amax = count($avenues) - 1;
24+
25+
$tan = $avenues[$amax] / $streets[$smax];
26+
27+
$crossed = 0;
28+
29+
// echo count($avenues)."\n";
30+
// echo $tan . "\n";
31+
for( $s=0 ; $s < $smax ; $s++ ){
32+
for( $a=0 ; $a < $amax ; $a++ ){
33+
$curr_x = $streets[$s];
34+
$curr_y = $avenues[$a];
35+
36+
$next_x = $streets[$s+1];
37+
$next_y = $avenues[$a+1];
38+
39+
// echo 'from ('.$curr_x.','.$curr_y.') to ('.$next_x.','.$next_y.')'."\n";
40+
if ( ($next_x > ($curr_y / $tan)) && ($next_y > ($tan * $curr_x)) ){
41+
$crossed++;
42+
// echo '++'."\n";
43+
}
44+
45+
}
46+
}
47+
echo $crossed."\n";
48+
}
49+
50+
}//
51+
fclose( $fp );
52+
}
53+
else{
54+
echo '!fp'."\n";
55+
}
56+
}
57+
else{
58+
echo '!readable'."\n";
59+
}
60+
}
61+
else{
62+
echo '!file_exists'."\n";
63+
}
64+
}
65+
else{
66+
echo '!argv[1]'."\n";
67+
}
68+
69+
exit(0);
70+
71+
?>

moderate/15 - Endianness/15.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// https://www.codeeval.com/open_challenges/15/
2+
3+
function endianness () {
4+
var b = new ArrayBuffer(4);
5+
var a = new Uint32Array(b);
6+
var c = new Uint8Array(b);
7+
a[0] = 0xdeadbeef;
8+
if (c[0] == 0xef) return 'LittleEndian';
9+
if (c[0] == 0xde) return 'BigEndian';
10+
throw new Error('unknown endianness');
11+
}
12+
console.log( endianness() );

moderate/15 - Endianness/15.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
header('Content-Type: text/plain; charset=utf-8');
3+
// https://www.codeeval.com/open_challenges/15/
4+
function isLittleEndian() {
5+
$testint = 0x00FF;
6+
$p = pack('S', $testint);
7+
return $testint===current(unpack('v', $p));
8+
}
9+
echo ( isLittleEndian() ? 'LittleEndian' : 'BigEndian' ) . "\n";
10+
?>
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// https://www.codeeval.com/open_challenges/17/
2+
3+
// Kadane's algorithm
4+
5+
var fs = require("fs");
6+
fs.readFileSync(process.argv[2]).toString().split('\n').forEach(function (line) {
7+
line = line.trim();
8+
if( line !== '' ){
9+
var tmp = line.split(',');
10+
var first = Number(tmp[0]);
11+
var current_sum = first,
12+
best_sum = first;
13+
14+
for( var i=1, cnt=tmp.length; i < cnt ; i++){
15+
var x = Number(tmp[i]);
16+
if( current_sum + x > x ){
17+
// if x increases sum, add x
18+
current_sum += x;
19+
}
20+
else{
21+
// if not, take x as sum
22+
current_sum = x;
23+
}
24+
if( current_sum > best_sum ){
25+
best_sum = current_sum;
26+
}
27+
}
28+
console.log(best_sum);
29+
}
30+
});
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
header('Content-Type: text/plain; charset=utf-8');
3+
4+
// https://www.codeeval.com/open_challenges/17/
5+
6+
if( isset($_GET['f_i_l_e']) && $_GET['f_i_l_e'] ) $argv[1] = $_GET['f_i_l_e'];
7+
8+
if( isset($argv[1]) && $argv[1] ){
9+
$filename = $argv[1];
10+
if( file_exists($filename) ){
11+
if( is_readable($filename) ){
12+
$fp = fopen($filename, 'r');
13+
if( $fp ){
14+
while ( $fp && !feof( $fp ) ) {
15+
$line = trim(fgets($fp));
16+
if( $line ){
17+
$tmp = explode(',', $line);
18+
$current_sum = $best_sum = $tmp[0];
19+
20+
for( $i=1, $cnt = count($tmp); $i < $cnt ; $i++){
21+
$x = $tmp[$i];
22+
if( $current_sum + $x > $x ){
23+
// if x increases sum, add x
24+
$current_sum += $x;
25+
}
26+
else{
27+
// if not, take x as sum
28+
$current_sum = $x;
29+
}
30+
if( $current_sum > $best_sum ){
31+
$best_sum = $current_sum;
32+
}
33+
}
34+
echo $best_sum."\n";
35+
}
36+
37+
}//
38+
fclose( $fp );
39+
}
40+
else{
41+
echo '!fp'."\n";
42+
}
43+
}
44+
else{
45+
echo '!readable'."\n";
46+
}
47+
}
48+
else{
49+
echo '!file_exists'."\n";
50+
}
51+
}
52+
else{
53+
echo '!argv[1]'."\n";
54+
}
55+
56+
exit(0);
57+
58+
?>

moderate/34 - Number Pairs/34.js

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// https://www.codeeval.com/open_challenges/34/
2+
var fs = require("fs");
3+
fs.readFileSync(process.argv[2]).toString().split('\n').forEach(function (line) {
4+
line = line.trim();
5+
if( line !== '' ){
6+
var tmp = line.split(';');
7+
var numbers = tmp[0].split(',');
8+
var sum = Number(tmp[1]);
9+
var half_sum = sum / 2;
10+
var cnt = numbers.length;
11+
var i = cnt;
12+
while( i--){
13+
numbers[i] = Number(numbers[i]);
14+
}
15+
16+
var lower_value = numbers[0];
17+
var pairs = [];
18+
// console.log(line);
19+
i = cnt;
20+
while( i-- > 1 ){
21+
var ni = numbers[i];
22+
23+
// console.log('ni',ni);
24+
if( half_sum > ni ){
25+
// console.log('no more pairs possibles 1');
26+
break;
27+
}
28+
29+
var target = sum - ni;
30+
if( ni >= sum && lower_value > target ){
31+
// console.log('no more pairs possibles 2');
32+
continue;
33+
}
34+
// console.log('target',target);
35+
var j = i;
36+
while( j-- ){
37+
var nj = numbers[j];
38+
// console.log('nj',nj);
39+
if( nj == target ){
40+
// console.log(ni,nj);
41+
pairs.push(nj+','+ni);
42+
}
43+
else if( nj < target ){
44+
// console.log('nj too small => next i');
45+
break;
46+
}
47+
}
48+
}
49+
if( pairs.length ){
50+
console.log(pairs.join(';'));
51+
}
52+
else{
53+
console.log('NULL');
54+
}
55+
56+
}
57+
});

moderate/34 - Number Pairs/34.php

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<?php
2+
header('Content-Type: text/plain; charset=utf-8');
3+
4+
// https://www.codeeval.com/open_challenges/34/
5+
6+
if( isset($_GET['f_i_l_e']) && $_GET['f_i_l_e'] ) $argv[1] = $_GET['f_i_l_e'];
7+
8+
if( isset($argv[1]) && $argv[1] ){
9+
$filename = $argv[1];
10+
if( file_exists($filename) ){
11+
if( is_readable($filename) ){
12+
$fp = fopen($filename, 'r');
13+
if( $fp ){
14+
while ( $fp && !feof( $fp ) ) {
15+
$line = trim(fgets($fp));
16+
if( $line ){
17+
list($numbers, $sum) = explode(';', $line);
18+
19+
$numbers = explode(',',$numbers);
20+
$half_sum = $sum / 2;
21+
$cnt = count($numbers);
22+
$lower_value = $numbers[0];
23+
$pairs = array();
24+
$i = $cnt;
25+
while( $i-- > 1 ){
26+
$ni = $numbers[$i];
27+
28+
if( $half_sum > $ni ){
29+
break;
30+
}
31+
32+
$target = $sum - $ni;
33+
if( $ni >= $sum && $lower_value > $target ){
34+
continue;
35+
}
36+
37+
$j = $i;
38+
while( $j-- ){
39+
$nj = $numbers[$j];
40+
if( $nj == $target ){
41+
$pairs[] = $nj.','.$ni;
42+
}
43+
else if( $nj < $target ){
44+
break;
45+
}
46+
}
47+
}
48+
echo ( $pairs ? implode(';', $pairs) : 'NULL' ) . "\n";
49+
}
50+
51+
}//
52+
fclose( $fp );
53+
}
54+
else{
55+
echo '!fp'."\n";
56+
}
57+
}
58+
else{
59+
echo '!readable'."\n";
60+
}
61+
}
62+
else{
63+
echo '!file_exists'."\n";
64+
}
65+
}
66+
else{
67+
echo '!argv[1]'."\n";
68+
}
69+
70+
exit(0);
71+
72+
?>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// https://www.codeeval.com/open_challenges/35/
2+
3+
var regexp = new RegExp(/^(("[^"]+")|([A-Za-z0-9._%+-]+))@[A-Za-z0-9.-]+\.[A-Za-z]+$/);
4+
5+
var fs = require("fs");
6+
fs.readFileSync(process.argv[2]).toString().split('\n').forEach(function (line) {
7+
line = line.trim();
8+
if( line !== '' ){
9+
console.log( regexp.test(line)?'true':'false' );
10+
}
11+
});

0 commit comments

Comments
 (0)