The Shortest Edition Wundernut


Winter 2017

Once again, our Wundernut proved to be very popular and we got over 50 entries. The problem proved to be rather easy to the contestants, as 34 of them reached the optimum solution of 21162 lines of text. Since the rules stated that “the shortest version of the book” would win, we decided to dig deeper and also took into account the length of the last line – as each of the 21162-line solutions had 80-character lines apart from the last line, the length of the last line would have to be included in the strict definition of “the shortest”.

This didn’t help much, as 22 of the afore-mentioned solutions also shared the shortest line length for the final row, 46 characters. So, the jury once again faced the difficult task of deciding which answer was most elegant – a subjective criterion, of course – in our opinion.

The winner of the 8th Wundernut, The Shortest Edition, is Stephen Sykes with his Ruby solution! We found his answer to be pleasant to read and rather smart and idiomatic, and lacking some obfuscating micro-optimizations found in some other answers giving a perfect result.

The jury would also like to give an honorable mention to Artti Jaakkola and his Java solution which had many of the winning answer’s good characteristics as well.

Some of the answers were blazing fast and we truly appreciate the effort the contestants had put into optimizing their solutions. However, as some of the answers were optimized only for particular environments, we couldn’t do a fair comparison between them on a single reference machine and thus will not declare a single fastest solution. But there were many solutions running in less than 0.5 seconds, written in many different languages.

Thank you to all the contestants for their entries!

 


(Scroll down for Finnish instructions.)

A new edition of the Finnish literature classic novel “Alastalon Salissa” is planned to be made in traditional book form. The publisher would prefer it to be as compressed as possible, keeping the edit costs low and also saving the environment. To save as many trees as possible, the number of pages needs to be kept to the minimum. Some artistic liberties can be taken to meet this goal; the order of the words can be changed if it helps in compressing the book to use less pages. Because the publisher happens to be a perfectionist who does not compromise when it comes to art, all the words from the original book must be found in the new edition.

 

For making the compressed version, the words in the original novel are separated from each other on any whitespace. All punctuation marks in the words must be preserved. Separate punctuation marks are counted as one letter words.

Hereby, for instance this short story masterpiece:

"Kustaa-Jooseppi oli aina kokenut olevansa antilooppi. Niinpä hän nytkin laukkasi tuulispään lailla – kohti kukkeana siintävää merta."

forms 17 separate words:

"Kustaa-Jooseppi", "oli", "aina", "kokenut", "olevansa", "antilooppi.", "Niinpä", "hän", "nytkin", "laukkasi", "tuulispään", "lailla", "–", "kohti", "kukkeana", "siintävää", "merta."

 

In the new edition, the words need to be separated from each other with a space or a line break. With the help of mind-blowingly modern printing technique each row can fit a maximum of 80 characters, including spaces but excluding line breaks. Max 25 lines can be fit on one page. To keep the reading easy, the words cannot be conjugated, not even in the case of hyphens.

 

There’s no need for a separate name page in the beginning of the book or even for a header line in the beginning. The reader can directly dive into the actual story. The original name and publishing information is treated as all other words – meaning they can be in any part of the final edition since the order of the words could be changed.

 

Therefore, e.g. this made-up alphabetical poem:

"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

dddddddddddddddddddddddddddddddddddddddd

eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

fffffffffffffffffff

gggg

h"

can be shortened by using modern technology to just 4 rows, saving half of the original number of lines!

"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa h

bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb gggg

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc fffffffffffffffffff

dddddddddddddddddddddddddddddddddddddddd eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"

 

Lego tie fighter.png

THE TASK

  • Download the original novel from here. Write an algorithm that produces such version of the book as described above and in UTF-8 encoding. The text needs to include line breaks and only have maximum 80-character-long lines. You won’t have to mark the page breaks, we cut the text to pages every 25 lines.
     
  • Send your algorithm’s code and the instructions to run it to [email protected] by 19 January 2018. If you want to perfect the answer you already sent, you can send a new version to us before the deadline. The judges will read the latest version.
     
  • The winner is chosen by the jury on 26 January 2018. The shortest version of the book is rewarded with LEGO Star Wars 75095 - TIE Fighter. For the judging to be fair and reliable we have to be able to compile and run the program according to the instructions attached to the answer. Otherwise the answer will be rejected.
     
  • In case there are several equally short versions, the winner will be the most elegant one according to the judges (The performance of the algorithm is part of the elegance!).

    [You can check the validity of your answer here.]
     
  • You can use any programming language to solve the problem. 
     
  • The participant gives Wunderdog the right to publish their solution.
 

 

