Categories
JavaScript Телерик

JS OOP изпит – сутрешна група

Решение на задачата на сутрешната група на изпита по JavaScript OOP

// item.js
define(function() {
    'use strict';
    var Item;

    Item = (function() {
        var types = ['accessory', 'smart-phone', 'notebook', 'pc', 'tablet'];

        function Item(type, name, price) {
            if (types.indexOf(type) == -1) {
                throw "invalid item type";
            };

            if (name.length < 6 || name.length > 40) {
                throw "invalid item name";
            };

            if (price < 0.0) {
                throw "invalid item price";
            };
            this.type = type;
            this.name = name;
            this.price = price;
        }
        return Item;
    })();
    return Item;
});

// store.js 

define(function() {
    'use strict';
    var Store;
    Store = (function() {
        function Store(storeName) {
            if (storeName.length < 6 || storeName.length > 40) {
                throw "invalid store name";
            }

            this._name = storeName;
            this._items = [];
        };

        Store.prototype.addItem = function(item) {
            if (item.constructor.name !== "Item") {
                throw "invalid item type";
            }

            this._items.push(item);

            return this;
        };

        Store.prototype.getAll = function() {
            var sortedItems = compareBy(this._items, "name");

            return sortedItems;
        };

        Store.prototype.getSmartPhones = function() {
            var items = [];

            this._items.forEach(function(item) {
                if (item.type === 'smart-phone') {
                    items.push(item);
                }
            });

            var sortedItems = compareBy(items, "name");

            return sortedItems;
        };

        Store.prototype.getMobiles = function() {
            var items = [];

            this._items.forEach(function(item) {
                if (item.type === 'smart-phone' || item.type === 'tablet') {
                    items.push(item);
                }
            });

            var sortedItems = compareBy(items, "name");

            return sortedItems;
        };

        Store.prototype.getComputers = function() {
            var items = [];

            this._items.forEach(function(item) {
                if (item.type === 'pc' || item.type === 'notebook') {
                    items.push(item);
                }
            });

            var sortedItems = compareBy(items, "name");

            return sortedItems;
        };

        Store.prototype.filterItemsByType = function(type) {
            var items = [];

            this._items.forEach(function(item) {
                if (item.type === type) {
                    items.push(item);
                }
            });

            var sortedItems = compareBy(items, "name");

            return sortedItems;
        };

        Store.prototype.filterItemsByPrice = function(options) {
            var minPrice = 0;
            var maxPrice = 999999999.99;
            var items = [];

            if (options) {
                minPrice = options.min || minPrice;
                maxPrice = options.max || maxPrice;
            }

            this._items.forEach(function(item) {
                if (item.price >= minPrice && item.price <= maxPrice) {
                    items.push(item);
                }
            });
            var sortedItems = compareBy(items, "price");
            return sortedItems;
        };
        Store.prototype.countItemsByType = function() {
            var itemTypes = [];
            for (var i = 0; i < this._items.length; i++) {
                if (itemTypes[this._items[i].type]) {
                    itemTypes[this._items[i].type]++;
                } else {
                    itemTypes[this._items[i].type] = 1;
                }
            }
            return itemTypes;
        };
        Store.prototype.filterItemsByName = function(part) {
            var items = [];
            this._items.forEach(function(item) {
                if (item.name.toLowerCase().indexOf(part.toLowerCase()) >= 0) {
                    items.push(item);
                }
            });

            var sortedItems = compareBy(items, "name");

            return sortedItems;
        };

        function compareBy(data, field) {
            data.sort(function(a, b) {
                if (a[field] < b[field]) return -1;
                if (a[field] > b[field])
                    return 1;
                return 0;
            });

            return data;
        };

        return Store;
    })();

    return Store;
});
Categories
JavaScript Телерик

Изпит – JavaScript UI и DOM – Handlebars.js

Решението на най-лесната задача от изпита по JavaScript UI и DOM.

