2011-08-05

cimo en la dekduminuta promeno de komputisto

komputisto planis jenan promenon:

se (ne pluvas) {
  survojiĝu();
  ekirtempo = horo(nuna);
  dum (la vojo pluas) {
    se (dekstra piedo antaŭas) {
      antaŭigu (la maldekstran piedon);
    }
    alie {
      antaŭigu (la dekstran piedon);
    }
    nuno = horo(nuna);
    se (nuno - ekirtempo >= 6 minutoj) {
      returniĝu();
    }
  }
}

ne pluvis, la komputisto ekiris, tamen neniam revenis.  kial?

11 commentaires:

::júbilo::haku:: a dit…

nuno kaj ekirtempo estas samaj....

ĵeromo a dit…

interese, tiun respondon mi ne imagis. ĝi povas esti ĝusta, se la necesa tempo por antaŭigi piedon estas nula, alivorte nekonstatebla.

Russ Williams a dit…

La programlingvo estas iom skiza :) do malfacilas analizi precize, sed trafas min, ke ne estas ia instrukcio por halti kiam li reatingas la komenclokon, do eble li simple daŭre piediras post "returniĝu();".

ĵeromo a dit…

... daŭre piediras post returniĝo, jes. normale tio okazas post 6 minutoj kaj ekde tiam revojigas la komputiston al la komenca loko. post 12 minutoj entute la promeno do nature finiĝas.

vi pravas, ke pri tia pseŭdoprogramlingvo oni ne povas vere juĝi. supozante, ke homoj komprenas, ke "dum (la vojo pluas)" estigas senfinan cirklon, kaj ke "returniĝu()" sanĝas la irdirekton post ses minutoj, restas tro multaj subkomprenoj sub la diversaj funkcionomoj.

se mi duone malvualu: en mia intenco la cimo temis pri "horo(nuna)".

Russ Williams a dit…

Aha, jes, via malvualigo donas al mi la celitan solvon, kiu ja estas pli gravas ol mia trovo. :)

Nome, ke li daŭre returniĝos tien kaj reen post kiam 6 minutoj pasos. Nu, sed ankaŭ tio dependas de la signifo de la pseŭdoprogramlingva instrukcio "returniĝu" efektive. Ĉu "ŝanĝu direkton", ĉu "revenu al la hejmo"? :)

Amuza cimo!

ĵeromo a dit…

jes, tio estas bona klarigo, mi ne povas kontraŭdiri, ĉar efektive li povus returniĝi en ĉiu sesa minuto senfine pro manko de vere haltiga komando.

tamen ankoraŭ alian specon de cimo mi imagis sub tio ke la funkcio nomiĝas "horo()", ne "tempo()".

Russ Williams a dit…

Do ĉu la funkcio "horo" redonas ian entjeran horon (ekzemple se la horo/tempo nun estas 17:18, ĝi redonas 17?) Tiam kion signifas "6 minutoj" kiel diferenco inter horoj?

Mi supozis (eble erare), ke vi uzis "horo" en la ofta esperanta senco de "tempo" ("Kioma horo estas nun?" "17:18.")

ĵeromo a dit…

jes, ĝuste la horo kiel 17:18, kaj supozante (bone, ankoraŭfoje supozante), ke oni kapablas subtrahi por konstati, kiom da minutoj estas inter du tiaj tempindikoj.

Russ Williams a dit…

Nu, ĉu "returniĝu()" ŝanĝas la valoron de "la vojo pluas"?

Se jes, jen tiu "dum"-ripetado ĉesas.

Se ne, ĉu "dekstra piedo antaŭas" estas absoluta aŭ relativa al la piediranto? Se absoluta, li do daŭrigos la iradon en la sama direkto, simple rigardante al la domo anstataŭ al la direkto en kiu li iras. :)

Mi ekpensas, ke malpreciza skiza programlingvo eble ne tre taŭgas por detala problemo pri eraro-serĉado en programo. :)

ĵeromo a dit…

vi pravas.

la celita respondo estis: li ekiris malpli ol ses minutojn antaŭ noktomezo. ĉar la horo-funkcio ne estas absoluta tempo-funkcio, kiu respondus per pasinta tempo ekde iu komencodato (ekzemple 1920-01-01 je 00:00 en iuj programlingvoj), se la programisto ekiris — ni diru — je 23:57, 6 minutojn poste estos 00:03 kaj sekve la subtraho ne rezultos je 6 aŭ pli ol 6 minutoj sed je minusa valoro. kaj same dum ĉiuj sekvaj kontroloj. sekve la programisto neniam returniĝos.

mi ne kuraĝis kalkuli, kio okazos ĉirkaŭ la sekva noktomezo. povas esti, ke ĝi detruos la sorĉon...

Russ Williams a dit…

Aha, do mi ja pensis anstataŭe pri tipa uniksa horfunkcio, kiu inkluzivas datan informon kaj ne nur laŭvorte la horon.

Ja estas multaj manieroj, laŭ kiuj tia skiza programo povas erari. :)

Sed ĝi tamen estis amuza enigmeto! :)