Создание кода из простого английского языка на нескольких языках

«Код на английском» — это новая парадигма разработки программного обеспечения

https://www.fastdevai.com

Введение:

Генерация кода из описания на простом английском языке — это святой Грааль программирования, и ученые-компьютерщики работают над этим уже много лет. Однако большинство проектов полностью провалились. Английский или любой человеческий язык, если на то пошло, довольно расплывчатый, и компьютеру требуются полностью точные и краткие инструкции для выполнения задачи. Однако сегодня мы можем достичь этой цели в значительной степени. Единственное требование — предоставлять четкие и конкретные описания на простом английском языке.

Мы представляем революционный продукт Код на английском языке, который может генерировать код на простом английском языке на нескольких языках (дополнительные сведения см. на странице https://www.fastdevai.com ). В настоящее время мы поддерживаем языки Python, JavaScript, Java, C, C++, C#, PHP, Go, Perl, Ruby, Typescript, Haskell, Kotlin, Scala, Swift и Dart. Это повышает производительность разработчиков программного обеспечения в 2-3 раза. Это может очень помочь, снизив затраты, повысив рентабельность и поставив продукт намного быстрее. Это также поможет разработчикам программного обеспечения вашей компании изучать новые языки программирования очень инновационным способом.

Помимо генерации кода, он может объяснять код, переводить код с одного языка на другой, генерировать SQL и многое другое.

Возьмем простой пример. Даны три массива. Нам необходимо объединить эти три массива в один массив, а затем вычислить минимум, максимум, среднее значение, медиану и стандартное отклонение от объединенного массива.

Сформулируем проблему в четких терминах:

Дано три массива:

a = [3.69, 0.81, 7.01, 3.49, -1.64, 6.29, 0.26, 6.07, 6.99]

b = [-1.23, 1.03, 8.94, -1.71, 0.98, -1.16, 2.23, 2.29, -0.68]

c = [9.24, 8.87, 2.72, -4.08, -3.7]

Объединить массивы a, b и c в массив d. Затем отсортируйте массив d. Теперь вычислите минимум, максимум, среднее значение, медиану и стандартное отклонение из массива d.

Почему дается дополнительный оператор для сортировки массива d?

Во-первых, для вычисления медианы необходимо отсортировать массив. Во-вторых, как только массив отсортирован в порядке возрастания, становится удивительно легко вычислить минимум и максимум. Первый элемент отсортированного массива — это минимальное значение, а последний элемент отсортированного массива — это максимальное значение.

Мы сгенерировали код на следующих языках программирования, чтобы ограничить объем статьи:

  1. Питон
  2. PHP
  3. C++
  4. Java и
  5. JavaScript

Давайте сгенерируем программу Python из приведенного выше описания, и будет сгенерирован следующий код:

import numpy as np
a = [3.69, 0.81, 7.01, 3.49, -1.64, 6.29, 0.26, 6.07, 6.99]
b = [-1.23, 1.03, 8.94, -1.71, 0.98, -1.16, 2.23, 2.29, -0.68]
c = [9.24, 8.87, 2.72, -4.08, -3.7]
d = np.concatenate((a,b,c))
d.sort()
print("Minimum: ", d.min())
print("Maximum: ", d.max())
print("Mean: ", d.mean())
print("Median: ", np.median(d))
print("Standard Deviation: ", d.std())

Запустив приведенный выше код, мы получим следующий вывод:

Output:
Minimum: -4.08
Maximum: 9.24
Mean: 2.465652173913043
Median: 2.23
Standard Deviation: 3.9781346142949703

Затем мы сгенерировали код на PHP, используя то же описание, и был сгенерирован следующий код:

<?php
$a = [3.69, 0.81, 7.01, 3.49, -1.64, 6.29, 0.26, 6.07, 6.99];
$b = [-1.23, 1.03, 8.94, -1.71, 0.98, -1.16, 2.23, 2.29, -0.68];
$c = [9.24, 8.87, 2.72, -4.08, -3.7];
$d = array_merge($a, $b, $c);
sort($d);
$min = min($d);
$max = max($d);
$mean = array_sum($d) / count($d);
$median = $d[count($d) / 2];
$sum = 0;
foreach ($d as $value) {
    $sum += pow($value - $mean, 2);
}
$std = sqrt($sum / count($d));
echo "Minimum: $min\n";
echo "Maximum: $max\n";
echo "Mean: $mean\n";
echo "Median: $median\n";
echo "Standard Deviation: $std\n";
?>

Запустив приведенный выше код, мы получили следующий результат:

Min: -4.08
Max: 9.24
Mean: 2.465652173913
Median: 2.23
Standard Deviation: 3.978134614295

Код C++: код создан на основе того же описания.

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
    vector<double> a = {3.69, 0.81, 7.01, 3.49, -1.64, 6.29, 0.26, 6.07, 6.99};
    vector<double> b = {-1.23, 1.03, 8.94, -1.71, 0.98, -1.16, 2.23, 2.29, -0.68};
    vector<double> c = {9.24, 8.87, 2.72, -4.08, -3.7};
    vector<double> d;
    d.reserve(a.size() + b.size() + c.size());
    d.insert(d.end(), a.begin(), a.end());
    d.insert(d.end(), b.begin(), b.end());
    d.insert(d.end(), c.begin(), c.end());
    sort(d.begin(), d.end());
    double min = d[0];
    double max = d[d.size() - 1];
    double mean = 0;
    for (int i = 0; i < d.size(); i++)
    {
        mean += d[i];
    }
    mean /= d.size();
    double median = 0;
    if (d.size() % 2 == 0)
    {
        median = (d[d.size() / 2] + d[d.size() / 2 - 1]) / 2;
    }
    else
    {
        median = d[d.size() / 2];
    }
    double sd = 0;
    for (int i = 0; i < d.size(); i++)
    {
        sd += pow(d[i] - mean, 2);
    }
    sd = sqrt(sd / d.size());
    cout << "min: " << min << endl;
    cout << "max: " << max << endl;
    cout << "mean: " << mean << endl;
    cout << "median: " << median << endl;
    cout << "sd: " << sd << endl;
    return 0;
}

