Flat array to nested in php

Requirements = PHP 5.3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function buildTree($flat, $pidKey, $idKey = null)
        {
            $grouped = array();
            foreach ($flat as $sub){
                $grouped[$sub[$pidKey]][] = $sub;
            }
 
            $fnBuilder = function($siblings) use (&$fnBuilder, $grouped, $idKey) {
                foreach ($siblings as $k => $sibling) {
                    $id = $sibling[$idKey];
                    if(isset($grouped[$id])) {
                        $sibling['children'] = $fnBuilder($grouped[$id]);
                    }
                    $siblings[$k] = $sibling;
                }
 
                return $siblings;
            };
 
            $tree = $fnBuilder($grouped[0]);
 
            return $tree;
        }
function buildTree($flat, $pidKey, $idKey = null)
        {
            $grouped = array();
            foreach ($flat as $sub){
                $grouped[$sub[$pidKey]][] = $sub;
            }

            $fnBuilder = function($siblings) use (&$fnBuilder, $grouped, $idKey) {
                foreach ($siblings as $k => $sibling) {
                    $id = $sibling[$idKey];
                    if(isset($grouped[$id])) {
                        $sibling['children'] = $fnBuilder($grouped[$id]);
                    }
                    $siblings[$k] = $sibling;
                }

                return $siblings;
            };

            $tree = $fnBuilder($grouped[0]);

            return $tree;
        }

Usage:

1
2
3
4
5
6
7
8
9
$flat = array(
    array('id'=>100, 'parentID'=>0, 'name'=>'a'),
    array('id'=>101, 'parentID'=>100, 'name'=>'a'),
    array('id'=>102, 'parentID'=>101, 'name'=>'a'),
    array('id'=>103, 'parentID'=>101, 'name'=>'a'),
);
 
$tree = buildTree($flat, 'parentID', 'id');
print_r($tree);
$flat = array(
    array('id'=>100, 'parentID'=>0, 'name'=>'a'),
    array('id'=>101, 'parentID'=>100, 'name'=>'a'),
    array('id'=>102, 'parentID'=>101, 'name'=>'a'),
    array('id'=>103, 'parentID'=>101, 'name'=>'a'),
);

$tree = buildTree($flat, 'parentID', 'id');
print_r($tree);

Thanks! http://stackoverflow.com/a/27360654/1886270

VBA: Найти сумму и количество тех элементов массива, которые делятся на 5 и на 8 одновременно. Полученные значения вывести в одно окно сообщения

Задача:

Дан динамический массив В(n), заполненный случайными числами с помощью генератора случайных чисел (элементы массива вывести в ячейки рабочего листа).  Найти сумму и количество тех элементов массива, которые делятся на 5 и на 8 одновременно. Полученные значения вывести в одно окно сообщения.

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Public Sub prog()
    Dim i As Integer
    Dim sum As Integer
    Dim count As Integer
    sum = 0
    count = 0
    n = InputBox("n=") ' Просим ввести n - размерность массива.
    ReDim B(n)
    Cells.Value = ""
    Cells.Interior.ColorIndex = -4142
    For i = 1 To n
        B(i) = Int((0 - 100 + 1) * Rnd + 100)
        If ((B(i) Mod 5 = 0) And (B(i) Mod 8 = 0)) Then
            sum = sum + B(i)
            count = count + 1
            Cells(1, i).Interior.Color = vbGreen
        End If
        Cells(1, i).Value = B(i) ' Печать в ячейку
    Next i
    MsgBox ("Сумма = " + CStr(sum) + " Количество = " + CStr(count))
End Sub
Public Sub prog()
    Dim i As Integer
    Dim sum As Integer
    Dim count As Integer
    sum = 0
    count = 0
    n = InputBox("n=") ' Просим ввести n - размерность массива.
    ReDim B(n)
    Cells.Value = ""
    Cells.Interior.ColorIndex = -4142
    For i = 1 To n
        B(i) = Int((0 - 100 + 1) * Rnd + 100)
        If ((B(i) Mod 5 = 0) And (B(i) Mod 8 = 0)) Then
            sum = sum + B(i)
            count = count + 1
            Cells(1, i).Interior.Color = vbGreen
        End If
        Cells(1, i).Value = B(i) ' Печать в ячейку
    Next i
    MsgBox ("Сумма = " + CStr(sum) + " Количество = " + CStr(count))
