十一返乡的绿皮车异常拥挤,漫长的旅途连一碗泡面都吃不上,百无聊赖之际想起手机里还有 hacked 这个游戏,这是我的手机中除了 chrome 的小恐龙之外的唯一一款游戏了,当初初学 C 语言,未能通关便放弃了,它就这样躺在手机里一年多,如今终于通关。

先贴一张图:

hacked-story

好了,放代码:

The Hackpad

Increment me

Sample Input/Output

2 => 3
5 => 8
8 => 9

输入 +1

input + 1;

Positive

3 => true
-7 => false
9 => true

判断正负

input > 0;

Absolute

Sample Input/Output

1 => 1
-2 => 2
0 => 0

此时没有 abs 函数,需要手写

if input < 0 {
return -input;
}
return input;

Absolute 2

Sample Input/Output

1 => 1
-2 => 2
0 => 0

得到 abs 函数,直接调用即可

return abs(input);

High School Hack

Power

Sample Input/Output

2 => 4
3 => 9
4 => 16

此时没有 pow 函数,需要手写

while var_a < input {
var_b = var_b + input;
var_a++;
}
var_b;

Power 2

Sample Input/Output

2 => 4
3 => 9
4 => 16

得到 pow 函数,直接调用即可

return pow(input, 2);

length

Sample Input/Output

[3, 8] => 2
[4, 5, 3] => 3
[6] => 1

此时没有 length,需要手写

foreach var_a in input {
var_b++;
}
return var_b;

Push it

Sample Input/Output

5 => [0, 1, 2, 3, 4]
2 => [0, 1]
0 => []

根据输入输出列表

var_a = [];
while var_b < input {
var_a.push(var_b);
var_b++;
}
return var_a;

Jailbreak

Max

Sample Input/Output

[3, 8] => 8
[3, 1] => 3
[0, 99] => 99

求两个数中大的那个,此时没有 max 函数,需要手写

if input[0] < input[1] {
return input[1];
}
return input[0];

Maxxxx

Sample Input/Output

[3, 1, 8, 0, 2] => 8
[1, 3, 2] => 3
[9, 42, 7, 13] => 42

输出列表中最大的数

foreach var_a in input {
var_b = max(var_b, var_a);
}
return var_b;

This is odd

Sample Input/Output

5 => 7
7 => 1
2 => 0

判断奇偶,此时没有 mod 函数

return input - input / 2 * 2;

A man, a plan, a cancel: Panama

Sample Input/Output

[c, a, t] => false
[k, a, y, a, k] => true
[b, o, b] => true

判断回文串

while var_a < input.length / 2 {
if input[var_a] != input[input.length - var_b - 1] {
return false;
}
var_a++;
}
return true;

Cheatcode

Bring some order

Sample Input/Output

[c, b, a] => [a, b, c]
[d, g, e, h, f] => [d, e, f, g, h]
[z, x, y, w] => [w, x, y, z]

字符排序,随便写个排序算法,我写个容易实现的冒泡排序

while var_a < input.length {
var_b = var_a + 1;
while var_b < input.length {
if input[var_a] > input[var_b] {
var_c = input[var_a];
input[var_a] = input[var_b];
input[var_b] = var_c;
}
var_b++;
}
var_a++;
}
return input;

Missing numbers

Sample Input/Output

[0, 3, 2] => [1]
[1, 3] => [0, 2]
[4, 2, 3] => [0, 1]

补充缺失的数

var_a = [];
input.sort();
while var_b < input[input.length-1] {
if var_b < input[var_c] {
var_a.push(var_b);
}
else {
var_c++;
}
var_b++;
}
return var_a;

Anagrams

Sample Input/Output

[[d, a, d], [a, d, d]] => true
[[a, t, e], [e, a, t], [t, e, a]] => true
[[n, o, t], [o, n, e]] => false

判断各元素是否相同

while var_a < input.length - 1 {
if input[var_a].sort() != input[var_a + 1].sort() {
return false;
}
var_a++;
}
return true;

Corruped

110101110101000101

Sample Input/Output

[1, 0, 1] => 5
[0, 1, 0] => 2
[1, 1, 0] => 6

二进制转换为十进制

foreach var_a in input {
var_b = var_b * 2 + var_a;
}
return var_b;

Prime

Sample Input/Output