Мы скомпилировали приведенный выше код, а затем выполнили его. Ниже мы отображаем вывод:

Output:
min: -4.08
max: 9.24
mean: 2.46565
median: 2.23
sd: 3.97813

Код Java. Затем мы сгенерировали код Java.

import java.util.Arrays;
import java.util.Scanner;
public class ArrayMerge {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        double[] a = {3.69, 0.81, 7.01, 3.49, -1.64, 6.29, 0.26, 6.07, 6.99};
        double[] b = {-1.23, 1.03, 8.94, -1.71, 0.98, -1.16, 2.23, 2.29, -0.68};
        double[] c = {9.24, 8.87, 2.72, -4.08, -3.7};
        double[] d = new double[a.length + b.length + c.length];
        int i = 0;
        for (double x : a) {
            d[i] = x;
            i++;
        }
        for (double x : b) {
            d[i] = x;
            i++;
        }
        for (double x : c) {
            d[i] = x;
            i++;
        }
        Arrays.sort(d);
        double min = d[0];
        double max = d[d.length - 1];
        double mean = 0;
        for (double x : d) {
            mean += x;
        }
        mean /= d.length;
        double median = 0;
        if (d.length % 2 == 0) {
            median = (d[d.length / 2] + d[d.length / 2 - 1]) / 2;
        } else {
            median = d[d.length / 2];
        }
        double sd = 0;
        for (double x : d) {
            sd += Math.pow(x - mean, 2);
        }
        sd = Math.sqrt(sd / d.length);
        System.out.println("Minimum: " + min);
        System.out.println("Maximum: " + max);
        System.out.println("Mean: " + mean);
        System.out.println("Median: " + median);
        System.out.println("Standard Deviation: " + sd);
    }
}

Мы скомпилировали и выполнили код. Результат приведен ниже:

Output:
Minimum: -4.08
Maximum: 9.24
Mean: 2.465652173913043
Median: 2.23
Standard Deviation: 3.9781346142949703

Код JavaScript. Затем мы сгенерировали код JavaScript. Ниже мы отображаем код:

