前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >云课五分钟-06一段代码调试debug-AI与人工

云课五分钟-06一段代码调试debug-AI与人工

作者头像
zhangrelay
发布2023-11-17 10:47:07
1500
发布2023-11-17 10:47:07
举报

前篇:

简单问题,与文心一言等工具交互一次,就能得到很满意的结果。

但是,复杂问题呢,可能需要多次交互,也可能由于问题的复杂性,提问者本身描述就存在不合理的地方。 


视频:

云课五分钟-06一段代码调试debug-AI与人工


文本:

能否修改如上代码,显示彩色的动态效果。

例如这个问题,如果突破思维的局限,甚至不用修改代码就能实现呢。

思维定势的破除,对于智能时代非常重要的,毕竟应用工具的是每个人。

于是这个问题有了另一种解法。

代码语言:javascript
复制
#!/bin/bash  
  
# 定义颜色数组  
colors=("\033[0;31m" "\033[0;32m" "\033[0;33m" "\033[0;34m" "\033[0;35m" "\033[0;36m" "\033[0;37m")  
  
# 获取颜色数组的长度  
colors_length=${#colors[@]}  

# 设置超时时间(以秒为单位)  
timeout=6 
  
# 无限循环  
while true; do  
    # 循环遍历颜色数组  
    for (( i=0; i<${colors_length}; i++ )); do  
        # 输出带有颜色的文本  
        echo -e "${colors[$i]}This is a colored text!\033[0m"   
	sleep $timeout        
	# 启动程序  
	./a.out &  
	program_pid=$!    
	# 等待程序运行并计时  
	sleep $timeout  
	# 检查程序是否仍在运行  
	if ps -p $program_pid > /dev/null; then  
	    echo "程序运行时间超过$timeout秒,正在强制变色..."  
	    kill -9 $program_pid  
	else  
	    echo "程序在正常时间内退出。"  
	fi
	sleep $timeout 
    done  
done

在这个脚本中,colors 数组包含了所有基本颜色(红色,绿色,黄色,蓝色,洋红色,青色,白色)的 ANSI escape codes。脚本会在这些颜色之间循环,使得文本颜色不断变化。

注意:这个脚本会无限循环,直到你停止它(通常可以通过按 Ctrl+C 来停止)。另外,这个脚本只适用于支持 ANSI escape codes 的终端。

注意,你需要确保my_program具有可执行权限,如果不是,你可以使用chmod +x my_program命令赋予其可执行权限。同时,你需要根据实际需要,将此代码嵌入到脚本的正确位置。这里只是一个示例,你可能需要根据自己的需求进行调整。

你可以使用脚本来关闭程序1并打开程序2。下面是一个示例脚本,它首先尝试关闭程序1,然后打开程序2:

代码语言:javascript
复制
#!/bin/bash  
  
# 关闭程序1  
pkill -f "程序1的进程名"  
  
# 等待一段时间确保程序1关闭  
sleep 5  
  
# 打开程序2  
./程序2的路径 &

请注意,你需要将 "程序1的进程名" 替换为实际程序1的进程名,并将 "程序2的路径" 替换为实际程序2的可执行文件的路径。

这个脚本首先使用 pkill 命令发送信号关闭程序1。-f 选项允许你指定要匹配的进程名称。然后,脚本使用 sleep 命令等待一段时间,确保程序1有足够的时间关闭。最后,使用 ./程序2的路径 & 的方式打开程序2。& 符号表示在后台运行程序2。

你可以将上述脚本保存为一个文本文件(例如 script.sh),然后在终端中运行该脚本:bash script.sh

如果程序不会自动退出,如果在脚本中计时,退出特定程序呢

如果程序不会自动退出,你可以使用脚本中的计时器来监控程序的运行时间,并在超时时退出特定程序。下面是一个示例脚本,可以实现这个功能:

代码语言:javascript
复制
#!/bin/bash  
  
# 设置超时时间(以秒为单位)  
timeout=60  
  
# 启动程序  
./程序路径 &  
program_pid=$!  
  
# 等待程序运行并计时  
sleep $timeout  
  
# 检查程序是否仍在运行  
if ps -p $program_pid > /dev/null; then  
    echo "程序运行时间超过$timeout秒,正在强制退出..."  
    kill -9 $program_pid  
else  
    echo "程序在正常时间内退出。"  
fi

在这个示例脚本中,你需要将 程序路径 替换为你要运行的程序的实际路径。脚本首先启动程序,并将其进程ID保存到 program_pid 变量中。然后,使用 sleep 命令等待指定的超时时间。在超时时间到达后,脚本检查程序是否仍在运行,如果是,则使用 kill -9 命令强制退出程序。

你可以根据需要修改超时时间 timeout 的值。请注意,强制退出程序可能会导致数据丢失或不完整,因此请确保在适当的情况下使用此脚本。

这段代码是一个C语言程序,用于生成一个动态变化的彩色文本输出在终端上。它使用了ANSI转义码来控制文本的颜色。让我们一步步解释代码的每个部分:

  1. 引入头文件:

c

#include <stdio.h>

#include <math.h>

#include <cstring>

#include <unistd.h>

这些头文件包含了程序需要的各种函数和声明。例如,stdio.h包含了输入输出函数,math.h包含了数学函数等。 2. 定义颜色数组:

c

char colors[7][8] = {"\033[31m", "\033[33m", "\033[32m", "\033[36m", "\033[34m", "\033[35m", "\033[37m"};

这是一个包含7种颜色的ANSI转义码的数组。这些转义码用于在终端上设置文本颜色。 3. 主函数:

c

int main() { ... }

这是程序的入口点。 4. 变量初始化: 一些变量(如A、B、i、j等)被初始化,用于在后面的循环中计算。

  1. 无限循环:

c

for (;;) { ... }

这个无限循环使得程序持续运行,生成动态变化的输出。 6. 清理屏幕和初始化数组:

c

printf("\x1b[2J");

memset(b, 32, 1760);

memset(z, 0, 7040);

printfmemset函数用于清理屏幕和初始化数组。 7. **计算和绘图**: 在嵌套的for循环中,程序使用三角函数和其他数学计算来生成一个形状,并将结果存储在bz数组中。颜色选择基于数组N`的值。

  1. 打印输出:

c

printf("\x1b[H");

for (k = 0; k < 1761; k++) {

printf("%s", colors[k%7]);

putchar(k % 80 ? b[k] : 10);

A += 0.00004;

B += 0.00002;

}

在这部分,程序将计算得到的字符打印到屏幕上,并设置相应的颜色。同时,A和B的值也稍微增加,使得输出动态变化。 9. 暂停:

c

usleep(100000);

程序暂停100000微秒(0.1秒),然后重新开始循环,继续生成新的输出。

整体而言,这个程序是一个动态的文本生成器,它使用数学函数生成形状,并使用ANSI颜色代码以不同颜色显示这些形状。这个程序可能用于终端的艺术显示或者简单地展示动态文本的效果。

这段代码看起来像是一个在终端中生成动态图形的程序。它使用了 ANSI escape codes 来控制文本的颜色和位置,并包含了大量的数学运算来生成图形的每一个点。

如果要找出最难理解的一部分,可能因人而异。但其中比较复杂的部分可能是以下这段代码:

c

代码语言:javascript
复制
float c = sin(i);  
float d = cos(j);  
float e = sin(A);  
float f = sin(j);  
float g = cos(A);  
float h = d + 2;  
float D = 1 / (c * h * e + f * g + 5);  
float l = cos(i);  
float m = cos(B);  
float n = sin(B);  
float t = c * h * g - f * e;  
int x = 40 + 30 * D * (l * h * m - t * n);  
int y = 12 + 15 * D * (l * h * n + t * m);  
int o = x + 80 * y;  
int N = 8 * ((f * e - c * d * g) * m - c * d * e - f * g - l * d * n);

float c = sin(i);

float d = cos(j);

float e = sin(A);

float f = sin(j);

float g = cos(A);

float h = d + 2;

float D = 1 / (c * h * e + f * g + 5);

float l = cos(i);

float m = cos(B);

float n = sin(B);

float t = c * h * g - f * e;

int x = 40 + 30 * D * (l * h * m - t * n);

int y = 12 + 15 * D * (l * h * n + t * m);

int o = x + 80 * y;

int N = 8 * ((f * e - c * d * g) * m - c * d * e - f * g - l * d * n);

这一段代码包含了大量的浮点数运算,包括三角函数、乘法和除法。这些运算在图形生成中用于计算每个点的位置和颜色。由于涉及到多个变量的三角函数和复合运算,这一部分可能比较难以理解。

整体而言,代码的目的是通过一系列数学运算生成图形,并使用 ANSI escape codes 在终端上输出相应字符来表示图形的每一个点。这个程序是一种创造性的方法,利用终端的字符输出生成动态图形。对于不熟悉这种方法的人来说,整个程序可能都比较难以理解。

以下是一个使用C++编写的在终端中动态旋转的立方体的代码示例:

代码语言:javascript
复制
#include <iostream>  
#include <cmath>  
#include <chrono>  
#include <thread>  
  
#define WIDTH 80  
#define HEIGHT 20  
  
const char* colors[7] = {"\033[31m", "\033[33m", "\033[32m", "\033[36m", "\033[34m", "\033[35m", "\033[37m"};  
  
void drawCube(float angleX, float angleY) {  
    // 清屏  
    std::cout << "\033[2J";  
  
    for (int x = -1; x <= 1; x++) {  
        for (int y = -1; y <= 1; y++) {  
            for (int z = -1; z <= 1; z++) {  
                if (x * x + y * y + z * z == 1) {  
                    int posX = WIDTH / 2 + (int)(x * 8 * std::cos(angleY) - z * 4 * std::sin(angleX));  
                    int posY = HEIGHT / 2 + (int)(y * 4 - z * 4 * std::cos(angleX) - x * 8 * std::sin(angleY));  
  
                    if (posX >= 0 && posX < WIDTH && posY >= 0 && posY < HEIGHT) {  
                        std::cout << "\033[" << posY << ";" << posX << "H" << colors[(int)(angleY * 7) % 7] << (x + 'X') << "\033[0m";  
                    }  
                }  
            }  
        }  
    }  
  
    std::cout << std::flush;  
}  
  
int main() {  
    float angleX = 0.0, angleY = 0.0;  
  
    while (true) {  
        drawCube(angleX, angleY);  
  
        // 更新角度以旋转立方体  
        angleX += 0.02;  
        angleY += 0.015;  
  
        // 等待一段时间  
        std::this_thread::sleep_for(std::chrono::milliseconds(20));  
    }  
  
    return 0;  
}

这个代码示例使用C++的标准库和终端控制序列来实现在终端中动态旋转的立方体。它定义了一个drawCube函数来绘制立方体,并在main函数中使用一个无限循环来不断更新和绘制旋转的立方体。在每次循环中,都会更新角度、绘制立方体,并等待一段时间以实现动态效果。你可以根据需要调整角度的增量和等待时间来控制立方体的旋转速度和流畅度。记得在支持ANSI escape codes的终端中运行该代码,以正确显示颜色和立方体的动态旋转效果。

推荐:

代码语言:javascript
复制
ascii-graphics
代码语言:javascript
复制
cmake_minimum_required(VERSION 3.23.1)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

project(Ascii-Graphics)



add_executable(${PROJECT_NAME} ascii-graphics.cpp)

add_subdirectory(src)

target_link_libraries(${PROJECT_NAME} agm)
target_link_libraries(${PROJECT_NAME} Camera)
target_link_libraries(${PROJECT_NAME} Lights)
target_link_libraries(${PROJECT_NAME} Mesh)
target_link_libraries(${PROJECT_NAME} Screen)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前篇:
  • 视频:
  • 文本:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档