aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLucas Ransan <lucas@ransan.tk>2021-07-31 15:15:46 +0200
committerLucas Ransan <lucas@ransan.tk>2021-07-31 18:53:01 +0200
commit9e306daa9f2883883b3b47bb0ddd4f819cd3c305 (patch)
tree05da0de5d9647f56a5949f4ff76d5bf5fa213a87
parent65a2ff6db1e19cc1bd28f2f73aa9b44336a80256 (diff)
downloadperlweeklychallenge-club-9e306daa9f2883883b3b47bb0ddd4f819cd3c305.tar.gz
perlweeklychallenge-club-9e306daa9f2883883b3b47bb0ddd4f819cd3c305.tar.bz2
perlweeklychallenge-club-9e306daa9f2883883b3b47bb0ddd4f819cd3c305.zip
C3 week 123 task 1
-rw-r--r--challenge-123/luc65r/c3/ch-1.c338
1 files changed, 38 insertions, 0 deletions
diff --git a/challenge-123/luc65r/c3/ch-1.c3 b/challenge-123/luc65r/c3/ch-1.c3
new file mode 100644
index 0000000000..44dea486b3
--- /dev/null
+++ b/challenge-123/luc65r/c3/ch-1.c3
@@ -0,0 +1,38 @@
+import std::io;
+
+extern func ulong strtoull(char* str, char** str_end, int base);
+
+/**
+ * @require n > 0
+ * @pure
+ **/
+func bool ugly(ulong n) {
+ while (n != 1) {
+ /* That's ugly, but compile-time $foreach isn't implemented yet,
+ and a labelled continue segfaults the compiler… */
+ if (n % 2 == 0) {
+ n /= 2;
+ } else if (n % 3 == 0) {
+ n /= 3;
+ } else if (n % 5 == 0) {
+ n /= 5;
+ } else {
+ return false;
+ }
+ }
+ return true;
+}
+
+func int main(int argc, char** argv) {
+ if (argc != 2) return 1;
+
+ ulong n = strtoull(argv[1], null, 10);
+ ulong i;
+ while (n > 0) {
+ i++;
+ if (ugly(i)) n--;
+ }
+ io::printf("%u\n", i);
+
+ return 0;
+}