Pēc kāda principa veidojas dotā simbolu virkne?

Aplūkojiet simbolu virkni:

n]Ōj¾{ß↓NĢĄ

1) Kāds simbols ir nākamais šajā virknē un kāpēc?
2) Kādi simboli ir nākamie šajā virknē?
3) Vai simboli šajā virknē var atkārtoties?
4) Vai šī virkne ir bezgalīga vai galīga?

P.S. Atminēt – pilnīgi nereāli! Ja atminēsiet, varat uzskatīt sevi par ģēniju!

Žurka manā dzīvoklī!

Aizvakar konstatēju, ka manā dzīvoklī mitinās žurka! Un ne jau šāda tāda, bet gan tieši Dienvidamerikas žurka. Līdz šim neko tādu pat iedomājies nebūtu, bet izrādās, ka tā tur mitinās jau apmēram no pērnā gada oktobra, tā neko.. Zināju par citiem sava dzīvokļa iemītniekiem, piemēram, par Čīles vāveri un pārējiem, ko vietas trūkuma dēļ šeit tagad neuzskaitīšu, bet par Dienvidamerikas žurku gan man bija pirmā dzirdēšana.. Nu neko, `būsim zināt`! 😀

Robota darbības simulācija

Piedāvāju jums notestēt savas uzrakstītās programmiņas robotam-putekļu sūcējam ar vizuāla interpretatora palīdzību. Varbūt vēl kādas kļūdiņas tajā ir, bet nu tas tapis ātrumā – apmēram dienas laikā. Interpretatorā iespējams arī paskatīties, kā strādā manis rakstītās programmiņas (piedāvāju trīs variācijas).

Būvējam paši savu robotu – 2. daļa!

Sāku domāt par šī paša sacerētā uzdevuma risinājuma variantiem un secināju, ka darbu ļoti atvieglotu vēl vienas komandas pievienošana robotam saprotamo komandu sarakstam:

nnRnd(Nr0,Nr1) – ģenerēt nejaušu veselu skaitli x no intervāla [0..1]; pāriet uz komandu ar numuru Nr0, ja x=0, pāriet uz komandu ar numuru Nr1 pretējā gadījumā.

Droši vien uzdevumu var atrisināt arī tikai ar jau manā iepriekšējā formulējumā minētajām komandām, bet, pievienojot šo papildus komandu, risinājums kļūst triviāls.. Taču tai pat laikā tam piemīt divi būtiski trūkumi:
1)
robots (visticamāk) patērē ievērojami vairāk enerģijas nekā deterministiska algoritma gadījumā
2)
nav iespējams pierādīt, ka robots beidz darbu (izsūc visu istabu) galīgā laikā

 

Ja uz šiem diviem trūkumiem pieveram acis, programma iznāk pavisam īsa un vienkārša:
     00Reset
     01Clean
     02Add
    
03Rnd(06,04)
     04Turn
     05Turn
     06Rnd(08,07)
     07Turn
     08Can(09,03)
     09Go
     10Been(03,01)

Nākamais uzdevums – uztaisīt interpretatoru, kurš pēc dotas šāda veida programmas spēj noteikt, vai robots, vadoties pēc šīs programmas patiešām izdarīt prasīto darbu vai nē. Vēlama arī vizualizācija!

Būvējam paši savu robotu!

Atminoties vecos labos studiju laikus, kad vajadzēja uztaisīt kādu pavisam triviālu programmiņu robotam, lai tas spētu atrast ceļu ārā no labirinta (uz šādām atmiņām mani uzvedināja laikraksta “Skaitļotājs” marta numurs), man radās iedvesma un es sacerēju pats savu uzdevumu. Tad nu lūkojiet, vai spējat tikt ar to galā!

 

Uzdevums vienā teikumā – uzrakstīt komandu virkni, pēc kuras vadoties robots-putekļu sūcējs spētu izsūkt putekļus istabā, apejot šķēršļus.

 

