Ostateczna lista zwycięzców konkursu na najkrótszy skrypt!

Znamy już ostatecznych (oby ;)) zwycięzców konkursu na najkrótszy skrypt. Jak liczyliśmy oficjalne wyniki?

Krótka przemowa jury w osobie Szymona Piłkowskiego:

Liczy się rozmiar kodu razem z deklaracja funkcji (inaczej trzeba by
dodawać argumenty itp); bez deklaracji alfabetu (niektórzy przysyłali
tak, inni inaczej), ze spacjami dookoła ‚=’ przy deklaracji (dodałem
tym, którzy sobie usunęli), bez spacji pomiędzy function a (), () i {,
{ i kodem, kodem i } – usunąłem tym, którzy mieli.
Testowałem dla kilku rożnych alfabetów, w tym podany przykładowy,
jednoznakowy, zawierający znaki \”!% itp.
Nie testowałem dla bigintow, bo nie przeszłoby nic co używa bitwise, a
nie pisalismy o tym.

Screen z testów:

Po długich naradach (w klimacie wakacyjnym) zdecydowaliśmy wykluczyć rozwiązania oparte na zmiennych globalnych zdefiniowanych w funkcjach. Jednocześnie bardzo przepraszam za wprowadzenie w błąd w jednym z komentarzy – jak widać do trzech razy sztuka, jeśli chodzi o perfekcyjny regulamin. Wszystko jest robione dla funu, mam nadzieję, że zrozumiecie tę wtopę.

Przechodząc do wyników, wygrał Grzegorz Kućmierz (218). Gratulacje!

var alfabet = "abcdefghjpz679";
var convertToLetters = function(n,r,a,l){r='',++n;for(a=alfabet,l=a.length;r=a[--n%l]+r,n=n/l|0;);return r};
var convertToNumber = function(s,r,a,i){a=alfabet;for(i=0;s[i];)r=~~r*a.length-~a.indexOf(s[i++]);return~-r};

Drugie miejsce zajął Piotr Koszuliński (220)!

var alfabet = 'abcdefghjpz679';
var convertToLetters = function(n,a,l){a=alfabet,l=a.length;return(n<l?'':convertToLetters(n/l-1|0))+a[n%l]};
var convertToNumber = function(s){for(var d=alfabet,i=0,v=0;s[i];v=d.length*v+d.indexOf(s[i++])+1);return--v};

Trzecie natomiast Lech Wilczyński (221):

var alfabet="abcdefghjpz679";
var convertToLetters=function(n){var a=alfabet,l=a.length;return n<l?a[n]:convertToLetters(n/l-1|0)+a[n%l]};
var convertToNumber=function(c){var t=0,d=alfabet,x=-1;for(;c[t];x=++x*d.length+d.search(c[t++]));return x};

Jednocześnie w ramach wynagrodzenia tego zamieszania dotychczasowym zwycięzcom (Bartkowi Szopce oraz Gustaffowi Weldonowi) chciałbym również wręczyć wejściówki na konferencję onGameStart. Za bilety podziękowania niezmiennie należą się Michałowi Budzyńskiemu!

Komentarze

1

Gratulacje dla kolejnych zwycięzców ;P

2

Drugi!!!!111 ;-)

3

Gratulacje :) i respect za pomysly na algorytm :)

Ly
4

drugi moze byc w prosty sposob pierwszy kasujac vary wewnatrz funkcji :)

sasklacz
5

Nom, gratulacje dla zwycięzców :)

6

Oczywiście dało się jeszcze lepiej (o dwa bajty). Proszę bardzo:
var alfabet = "abcdefghjpz679";
var convertToLetters = function(n){++n;for(var r='',a=alfabet,l=a.length;r=a[--n%l]+r,n=n/l|0;);return r};
var convertToNumber = function(s,r,a,i){a=alfabet;for(i=0;s[i];)r=~~r*a.length-~a.indexOf(s[i++]);return~-r};

Tylko ja już na samym początku wmówiłem sobie, że najlepsza metoda na utworzenie zmiennych globalnych to wrzucenie ich jako argumenty funkcji.

Ogólnie to fajny konkurs, oby więcej takich :)

7

@Grzegorz może dziwne pytanie, ale jak wpadłeś na to aby obliczenia robić w zakresie liczb ujemnych? Tak po prostu, czy to był jakiś proces myślowy?

8

@opengrid metodą iteracji. Wpatrywałem się w poszczególne kawałki kodu, który już miałem i zadawałem sobie pytanie czy na pewno jest mi to potrzebne i jak to usunąć.

9

Jeszcze krótsza wersja jednej z funkcji ;)


var convertToLetters = function(n){for(var a=alfabet,l=a.length,r='';n>=0;n=n/l-1)r=a[n%l|0]+r;return r};

wojtekk
10

211:
var convertToLetters = function(n){for(var a=alfabet,c='',l=a.length;c=a[n%l]+c,n=n/l|0,n--;);return c};
var convertToNumber = function(s,i,v){with(alfabet)for(i=v=0;s[i];v=v*length-~indexOf(s[i++]));return~-v};

Tomasz Elendt
11

@opengrid Grzegorz chyba nie tyle operuje na liczbach ujemnych, co pomysłowo wykorzystuje fakt, że ~x == -x-1

@wojtekk Sprytne, że też na to nie wpadłem! A też zastanawiałem się, jak wykorzystać fakt, że po pętli for i tak muszę wstawić średnik :)

To może spróbujemy wspólnymi siłami zebrać razem najkrótszy zestaw funkcji? ;)

Dodaj komentarz

Dozwolone tagi: <blockquote>, <code>, <strong>