Handlesbars.js

    <script id="authors-template" type='text/x-handlebars-template'>
        {{#authors}}
        <div class="box {{#if right}}right{{/if}}">
            <div class="inner">
                <p><img alt="{{name}}" src="{{image}}" width="100" height="133"></p>
                <div>
                    <h3>{{name}}</h3>

                    {{#each titles}}
                        <p>{{{this}}}</p>
                    {{/each}}

                    <ul>
                    {{#each urls}}
                        <li><a href="{{this}}" target="_blank">{{this}}</a></li>
                    {{/each}}
                    </ul>
                </div>
            </div>
        </div>
        {{/authors}}
    </script>
Categories
JavaScript Телерик

Комбинации на числа по търсена сума

Това е решението на първата задача от изпита по JavaScript основи, проведен на 19 май 2014 година в Телерик Академия.

В задачата се иска да се намерят всички възможни варианти на автомобили, камиони и триколки, на които сумата на гумите да е равен на определено число.

Решението на задачата е само с цикли, без рекурсия. Използват се комбинации.

function findPermutations(n) {
    var tires = [3, 4, 10];
    var buffer = new Array(n + 1);
    for (var i = 0; i <= n; ++i)
        buffer[i] = new Array(tires.length + 1);
    for (var j = 1; j <= tires.length; ++j)
        buffer[0][j] = 1;
    for (i = 1; i <= n; ++i) {
        buffer[i][0] = 0;
        for (j = 1; j <= tires.length; ++j) {
            var value = buffer[i][j − 1];
            if (tires[j − 1] <= i)
                value += buffer[i − tires[j − 1]][j];
            buffer[i][j] = value;
        }
    }
    return buffer[n][tires.length];
}
Categories
JavaScript Телерик

Решение на задача – Labyrinth Escape

Решение на задача: Labyrinth Escape

Изпит: JavaScript основи

Точки в BGCoder: 100 от 100

function Solve(params) {
    var input = params[0].split(" ");
    var rowsCount = parseInt(input[0]);
    var columnsCount = parseInt(input[1]);

    var labyrinthNumbers = new Array(rowsCount);
    var visitedCells = new Array(rowsCount);

    var number = 1;
    for (var i = 0; i < rowsCount; i++) {
        labyrinthNumbers[i] = new Array(columnsCount);
        visitedCells[i] = new Array(columnsCount);
        for (var j = 0; j < columnsCount; j++) {
            labyrinthNumbers[i][j] = number;
            visitedCells[i][j] = 0;
            number++;
        }
    }
    input = params[1].split(" ");
    var rowPosition = parseInt(input[0]);
    var columnPosition = parseInt(input[1]);
    visitedCells[rowPosition][columnPosition] = 1;
    var numbersSum = 0;
    numbersSum += labyrinthNumbers[rowPosition][columnPosition];
    var directions = new Array(rowsCount);
    for (var i = 0; i < rowsCount; i++) {
        directions[i] = new Array(columnsCount);
        for (var j = 0; j < columnsCount; j++) {
            directions[i][j] = params[i + 2][j];
        }
    }
    var steps = 1;
    while (true) {
        switch (directions[rowPosition][columnPosition]) {
            case "l":
                columnPosition -= 1;
                break;
            case "r":
                columnPosition += 1;
                break;
            case "u":
                rowPosition -= 1;
                break;
            case "d":
                rowPosition += 1;
                break;
        }
        if (rowPosition < 0 || rowPosition >= rowsCount || columnPosition < 0 || columnPosition >= columnsCount) {
            return 'out ' + numbersSum;
        }

        if (visitedCells[rowPosition][columnPosition] === 1) {
            return 'lost ' + steps;
        }

        visitedCells[rowPosition][columnPosition] = 1;
        numbersSum += labyrinthNumbers[rowPosition][columnPosition];
        steps++;
    }
}
Categories
JavaScript Телерик

Решение на задача – Max Sum

Решение на задача:  Max Sum

Изпит: JavaScript основи

Точки в BGCoder: 100 от 100

function Solve(arr) {
    var maxSum = parseInt(arr[1]);
    var maxLength = 1;
    var maxIndex = 0;
    for (var i = 2, currentSum = parseInt(arr[1]), currentIndex = 1; i < arr.length; i++) {
        currentSum += parseInt(arr[i]);
        if (arr[i] > currentSum) {
            currentSum = parseInt(arr[i]);
            currentIndex = i;
        }

        if (currentSum > maxSum) {
            maxSum = currentSum;
            maxIndex = currentIndex;
            maxLength = i - currentIndex + 1;
        }
    }

    return maxSum;
}
Categories
JavaScript Телерик

Решение на задача – Joro the Naughty

Решение на задача: Joro The Naughty

Изпит: JavaScript основи

Точки в BGCoder: 100 от 100

function Solve(params) {
    var line = params[0].split(" ");
    var N = parseInt(line[0]);
    var M = parseInt(line[1]);

    var numbers = new Array(N);
    var visited = new Array(N);

    var number = 1;
    for (var i = 0; i < N; i++) {
        numbers[i] = new Array(M);
        visited[i] = new Array(M);
        for (var j = 0; j < M; j++) {
            numbers[i][j] = number;
            visited[i][j] = 0;
            number++;
        }
    }
    var J = parseInt(line[2]);
    line = params[1].split(" ");
    var rowPosition = parseInt(line[0]);
    var columnPosition = parseInt(line[1]);
    visited[rowPosition][columnPosition] = 1;
    var numbersSum = 0;
    numbersSum += numbers[rowPosition][columnPosition];
    for (var jump = 2; jump < J + 2; jump++) {
        line = params[jump].split(" ");
        var rowStep = parseInt(line[0]);
        var columnStep = parseInt(line[1]);
        rowPosition += rowStep;
        columnPosition += columnStep;
        if (rowPosition < 0 || rowPosition >= N || columnPosition < 0 || columnPosition >= M) {
            return 'escaped ' + numbersSum;
        }

        if (visited[rowPosition][columnPosition] === 1) {
            return 'caugth' + jump - 1;
        }

        visited[rowPosition][columnPosition] = 1;

        numbersSum += numbers[rowPosition][columnPosition];

        if (jump === J + 1) {
            jump = 1;
        }
    }
}
Categories
JavaScript

Решение на задача – Sequences

Решение на задачата: Sequences

Курс: JavaScript основи

Точки в BGCoder: 100 от 100

function Solve(params) {
    var N = parseInt(params[0]);
    var answer = 0;

    if (N === 0) {
        return 0;
    }

    var sequencesCount = 1;

    for (var i = 2; i <= N; i++) {
        var currentElement = parseInt(params[i]);
        var previousElement = parseInt(params[i - 1]);
        if (currentElement < previousElement) {
            sequencesCount++;
        }
    }

    answer = sequencesCount;

    return answer;
}
Categories
Visual C# Телерик

Задача: Nightmare On Code Street

Решение

using System;

namespace NightmareOnCodeStreet {
  class Program {
    static void Main() {
      string number = Console.ReadLine();
      char[] numbersList = number.ToCharArray();
      int size = numbersList.Length;
      if (numbersList[0] - '0' < 0) {
        for (int i = 0; i < numbersList.Length - 1; i++) {
          numbersList[i] = numbersList[i + 1];
        }
        size--;
      }
      int counter = 0;
      int sum = 0;
      for (int i = 0; i < size; i++) {
        if (i % 2 != 0) {
          if (Char.IsDigit(numbersList[i])) {
            counter++;
            sum += (int)(numbersList[i] - '0');
          }
        }
      }
      Console.WriteLine("{0} {1}", counter, sum);
    }
  }
}

Categories
Visual C# Телерик

Задача: Kaspichania Boats

Решение

using System;

namespace KaspichaniaBoats {
  class Program {
    static void Main() {
      int n = int.Parse(Console.ReadLine());
      int boatWidth = 2 * n + 1;

      int dots = 1;
      for (int i = 0; i < n; i++) {
        Console.Write(new string('.', n - i));
        if (i == 0) {
          Console.Write(new string('*', 1));
        } else if (i == 1) {
          Console.Write(new string('*', 3));
        } else {
          Console.Write("*");
          Console.Write(new string('.', dots));
          Console.Write("*");
          Console.Write(new string('.', dots));
          Console.Write("*");
          dots++;
        }
        Console.Write(new string('.', n - i));
        Console.WriteLine();
      }
      Console.WriteLine(new string('*', boatWidth));
      int counter = 1;
      dots = n - 2;
      for (int i = 1; i <= n / 2; i++) {
        Console.Write(new string('.', i));
        Console.Write(new string('*', 1));
        Console.Write(new string('.', dots));
        Console.Write(new string('*', 1));
        Console.Write(new string('.', dots));
        Console.Write(new string('*', 1));
        Console.Write(new string('.', i));
        dots--;
        counter++;
        Console.WriteLine();
      }
      Console.Write(new string('.', counter));
      Console.Write(new string('*', boatWidth - 2 * counter));
      Console.Write(new string('.', counter));
    }
  }
}
Categories
Visual C# Телерик

Задача: 2-4-8

Решение

using System;

namespace _2_4_8 {
  class Program {
    static void Main() {
      decimal a = decimal.Parse(Console.ReadLine());
      decimal b = decimal.Parse(Console.ReadLine());
      decimal c = decimal.Parse(Console.ReadLine());

      decimal r = 0;
      switch ((int) b) {
      case 2:
        r = a % c;
        break;
      case 4:
        r = a + c;
        break;
      case 8:
        r = a * c;
        break;
      }

      int remainder = r % 4;
      if (remainder == 0) {
        Console.WriteLine(r / 4);
      } else {
        Console.WriteLine(remainder);
      }
      Console.WriteLine(r);
    }
  }
}