下午好!
让我们忙于通过AI Acrobatics进行CHATGPT,我们可以!
我们今天要查看的问题是:
Write a function, which takes a non-negative integer (seconds) as input and returns the time in a human-readable format (HH:MM:SS)
HH = hours, padded to 2 digits, range: 00 - 99
MM = minutes, padded to 2 digits, range: 00 - 59
SS = seconds, padded to 2 digits, range: 00 - 59
The maximum time never exceeds 359999 (99:59:59)
You can find some examples in the test fixtures.
现在,由于我们今天要使用的每种语言可能会有所不同,因此我不会打扰它们,而是出于本练习的目的,每当我要求Chatgpt解决难题时,我都会提供固定装置。
在Haskell中解决它
humanReadable :: Int -> String
humanReadable seconds =
let hours = seconds `div` 3600
minutes = (seconds `div` 60) `mod` 60
secs = seconds `mod` 60
in pad hours ++ ":" ++ pad minutes ++ ":" ++ pad secs
where pad n = if n < 10 then "0" ++ show n else show n
老实说,我没想到这是第一次通过,但确实如此!我们对编程的扎实工作AI。
在JavaScript中解决它
function humanReadable(seconds) {
const hours = Math.floor(seconds / 3600);
const minutes = Math.floor((seconds % 3600) / 60);
const secs = seconds % 60;
return pad(hours) + ':' + pad(minutes) + ':' + pad(secs);
}
function pad(num) {
return (num < 10 ? '0' : '') + num;
}
在这种情况下,JavaScript的另一个首次成功,让我们继续前进,看看我们可以C,C,C
在C
中解决它
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
void do_test(unsigned seconds, const char *expected);
void human_readable(unsigned seconds, char* output) {
unsigned hours = seconds / 3600;
unsigned minutes = (seconds / 60) % 60;
unsigned secs = seconds % 60;
snprintf(output, 9, "%02u:%02u:%02u", hours, minutes, secs);
}
void do_test(unsigned seconds, const char *expected) {
char actual[9];
human_readable(seconds, actual);
cr_assert_str_eq(actual, expected);
}
上面是第一次尝试,我写了一个与前两次完全相同的问题,但在这里我们遇到了第一个失败。
此代码没有通过,所以我回去要求Chatgpt重试,并为其提供以下功能存根:
char *human_readable_time (unsigned seconds, char *time_string)
{
*time_string = '\0'; // write to time_string
return time_string; // return it
}
几秒钟后,我有了一个新的解决方案来尝试:
#include <stdio.h>
char *human_readable_time(unsigned seconds, char *time_string) {
int hours = seconds / 3600;
int minutes = (seconds / 60) % 60;
int remaining_seconds = seconds % 60;
sprintf(time_string, "%02d:%02d:%02d", hours, minutes, remaining_seconds);
return time_string;
}
这个解决方案通过了,一切都很好!
我很感谢这些可能不是我目前正在写的最令人兴奋的文章,但是我们正在为软件社区提供一项很好的服务,以进行一些非常琐碎的科学研究!
!在下一个抓住你们所有人!