Jump to content
php.lv forumi

Uzdevums 3


F3llony
 Share

Recommended Posts

Izskatās, ka PHP topā tagad prātlauži. Te būs viens diezgan vienkāršs.
 
Ir dota skaitļu sekvence (A): 

10110101010001001010010100101000101010100010101001010101001001010010101

Apstrādājot doto sekvenci ar algoritmu X, iegūstam skaitļu sekvenci (B):

100001100111111111000010011

Uzdevums:
 
Implementē algoritmu X un nosaki sekvenci (B) šai sekvencei:

10101001000001010101001010100101001000010010101001000101011110001010001

P.S. codez, es zinu, ka tu zini. Ļauj kādam citam vispirms.

Edited by F3llony
Link to comment
Share on other sites

Ja vien autors kaut ko aizmirsa precizēt.

 

Neaizmirsa, bet uzdevumam ir maz sakara ar matemātiku. T.i. risinājums neprasa aprēķinus. Risinājums vairāk izskatītos kaut kā šādi:

b = x(a)
Edited by F3llony
Link to comment
Share on other sites

Kaut arī funkcija garāka kā martins256, tomēr:

 

 

11000001110010111000011

 

 

Tuvu, bet tomēr nē. Otrā sekvence ir 

 

 

 

1110000011100101110000111 

 

 

 

Un risinājums ir

 

 

 

b = X(Y) =>
    buffer = nil
    each 2 from Y
        if '00' || '11'
            skip
        if '01'
            buffer += '0'
        if '10'
            buffer += '1'
    return buffer

 

 

Link to comment
Share on other sites

Pēc uzdevuma nosacījumiem, pareiza atbilde ir jebkura funkcija, kura atgriež piemēra atbildi, tā kā citu nosacījumu nav.

Uzdevumu varētu piemēram padarīt par kompetatīvu, teiksim nosakot uzvarētāju pēc īsākā koda un dodot vismaz vairākus piemērus, lai vienkārša piemēra izvades atgriešana nebūtu pareiza.

Link to comment
Share on other sites

Īsākais kods noteikti neuzvarēs. Okei, izvirzīšu kritērijus lai būtu interesantāk:

  1. Kodam jādarbojas;
  2. Kodam jābūt viegli lasāmam, skaidri saprotamam un ar komentāriem;
  3. Jebkurā valodā izņemot Scala;

 Un nav gluži tā, ka pareiza ir jebkura, kas atgriež pareizu piemēra atbildi - tik pat labi var uzrakstīt vienkāršu return kā martins. Tas neskaitīsies gan. Pirmo sekvenci es speciāli sāku rakstīt šādi, lai plus mīnus būtu saprotams uzreiz:

 

 

 

A: 10110101010001001010010100101000101010100010101001010101001001010010101
B: 100001100111111111000010011
// B ir vismaz 2x īsāks, kā A. Tātad pārveidošana notiek ar vismaz ar zudumu vismaz x2. 

// Pirmais solis
10
// Pirmais skaitlis no rezultāta
1
// Otrais solis
11
// Otrais skaitlis no rezultāta
0
// Trešais solis
01
// Trešais skaitlis no rezultāta 
0
// Okei, 11 un 01 rezultē uz to pašu 0? Kas ir nākamie 3 soļi?
010101
// Un nākamie 3 skaitļi rezultātā?
000

// Tātad 01 = 0, bet 11 tiek atmests un 10 = 1
// Mēģinam tālāk, no sākuma. Mēs zinām, ka 10 ir 1, 01 ir 0. Mēģinam aizvietot. 
10 => 1
11 => 
01 => 0
01 => 0
01 => 0
00 => 
01 => 1
00 => 
10 => 1
10 => 1
01 => 0
01 => 0
00 => 
10 => 1
10 => 1
00 => 
10 => 1
10 => 1
10 => 1
10 => 1
00 =>
10 => 1
10 => 1
10 => 1
01 => 0
01 => 0
01 => 0
01 => 0
00 =>
10 => 1
01 => 0
01 => 0
00 =>
10 => 1
10 => 1
1  =>

// Filtrētais atmetot nezināmos izskatās awful lot like rezultāts.

10 => 1
01 => 0
01 => 0
01 => 0
01 => 1
10 => 1
10 => 1
01 => 0
01 => 0
10 => 1
10 => 1
10 => 1
10 => 1
10 => 1
10 => 1
10 => 1
10 => 1
10 => 1
01 => 0
01 => 0
01 => 0
01 => 0
10 => 1
01 => 0
01 => 0
10 => 1
10 => 1


Rezultāts: 100011100111111111000010011
 

 

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...