Precīzāks formulējums ir izlasāms tālāk. Dota taisnstūrveida istaba ar izmēriem m*n. Varam iedomāties to kā rūtiņu režģi. Divas rūtiņas sauc par blakusrūtiņām, ja tām ir kopīga mala. Uz dažām rūtiņu malām atrodas šķēršļi (visas malas garumā). Visa istaba ir ietverta sienās, kas arī ir šķēršļi. Piemēram, dotais rūtiņu režģis varētu izskatīties tāds kā šajā zīmējumā, kur treknākās līnijas apzīmē šķēršļus:

 

Telpas piemērs

Telpas piemērs

 

Dots robots, kas pēc izmēra vienāds ar vienas rūtiņas izmēru un apveltīts ar zināmu atmiņu – tas spēj pie sevis noglabāt kopu S, kas sastāv no naturālu skaitļu pārīšiem (vienosimies, ka 0 ir naturāls skaitlis). Faktiski varētu iedomāties, ka robots spēj glabāt rūtiņu kopu, kur katra rūtiņa tiek identificēta ar tās x un y koordinātām (robežās, attiecīgi, 0..n-1 un 0..m-1).

 

Robots katrā laika momentā atrodas kādā no rūtiņām ar seju pret kādu no rūtiņas malām un spēj izpildīt septiņas dažādas komandas, kas tiek numurētas no 00 līdz 99. Pieņemot, ka ar `nn` tiek apzīmēts komandas numurs, komandas ir šādas:

1)     nnGo – pārvietoties uz blakusrūtiņu pāri tai malai, pret kuru robots atrodas ar seju. Ja šī mala marķēta kā šķērslis (trekninātās malas zīmējumā), robots tiek neglābjami sabojāts.

2)     nnTurn – pagriezties par 90 grādiem pretēji pulksteņa rādītāja virzienam.

3)     nnCan(YesNr,NoNr) – pārbaudīt, vai iespējams pāriet uz atbilstošo blakusrūtiņu. Ja tas iespējams (uz malas nav šķēršļu), pāriet pie komandas ar numuru YesNr, citādi pāriet pie komandas ar numuru NoNr.

4)     nnClean – izsūkt putekļus tajā rūtiņā, kurā robots atrodas.

5)     nnReset – iztīrīt robota atmiņu (piešķirt kopai S tukšu kopu).

6)     nnAdd – pievienot kopai S to rūtiņu, uz kuras atrodas robots. Rūtiņa tiek pievienota kā veselu skaitļu pāris (x,y), kur x – rūtiņas horizontālais kārtas numurs, bet y – rūtiņas vertikālais kārtas numurs. Ja šāds pārītis jau pieder kopai S, šai komandai nav nekāda efekta.

7)     nnBeen(YesNr,NoNr) – pārbaudīt, vai rūtiņa, uz kuras robots atrodas, ietilpst kopā S. Ja ietilpst, pāriet pie komandas ar numuru YesNr, citādi pāriet pie komandas ar numuru NoNr.

 

Zināms, ka šajā rūtiņu režģī iespējams no jebkuras rūtiņas nokļūt līdz jebkurai citai rūtiņai (neeksistē telpas apgabali, kas mazāki par pašu telpu un norobežoti no pārējās telpas ar šķēršļiem).

 

Ko tad īsti vajag izdarīt – panākt, lai robots, sākot darbu patvaļīgas telpas patvaļīgā rūtiņā ar patvaļīgu atmiņas stāvokli un izpildot pēc kārtas visas komandas, sākot ar pirmo, beigās (pēc visu komandu izpildes) būtu izsūcis putekļus visā telpā jeb, formālāk runājot, lai kopa S beigās būtu vienāda ar kopu {0..n-1} un {0..m-1} Dekarta reizinājumu (pieņemot, ka kopa tiek veidota ar semantiku – iekļaut pārīti kopā drīkst tikai tad, ja attiecīgā rūtiņa ir „izsūkta”). Robota atrašanās vieta istabā darba beigās nav svarīga.

 

Piemērs derīgai komandu virknei, kas liek robotam pāriet uz blakusrūtiņu, ja tas iespējams, bet atstāj robotu aktuālajā rūtiņā, ja uz šīs malas ir šķērslis:

00Can(01,02)

01Go

02Turn

 

Tas arī viss! Uzdevums pietiekami interesants – uzrakstīt komandu virkni, kuru izpildot robots izsūks putekļus visā istabā. Tā kā ķerieties nu pie lietas, nekas cits kā papīrs un pildspalva nav vajadzīgs. Jāteic, ka pats šobrīd esmu uzdevumu tikai izdomājis, bet risināt vēl sācis neesmu, tā kā, iespējams, kaut ko neesmu piefiksējis – varbūt robotam ar šīm komandām nepietiek, varbūt istabu ne vienmēr var izsūkt pilnībā, varbūt vēl kaut kas. Komentāros gaidīšu jūsu domas par šo visu (arī gatavās programmas).

 

Komandu saraksta papildinājums un risinājuma variants izlasāms šeit.

Vai jūs pirktu preci, kuras atlaide ir -100%?

Kā jau izlasāms lapā `Par mani`, mani traki kaitina cilvēku tumsonība dažādos elementāros jautājumos. Šoreiz gribu izteikt savu sāpi par reklāmām, kurās tiek solītas kaut kādas atlaides noteiktā īpatsvarā no preces vērtības.

Konkrētāk – tā kaitinošā lieta, reklāmas sauklis, vai kā to vēl nosaukt, ir apmēram šāda: atlaide visām precēm līdz -50%. Katram normāli domājošam īpatnim uzreiz ir skaidrs, ko šis izteikums nozīmē – par šo preci tagad būs jāmaksā par 50% dārgāk kā līdz šim. To saprotot, dabiski, ka uz šādu veikalu neiešu un preci nepirkšu. Viss būtu kārtībā, ja vien patiesībā pārdevējs tajā pat laikā netirgotu to par lētāku cenu nekā līdz šim, tādējādi apzināti maldinot saprātīgi domājošos īpatņus, bet toties pievilinot tumsoņas, kas neapšaubāmi ir lielāks ienākumu avots.

Ja nekļuva skaidrs, par ko es runāju (lai gan ceru, ka tā nav), varat paši izrēķināt jauno preces cenu, ja dots, ka vecā cena ir, piemēram, Ls 10.00, bet solītā atlaide ir -50%:
1) apzīmējam jauno cenu ar y, veco cenu ar x, bet atlaidi (pārvērstu decimāldaļā) ar p
2) ko nozīmē atlaide – ka dotā summa ir jāatņem no preces sākotnējās cenas
3) tātad –> y = x – p*x = 10 – (-0.5)*10 = 10 – (-5) = 10 + 5 = 15 Ls

Citreiz vainu vēl var novelt uz nekorekti lietotu domu zīmi, kas īstenībā domāta mīnusa zīmes vietā, piemēram: `Atlaides – 50%` varētu būt jālasa kā `atlaides vienādas ar 50%` nevis `atlaides mīnus 50%`. Bet ne vienmēr tas ir tā interpretējams (piemēram, audiālās reklāmās interpretācija pavisam noteikti nav grozāma) un, ja arī ir, tad patiesībā pārdevējs pats nemaz to tā negrib interpretēt un tas ir tas skumjākais..

