Чат GPT пишет Ханойские Башни на 1С

Версия 1. С выводом последовательности действий

Составил запрос:

напиши код для определения правила перекладывания дисков в игре "Ханойские башни" на языке 1С с тремя башнями

Процедура ПереместитьДиски(КоличествоДисков, ИсходнаяБашня, ВспомогательнаяБашня, ЦелеваяБашня)
	
	Если КоличествоДисков = 1 Тогда
		
		// Перемещаем диск с исходной башни на целевую
		
		Сообщить("Переместить диск " + КоличествоДисков + " с " + ИсходнаяБашня + " на " + ЦелеваяБашня);
		
	Иначе
		
		// Перемещаем n-1 диск с исходной башни на вспомогательную
		
		ПереместитьДиски(КоличествоДисков - 1, ИсходнаяБашня, ЦелеваяБашня, ВспомогательнаяБашня);
		
		
		
		// Перемещаем последний диск с исходной башни на целевую
		
		Сообщить("Переместить диск " + КоличествоДисков + " с " + ИсходнаяБашня + " на " + ЦелеваяБашня);
		
		
		
		// Перемещаем n-1 диск со вспомогательной башни на целевую
		
		ПереместитьДиски(КоличествоДисков - 1, ВспомогательнаяБашня, ИсходнаяБашня, ЦелеваяБашня);
		
	КонецЕсли;
	
КонецПроцедуры



&НаКлиенте
Процедура Запуск(Команда)
	КоличествоДисков = Дисков; // Укажите количество дисков
	
	ПереместитьДиски(КоличествоДисков, "Башня 1", "Башня 2", "Башня 3");
КонецПроцедуры

Версия 2. С выводом состояния

Уточнил задачу:

Доработай этот код чтобы на каждом шаге показывалось какие диски лежат на какой башне

И вот уже с этой задачей Чат GPT не справился:

В коде пришлось поправлять какие-то мелочи.

Например, в структурах чат GPT использовал пробелы и вызывал процедуру Удалить из массива как структуру. Также пришлось добавить оператор &НаКлиенте.

Но в итоге отобразить состояние дисков он не смог. А мне стало лень ковыряться в этом коде. Предоставляю это вам.

&НаКлиенте
Перем Башни;

// Объявление глобальных переменных для хранения состояния башен




// Инициализация башен с дисками
&НаКлиенте
Процедура Инициализация(КоличествоДисков)
	
	Для i = КоличествоДисков По 1 Цикл
		
		Башни["Башня1"].Добавить(i); // Добавляем диски на первую башню
		
	КонецЦикла;
	
КонецПроцедуры



// Процедура перемещения дисков
&НаКлиенте
Процедура ПереместитьДиски(КоличествоДисков, ИсходнаяБашня, ВспомогательнаяБашня, ЦелеваяБашня)
	
	Если КоличествоДисков = 1 Тогда
		
		// Перемещаем диск с исходной башни на целевую
		
		//ОШИБКА ГПТ: Диск = Башни[ИсходнаяБашня].Удалить(Башни[ИсходнаяБашня].Количество() - 1);
		Диск = Башни[ИсходнаяБашня][Башни[ИсходнаяБашня].Количество() - 1];                                                 
		Башни[ИсходнаяБашня].Удалить(Башни[ИсходнаяБашня].Количество() - 1);
		
		Башни[ЦелеваяБашня].Добавить(Диск);
		
		Сообщить("Переместить диск " + Диск + " с " + ИсходнаяБашня + " на " + ЦелеваяБашня);
		
		ВывестиСостояние();
		
	Иначе
		
		// Перемещаем n-1 диск с исходной башни на вспомогательную
		
		ПереместитьДиски(КоличествоДисков - 1, ИсходнаяБашня, ЦелеваяБашня, ВспомогательнаяБашня);
		
		
		
		// Перемещаем последний диск с исходной башни на целевую
		
		//ОШИБКА ГПТ: Диск = Башни[ИсходнаяБашня].Удалить(Башни[ИсходнаяБашня].Количество() - 1);
		Диск = Башни[ИсходнаяБашня][Башни[ИсходнаяБашня].Количество() - 1];                                                 
		Башни[ИсходнаяБашня].Удалить(Башни[ИсходнаяБашня].Количество() - 1);
		
		Башни[ЦелеваяБашня].Добавить(Диск);
		
		Сообщить("Переместить диск " + Диск + " с " + ИсходнаяБашня + " на " + ЦелеваяБашня);
		
		ВывестиСостояние();
		
		
		
		// Перемещаем n-1 диск со вспомогательной башни на целевую
		
		ПереместитьДиски(КоличествоДисков - 1, ВспомогательнаяБашня, ИсходнаяБашня, ЦелеваяБашня);
		
	КонецЕсли;
	
КонецПроцедуры



// Процедура для вывода состояния башен
&НаКлиенте
Процедура ВывестиСостояние()
	
	Сообщить("Текущее состояние башен:");
	
	Для Каждого Башня Из Башни.Ключи() Цикл
		
		Диски = Башни[Башня];
		
		Сообщить(Башня + ": " + Диски.Представить());
		
	КонецЦикла;
	
	Сообщить(""); // Пустая строка для разделения шагов
	
КонецПроцедуры



// Процедура запуска
&НаКлиенте
Процедура Запуск()
	
	КоличествоДисков = Дисков; // Укажите количество дисков
	
	Инициализация(КоличествоДисков);
	
	ПереместитьДиски(КоличествоДисков, "Башня1", "Башня2", "Башня3");
	
КонецПроцедуры


&НаКлиенте
Процедура ПриОткрытии(Отказ)
	Дисков = 3;      
	
	//Ошибка ГПТ: Использовалась структура с ключом через пробел: "Башня 1"
	
	Башни = Новый Структура;
	
	Башни.Вставить("Башня1", Новый Массив());
	
	Башни.Вставить("Башня2", Новый Массив());
	
	Башни.Вставить("Башня3", Новый Массив());
	
КонецПроцедуры

Скачать файлы обработок:

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *