chatgpt-复杂的编码挑战:5 kyu
#javascript #c #haskell #chatgpt

下午好!

让我们忙于通过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;
}

这个解决方案通过了,一切都很好!

我很感谢这些可能不是我目前正在写的最令人兴奋的文章,但是我们正在为软件社区提供一项很好的服务,以进行一些非常琐碎的科学研究!

在下一个抓住你们所有人!