End Sub

Continue reading

VBA: Найти сумму и количество элементов массива, остаток от деления которых на 2 равен 3

Глупая задача…

Дан динамический массив А(n), заполненный случайными числами с помощью генератора случайных чисел (элементы массива вывести в ячейки рабочего листа). Найти сумму и количество элементов массива, остаток от деления которых на 2 равен 3. Полученные значения вывести в одно окно сообщения.

Ни одно число не будет подходить под условие задачи, но решение есть.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Public Sub sum1()
    Dim i As Integer
    Dim sum As Integer
    Dim count As Integer
    sum = 0
    count = 0
    n = InputBox("n=") ' Просим ввести n - размерность массива.
    ReDim arr(n)
    Cells.Value = ""
    Cells.Interior.ColorIndex = -4142
    For i = 1 To n
        arr(i) = Int((0 - 100 + 1) * Rnd + 100)
        If (arr(i) Mod 2 = 0) Then
            sum = sum + arr(i)
            count = count + 1
            Cells(1, i).Interior.Color = vbGreen
        End If
        Cells(1, i).Value = arr(i) ' Печать в ячейку
    Next i
    MsgBox ("Сумма = " + CStr(sum) + " Количество = " + CStr(count))
End Sub
Public Sub sum1()
    Dim i As Integer
    Dim sum As Integer
    Dim count As Integer
    sum = 0
    count = 0
    n = InputBox("n=") ' Просим ввести n - размерность массива.
    ReDim arr(n)
    Cells.Value = ""
    Cells.Interior.ColorIndex = -4142
    For i = 1 To n
        arr(i) = Int((0 - 100 + 1) * Rnd + 100)
        If (arr(i) Mod 2 = 0) Then
            sum = sum + arr(i)
            count = count + 1
            Cells(1, i).Interior.Color = vbGreen
        End If
        Cells(1, i).Value = arr(i) ' Печать в ячейку
    Next i
    MsgBox ("Сумма = " + CStr(sum) + " Количество = " + CStr(count))
End Sub

Файл Excel с этим кодом

Про погоду и массивы

Такая школьная простенькая задачка…
Условие:

Пусть в массиве из 12 компонент хранится количество осадков в каждом месяце. Требуется напечатать таблицу из трех столбцов, где для каждого месяца вывести его номер, количество осадков в нем,  отклонение количества осадков в этом месяце от средне годового.

Continue reading

Bash: Среднее арифметическое.

Нужно посчитать среднее арифметическое, написав скрипт на Bash.

Для передачи чисел для вычислений использую аргументы скрипта.

1
2
3
4
5
6
7
8
#! /bin/sh
i=0
sum=0
for an_arg in "$@" ; do
  sum=$(($sum + ${an_arg}))
  i=$(($i+1))
done
expr $sum / $i
#! /bin/sh
i=0
sum=0
for an_arg in "$@" ; do
  sum=$(($sum + ${an_arg}))
  i=$(($i+1))
done
expr $sum / $i

Пример тестового запуска:

1
sh avg.sh 1 2 3 4 5
sh avg.sh 1 2 3 4 5

BASH: Простой калькулятор

Простой калькулятор на Bash. Вводится 2 числа с клавиатуры, действие и производится вычисление при помощи функции expr().

Есть проверка на недопустимость деления на 0.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
echo "enter first value:"
read x
echo "enter second value"
read y
echo "enter action symbol"
read act
 
case $act in
"+") echo " $x + $y ="  $(expr $y + $x);;
"-") echo "$x - $y ="   $(expr $x - $y);;
"/") if [ $y -eq 0 ]; then
       echo "error: delimiter by zero";
     else
       echo " $x / $y =" $(expr  $x / $y);
     fi;;
"*") echo " $x * $y =" $(expr  $x \* $y);;
*) echo "command is unknown!"
esac
echo "enter first value:"
read x
echo "enter second value"
read y
echo "enter action symbol"
read act

