# Useful code clips

**URL:** <https://discourse.codecombat.com/t/useful-code-clips/30761>\
**Category:** Off-Topic\
**Created:** [September 30, 2021, 2:26am UTC](https://discourse.codecombat.com/t/useful-code-clips/30761 "2021-09-30T02:26:54Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![moonwatcher348](https://sea2.discourse-cdn.com/flex016/user_avatar/discourse.codecombat.com/moonwatcher348/32/24126_2.png) [@moonwatcher348](https://discourse.codecombat.com/u/moonwatcher348)\
**Post date:** [September 30, 2021, 2:26am UTC](https://discourse.codecombat.com/t/useful-code-clips/30761/1 "2021-09-30T02:26:54Z")

</div>

Number 1: Object to String converter:  
Python:

```python

def strObj (obj):
    str = "{"
    for t in obj: str = str + t + ": " + obj[t] + ", "
    return str.substring(0, str.length - 2) + "}"

```

Javascript:

```javascript

function strObj (obj) {
    let str = "{";
    for (let t in obj) str = str + t + ": " + obj[t] + ", ";
    return str.substring(0, str.length - 2) + "}";
}

```

Number 2: hero type detector (useful in dueling grounds or stuff like that)  
Python:  
I’m too lazy to type it, just use a converter, lol.  
Javascript:

```javascript

hero.findOpponent = function () {
    for (let enemy of hero.findEnemies()) if (enemy.id.includes("Hero Placeholder")) return enemy;
    return undefined;
};
hero.findData = function (u) {
    let unit = u;
    var unitData = {hero: null, type: null};
    switch (unit.type) {
        case "assassin": 
            unitData.hero = "Ritic";
            break;
        case "intellect": 
            unitData.hero = "Armando";
            break;
        case "librarian": 
            unitData.hero = "Hushbaum";
            break;
        case "trapper": 
            unitData.hero = "Senick";
            break;
        case "knight": 
            unitData.hero = "Tharin";
            break;
        case "sorcerer": 
            unitData.hero = "Pender";
            break;
        case "goliath": 
            unitData.hero = "Okar";
            break;
        case "duelist": 
            unitData.hero = "Alejandro";
            break;
        case "champion": 
            unitData.hero = "Ida";
            break;
        case "necromancer": 
            unitData.hero = "Nalfar";
            break;
        case "captain": 
            unitData.hero = "Anya";
            break;
        case "samurai": 
            unitData.hero = "Hattori";
            break;
        case "guardian": 
            unitData.hero = "Illia";
            break;
        case "pixie": 
            unitData.hero = "Zana";
            break;
        case "forest-archer": 
            unitData.hero = "Naria";
            break;
        case "potion-master": 
            unitData.hero = "Omarn";
            break;
        case "master-wizard": 
            unitData.hero = "Usara";
            break;
    }
    unit = unitData.hero;
    if (unit === "Illia" || unit === "Anya" || unit === "Tharin" || unit === "Okar" || unit === "Alejandro" || unit === "Ida" || unit === "Hattori" || unit === "Armando" || unit === "Arryn" || unit === "Gordon") unitData.type = "warrior";
    if (unit === "Zana" || unit === "Senick" || unit === "Ritic" || unit === "Naria" || unit === "Amara") unitData.type = "ranger";
    if (unit === "Usara" || unit === "Hushbaum" || unit === "Nalfar" || unit === "Pender" || unit === "Omarn") unitData.type = "wizard";
    return unitData;
    // IKR, I had to write all of that. xD
};

```

If these simple code clips that don’t solve any levels aren’t allowed, please let me know. 🙂  
Also, just a side note: don’t ask how I formatted Javascript code properly 🙂

---

<div class="post-metadata">

**Author:** ![enPointe77](https://sea2.discourse-cdn.com/flex016/user_avatar/discourse.codecombat.com/enpointe77/32/43632_2.png) [@enPointe77](https://discourse.codecombat.com/u/enPointe77)\
**Post date:** [September 30, 2021, 6:04am UTC](https://discourse.codecombat.com/t/useful-code-clips/30761/2 "2021-09-30T06:04:45Z")

</div>

> [@moonwatcher348](#):
>
> ` // IKR, I had to write all of that. xD`

Lol, funny thing to add.

---

<div class="post-metadata">

**Author:** ![Hydrobolic](https://avatars.discourse-cdn.com/v4/letter/h/e47c2d/32.png) [@Hydrobolic](https://discourse.codecombat.com/u/Hydrobolic)\
**Post date:** [September 30, 2021, 6:17am UTC](https://discourse.codecombat.com/t/useful-code-clips/30761/3 "2021-09-30T06:17:01Z")

</div>

`Number 1: Object to String converter:`  
CodeCombat exposes [JSON.stringify](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)

`Number 2: hero type detector`  
Useful! Perhaps look up the name in an object rather than a switch statement?

---

<div class="post-metadata">

**Author:** ![moonwatcher348](https://sea2.discourse-cdn.com/flex016/user_avatar/discourse.codecombat.com/moonwatcher348/32/24126_2.png) [@moonwatcher348](https://discourse.codecombat.com/u/moonwatcher348)\
**Post date:** [September 30, 2021, 12:09pm UTC](https://discourse.codecombat.com/t/useful-code-clips/30761/4 "2021-09-30T12:09:50Z")

</div>

> [@Hydrobolic](#):
>
> CodeCombat exposes [JSON.stringify](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)

It creates a different string though, the conversion mine does is easier to read. (in my opinion)

> [@Hydrobolic](#):
>
> Useful! Perhaps look up the name in an object rather than a switch statement?

Good idea.

---

<div class="post-metadata">

**Author:** ![moonwatcher348](https://sea2.discourse-cdn.com/flex016/user_avatar/discourse.codecombat.com/moonwatcher348/32/24126_2.png) [@moonwatcher348](https://discourse.codecombat.com/u/moonwatcher348)\
**Post date:** [September 30, 2021, 12:41pm UTC](https://discourse.codecombat.com/t/useful-code-clips/30761/5 "2021-09-30T12:41:23Z")

</div>

Is this better?

```javascript

hero.findOpponent = function () {
    for (let enemy of hero.findEnemies()) if (enemy.id.includes("Hero Placeholder")) return enemy;
    return undefined;
};
hero.findData = function (u) {
    let types = {assassin: "Ritic", intellectual: "Armando/Ned", knight: "Tharin", librarian: "Hushbaum", trapper: "Senick", sorcerer: "Pender", goliath: "Okar", duelist: "Alejandro", champion: "Ida", necromancer: "Nalfar", captain: "Anya", samurai: "Hattori", guardian: "Illia", pixie: "Zana"};
    let uData = {hero: types[u.type], type: null};
    if (!(uData.hero)) {
        switch (u.type) {
            case "forest-archer": return {hero: "Naria", type: "Ranger"};
            case "potion-master": return {hero: "Omarn", type: "Wizard"};
            case "master-wizard": return {hero: "Usara", type: "Wizard"};
        }
    }
    u = uData.hero;
    if (u === "Illia" || u === "Anya" || u === "Tharin" || u === "Okar" || u === "Alejandro" || u === "Ida" || u === "Hattori" || u === "Arryn" || u === "Gordon" || u === "Armando/Ned") uData.type = "Warrior";
    if (u === "Zana" || u === "Senick" || u === "Ritic" || u === "Amara") uData.type = "Ranger";
    if (u === "Hushbaum" || u === "Nalfar" || u === "Pender") uData.type = "Wizard";
    return uData;
};

```

Sorry about the delay 😅 I had to go to school…

---

<div class="post-metadata">

**Author:** ![moonwatcher348](https://sea2.discourse-cdn.com/flex016/user_avatar/discourse.codecombat.com/moonwatcher348/32/24126_2.png) [@moonwatcher348](https://discourse.codecombat.com/u/moonwatcher348)\
**Post date:** [October 2, 2021, 7:45pm UTC](https://discourse.codecombat.com/t/useful-code-clips/30761/6 "2021-10-02T19:45:15Z")

</div>

Number 3: distance between points  
Python:

```python
def distanceBetweenPoints (p1, p2):
    return Math.sqrt(Math.pow(Math.abs(p1.x-p2.x), 2) + Math.pow(Math.abs(p1.y-p2.y), 2));

```

Javascript:

```javascript

hero.distanceBetweenPoints = (p1, p2) => Math.sqrt(Math.pow(Math.abs(p1.x-p2.x), 2) + Math.pow(Math.abs(p1.y-p2.y), 2));

```

---

<div class="post-metadata">

**Author:** ![Hydrobolic](https://avatars.discourse-cdn.com/v4/letter/h/e47c2d/32.png) [@Hydrobolic](https://discourse.codecombat.com/u/Hydrobolic)\
**Post date:** [October 5, 2021, 7:50pm UTC](https://discourse.codecombat.com/t/useful-code-clips/30761/7 "2021-10-05T19:50:16Z")

</div>

`Number 3: distance between points`  
Assuming you’re working with vectors (such as unit positions), you can use CodeCombat’s `Vector.distance`. If you want to define it manually, the `Math.abs` calls are redundant as squaring always results in a nonnegative number.

---

<div class="post-metadata">

**Author:** ![moonwatcher348](https://sea2.discourse-cdn.com/flex016/user_avatar/discourse.codecombat.com/moonwatcher348/32/24126_2.png) [@moonwatcher348](https://discourse.codecombat.com/u/moonwatcher348)\
**Post date:** [October 9, 2021, 1:03am UTC](https://discourse.codecombat.com/t/useful-code-clips/30761/8 "2021-10-09T01:03:03Z")

</div>

> [@moonwatcher348](#):
>
> Number 1: Object to String converter:

Heh, I forgot to add a String to Object converter (please don’t tell me that there is a `JSON.parse()` method, I already know, Hydrobolic)  
Javascript:

```javascript

function objStr (str) {
    let rO = {};
    for (let sOP of str.split(", ")) {
        let sOD = (sOP.replace("{", "").replace("}", "")).split(": ");
        rO[sOD[0]] = sOD[1];
    }
    return rO;
}

```

Python:

```python
def objStr (str):
    rO = {};
    for sOP in str.split(", "):
        sOD = (sOP.replace("{", "").replace("}", "")).split(": ");
        rO[sOD[0]] = sOD[1];
    return rO;

```

Also, any object with more than 1 dimension or a comma in the string breaks my program… maybe I could use `JSON.parse()` and `JSON.stringify()` to solve it. \>:)

---

<div class="post-metadata">

**Author:** ![Hydrobolic](https://avatars.discourse-cdn.com/v4/letter/h/e47c2d/32.png) [@Hydrobolic](https://discourse.codecombat.com/u/Hydrobolic)\
**Post date:** [October 9, 2021, 4:33am UTC](https://discourse.codecombat.com/t/useful-code-clips/30761/9 "2021-10-09T04:33:56Z")

</div>

Careful: you’re referencing an undefined variable `obj` that probably existed out of scope in your testing.  
Also, be wary that you lose data types with `strObj`, so numbers are converted to strings in `objStr` and may have unexpected results down the line.

---

<div class="post-metadata">

**Author:** ![moonwatcher348](https://sea2.discourse-cdn.com/flex016/user_avatar/discourse.codecombat.com/moonwatcher348/32/24126_2.png) [@moonwatcher348](https://discourse.codecombat.com/u/moonwatcher348)\
**Post date:** [October 9, 2021, 2:32pm UTC](https://discourse.codecombat.com/t/useful-code-clips/30761/10 "2021-10-09T14:32:06Z")

</div>

Oops, yeah, I changed “obj” to “str”, but I forgot to change it in the function too. 😬

---

<div class="post-metadata">

**Author:** ![moonwatcher348](https://sea2.discourse-cdn.com/flex016/user_avatar/discourse.codecombat.com/moonwatcher348/32/24126_2.png) [@moonwatcher348](https://discourse.codecombat.com/u/moonwatcher348)\
**Post date:** [October 9, 2021, 2:32pm UTC](https://discourse.codecombat.com/t/useful-code-clips/30761/11 "2021-10-09T14:32:34Z")

</div>

Fixed. (20 chars verifies)

---

<div class="post-metadata">

**Author:** ![riticmaster908](https://sea2.discourse-cdn.com/flex016/user_avatar/discourse.codecombat.com/riticmaster908/32/43503_2.png) [@riticmaster908](https://discourse.codecombat.com/u/riticmaster908)\
**Post date:** [August 17, 2022, 9:56pm UTC](https://discourse.codecombat.com/t/useful-code-clips/30761/12 "2022-08-17T21:56:32Z")

</div>

Armando’s type is intellectual not intellect

---

<div class="post-metadata">

**Author:** ![moonwatcher348](https://sea2.discourse-cdn.com/flex016/user_avatar/discourse.codecombat.com/moonwatcher348/32/24126_2.png) [@moonwatcher348](https://discourse.codecombat.com/u/moonwatcher348)\
**Post date:** [August 17, 2022, 11:59pm UTC](https://discourse.codecombat.com/t/useful-code-clips/30761/13 "2022-08-17T23:59:09Z")

</div>

This was 10 months ago, so maybe it updated now