var a = [3.69, 0.81, 7.01, 3.49, -1.64, 6.29, 0.26, 6.07, 6.99];
var b = [-1.23, 1.03, 8.94, -1.71, 0.98, -1.16, 2.23, 2.29, -0.68];
var c = [9.24, 8.87, 2.72, -4.08, -3.7];
var d = a.concat(b, c);
d.sort(function(a, b) {
  return a - b;
});
var min = d[0];
var max = d[d.length - 1];
var mean = d.reduce(function(a, b) {
  return a + b;
}) / d.length;
var median = d[Math.floor(d.length / 2)];
var std = Math.sqrt(d.map(function(x) {
  return Math.pow(x - mean, 2);
}).reduce(function(a, b) {
  return a + b;
}) / (d.length)); // Changed from (d.length - 1) to (d.length)
console.log("min: " + min);
console.log("max: " + max);
console.log("mean: " + mean);
console.log("median: " + median);
console.log("std: " + std);

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

Output:
min: -4.08
max: 9.24
mean: 2.465652173913043
median: 2.23
std: 4.067542061119016

Когда мы изменили код с (d.length — 1) на (d.length). Это означает, что мы вычислили стандартное отклонение по формуле: sqrt((x-mean)²/n), где n — количество элементов в массиве. После этого изменения полученный результат был

Output:
Minimum: -4.08
Maximum: 9.24
Mean: 2.465652173913043
Median: 2.23
Standard Deviation: 3.9781346142949703

Мы видим, что полученный результат аналогичен, за исключением количества десятичных знаков в среднем и стандартном отклонении. Мы видим, что программа C++ сгенерировала значение среднего и стандартного отклонения с точностью до пяти знаков после запятой. Итак, мы добавили следующее утверждение:

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

Код был удивительно похож на исходный код C++, за исключением следующих двух строк:

cout << "mean: " << setprecision(10) << mean << endl;
cout << "std: " << setprecision(10) << std << endl;

При компиляции и выполнении приведенного выше кода мы получили следующий вывод:

Output:
min: -4.08
max: 9.24
mean: 2.465652174
median: 2.23
std: 3.978134614

Из вышесказанного мы все же получили результат, правильный до девяти знаков после запятой.

Если мы внимательно рассмотрим код Python, мы увидим, что используется библиотека numpy. Можем ли мы сгенерировать код Python, в котором он вычисляет минимум, максимум, среднее значение и т. д., не используя эту библиотеку. Мы дали следующее английское описание для создания нового кода Python:

Даны три массива:
a = [3,69, 0,81, 7,01, 3,49, -1,64, 6,29, 0,26, 6,07, 6,99]
b = [-1,23, 1,03, 8,94, -1,71, 0,98, -1,16, 2,23, 2,29, -0,68]
c = [9,24, 8,87, 2,72, -4,08, -3,7]
Объединить массив a, b и c в массив d. Затем отсортируйте массив d. Теперь вычислите минимум, максимум, среднее значение, медиану и стандартное отклонение из массива d без использования numpy.

Код Python без использования библиотеки numpy:

import math
a = [3.69, 0.81, 7.01, 3.49, -1.64, 6.29, 0.26, 6.07, 6.99]
b = [-1.23, 1.03, 8.94, -1.71, 0.98, -1.16, 2.23, 2.29, -0.68]
c = [9.24, 8.87, 2.72, -4.08, -3.7]
d = a + b + c
d.sort()
print("Minimum: ", d[0])
print("Maximum: ", d[-1])
print("Mean: ", sum(d)/len(d))
print("Median: ", d[len(d)//2])
# Standard Deviation
sum_of_squares = 0
for i in d:
    sum_of_squares += (i - sum(d)/len(d))**2
print("Standard Deviation: ", math.sqrt(sum_of_squares/len(d)))

Запустив приведенный выше код, мы получили тот же результат:

Output:
Minimum: -4.08
Maximum: 9.24
Mean: 2.465652173913043
Median: 2.23
Standard Deviation: 3.9781346142949703

Вывод:

Мы могли бы сгенерировать код на разных языках из простого описания на английском языке, это показывает мощь инструмента. Однако давайте также поймем его ограничение. Код генерируется ИИ, и он не идеален. Поэтому рекомендуется проверить вывод или проверить код.

Это будет серия статей, и в следующих статьях мы обсудим более сложные проблемы и то, как мы можем сгенерировать код, просто предоставив описание на английском языке. Мы предполагаем, что в ближайшие пять лет большинство программистов будут генерировать код на основе английского описания, а не писать код на языках программирования.

Большое спасибо за прочтение моей статьи!!! Для получения более подробной информации посетите веб-сайт https://www.fastdevai.com