Download Reference Manual
The Developer's Library for D
About Wiki Forums Source Search Contact

Python Challenge -- Level 4 -- Solution

Code

import tango.io.Stdout;
import tango.net.Uri, tango.net.http.HttpClient;
import tango.stdc.stdlib;
import tango.text.Regex;

pragma (lib, "WS2_32.lib");

void[] lastQuery;
Uri uri;
HttpClient client;

void main () {
        char[] changeQuery (Regex match) {
                uri.setQuery("nothing=" ~ match.match(1));
                return match.match(1);
        }

        void sink (void[] content) {
                debug Stdout.print(cast(char[])content ~ "\n");
                if (find(cast(char[])content, "Divide") != -1) {
                        uri.setQuery("nothing=46059");
                } else if (find(cast(char[])content, "nothing is ") != -1) {
                        size_t location = rfind(cast(char[])content, "nothing is ");
                        sub(cast(char[])content[location .. length], "(([0-9])+)", &changeQuery);
                } else if (cast(char[])content != "" && lastQuery == content) {
                        Stdout.print(cast(char[])content).flush();
                        exit(0);
                }
                if (cast(char[])content != "") {
                        lastQuery = content;
                }
        }

        uri = new Uri("http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=12345");
        client = new HttpClient(HttpClient.Get, uri);

        while (true) {
                auto data = client.open();
                if (client.isResponseOK()) {
                        client.read(&sink);
                }
                client.close();
                client.reset();
        }
}