Suomalaisen kirjallisuuden klassikosta Alastalon salissa halutaan ottaa uusi painos perinteisessä kirjamuodossa. Kustantaja haluaa kuitenkin tehdä painoksesta mahdollisimman tiiviin, säästäen sekä painokustannuksia että luontoa. Jotta painosta varten tarvitsisi kaataa mahdollisimman vähän puita, pyritään kirja mahduttamaan mahdollisimman pieneen määrään sivuja. Tähän pyrittäessä voidaan kirjan sisällön suhteen ottaa pieniä taiteellisia vapauksia; sanojen järjestystä voidaan muuttaa vapaasti, jos se auttaa tiivistämään kirjan pienempään sivumäärään. Koska kustantaja on kuitenkin taiteessa tinkimätön perfektionisti, pitää kaikkien kirjan sanojen olla painoksessa tallella.

Alkuperäisen teoksen sanat erotetaan tiivistystä varten toisistaan välilyöntien, rivinvaihtojen yms. tyhjän tilan kohdalta, niissä kiinni olevat välimerkit sanoissa kiinni säilyttäen. Irrallaan olevat välimerkit lasketaan omiksi, yhden kirjaimen mittaisiksi sanoiksi.

Näin esimerkiksi tästä tiiviistä mestarinovellista:

"Kustaa-Jooseppi oli aina kokenut olevansa antilooppi. Niinpä hän nytkin laukkasi tuulispään lailla – kohti kukkeana siintävää merta."

muodostuu 17 erillistä sanaa:

"Kustaa-Jooseppi", "oli", "aina", "kokenut", "olevansa", "antilooppi.", "Niinpä", "hän", "nytkin", "laukkasi", "tuulispään", "lailla", "–", "kohti", "kukkeana", "siintävää", "merta."

Uudessa painoksessakin sanat pitää erottaa toisistaan välilyönneillä tai rivinvaihdoilla. Hämmästyttävällä nykyaikaisella painotekniikalla jokaiselle kirjan riville saadaan mahdutettua enintään 80 merkkiä, välilyönnit – mutta ei rivinvaihtoja – mukaan lukien. Sivulle mahtuu enintään 25 riviä tekstiä. Lukemisen helpottamiseksi sanoja ei saa tavuttaa, ei edes yhdysmerkkien kohdalta. Kirjan alussa ei tarvita erillistä nimisivua tai edes -riviä vaan lukija saa sukeltaa suoraan nautinnollisen tekstin syvyyksiin. Alkuperäisen kirjan nimi- ja julkaisutietoja kohdellaan muiden sanojen tavoin, eli ne saavat olla missä tahansa kohtaa lopullista tuotosta.

 

Näin esimerkiksi tämä keinotekoinen aakkosrunoelma:

"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

dddddddddddddddddddddddddddddddddddddddd

eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

fffffffffffffffffff

gggg

h"

saadaan tiivistettyä modernilla teknologialla juuri ja juuri neljään riviin, säästäen puolet alkuperäisestä rivimäärästä!

"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa h

bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb gggg

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc fffffffffffffffffff

dddddddddddddddddddddddddddddddddddddddd eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"

 

TEHTÄVÄ

Lego tie fighter.png
  • Lataa alkuperäinen Alastalon salissa -teos täältä. Kirjoita algoritmi, joka tuottaa kirjasta ym. sääntöjen mukaisen tiivistetyn version UTF-8-muotoisena tekstinä. Tekstin tulee sisältää rivinvaihdot ja siis sisältää korkeintaan 80 merkkiä pitkiä rivejä. Sivurajoja ei tarvitse erikseen merkitä vaan katkaisemme tekstin sivuiksi aina 25 rivin välein.
     
  • Lähetä algoritmisi koodi ja ohjeet sen ajamiseen meille 19.1.2018 mennessä osoitteeseen [email protected]. Jos hiot jo lähettämääsi vastausta, voit lähettää meille määräaikaan mennessä uuden version. Raatimme tarkastaa viimeisimmän version.
     
  • Raati kerääntyy 26.1.2018 valitsemaan voittajan. Palkitsemme kaikkein tiiviimmän kirjan tuottavan vastauksen tekijän LEGO Star Wars 75095 - TIE Fighterilla. Jotta algoritmeja voidaan vertailla luotettavasti ja reilusti, täytyy meidän pystyä kääntämään ja ajamaan ohjelma sen mukana annetuilla ohjeilla. Muuten vastaus hylätään.
     
  • Mikäli useammalla vastaajalla on yhtä tiiviin kirjapainoksen tuottava algoritmi, valitaan vastauksista raadin mielestä elegantimpi. (Algoritmin suoritusnopeus on osa eleganssia!)
     
  • Ratkaisu voi olla millä tahansa ohjelmointikielellä.
     
  • Osallistuja antaa Wunderdogille luvan julkaista voittajaratkaisun. 

[Voit tarkistaa vastauksesi oikeellisuuden täältä.]