int lista[20] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; for (int l=0;l<10000000;l++){ lista[0] ++; //lisätään ensmimäisen alkion arvoa for(int i =0;i<20;i++) //käydään lista läpi { if (lista[i] == 92) //jos alkion arvo 92 { lista[i] = 0; //laitetaan se 0 lista[i+1] ++; //kasvatetaan seuraavan alkion arvoa } }
Listan arvo 10miljoonan kierroksen jälkeen:
59,42,76,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
Osaisiko joku auttaa tekemään laskurin joka laskee listan alkioiden arvot tietyn määrää kierroksia jälkeen?
Tyyliin:
int* get_list(long long int iteration_index)
{
}
Minä osaan!
get_list =: 3 : '|. _1 + (20 $ 92) #: y' get_list 10^7
Tuloste:
59 42 76 11 _1 _1 _1 _1 _1 _1 _1 _1 _1 _1 _1 _1 _1 _1 _1 _1
Täällä voi testata (paina oikealta "Run"): https://jsoftware.github.io/j-playground/bin/html2/#base64=Z2V0X2xpc3QgPTogMyA6ICd8LiBfMSArICgyMCAkIDkyKSAjOiB5JwpnZXRfbGlzdCAxMF43
Toteutus sisältää bugin, jonka löytämisen ja korjaamisen jätän sinulle harjoitukseksi.
92, 184, jne tosiaan on vähän ongelmallisia:
void get_list(int* list, long long int iteration_index) { long long idx = iteration_index; int pos = 0; while (idx > 0 && pos < 20) { list[pos] = (idx % 92); list[pos] -=1; idx /= 92; pos++; } }
8th:lla:
: get-list \ n -- a [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1] const ( n:+ 92 n:/mod dup !if break then swap ) a:map= nip ; : app:main 10m get-list . cr ;
Tulostaa:
[59,42,76,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]
jalski kirjoitti:
(25.09.2025 20:34:31): 8th:lla: – (koodia) – Tulostaa: ...
En jaksa 8th:ta ladata, mutta osaako tämä ottaa huomioon jos tuon 10m sijaan sinne viedäänkin vaikka 184?
Tää toimii jo melkein :D
void get_list(int* list, long long int iteration_index) { long long idx = iteration_index; bool decrase = false; int pos = 0; while (idx > 0 && pos < 19) { list[pos] = (idx % 92); list[pos] -= 1; if (decrase) { list[pos] -= 1; decrase = false; } if (list[pos] <=-1) { list[pos] = 91; decrase = true; } idx /= 92; pos++; } }
wy5vn kirjoitti:
En jaksa 8th:ta ladata, mutta osaako tämä ottaa huomioon jos tuon 10m sijaan sinne viedäänkin vaikka 184?
[91,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]
Toimii
void get_list(int* list, long long int iteration_index) { long long idx = iteration_index; int pos = 0; while (idx > 0 && pos < 20) { list[pos] = (idx % 92); if (list[pos] == 0) { list[pos] = 91; return; } list[pos] -= 1; idx /= 92; pos++; } }