Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Countteri funktio

Meitzi [15.12.2009 21:43:08]

#

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?

Metabolix [15.12.2009 22:07:36]

#

Kaikki palindromiyhdistelmät saat, kun muodostat ensin aivan kaikki vaihtoehdot (kuten olet tehnytkin) ja kopioit sitten jokaisen palindromiksi:
ABC -> ABCBA ja ABCCBA

Meitzi [15.12.2009 22:13:44]

#

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

jalski [15.12.2009 22:24:39]

#

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.

Meitzi [15.12.2009 22:35:18]

#

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);
}

EiVoiOsata [18.12.2009 15:05:25]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta