Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Как написать такой генератор случайного исходного кода?

Короче суть в чем я хочу написать программу на python которая генерирует случайный исходный код, и есть как бы условный образ как это сделать для полноценного понимание представьте себе что программирование это кубик рубик, и что блоки исходного кода это строки "if","while","break","def", и т.д. которые являются кубиками, и двигая блоки словно кубики в кубике рубике мы получаем исходный код, на вход программа получает массив чисел в котором нечётные числа это номер блока в кубике рубике, а четные числа это то насколько этот блок предыдущего числа блока перемещается, и в результате функция считывает все движение всех блоков по всем числам массива и завершается на последнем четном числе последнего перемещения которая является стороной кубика рубика в котором последовательно от самого верхнего кубика считывает все числа и возвращает строку общего исходного кода которую запускает через exec, и вот хочу я написать такой исходный код но не получается ничего существенного не получается реализовать общий посыл мысли, я писал ChatGPT но не особо помогло он меня неправильно понимает:

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
 import random 
 
def generate_random_source_code(moves): 
 
  # Создаем пустой список для хранения исходного кода. 
  source_code = [] 
 
  # Получаем размер стороны кубика Рубика из последнего четного числа. 
  side_size = moves[-1] // 2 
 
  # Перебираем ходы. 
  for i in range(0, len(moves), 2): 
    # Проверяем, не выходим ли мы за пределы списка ходов. 
    if i + 1 >= len(moves): 
      break 
 
    # Получаем номер блока и количество его перемещений. 
    block_number = moves[i] 
    num_moves = moves[i + 1] // 2 
 
    # Создаем строку перемещений для блока. 
    move_string = "" 
    for j in range(num_moves): 
      move_string += f"block{block_number + j}.move()\n" 
 
    # Добавляем строку перемещений в исходный код. 
    source_code.append(move_string) 
 
  # Создаем строку чтения кубика Рубика. 
  read_string = "" 
  for i in range(side_size): 
    for j in range(side_size): 
      read_string += f"print(block{i * side_size + j}.value)\n" 
 
  # Возвращаем исходный код. 
  return "".join(source_code) + read_string 
 
 
# Генерируем случайный список ходов. 
moves = [random.choice([1, 3, 5, 7, 9]) for i in range(10)] + [random.choice([2, 4, 6, 8, 10])] 
 
# Генерируем исходный код. 
source_code = generate_random_source_code(moves) 
 
# Выполняем исходный код. 
exec(source_code) 

Второй код:

123456789101112131415161718192021222324252627282930313233343536
 import random 
 
def generate_random_source_code(moves): 
  """Генерирует случайный исходный код для кубика Рубика. 
 
  Args: 
    moves: Массив чисел, где нечетные числа - это номера блоков в кубике Рубика, а четные числа - это то, насколько этот блок перемещается. 
 
  Returns: 
    Строка исходного кода. 
  """ 
 
  # Создаем пустой исходный код. 
  source_code = "" 
 
  # Перебираем все ходы. 
  for i in range(0, len(moves), 2): 
    # Получаем номер блока и направление перемещения. 
    block_number = moves[i] 
    direction = moves[i + 1] 
 
    # Добавляем строку исходного кода для перемещения блока. 
    source_code += f"move_block({block_number}, {direction})\n" 
 
  # Возвращаем исходный код. 
  return source_code 
 
 
# Генерируем случайный массив ходов. 
moves = [random.randint(1, 9) for i in range(10)] 
 
# Генерируем случайный исходный код. 
source_code = generate_random_source_code(moves) 
 
# Выводим исходный код на экран. 
print(source_code) 

Может есть идея как полноценно реализовать эту идею, как написать такой код? Нужно додумать посыл мысли оформить мысль как это сделать? Хотя бы какие-то зарисовки есть?

По дате
По рейтингу
Аватар пользователя
Ученик

Привет. Напиши мне пожалуйста в тг @teamine

Аватар пользователя
Искусственный Интеллект

попросить гпт будет надёжнее