P. S. Negribu neko reklamēt vai anti-reklamēt, bet tikai uzskatāmībās dēļ parādīt, ka tas, par ko runāju, nav tikai manas tukšas iedomas vien, tādas reklāmas patiesi eksistē. Pirmais piemērs, ko atradu, izmantojot tīmekļa meklētāju, ir šāda lapa (ieraugot šādu paziņojumu, loģiski, ka nogaidīšu līdz 1. aprīlim un tikai pēc tam došos uz šo firmu pēc ceļojuma, jo līdz 1. aprīlim tas ir dārgāks (līdz 15. martam – vēl dārgāks), bet paredzu, ka var iznākt negaidīts pārpratums un nevajadzīga skaidrošanās ar firmas pārstāvjiem..).

Milzu piedzīvojums uz Vidzemes šosejas

Braucu pirms dažām stundām no Valmieras uz Rīgu. Brauciens kā brauciens, sākumā jau likās, ka ceļš ne ar ko neatšķirsies no tā, ko mēroju katru otrdienu. Taču viss izrādījās pavisam citādi..

Pabraucot garām Sēnītei, beidzot tiku uz divu joslu (vienā virzienā) ceļa un nopriecājos, ka nebūs vairs kavēkļu manā ceļā, jo pa divām joslām braukšana tomēr rit raitāk. Pabraucot kādu gabaliņu, tālumā priekšā sāku manīt tādas kā auto avārijas gaismas – piebraucot nedaudz tuvāk, konstatēju, ka avārijas gaismas iedeguši vairāki auto. Nodomāju – acīmredzot kāda avārija, jābrauc būs uzmanīgāk. Braucot vēl tuvāk pamanīju arī policijas auto zilās bākugunis, bet tad – kaut kas tālumā tā kā deg.. Domāju vēl – varbūt vairāku auto avārijas gaismas sajaukušās kopā, radot tādu jocīgu efektu, bet, braucot vēl tuvāk, secināju – patiešām kaut kas deg!

Priekšā braucošais auto krietni samazināja braukšanas ātrumu, līdz ar ko arī es biju spiests rīkoties līdzīgi. Abās šosejas pusēs ar iedegtām bākugunīm stāvēja jau padaudz automašīnas (kādas desmits būs) un arī priekšā braucošais auto nobrauca malā apstāties. Beidzot man bija skaidri redzams, ka šosejas labajā pusē atrodas kāds smagais auto, kurš.. deg vienās liesmās.. Lielās sarkanās liesmās, radot milzīgus melnus dūmu mutuļus, kas paceļas no šī neapdzīvotā apvidus – meža vidus – augšup pāri koku galiem.

Nesapratu, kādēļ šosejas malā stāv visi šie auto – vai tiešām tikai tādēļ, lai paskatītos, kā smuki noris degšanas process? Bet nu tā kā neviens tālāk nebrauca, tad es arī piestāju malā un izkāpu palūkoties degšanā 🙂 Izrādās – policisti nezina, kas atrodas fūres cisternā un tādēļ nelaiž nevienu braukt garām, kamēr nav ieradušies ugunsdzēsēji un apdzēsuši liesmas. Tā nu visi stāvējām šosejas vidū (ar auto atstātiem šosejas malās) pieklājīgā attālumā no degošā objekta un priecājamies par skatu, gaidot dzēsējus 🙂 Es laikam biju ieradies kā viens no pirmajiem (pirms manis bija piebraukušas tikai kādas padsmit mašīnas), tādēļ īpaši nesatraucos, ka pēc manis uz šosejas sāka veidoties garum garās rindas ar simtiem mašīnu tajās. Pēc kādas pusstundas vai nedaudz ātrāk cauri auto baram beidzot izspraucās arī divas ugunsdzēsēju mašīnas un sacēla ap degošo auto milzīgu putu mākoni. Pagāja vēl kādas desmit minūtes, līdz beidzot varēju turpināt ceļu uz Rīgu. Tā kā biju viens no pirmajiem, aizbraucu no notikuma vietas bez problēmām, bet nezinu, cik ilgs laiks vēl pagāja, līdz no turienes tika prom pēdējie auto rindās..

Tagad jāgaida ziņas – kas tas tur īsti bijis iekšā un tā!