case $act in
"+") echo " $x + $y ="  $(expr $y + $x);;
"-") echo "$x - $y ="   $(expr $x - $y);;
"/") if [ $y -eq 0 ]; then
       echo "error: delimiter by zero";
     else
       echo " $x / $y =" $(expr  $x / $y);
     fi;;
"*") echo " $x * $y =" $(expr  $x \* $y);;
*) echo "command is unknown!"
esac

C, Unix, OPEN(),CLOSE(),READ(), WRITE(): Копирование файлов

Начался новый предмет, новые лабы.

Задачка примерно такая: Есть *nix-операционная система. В ней написать приложение на C, которое умеет копировать файлы при помощи системных вызовов Open(), Close(), Read(), Write();

В моем случае в качестве операционной системы использую Ubuntu 12.04

Continue reading

JAVA: Треугольник паскаля

Давненько не было школьных\вузовских задачек из классики.

Треугольник паскаля на JAVA:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.util.Scanner;
 
 
public class PascalTriangle {
 
    public static void main(String[] args) {
        
        int LINES = 0;
        System.out.println("Enter number of lines for Pascal Triangle:");
        // Reading
        Scanner reader = new Scanner(System.in);
        LINES = reader.nextInt();
        reader.close();
        // Calculation and print
        int [][] p = new int [LINES][];
        p[0] = new int [1];
        p[1] = new int [2];
        p[1][0] = p[1][1] = 1;
        System.out.println(p[0][0] = 1);
        System.out.println(p[1][0] + " " + p[1][1]);
        for (int i = 2; i < LINES; i++)
        {
            p[i] = new int [i+1];
            System.out.print((p[i][0] = 1) + " ");
            for (int j = 1; j < i; j++)
            {
                System.out.print((p[i][j] = p[i-1][j-1] + p[i-1][j]) + " ");
            }
            System.out.println(p[i][i]=1);
        }
    }
 
}
import java.util.Scanner;


public class PascalTriangle {

    public static void main(String[] args) {
        
        int LINES = 0;
        System.out.println("Enter number of lines for Pascal Triangle:");
        // Reading
        Scanner reader = new Scanner(System.in);
        LINES = reader.nextInt();
        reader.close();
        // Calculation and print
        int [][] p = new int [LINES][];
        p[0] = new int [1];
        p[1] = new int [2];
        p[1][0] = p[1][1] = 1;
        System.out.println(p[0][0] = 1);
        System.out.println(p[1][0] + " " + p[1][1]);
        for (int i = 2; i < LINES; i++)
        {
            p[i] = new int [i+1];
            System.out.print((p[i][0] = 1) + " ");
            for (int j = 1; j < i; j++)
            {
                System.out.print((p[i][j] = p[i-1][j-1] + p[i-1][j]) + " ");
            }
            System.out.println(p[i][i]=1);
        }
    }

}
Вывод

Вывод программы

Java: GUI приложение для работы с текстовыми файлами

Привет, читатель :)

Дали вот такое задание, для написание на Java и обязательно в среде NetBeans:

Написать программу, которая должна уметь:

  1. Открывать каталог, типа С:\users\
  2. Выводить из каталога в Combobox файлы
  3. По нажатию кнопки «открыть» открывать в редактор текстовый файл из каталога
  4. При изменении файла и нажатии на кнопку «сохранить» сохранять изменения в том же файле который был открыт

Можно сказать, что я начал и закончил интерфейсом. А ну и еще одно — эта инструкция не будет такой подробной как некотрые ранее, так как мне кажется что тут все примитивно.

Continue reading

C++: Массивы, сортировка и нахождение минимальных-максимальных индексов

Дан массив вещественных чисел X=(x1,x2,..,xn). Записать элементы
заданного массива Х в массив Y следующим образом: в начальной части
расположить положительные элементы в порядке возрастания, затем в
порядке убывания отрицательные элементы, нулевые элементы не
записывать. Оценить, как при этом изменилось положение максимального
и минимального элементов массива.
Использовать функции.

Задачка простая на вид. Приступаем. У нас есть массивы, целых два. с ними нужно уметь делать следующее:

  • Создавать (Random)
  • Выводить на экран
  • Сортировать
  • Дополнять элементами (для второго массива)

Continue reading