# 9.4. Exercises¶

## 9.4.1. Exercise 1¶

How to shorten a URL? One can imagine a service (a function with a state) invoked on a server, to which you make a call and it generates a fresh random URL and sends it back. But how can it efficiently check for uniqueness of the fresh URL?

Implement such an abstract data type with a method generate_fresh_url : unit -> string by employing a Bloom filter to tell if this short URL has already been generated earlier, and keep generating new ones unti it returns false. As the filter is in memory, this will be cheaper than querying a database of previously generated URLs.

## 9.4.2. Exercise 2¶

Write a program that, given two strings, determines whether one is a cyclic rotation of the other. For instance it should identify lenusya as a cyclic rotation of yalenus. Design automated randomised tests for this algorithm.

## 9.4.3. Exercise 3¶

Using the idea of a rolling hash from Rabin-Karp algorithm, implement the procedure for efficiently finding a smallest number i > 1 of a string s, such that that the substring s[0 .. i] is a palindrome. For instance, for s = "abcbadef, the result is i = Some 5, and for s = "abcbgdef the result is None.