Tämä liittyy yhteen PHP haasteeseen, mutta ongelma kuitenkin tämä. Minun pitäisi saada funktio joka tulostaa A,B,C...Z,AA,AB,AC...ZZ,AAA,AAB
Aluksi yritin suoraan lukujärjestelmämuutoksella, eli kymmenjärjestelmästä 26 järjestelmään. Tulos vain on silloin A,B,C...Z,BA eli väärin. Tästä yritin sitten kehittää dynaamista jakajaa, mutta huonolla tuloksella. Hirmu hässäkkä joka vieläpä toimii väärin.
Nyt tarttis pientä vinkkiä, mistäpäin tätä ongelmaa oikein pitäisi katsoa?
Kaikki palindromiyhdistelmät saat, kun muodostat ensin aivan kaikki vaihtoehdot (kuten olet tehnytkin) ja kopioit sitten jokaisen palindromiksi:
ABC -> ABCBA ja ABCCBA
Ongelma ei ole tuo palindromin muodostaminen, vaan nimenomaan tuon "laskurin" tekeminen. Eli en jostain syystä vain keksi miten teen function joka palauttaa arvolla 27 vastauksesi AA eikä BA.
Toisinsanoen laskuri joka laskee 0,1,2,3...8,9,00,01,02..99,000,001
Ilmeisesti nyt käytät muunnoksessa taulukkoa ja modulo-operaattoria.
Lisää tuohon vielä pino avuksi ja saat jotain alla olevan tapaista:
Eli esim. luku 27
27 % 26 = 1 => push(A)
(27 - 1) % 26 = 0 => push(Z)
tulos = pop()
tulos += pop()
---------------------------
= ZA
Edit: Sori, lukaisin nopeasti. Ylläoleva ei tee haluamaasi muunnosta.
Nyt on tämmönen kammottava viritys, toimii A-YZ oikein, mutta sitten tuleekin AAA vaikka pitäisi tulla vielä ZZ jne. Eli idea minulla väärä. Koska käytännössä yritin vähentää luvusta jaon. (eli BA = BA-BA mutta lisätään A eteen, eli tulee AA niinkuin pitääkin)
<?php Function Palin2($luku) { $jarj2 = 26; $kerroin = pow($jarj2,20); For ($i = 0; $i < 20; $i++) { //tällävirityksellä tarkoits on vain laskea kirjaiten määrä If ((int)($luku / $kerroin) > 0) { $luku -= $kerroin; Break; } $kerroin /= $jarj2; } $kirjaimia = 21 - $i; If ($luku == 0) $tulos = "A"; while ($luku > 0) { $tulos = Chr($luku % $jarj2 +65) . $tulos; $luku = (int)($luku / $jarj2); } $tulos = Str_Pad($tulos, $kirjaimia, "A", STR_PAD_LEFT); Return($tulos); }
En kyllä php:tä osaa, mutta onnistuisko tuo mahdollisesti muutamalla apumuuttujalla.
Joo eka viesti oli huono, eli luot jokaiselle 10 kertoimelle oman muuttujat.
i = 0-9
b = 0-9
ja noita käytät että ainakun i on pöyriny tuon 9 yli nii lisäät hen b lisää.
saattais toimia, ellen ajatellu väärin.
eli tuo 01 olis luku 11 tuossa tapauksessa eli b olis b+1 ja tuo i +11.
Saattaa toimia.
Voi juma ko selitän epäselvästi, mutta nuo pyörimään tavallaan kaikki 10 numeron sisällä. Ja noissa b ja sitten 100 kertoimet alota -1, jotta se korvaa sen ensimmäisen pyörähdykset, eikä anna väärää lukua.
Ja toki nollaat ne luvut aina 9 jälkeen.
Monta ehtoa aina loopissa, perhanan epäselvä koodi, mutta pitäs toimia tuommoseksi laskuriksi :D
Vielä ne pitäs lukea jotenki johonki nii kehitteleppä siihen vielä funktio.
Aihe on jo aika vanha, joten et voi enää vastata siihen.