29 lipca w Poznaniu, 30 lipca w Warszawie, 31 lipca w Krakowie – oto najświeższe daty spotkań meet.js. Ruszamy z Wielką Ofensywą Lipcową!

29 lipca w Poznaniu, 30 lipca w Warszawie, 31 lipca w Krakowie – oto najświeższe daty spotkań meet.js. Ruszamy z Wielką Ofensywą Lipcową!
Co to front-end? Nic trudnego. Najprościej – zewnętrzna warstwa software’u. Znamy tę definicję bardzo dobrze (mniej lub bardziej zmodyfikowaną dla swoich potrzeb). Wszystko to, co widzimy, co możemy kliknąć, a także czym zachwycamy się od strony wizualno-interakcyjnej. Przy okazji stron internetowych, w skład front-endu wliczamy najczęściej CSS, JavaScript, HTML, aspekty dostępności, użyteczności. Od niedawna grupa wspomnianych technologii (którym często przygrywa określenie „standardy sieciowe”) — z uwagi na ich powszechność, prostotę i skalowalność — podbija rynek aplikacji mobilnych (HTML5), a JavaScript dodatkowo zdobywa popularność po stronie serwera, m.in. dzięki node.js. Jak w zaistniałej sytuacji wygląda polska społeczność front-end, od której zależy przecież tempo zachodzących zmian w kraju?

Szymon Piłkowski wpadł na pomysł, by zrealizować konkurs na najkrótszy skrypt będący rozwiązaniem problemu, nad którym ostatnio pracował. Idea bardzo szybko przypadła mi do gustu i momentalnie uzyskała ostateczną formę.
Przypuśćmy, że pracujemy nad skryptem, który indeksuje odpowiedzi do pytań używając liter, np.:
Jak masz na imię?
Weźmy jednak pod uwagę, że pracujemy ze skończonym alfabetem, np. abcd, wtedy pytanie z sześcioma odpowiedziami będzie wyglądać tak:
a. Adam
b. Adrian
c. Bartosz
d. Dariusz
aa. Hieronim
ab. Łukasz
Czternaście odpowiedzi?
a. Adam
b. Adrian
c. Bartosz
d. Dariusz
aa. Hieronim
ab. Łukasz
ac. Marian
ad. Paweł
ba. Piotr
bb. Prometeusz
bc. Protazy
bd. Robert
ca. Władysław
cb. Zbigniew
Potem analogicznie np. przy większych liczbach aaa, aab, aac, aad, aba, abb, abc, abd etc. Mądrym głowom na pewno przypomina się pewien dział matematyki.
To, co chcemy uzyskać, to dwie funkcje.
Pierwsza zwróci odpowiedni układ liter dla n-tej odpowiedzi. W powyższym przypadku, dla szóstej odpowiedzi (licząc od zera) będzie to: ac.
Druga zachowa się dokładnie odwrotnie, na podstawie układu liter, np. cd, zwróci nam, że chodzi o 15. odpowiedź.
Uznajemy, że kod startowy wygląda tak, jak poniżej. Wielokropek oznacza, że możecie dokonywać tam modyfikacji.
var alfabet = "abcdefghjpz679";
var convertToLetters = function(...){...};
var convertToNumber = function(...){...};
Zabroniona jest jakakolwiek modyfikacja skryptu startowego, choćby usunięcie średników!
convertToLetters(6); // "g"
convertToNumber("a"); // 0
convertToNumber("ab"); // 15
Kod ma działać dla dowolnego alfabetu bez powtórzeń, składającego się ze znaków ASCII. Co za tym idzie, rozważyć powinniście też jednoznakowy alfabet. Zabronione jest używanie zewnętrznych bibliotek, liczy się tylko czysty JavaScript (ECMA 3/5). Wygrywa osoba, która przedstawi działające rozwiązanie, posiadające jak najmniej znaków. Liczymy je dla każdej funkcji oddzielnie i sumujemy. Pod uwagę bierzemy oczywiście białe znaki jak spacja czy nowy wiersz!
Zakładamy, że wszystko ma działać dla n >= 0 (funkcja convertToLetters). Zabronione są używanie predefiniowanych zmiennych globalnych (natomiast możecie je deklarować w funkcjach) i zmiana natywnych prototypów.
Rozwiązania będziemy testować w środowisku node.js v0.4.7 (i tu docelowo skrypt ma działać) bez dodatkowych modułów.
Konkurs trwa do końca lipca. Rozwiązania należy wysyłać używając prostego formularza. W przypadku kilku zwycięzców zadecyduje termin oddania pracy.
Wyróżnimy trzy skrypty! Każda osoba z podium dostanie wejściówkę na konferencję onGameStart, która odbędzie się w Warszawie, 22-23 września (podziękowania tutaj dla Michała Budzyńskiego). Ponadto, dla wszystkich wyróżnionych mamy naklejki tej konferencji, a także smycze Mozilli.
Od nas natomiast, zwycięzca może wybrać dla siebie nagrodę główną pomiędzy licencją Personal License na IDE WebStorm i książką Christiana Johansena – Test-Driven JavaScript Development. To, co zostanie, automatycznie przechodzi w ręce osoby na drugim miejscu.
Let’s get ready to rumble!