(Mod. vaihtoi otsikon ongelmaa paremmin kuvaavaksi.)
Nyt tuli eteen taas tehtävä jossa en ymmärrä tehtävänantoa.
Tehtävä 52: Pinolaskin kirjoitti:
1970- ja 1980-luvuilla käytettiin yleisesti taskulaskimia, joiden käyttöliittymä oli varsin nurinkurinen: esimerkiksi lausekkeen "5 * (3 + 4) + 1" sijaan laskimeen kirjoitettiin lauseke "5 3 4 + * 1 +".
Pinolaskin lukee syötettä vasemmalta oikealle. Kun vastaan tulee luku, se työnnetään pinoon. Kun vastaan tulee laskutoimitus (esim. + tai *), pinosta nostetaan kaksi arvoa, suoritetaan laskutoimitus, ja työnnetään tulos takaisin pinoon. Lopulta pinossa on koko lausekkeen tulos.
Tuolla esimerkkilausekkeella "5 3 4 + * 1 +" tehtävän suorittaminen onnistuu, mutta tehtävänannossa ei kerrota mitä tälläisiin virheellisiin syötteisiin pitäisi tulostaa vastaukseksi. Olisko ketään tätä selvittänyttä?
Oman ymmärrykseni mukaan syötelausekkeessa pitäisi tulla ensin vähintään kaksi lukua ennenkuin voi tulla laskutoimitusoperaattoria. Ensimmäiset testilausekkeet ovat kuitenkin "637+443+%2B" ja "3+-5+7+%2A+-". Onko näistä näistä poistettu välilyönnit, joiden piti erotella arvot? Jos työnnän pinoon luvun 637 tai 3, ei minulla ole toista lukua pinossa minkä kanssa tekisin yhteenlaskun. Ensin kokeilin tehdä tälläisiä laskutoimituksia arvolla "null", mutta ei toimi sekään; lausekkeeseen "3+-5+7+%2A+-" on annettu arvoksi 38.
+ - merkki tarkoittaa välilyöntiä eli uutta numeroa/toimintoa
%2B - merkkijono tarkoittaa +-merkkiä
%2A - merkkijono tarkoittaa *-merkkiä
%2F - merkkijono tarkoittaa /-merkkiä
Kyseessä siis hexa-asciit.
Edit - Ja siis en ole selvittänyt kyseistä tehtävää. :(
Peran viestiin voisi täydentää, että tuossa ei ole mistään taikanumeroista kyse, vaan pyynnön kyselymerkkijono on url-enkoodattu, kuten aina weppisivuja ladatessa.
Eli kun ajaa tuon 3+-5+7+%2A+- urldecode -funktion (tai vastaavan) läpi, niin tulokseksi tulee 3 -5 7 * -
Sinänsä jos sivupyyntö on http://jotain.com/sivu.php?n=3+-5+7+%2A+- niin ihan normaali $_REQUEST['n'] palauttaa normaalisti valmiiksi url-dekoodatun arvon. Eli outoa että olet edes törmännyt tuollaiseen.
Ohjelmointiputkan palvelin todellakin lähettää näin:
Syöte
lauseke=3+-5+7+%2A+-
Oma vastauksesi
-38
Oikea vastaus
38
Takaisin tehtävään
Mutta se hämäsi kun koodissani oli vikaa myös. $_REQUEST['lauseke'] tosiaan muuttaa sen ihan normaalilausekkeeksi.
Kyllä 38 on oikea vastaus...
3 -5 7 * -
Elikkä purettuna sulkuina...
3-(-5 * 7) = 38
Jos kiinnostaa lisää, niin kannattaa hankkia vanha HP:n laskin esim. HP48.
Nyt PHP-haaste näyttää syötteen URL-muodon lisäksi myös PHP-muuttujana:
lainaus:
Syöte (URL-muoto)
lauseke=3+-5+7+%2A+-Syöte (PHP-muoto)
$_REQUEST = array ( 'lauseke' => '3 -5 7 * -', );
Sinänsä tämän parametriasian pitäisi olla ihan perusjuttu jokaiselle PHP-koodarille. Haasteen neuvoissakin kerrotaan, että koodia voi testata laittamalla parametrit osoitteriville (GET-parametreiksi), jolloin tuo annettu URL-muoto on hyödyllinen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.