commit ee0ac85c5339d9e99c00a01d6c612155c75651b2
parent b913661b53a8cb74715a2e87eafe17f7f9419d2c
Author: Jack Sangdahl <jack@pngu.org>
Date: Mon, 16 Feb 2026 21:19:13 -0700
401. binary watch
Diffstat:
2 files changed, 25 insertions(+), 21 deletions(-)
diff --git a/binary_watch.c b/binary_watch.c
@@ -11,17 +11,16 @@
*/
char **readBinaryWatch(int turnedOn, int *returnSize) {
- char **ans = (char **)malloc(190 * sizeof(char *));
+ char **ans = (char **)malloc(12 * 60 * sizeof(char *));
*returnSize = 0;
- for (int h = 0; h < 12; h++)
- for (int m = 0; m < 60; m++) {
- int total = __builtin_popcount(h) + __builtin_popcount(m);
- if (total == turnedOn) {
- ans[*returnSize] = (char *)malloc(8 * sizeof(char));
- snprintf(ans[*returnSize], 8, "%d:%02d", h, m);
- (*returnSize)++;
- }
+ for (int i = 0; i < 1024; ++i) {
+ int h = i >> 6, m = i & 63;
+ if (h < 12 && m < 60 && __builtin_popcount(i) == turnedOn) {
+ char *tmp = (char *)malloc(6 * sizeof(char));
+ sprintf(tmp, "%d:%02d", h, m);
+ ans[(*returnSize)++] = tmp;
}
+ }
return ans;
}
@@ -29,13 +28,18 @@ int main() {
int rs1, rs2;
char **rbw1 = readBinaryWatch(1, &rs1);
char **rbw2 = readBinaryWatch(9, &rs2);
- for (int i = 0; i < rs1; i++)
- printf(
- "%s ",
- rbw1[i]); // expect: 0:01,0:02,0:04,0:08,0:16,0:32,1:00,2:00,4:00,8:00
+ char *r1[] = {"0:01", "0:02", "0:04", "0:08", "0:16",
+ "0:32", "1:00", "2:00", "4:00", "8:00"};
+ char *r2[] = {};
+ for (int i = 0; i < rs1; i++) {
+ printf("%s ", rbw1[i]);
+ assert(!strcmp(r1[i], rbw1[i]));
+ }
printf("\n");
- for (int i = 0; i < rs2; i++)
- printf("%s ", rbw2[i]); // expect: null
+ for (int i = 0; i < rs2; i++) {
+ printf("%s ", rbw2[i]);
+ assert(!strcmp(r2[i], rbw2[i]));
+ }
printf("\n");
for (int i = 0; i < rs1; i++)
free(rbw1[i]);
diff --git a/binary_watch.py b/binary_watch.py
@@ -16,12 +16,12 @@ class Solution(object):
:type turnedOn: int
:rtype: List[str]
"""
- return [
- "%d:%02d" % (h, m)
- for h in range(12)
- for m in range(60)
- if (bin(h) + bin(m)).count("1") == turnedOn
- ]
+ ans = list()
+ for i in range(1024):
+ h, m = i >> 6, i & 0x3F
+ if h < 12 and m < 60 and bin(i).count("1") == turnedOn:
+ ans.append(f"{h}:{m:02d}")
+ return ans
if __name__ == "__main__":