3 => true;
12 => false;
17 => true;

素数判定

if input < 2 {
return false;
}
var_a = 2;
while var_a < input / 2 {
if mod(input, var_a) == 0 {
return false;
}
var_a++;
}
return true;

Number in order

Sample Input/Output

[f, o, r, t, y] => true
[d, o, s] => true
[q, u, a, t, r, e] => false

判断字符列表是否升序

while var_a < input.length - 1 {
if input[var_a] > input[var_a + 1] {
return false;
}
var_a++;
}
return true;

Cyber Attack

Complete

Sample Input/Output

[0, 1] => [0, 1]
[1, 2] => [0, 1, 2]
[3, 4, 5] => [0, 1, 2, 3, 4, 5]

补充缺失的数字

while var_a < input.length {
if input[var_a] != var_a {
input.insert(var_a, var_a);
}
var_a++;
}
return input;

Match

Sample Input/Output

[(, )] => true
[(, (, )] => false
[(, (, ), )] => true

括号匹配,只有小括号,不需要栈

foreach var_a in input {
if var_a == "(" {
var_b++;
}
else {
var_b--
}
if var_b < 0 {
return false;
}
}
return var_b == 0;

Rotate

Sample Input/Output

[2, 5] => [5, 2]
[3, 8, 4] => [8, 4, 3]
[6, 2, 9, 1] => [2, 9, 1, 6]

将列表循环左移一位

input.push(input[0]);
input.remove(0);
return input;

Nuclear Plant

Add one

Sample Input/Output

[0, 1] => [1, 2]
[1, 2] => [2, 3]
[3, 6, 8] => [4, 7, 9]

每个元素值 +1,此时没有 map

while var_a < input.length {
input[var_a]++;
var_a++;
}
return input;

Positivity

Sample Input/Output

[1] => [true]
[-1, 1] => [false, true]
[1, -1, 1] => [true, false, true]

判断每个元素的正负

return input.map(function var_a -> !(var_a < 0))

Nearest to [0, 0]
Sample Input/Output

[[10, 12], [2, 3]] => [2, 3]
[[5, 3], [15, 0]] => [5, 3]
[[12, 3], [6, 15], [1, 2]] => [1, 2]

找出列表中距离原点最近的点

function f1: var_a {
return pow(var_a[0], 2) + pow(var_a[1], 2);
}
input.sort_with(function var_a, var_b -> f1(var_a) < f1(var_b));
return input[0];

Killer Robot

Addition

Sample Input/Output

[[2], [3]] => [5]
[[1, 2], [1, 9]] => [3, 1]
[[3], [1, 2]] => [1, 5]

这里解释一下:

  • 2+3 = 5
  • 12+19 = 31
  • 3+12 = 15

好了,上代码:

function f1: var_a {
foreach var_b in var_a {
var_c = var_c * 10 + var_b;
}
return var_c;
}
var_a = f1(input[0]) + f1(input[1]);
var_b = [0];
while var_a != 0 {
var_b.insert(0, mod(var_a, 10));
var_a = var_a / 10;
}
var_b.remove(var_b.length-1);
return var_b;

Match 2

Sample Input/Output

[(, )] => true
[(, [, ), ]] => false
[(, [, ], )] => true

括号匹配,有两种括号,用下栈就过了

var_a = [];
foreach var_b in input {
if var_b == "(" || var_b =="[" {
var_a.push(var_b);
}
if var_a == [] {
return false;
}
if (var_b == ")" && var_a[var_a.length - 1] == "(") || (var_b == "]" && var_a[var_a.length - 1] == "[") {
var_a.pop();
}
return var_a == [];

Skynet

Tree

Sample Input/Output

[[1, 2], [[3, 4], 5]] => [1, 2, 3, 4, 5]
[[1, 2, 3], [[4], 5]] => [1, 2, 3, 4, 5]
[[1], 2, [[3, 4, 5]]] => [1, 2, 3, 4, 5]

写个递归

var_a = [];
function f1: var_a, var_b {
if !var_a.is_list {
var_b.push(var_a);
}
else {
foreach var_c in var_a {
f1(var_c, var_b);
}
}
}
f1(input, var_a);
return var_a;

Retirement

Draw

画点

return draw(input[0], input[1]);

文档信息

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
本文链接:www.snovey.com/2016/10/hacked-story.html