Anonymous user
Hofstadter Figure-Figure sequences: Difference between revisions
Hofstadter Figure-Figure sequences (view source)
Revision as of 23:15, 25 February 2012
, 12 years ago→{{header|D}}: ++ C
(Added JavaScript) |
(→{{header|D}}: ++ C) |
||
Line 265:
69
Verified</pre>
=={{header|C}}==
{{trans|Go}}
{{libheader|GLib}}
<lang c>#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#include <glib.h>
GArray *S = NULL;
GArray *R = NULL;
uint64_t ffS(uint64_t n);
uint64_t ffR(uint64_t n);
guint R_size(void);
guint S_size(void);
void initSR(void);
void clearSR(void);
void initSR(void)
{
uint64_t lr[2] = { 0, 1 };
uint64_t ls[2] = { 0, 2 };
S = g_array_new(FALSE, FALSE, sizeof(uint64_t));
R = g_array_new(FALSE, FALSE, sizeof(uint64_t));
// failure checking omitted
(void)g_array_append_vals(R, lr, 2);
(void)g_array_append_vals(S, ls, 2);
}
void clearSR(void)
{
g_array_free(R, TRUE);
g_array_free(S, TRUE);
}
guint R_size(void)
{
return R ? R->len : 0;
}
guint S_size(void)
{
return S ? S->len : 0;
}
uint64_t ffS(uint64_t n)
{
while (S_size() <= n) {
(void)ffR(R_size());
}
return g_array_index(S, uint64_t, n);
}
uint64_t ffR(uint64_t n)
{
uint64_t sn;
while (R_size() <= n) {
guint nrk = R_size() - 1;
uint64_t rNext = g_array_index(R, uint64_t, nrk) + g_array_index(S, uint64_t, nrk);
g_array_append_val(R, rNext);
for(sn = g_array_index(R, uint64_t, nrk) + 2; sn < rNext; sn++) {
g_array_append_val(S, sn);
}
uint64_t rapp = rNext + 1;
g_array_append_val(S, rapp);
}
return g_array_index(R, uint64_t, n);
}
int main(int argc, char **argv)
{
static const uint64_t knownR11[] = { 1, 3, 7, 12, 18, 26, 35, 45, 56, 69 };
uint64_t i;
bool ok;
initSR();
for(i = 1, ok = true; i <= sizeof(knownR11)/sizeof(uint64_t); i++)
{
printf("ffr(%lld) = %lld%s\n", i, ffR(i), ffR(i) != knownR11[i-1] ? " WRONG" : "");
}
uint64_t found[1001] = { 0 };
for(i = 1; i <= 40; i++) found[ffR(i)]++;
for(i = 1; i <= 960; i++) found[ffS(i)]++;
bool ok = true;
for(i = 1; i <= 1000; i++) {
if (found[i] != 1) {
ok = false;
break;
}
}
printf("task 4: %s\n", ok ? "PASS" : "FAIL");
clearSR();
return 0;
}</lang>
=={{header|D}}==
|