Quantcast
Channel: Notatnik programisty
Viewing all 102 articles
Browse latest View live

Open sourcowy prysznic, który zużywa 90% mniej wody

$
0
0

Natrafiłem dziś (dzięki fundacji Cohabitat) na dosyć ciekawy, rozwojowy ciągle projekt typu open hardware wykorzystujący m.in. Arduino. Showerloop jest systemem znacznie oszczędzającym wodę oraz energię zużywaną podczas kąpania pod prysznicem.

4

Ale jak?

1Spływająca z nas woda zamiast uciekać do kanalizacji przechodzi przez serię filtrów i wraca z powrotem do słuchawki prysznicowej. Taki prysznic zużywa 90% mniej wody, 70% mniej energii, jest 87% tańszy w użyciu niż normalny prysznic, ma lepszą jakość wody (bez chloru, drobnoustrojów oraz zanieczyszczeń).

Ponadto woda płynie pod stałym ciśnieniem i temperaturą. Dla przykładu 15 minutowy zwykły prysznic to około 150 litrów wody oraz 6,4 KWH zużytej energii, natomiast przy użyciu instalacji Showerloop -> 10l oraz 0,6 KWH. Na końcu woda spływa do kanalizacji jak w normalnym prysznicu lub dzięki odpowiednim zbiornikom może być użyta do różnych celów, np. spłukania toalety.
Inicjatorzy stawiają na pierwszym miejscu na maksymalne ograniczenie zużycia energii, a dopiero potem na budowę odpowiednich instalacji do pozyskiwania potrzebnych ilości energii ze źródeł odnawialnych. Projekt ciągle się rozwija, najnowsza instrukcja jest w trakcie projektowania.

Do prototypowania wykorzystywany jest Arduino.2

3

showerloop1

Tak naprawdę taniej wyjdzie rozsądnie zużywać wodę, tzn. opłukać się, namydlić i umyć po zakręceniu kurka, po czym spłukać. Przedstawione wyliczenia mogą się wydawać na wyrost, gdyż w warunkach domowych trzeba się nieźle postarać, by pod prysznicem zużyć 150 litrów wody za jednym razem. Ale już w przypadku pensjonatów i hoteli (w których nikt nie myśli o oszczędzaniu) to może mieć sens i przynosić realne oszczędności.

Źródła materiałów i strona WWW:
www.showerloop.me

GALERIA
DOKUMENTACJA (w fazie rozwoju)

 

Arduino. Automatyka domowa dla każdego

Arduino. Automatyka domowa dla każdego

Autor: Marco Schwartz

ISBN: 978-83-283-0939-5

Format: 170x230, stron: 112

Data wydania: 2015-08-13

Opis: Inteligentne budynki dla pasjonatów elektroniki! Arduino to platforma, dzięki której budowa zaawansowanych układów elektronicznych stała się bardzo prosta i przyjemna. Już nie musisz tworzyć skomplikowanych projektów układów, wykonywać mnóstwa obliczeń oraz rozwiązywać problemów. Wystarczy, że zdobędziesz płytkę Arduino i zaczniesz tworzyć układ Twoich marzeń. Jeżeli marzył Ci się inteligentny dom i masz ochotę osiągnąć ten cel we własnym zakresie, wiedz, że dzięki tej książce i platformie Arduino jest to możliwe! Sięgnij po ten poradnik i zobacz, jak zrealizować najróżniejsze praktyczne projekty. Bezprzewodowy detektor ruchu, termometr lub licznik zużytej energii to tylko niektóre z nich.

Cena: 26.90 zł
(Cena druku: 32.90 zł)

Artykuł Open sourcowy prysznic, który zużywa 90% mniej wody pochodzi z serwisu Notatnik programisty.


Komunikacja szeregowa dwóch Arduino przez Raspberry PI

$
0
0

kamduino3_leonardoCelem ćwiczenia jest wykonanie komunikacji dwóch płytek Arduino za pomocą terminala w Raspbianie Raspberry PI. Wykorzystałem do tego Arduino Leonardo do wysyłania sygnałów oraz KAmduino UNO do ich odbierania. Oba urządzenia podłączyłem do Raspberry kablami USB.

Wykorzystywane porty 

  1. Arduino Leonardo, port ttyACM0
  2. KAmduino UNO, port ttyUSB1

Wysyłanie danych (Arduino Leonardo)

long loopCounter = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  loopCounter++;
  Serial.print("Tu Arduino Leonardo: ");
  Serial.println(loopCounter);
  delay(1000);
}

Odbieranie danych (KAmduino UNO)

String message;

void setup() {
  Serial.begin(9600);
}

void loop() {
  if (Serial.available() > 0) {
    message = Serial.readStringUntil('\n');
    Serial.println("Tu KAmduino, odebralem: " + message);
  }
}

Pobranie danych i wyświetlenie w terminalu

cat /dev/ttyACM0

Wysłanie danych z terminala do KAmduino

echo 'Hello' > /dev/ttyUSB1

Odbieranie na bieżąco danych z KAmduino

tail -f /dev/ttyUSB1

Przekierowanie danych z jednego portu szeregowego do drugiego

cat /dev/ttyACM0 > /dev/ttyUSB1

Przykład (opóźnienia spowodowane nagrywaniem przez VNC)

Arduino Leonardo wysyła dane przez port szeregowy ttyACM0, terminal przekierowuje strumień z ttyACM0 do ttyUSB1, a tym samym dane odbierane są przez KAmduino.

Raspberry Pi. Niesamowite projekty. Szalony Geniusz

Raspberry Pi. Niesamowite projekty. Szalony Geniusz

Autor: Donald Norris

ISBN: 978-83-246-9174-6

Format: 168x237, stron: 216

Data wydania: 2014-09-24

Opis: Miniaturowy komputer i jego wielka moc!   Prawdziwy komputer wielkości karty kredytowej? Tak, to możliwe! Raspberry Pi to mały komputer o ogromnym potencjale, w dodatku naprawdę tani. Mało kto wie, że został on zaprojektowany z myślą o nauce programowania dla dzieci. Obecnie Pi sprawdza się w roli serwera WWW, odtwarzacza filmów lub sterownika automatyki. Masz pomysł na

Cena: 39.90 zł
(Cena e-booka: 31.99 zł)

Artykuł Komunikacja szeregowa dwóch Arduino przez Raspberry PI pochodzi z serwisu Notatnik programisty.

Raspberry PI 2 jako ekran infokiosku

$
0
0

____rpikioskZapewne nie jeden z Was widział na stacjach benzynowych ekrany LCD wyświetlające informacje o prognozowanych warunkach pogodowych, czy utrudnieniach w ruchu. W witrynach sklepowych możemy również oglądać prezentacje reklamowe, a na lotniskach planowane przyloty / odloty samolotów. Również w parku niejednej gminy na terenie naszego kraju mamy możliwość zapoznania się z miejscami wartymi do zwiedzenia w okolicy dzięki multimedialnym infokioskom.

Poniżej opiszę przykład konfiguracji Raspberry PI w systemie operacyjnym Raspbian, dzięki której w łatwy sposób będziemy mogli stworzyć nasz multimedialny infokiosk. Jako widok ekranu posłuży nam zewnętrzna strona www uruchamiana w trybie pełnoekranowym. Nic nie będzie stało na przeszkodzie, aby uruchomić w RPI lokalny serwer WWW serwujący widok z danymi.

Zaczynamy!

Uruchamiamy terminal i aktualizujemy pakiety w systemie:

sudo apt-get update
sudo apt-get upgrade -y

Instalujemy przeglądarkę internetową chromium

Chromium umożliwia pracę w trybie kiosku, dzięki czemu  uruchomimy przeglądarkę w trybie pełnoekranowym, bez pasku adresu, menu, ikon, czy stanu.

sudo apt-get install chromium x11-xserver-utils unclutter

Otwieramy do edycji plik:

sudo mcedit /etc/xdg/lxsession/LXDE-pi/autostart

Jeśli nie posiadacie zainstalowanego edytora mcedit, otwórzcie powyższy plik w domyślnym (nano), lub zainstalujcie pakiet mc:

sudo apt-get install mc

W pliku autostart dodajemy # na początku poniższej linii:

#@xscreensaver -no-splash

Spowoduje to wyłączenie domyślnego wygaszacza ekranu.

Następnie dodajemy poniższe linie, które wyłączają ustawienia zarządzania energią:

@xset s off
@xset -dpms
@xset s noblank

A na samym końcu pliku konfigurujemy uruchomienie przeglądarki z określoną stroną:

@chromium --noerrdialogs --kiosk http://NotatnikProgramisty.pl --incognito

I to tyle. Restartujemy Raspberry i na ekranie podpiętym przez HDMI zobaczymy uruchomioną przeglądarkę:

chromium_vnc

 

Raspberry Pi. Najlepsze projekty

Raspberry Pi. Najlepsze projekty

Autor: Andrew Robinson, Mike Cook

ISBN: 978-83-246-9221-7

Format: 168x237, stron: 432

Data wydania: 2014-09-09

Opis: Wykorzystaj ogromny potencjał miniaturowego komputera! Raspberry Pi to prawdziwy komputer o rozmiarach lekko przerośniętej karty kredytowej. Posiada on ogromny potencjał, całkiem sporą moc obliczeniową, a do tego kosztuje naprawdę niewiele. Platforma ta była projektowana z myślą o nauce programowania dla dzieci. Jednak, jak to często bywa, historia potoczyła się zupełnie inaczej.

Cena: 69.00 zł
(Cena e-booka: 54.99 zł)

Artykuł Raspberry PI 2 jako ekran infokiosku pochodzi z serwisu Notatnik programisty.

Zagadki algorytmiczne #1

$
0
0

Lubicie zagadki algorytmiczne? Jeśli tak, to zachęcam do wypróbowania https://codefights.com (jeśli jeszcze nie jest któremuś z Was znana ta platforma). Przypominam również o odbywających się w grudniu X Mistrzostwach Wielkopolski w Programowaniu Zespołowym, do których zapisy zostaną otwarte w tym miesiącu.

Zadanie

Załóżmy, że każda tablica składa się z kilku pierścieni (warstw), które ponumerowane są rozpoczynając od 1 jako zewnętrznej warstwy, 2 jako kolejnej i tak dalej zmierzając do jej środka.

zadanie

Dla wskazanej liczby N zostaje zwrócona tablica o rozmiarze NxN.

Przykład:

Dla N = 1 wynikiem jest

[[1]]

Dla N = 2 wynikiem jest

[[1,1],
 [1,1]]

Dla N = 3 wynikiem jest

[[1,1,1],
 [1,2,1],
 [1,1,1]]

Dla N = 4 wynikiem jest

[[1,1,1,1],
 [1,2,2,1],
 [1,2,2,1],
 [1,1,1,1]]

  • Celem zadania jest napisanie algorytmu zawierającego jak najmniej znaków (nie licząc spacji i tabulacji).
  • Wejście: liczba całkowita N będąca rozmiarem tablicy, 1 ≤ N ≤ 100.
  • Wyjście: dwuwymiarowa tablica liczb całkowitych, [][]

Sprawdź się, spróbuj sam rozwiązać!

Uwaga, poniżej przedstawionych jest kilka rozwiązań. Nie przewijaj jeśli sam chcesz pogłówkować.

Nauka algorytmiki:

Na dzień dzisiejszy (to jest 11.10.2015) trwa promocja w Helionie na zakup niektórych ebooków. Po wybraniu w koszyka opcji „Kupon rabatowy” i wpisaniu kodu: „HELIONPL“, wartość koszyka zostanie pomniejszona o 40%!

Ebooki związane z algorytmiką:

  1. Algorytmy. Almanach, cena po rabacie: 23,40 zł.
  2. Algorytmy bez tajemnic, cena po rabacie: 19,19 zł.
  3. Algorytmy, struktury danych i techniki programowania. Wydanie V, cena po rabacie: 23,40 zł.

A tu jeszcze jedna dobra książka drukowana:

  1. Algorytmika praktyczna

Kolejne wyzwanie

W chwili obecnej aktywne jest kolejne wyzwanie. Zadanie polega na napisanie parsera wyrażeń matematycznych liczb rzymskich. Dodam, że prowadzi osoba, która zaimplementowała algorytm w Javascript w zaledwie 152 znakach!

Moje rozwiązanie w Javie

Priorytetem w napisaniu algorytmu powinno być to, aby umieścić w nim jak najmniejszą ilość znaków. Dlatego o czystym kodzie można zapomnieć. Zadanie to można rozwiązywać na wiele sposobów. Sam wyzwanie ukończyłem na 31 miejscu z ilością znaków równą 153, zastosowawszy w przebiegu jedną pętlę:

int[][] pyramidMatrix(int N) {
  int[][] z = new int[N][N];
  int h = N/2-1, x, y, r, c, i = 0;
  while (i < N * N) {
    r = i / N;
    c = i++ % N;
    x = r > h ? N - r : r + 1;
    y = c > h ? N - c : c + 1;
    z[r][c] = x < y ? x : y;
  }
  return z;
}

Zwycięzcy wyzwania

Jak zobaczycie poniżej, rozwiązanie zawierające najmniejszą ilość znaków zostało napisanie w Pythonie.

 

Java, 116 znaków:

Zastosowano tu przebieg w dwóch pętlach.

int i, x, a[][];
int[][] pyramidMatrix(int N) {
  for (a = new int[N][N]; N > 0; i++, N-=2)
    for (x = 0; x < N*N; a[x/N+i][x++%N+i]++);
  return a;
}

C++,  136 znaków:

Tu widzimy nawet trzy pętle.

#define T std::vector< 
auto pyramidMatrix(int N) {
  T T int > > p(N, T int > (N));
  for (int m, n, i; N; i++)
    for (m = N--; m-- > i;)
      for (n = N; n >= i;)
        p[m][n--]++;
  return p;
}

Python, 72 znaki:

r=range
pyramidMatrix = lambda n:[[-max(~j,j-n,~i,i-n) for j in r(n)] for i in r(n)]

Javascript, 100 znaków:

A zwycięzca w Javascript zastosował rekurencję.

p = pyramidMatrix = function(n, j) {
  var i = n, m = []
  while (i--) m[i] = j ? Math.min(i + 1, n - i, j, n - j + 1) : p(n, i + 1)
  return m
}

Ciekawostka, najdłuższy algorytm (Java, 1301 znaków) :)

ArrayList<ArrayList<Integer>> pyramidMatrix(int N) {
  ArrayList<ArrayList<Integer>> aL1 = new ArrayList<ArrayList<Integer>>();
  ArrayList<Integer> aL2;
  int centerValue=0;
  int lastValue=0;
  boolean initIsComplete=false;
  boolean moduloActic=false;
  centerValue=N/2;
  int MaxvaluePerRow=0;
  boolean MaxvaluePerRowFunction=false;
  boolean center2x=false;
  boolean center2xLastFuntion=false;
  int center2xForFunctionRound=0;
  if(N%2>0){
    centerValue++;
    moduloActic=true;
   
  }else{
    center2x=true;
    center2xLastFuntion=true;
  }

  for(int i=0;i<N;i++){
    aL2 = new ArrayList<Integer>();
    initIsComplete=false;

    if(i+1==centerValue){
      MaxvaluePerRow=centerValue;
      
    }else if(i+1>centerValue){

      if(moduloActic==true){
        MaxvaluePerRow--;		
        					
      }else if(center2x==false){
        MaxvaluePerRow--;
       
      }else if(center2x){
        center2xForFunctionRound++;
        if(center2xForFunctionRound<2)
          center2x=true;
        else{
          center2x=false;
          MaxvaluePerRow--;
        }

      
      }

    }else{
      MaxvaluePerRow=i+1;
      
    }

    for(int j=0;j<N;j++){

      if(j+1>MaxvaluePerRow){
        if(j+1>centerValue){

          if(initIsComplete==false){

            lastValue=centerValue;
            
            initIsComplete=true;
            if(center2x){

            }else if(!center2x){
              if(!center2xLastFuntion)
                lastValue--;

            }
            if(lastValue>=MaxvaluePerRow){
              aL2.add(MaxvaluePerRow);

            }
            else{
              aL2.add(lastValue);
            }
          }else{

            lastValue--;
            if(lastValue>=MaxvaluePerRow){
              aL2.add(MaxvaluePerRow);
            }
            else{
              aL2.add(lastValue);
            }
          }
        }else{
          aL2.add(MaxvaluePerRow);
        }
      }
      else{
        aL2.add(j+1);
      }
    }	
    aL1.add(aL2);
  }
  return aL1;
}

 

Artykuł Zagadki algorytmiczne #1 pochodzi z serwisu Notatnik programisty.

Zagadki algorytmiczne #2 – parser wyrażeń liczb rzymskich

$
0
0

romanOtrzymujesz jako tekst poprawne wyrażenie matematyczne, jednak zapisane liczbami rzymskimi.
Twoim wyzwaniem jest zwrócić liczbę całkowitą będą wynikiem wyrażenia w systemie dziesiętnym. Algorytm powinien składać się z jak najmniejszej ilości znaków.

Wyrażenie może zawierać następujące znaki:

  • operatory: '+', '/', '-', '*', '=', '(', ')'
  • cyfry: 'C', 'D', 'I', 'L', 'M', 'V', 'X'

Przykłady:

  • RomanExpression("V+V=") = 10, as 5 + 5 = 10
  • RomanExpression("IX=") = 9, as 9 = 9
  • RomanExpression("(III+VI)*CM=") = 8100, as (3 + 6) * 900 = 8100
  • Dane wejściowe: string
    • Poprawne wyrażenie matematyczne do rozwiązania
  • Dane wyjściowe: integer
    • Wynik wyrażenia.

Sprawdź się, spróbuj sam rozwiązać!

Uwaga, poniżej przedstawionych jest kilka rozwiązań. Nie przewijaj jeśli sam chcesz pogłówkować.

Rozwiązania z minimalną ilością znaków

 

Java:

 

570 znaków:

int RomanExpression(String e) {
		int i = 0,k=e.length(),j=0;
		String l="IVXLCDM",n="",u="";
		while(i < k){
			if(l.contains(e.charAt(i)+"")){
				u="";
				while(l.contains(e.charAt(i)+"") & i < k){
					u+=e.charAt(i)+"";
					i++;
				}
				int g=0,v=u.length(),t=0,o[]=new int[99];
		  		o['I']=1;
		  		o['V']=5;
		  		o['X']=10;
		  		o['L']=50;
		  		o['C']=100;
		  		o['D']=500;
		  		o['M']=1000;
              for(;t<v;t++){
                    char f=u.charAt(t);
		            if(t+1<v && o[f] < o[u.charAt(t+1)])
		               g-=o[f];
		            else  g+=o[f];
              }
				n+=g;
			}else{
				n+=e.charAt(i)+"";
				i++;
			}
		}
		try{
			return (int)Double.parseDouble(new javax.script.ScriptEngineManager().getEngineByName("js").eval(n.replace("=", ""))+"");

	    }catch(Exception t){
	        
	    }
		return 0;
	}

 

636 znaków:

String O = "-+/*", T = "";
int r, l, x, a, b;
Stack<Integer> s = new Stack(), e = new Stack();

int RomanExpression(String S) {
	for (char c : S.toCharArray()) {
		if (c > 64) {
			T += c;
			++l;
			continue;
		}
		if (l > 0) {
			byte[] B = T.getBytes();
			for (r = x = 0; x < l - 1;)
				r += (s(B[x]) < s(B[x + 1]) ? -1 : 1) * s(B[x++]);
			e.push(r + s(B[l - 1]));
		}
		T = "";
		l = 0;
		x = O.indexOf(c);

		if (x > -1)
			if (s.size() < 1)
				s.push(x);
			else {
				while (s.size() > 0)
					if (s.peek() / 2 >= x / 2)
						e();
					else
						break;
				s.push(x);
			}
		else if (c == 40)
			s.push(-2);
		else if (c == 41) {
			while (s.peek() > -2)
				e();
			s.pop();
		}
	}
	while (s.size() > 0)
		e();
	
	return e.pop();
}

void e() {
	r = s.pop();
	a = e.pop();
	b = e.pop();
	e.push(r < 1 ? b - a : r < 2 ? b + a : r < 3 ? b / a : b * a);
}

int s(byte c) {
	return c < 68 ? 100 : c < 69 ? 500 : c < 75 ? 1 : c < 77 ? 50 : c < 78 ? 1000 : c < 87 ? 5 : 10;
}

 

C++:

418 znaków:

#define d double
#define c char
#define b return
#define w while
#define y *i
#define z y++

c y;
d m[99];

d F() {
    w (y < 33) z;
    d r = 0, p = 0, n;
    if (y > 64) {
        c *s = i;
        w (y > 64) z;
        c *e = i;
        w (e-- - s)
            n = m[*e-67],
            r += n<p ? -n : n,
            p = n;
        b r;
    }
    if (y < 41)
        b z, r = E(), z, r;
    if (y > 43)
        b z, -F();
    b 0;
}
d T() {
    d r = F();
    w (y==42 || y==47)
        r *= z-42 ? 1/F() : F();
    b r;
}
d E() {
    d r = T();
    w (abs(y-44) < 2)
        r -= (z-44) * T();
    b r;
}
d RomanExpression(std::string e) {
    m[0] = 100;
    m[1] = 500;
    m[6] = 1;
    m[9] = 50;
    m[10] = 1000;
    m[19] = 5;
    m[21] = 10;
    i = &e[0];
    b E();
}

 

419 znaków:

typedef std::string S;

int i, c, f = 8, g, l, v[7]{1,5,10,50,100,500,1000}, w[7]{9,0,0,2,2,4,4}, RomanExpression(S e) {

  int h, k, a = 0, s = 0, m = 0, d = 0;
  auto y = [&]() {
    m ? g *= k : d ? g = k / g : 0;
    m = d = 0;
    k = g;
  };
  auto z = [&]() {
    y();
    a ? g += h : s ? g = h - g : 0;
    a = s = 0;
    h = g;
  };

  for (; i < e.size();)
    if (l = f, f = S("IVXLCDM").find(c = e[i++]), (c -= 40) == 1 | c == 21)
      return z(), g;
	else
      f + 1 ? 
        l + 1 ? 0 : g = 0, g += v[f], w[f] - l ? 0 : g -= 2*v[l] :
        c == 3 ?
          z(), a = 1 :
          c == 5 ?
            z(), s = 1 :
            c == 2 ?
              y(), m = 1 :
              c == 7 ?
                y(), d = 1 :
                c ? 0 : g = RomanExpression(e);
}

 

Javascript:

152 znaków:

function RomanExpression(e) {
  n = {I:1,V:5,X:10,L:50,C:100,D:500,M:1e3}
  r = R = ''
  for (i in e)
    (u = n[t = e[i++]]) ? R -= u < n[e[i]] ? u : -u  : e[i] && (r += R + t, R = '')
  return ~~eval(r + R)
}

 

163 znaków:

function RomanExpression(s) {
  h = {I: 1, V: 5, X: 10, L: 50, C: 100, D: 500, M: 1e3}
  c = s[i = t = 0]
  n = ''
  while (d = s[++i]) {
    if (v = h[c]) t += v * 2 < h[d] ? -v : v
    else {
      n += t ? t + c : c
      t = 0
    }
    c = d
  }
  return eval(n + t) | 0
}

 

Python:

I jak zwykle w potyczkach algorytmicznych, w których celem jest napisanie algorytmu z wykorzystaniem jak najmniejszej ilości znaków wygrywa Python

143 znaków:

def RomanExpression(e):
  
  s = n = ''
  for i in e:
    if i > 'A':
      n += i
      
    else:
      t = p = 0
      for r in n:
        x = 10 ** ( 205558 % ord(r) % 7 ) % 9995
        t += x - 2 * p % x
        p = x
          
      s += (t > 0) * `t` + i
      n = ''
      
  return eval(s[:-1])

158 znaków:

def RomanExpression(e):
  s=re.sub
  e=s("(\w+)", r"(\1)", e[:-1])
  for i in range(13):
    e=s(
      "IIXXCCIVXLCDMVXLCDM"[i::13], "+" + s(
        "	", "0", 
        "4949491515151  				  					    		    			            	")[i::13], e
    )
  return eval(e)

 

 

Artykuł Zagadki algorytmiczne #2 – parser wyrażeń liczb rzymskich pochodzi z serwisu Notatnik programisty.

Zagadki algorytmiczne #3 – połowa sumy tablicy

$
0
0

Otrzymujesz listę liczb całkowitych. Twoim zadaniem jest zwrócenie jednego z jej elementów x, który spełnia warunek 2 * x = suma pozostałych elementów.

Masz zagwarantowane, że element x istnieje

Przykład:

Dla A = [1, 2, 3, 4, 5], wynikiem jest 5, bo 2 * 5 = 1 + 2 + 3 + 4.

  • Wejście: A int[]
    • 3 ≤ |A| ≤ 100, -1000 ≤ A[i] ≤ 1000
  • Wyjście int
    • jeden z elementów tablicy wejściowej

Priorytetem jest napisanie algorytmu zawierającego jak najmniejszą ilość znaków.

Sprawdź się, spróbuj sam rozwiązać!

Uwaga, poniżej przedstawionych jest kilka rozwiązań. Nie przewijaj jeśli sam chcesz pogłówkować.

Pierwsze przychodzące na myśl rozwiązanie

Algorytm jest bardzo prosty:

  1. W pierwszym kroku obliczamy w pętli sumę wszystkich elementów tablicy S.
  2. W drugim kroku i kolejnej pętli szukamy elementu spełniającego warunek a == (S – a) /2, bo 2 * a = S – a (S – a, czyli suma pozostałych elementów).

Algorytm po optymalizacji ilości znaków zawiera ich 79:

int r,s;
int HalfSum(int[] A) {
  for (int a : A)
    s += a;
  for (int a : A)
    r = a == (s-a)/2 ? a : r;

  return r;
}

Najkrótsze rozwiązanie

Po chwili przypominamy sobie, że już w szkole podstawowej rozwiązywaliśmy równania z niewiadomą :)

Przeanalizujmy przypadek dla tablicy [1, 2, 3, 4, 5].

Element którego szukamy: x = 5
Suma wszystkich elementów: S = 1 + 2 + 3 + 4 + 5
Suma elementów z wykluczeniem x: a = 1 + 2 + 3 + 4

Układamy równanie:

S = a + x
x = a / 2, a zatem a = 2 * x

Wynika stąd, że:
S = a + x = 2 * x + x = 3 * x
S = 3 * x, dlatego x = S / 3

Wynikiem naszego algorytmu powinna być jedna trzecia sumy wszystkich elementów :)
Finalny algorytm został zoptymalizowany z 79 znaków do 51 i zawiera o jedną pętlę mniej:

int s;
int HalfSum(int[] A) {
  for (int i: A) s+= i;
  return s / 3;
}

Jak się podszkolić z bardziej poważnej algorytmiki?

Autor:

ISBN: 590-4-8070-0823-6

Format: , stron:

Data wydania:

Opis: PAKIET OBEJMUJE KSIĄŻKI: "Algorytmika praktyczna" Książka ta różni się od znanych na polskim rynku pozycji poświęconych algorytmice, dotyczy bowiem jej strony praktycznej. Taki sposób potraktowania tego działu informatyki wynika z coraz większego zainteresowania zarówno uczniów, jak i studentów udziałem w różnego rodzaju konkursach programistycznych. Czytelnik znaj

Cena: 53.13 zł 62.50 zł

Autor: Piotr Wróblewski

ISBN: 978-83-283-2132-8

Format: , stron:

Data wydania:

Opis: Wprowadzenie do algorytmiki Tylko niezbędna teoria Gotowe rozwiązania w C++ Oto kolejne wydanie sprawdzonej, cenionej przez programist&oacute;w, wykładowc&oacute;w oraz student&oacute;w książki, będącej podstawowym podręcznikiem do nauki algorytmiki. Jej autor zapozna Cię z elementarnymi zagadnieniami z tej dziedziny oraz wyjaśni, skąd bierze się tak szybki postęp w

Cena: 27.30 zł 39.00 zł
(Cena druku: 34.30 zł)

 

Artykuł Zagadki algorytmiczne #3 – połowa sumy tablicy pochodzi z serwisu Notatnik programisty.

Tricki bitowe

$
0
0

bitW tym miejscu postaram się zebrać zbiór użytecznych operacji na bitach. Z biegiem czasu lista będzie aktualizowana. Zachęcam do przesyłania własnych propozycji!

Znane i mniej znane operacje na bitach:

  • Maksymalna wartość integer:
    int maxInt = ~(1 << 31);
    int maxInt = (1 << 31) – 1;
    int maxInt = (1 << -1) – 1;
  • Minimalna wartość integer:
    int minInt = 1 << 31;
    int minInt = 1 << -1;
  • Maksymalna wartość  long:
    long maxLong = ((long)1 << 127) – 1;
  • Mnożenie przez 2:
    n << 1;
  • Dzielenie przez dwa:
    n >> 1;
  • Mnożenie przez m-tą potęgę 2:
    n << m;
  • Dzielenie przez m-tą potęgę 2:
    n >> m;
  • Sprawdzenie parzystości:
    (n & 1) == 1;
  • Zamiana dwóch wartości bez użycia zmiennej pomocniczej:
    a ^= b;
    b ^= a;
    a ^= b;
  • Moduł liczby:
    (n ^ (n >> 31)) – (n >> 31);
  • Największa liczba z dwóch:
    b & ((a-b) >> 31) | a & (~(a-b) >> 31);
  • Najmniejsza liczba z dwóch:
    a & ((a-b) >> 31) | b & (~(a-b) >> 31);
  • Sprawdzenie czy obie liczby posiadają ten sam znak:
    (x ^ y) >= 0;
  • N-ta potęga liczby 2:
    2 << (n-1);
  • Czy liczba jest potęgą 2:
    n > 0 ? (n & (n – 1)) == 0 : false;
  • Średnia:
    (x + y) >> 1;
    ((x ^ y) >> 1) + (x & y);
  • M-ty bit liczby n (licząc od najmniej znaczącego do najbardziej znaczącego):
    (n >> (m-1)) & 1;
  • Ustawienie zera na m-tym bicie liczby n (licząc od najmniej znaczącego do najbardziej znaczącego):
    n & ~(1 << (m-1));
  • Dodanie 1:
    -~n
  • Odjęcie 1:
    ~-n
  • Liczba przeciwna:
    ~n + 1;
    (n ^ -1) + 1;
  • if (x == a) x = b; if (x == b) x = a;
    x = a ^ b ^ x;

 

 

 

 

 

 

 

 

Artykuł Tricki bitowe pochodzi z serwisu Notatnik programisty.

Promocje książkowe: 2 za 1. 4 dni Halloweenowej rozrzutności.


Timberman Arduino Bot

Nawet 90% rabatu – najlepsza promocja książek w roku 2015!

$
0
0

WPIS ARCHIWALNY.
PROMOCJA ZAKOŃCZYŁA SIĘ W DNIU 5.11.2015

To zdecydowanie najlepsza promocja książek w tym roku – Ebookpoint.pl z okazji swoich czwartych urodził udostępnił ponad 4 tysiące ebooków i audiobooków w niezwykle okazyjnych cenach: 6.90 zł, 9.90 zł, 14.90 zł i 19.90 zł. Rabaty dochodzą do 90%!

Ale mało tego, dodatkowo został przygotowany konkurs – trzy największe (sumaryczne) zamówienia zostaną uhonorowane książkami o wartości: 500 zł, 300 zł, 150 zł.

Promocja trwa w okresie 3-5 listopada 2015.

To najlepsza okazja aby uzupełnić biblioteczkę programisty przed świętami

4 urodziny ebookpoint.pl

4 urodziny ebookpoint.pl

Lista książek w promocji

Wiem, że sporo z Was narzekało na brak możliwości wyszukiwania książek znajdujących się w promocji. Proszę bardzo, na moim blogu możecie :)

Artykuł Nawet 90% rabatu – najlepsza promocja książek w roku 2015! pochodzi z serwisu Notatnik programisty.

Co wybrać w największej promocji książek tego roku?

$
0
0

4 urodziny Ebookpoint.pl

WPIS ARCHIWALNY.
PROMOCJA ZAKOŃCZYŁA SIĘ W DNIU 5.11.2015

Wielu z Was pyta się co wybrać z listy czterech tysięcy ebooków znajdujących się w promocji. Dlatego poniżej krótkie podsumowanie.

[Aktualizacja 4 listopada 14:00]
Na samym końcu została dodana lista według rankingu najczęściej kupowanych ebooków.

[Aktualizacja 5 listopada 7:00]
Promocja została przedłużona do końca dzisiejszego dnia :)

Listę wszystkich kilku tysięcy ebooków udostępniłem w poprzednim wpisie.

Programowanie ogólnie i rozwój projektów

Algorytmika, analiza danych

C++

JAVA

Python

PHP

Javascript

Node.js

HTML, CSS

 

Elektronika, robotyka, Arduino, Raspberry

C#

SQL

NoSQL

Android

Bazy danych

Grafika, fotografia

Matematyka i nie tylko

Ciekawostki

[Aktualizacja 5 listopada 8:00]

Bestsellery – mało informatycznie

Czyli lista najczęściej kupowanych książek w ebookpoint.pl z ostatnich 30 dni.

Lista według rankingu popularności

Ranking z pierwszego dnia promocji

Artykuł Co wybrać w największej promocji książek tego roku? pochodzi z serwisu Notatnik programisty.

DayZ – jak pobrać GUID? Generowanie BattlEye GUID.

$
0
0

dayz_armaJak pobrać GUID? Na wielu serwerach pracujących pod kontrolą BattlEye w takich grach jak np. cała seria Arma, czy DayZ Standalone stosuje się tzw. white-listy. Czyli aby dołączyć do serwera należy przesłać administracji swój identyfikator GUID. Praktycznie na każdym z serwerów administracja udziela instrukcji na temat możliwości pobrania takich danych poprzez uruchamianie gry, wpisywanie odpowiedniej komendy (#beclient guid). Cały problem polega na tym, że ten ciąg 32 znaków należy sobie przepisać, przez co administratorzy włosy z głowy sobie wyrywają przez popełniane literówki graczy.

Z pomocą przychodzi narzędzie, który eliminuje tego typu błędy.


Bezpośredni link do narzędzia tutaj.

Artykuł DayZ – jak pobrać GUID? Generowanie BattlEye GUID. pochodzi z serwisu Notatnik programisty.

„Touch the World”– KAMAMI Hackathon 2015

$
0
0

kamami-hackathon-logoStudenci wszystkich uczelni w Polsce pasjonujący się nowoczesną elektroniką – jesteście zaproszeni do udziału w hackathonie pod wezwaniem „Touch the World”, który odbędzie się w dniach 12 i 13.12.2015 na Wydziale Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej.

Ekipy biorące udział w imprezie mają za zadanie przygotować dowolną aplikację bazującą na mikrokontrolerach STM32 (zestaw STM32F429I-DISCO), sensorach MEMS z oferty STMicroelectronics oraz wybranych innych sensorach wielkości fizycznych. Platformy sprzętowe niezbędne do realizacji zadań udostępnią organizatorzy.

Zgłoszenia drużyn do konkursu przyjmowane są do dnia 20.11.2015.

Dzień 1 (12.12.2015):

od 8.00 – rejestracja uczestników, rozpoczęcie konkursu
10:00 – oficjalne otwarcie konkursu z udziałem organizatorów i władz WETI
13:00 – obiad
do 21:00 – praca nad zadaniami konkursowymi
21:00 – zamknięcie pierwszego dnia

Dzień 2 (13.12.2015):

od 7.00 do 16:00 – praca nad zadaniami konkursowymi
12:30 – obiad
16:00 – rozpoczęcie prezentacji projektów (do 10 minut/drużynę, w zależności od liczby drużyn, wszystkie prezentacje nie mogą przekroczyć łącznie 1,5h)
17:30 – 18:00 obrady jury
18:00 – 18:30 ogłoszenie wyników i rozdanie nagród
19:00 – zakończenie konkursu

Nagrodami w konkursie są: płytki STM32F429I-DISCO oraz pakiet 3 książek Wydawnictwa BTC dla każdego uczestnika, zestawy sensorów wykorzystanych w projekcie dla każdego zespołu oraz dla zespołów wyróżnionych przez jury za zajęcie:

  • 1. miejsca – smartfony LUMIA 535 – dla każdego członka zespołu,
  • 2. miejsca – zestawy STM32F469I-DISCO – dla każdego uczestnika zespołu,
  • 3. miejsca – zestawy STM32F746G-DISCO – dla każdego uczestnika zespołu.

hackathon_2015_kamami

Udział w Hackathonie mogą wziąć studenci dowolnej polskiej uczelni wyższej, zorganizowani w zespoły od 1 do 4 osób.
Zapisy trwają do dnia 20.11.2015. Regulamin i wszystkie informacje znajdziecie na stronie mikrokontroler.pl.

 

Artykuł „Touch the World” – KAMAMI Hackathon 2015 pochodzi z serwisu Notatnik programisty.

Świąteczne zestawy książek dla programistów

PHP 7 został wydany

$
0
0

PHP 73 grudnia 2015 została wydana oficjalna wersja PHP 7.0.0., w której wydajność w stosunku do PHP 5.6 została zwiększona nawet dwukrotnie. To, na co prawie każdy programista PHP czekał, to możliwość wskazywania typów argumentów metod oraz typów zwracanych przez funkcje i metody.

php7_app

<?php
// Coercive mode
function sumOfInts(int ...$ints)
{
    return array_sum($ints);
}

var_dump(sumOfInts(2, '3', 4.1));

//WYNIK na wyjściu:
int(9)

 

<?php

function arraysSum(array ...$arrays): array
{
    return array_map(function(array $array): int {
        return array_sum($array);
    }, $arrays);
}

print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));

//WYNIK:
Array
(
    [0] => 6
    [1] => 15
    [2] => 24
)

Nowym przydatnym operatorem jest Null coalesce operator, który zwraca swój pierwszy argument jeśli istnieje i nie jest NULL, a w przeciwnym razie drugi argument.

<?php
$username = $_GET['user'] ?? 'nobody';
// powyższa linia jest odpowiednikiem poniższej:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

// do zmiennej $username przypisywana jest pierwsza zdefiniowana wartość
// pochodząca z kolejno: $_GET['user'], $_POST['user'], 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
?>

Kolejny nowym operatorem jest operator porównania <=> (spaceship), który zwraca wartości:

  • -1, gdy lewa strona jest mniejsza od prawej
  • 0, gdy obie strony są takie same
  • 1, gdy lewa strona jest większa od prawej

Przykłady:

// int
echo 1 <=> 1; 				// wynik: 0
echo 1 <=> 2; 				// wynik: -1
echo 2 <=> 1; 				// wynik: 1
 
// float
echo 1.5 <=> 1.5; 			// wynik: 0
echo 1.5 <=> 2.5; 			// wynik: -1
echo 2.5 <=> 1.5; 			// wynik: 1
 
// text
echo "a" <=> "a"; 			// wynik: 0
echo "a" <=> "b"; 			// wynik: -1
echo "b" <=> "a"; 			// wynik: 1
 
echo "a" <=> "aa"; 			// wynik: -1
echo "zz" <=> "aa"; 		// wynik: 1
 
// tablice
echo [] <=> []; 				// wynik: 0
echo [1, 2, 3] <=> [1, 2, 3]; 	// wynik: 0
echo [1, 2, 3] <=> []; 			// wynik: 1
echo [1, 2, 3] <=> [1, 2, 1]; 	// wynik: 1
echo [1, 2, 3] <=> [1, 2, 4]; 	// wynik: -1
 
// obiekty
$a = (object) ["a" => "b"]; 
$b = (object) ["a" => "b"]; 
echo $a <=> $b; 				// wynik: 0
 
$a = (object) ["a" => "b"]; 
$b = (object) ["a" => "c"]; 
echo $a <=> $b; 				// wynik: -1
 
$a = (object) ["a" => "c"]; 
$b = (object) ["a" => "b"]; 
echo $a <=> $b; 				// wynik: 1
 
// UWAGA! Porównywane są tylko wartości:
$a = (object) ["a" => "b"]; 
$b = (object) ["b" => "b"]; 
echo $a <=> $b; 				// wynik: 0

 

 

Tutaj poprzedni wpis o PHP 7 jeszcze w wersji beta.

Artykuł PHP 7 został wydany pochodzi z serwisu Notatnik programisty.


Game streaming w nowych telewizorach

$
0
0

Na samym początku wspomnę, że ten artykuł nie jest sponsorowany i mało związany z programowaniem – krótko zrecenzuję telewizor który ostatnio kupiłem. To czego szukałem w TV, to dobry smart, ekran ok. 40 cali i budżet ok. 2 tys. zł. Nie chciałem również przepłacać za opcję 3D, której nigdy bym nie używał. Z tych a nie innych względów wybór padł na tegoroczny model Samsunga UE43J5600, który kupiłem w Media Expercie za równe 1950 zł.

samsung

 

Teraz moja opinia – smart tv posiada dokładnie to, czego szukałem, czyli na pierwszym miejscu bezproblemowe odtwarzanie filmów ze stron internetowych. Działa to bardzo dobrze, włącznie z takimi stronami jak cda.pl. Dostępne są oczywiście takie aplikacje jak youtube, facebook, player.pl i kilka innych polskich vod. Są też jakieś gierki do pobrania jak i wiele innych programów (np. do pogody, podglądu obrazu online z kilkuset kamer w Polsce i na całym świecie, itd.). Sama komunikacja odbywa się przez wbudowane wifi, ale oczywiście jest możliwość wpięcia się przewodem ethernetowym. Dostępne są w nim dwa porty USB, do których można wpiąć zwykłą klawiaturę, czy pada o którym trochę niżej.

Streaming ekranu z telefonu komórkowego

W telewizorze możemy wyświetlić zawartość ekranu bezpośrednio z naszego telefonu komórkowego (przetestowałem na telefonie z Windows Phone i iPhonie). Czyli możemy uruchomić sobie grę w telefonie i grać patrząc na TV. Tyle w teorii, bo w praktyce opóźnienia w przesyle są zauważalne. Ale bardzo dobrze sprawdza się to do wspólnego oglądania zdjęć i filmów z telefonu.

Streaming gier z komputera

Załóżmy, że mamy w domu dobrego peceta do gier (w innym pokoju niż TV) i jakiegoś laptopa. Dzięki platformie Steam możemy uruchomić grę na pececie, strumieniować ją do laptopa do którego podłączamy kontrolery gier i wyświetlać obraz podłączając go do TV przez HTMI. Działa to naprawdę nieźle. Wystarczy zainstalować Steama w laptopie – nie trzeba pobierać gier zainstalowanych już na pececie.

TV zamiast konsoli?

Jedna funkcja mnie zaskoczyła, o której nie wiedziałem kupując TV i aż dziwię się, że sprzedawcy nie informują o niej swoich klientów. Smart TV w tegorocznych Samsungach posiada usługę o nazwie GameFly. Czyli możemy pograć w normalne gry dostępne na pecetach czy konsolach bezpośrednio przez telewizor! A potrzebujemy jedynie pada i dostęp do internetu.

GameFly Streaming to serwis z grami w chmurze z dostępem subskrypcyjnym. Do rozpoczęcia zabawy wystarczy Samsung Smart TV i gamepad. Gra przesyłana jest strumieniowo – sygnał z kontrolera płynie prosto na serwery producenta. Nie potrzebujemy żadnej konsoli do gier, a jedynie dostęp do internetu :)

gamefly_samsung

Dostępny gry w usłudze Samsung GameFly Streaming

Dzięki tej usłudze po podłączeniu do telewizora kontrolera pogramy w takie gry jak Batman: Arkham Asylum, Dirt 3, Ethan: Meteor Hunter, Grid 2, Pacman Ghostly Adventures, WRC 4 i wiele innych. Sam posiadam pada Logitech F310 i telewizor bardzo dobrze z nim wpółpracuje. Działa to tak, że gra uruchamiana jest w chmurze, a obraz strumieniowany jest do TV, który ten z kolei odbiera sygnały z naszego kontrolera. Gdybym pracował jako  sprzedawca w dziale telewizyjnym, z pewnością zachęcałbym klientów tą usługą. Oczywiście nie jest ona darmowa – każdą grę możemy wypróbować przez dziesięć minut, ale kupno pakietów nie jest drogą sprawą – ceny zaczynają się od 29,99 zł. na miesiąc. Zresztą zobaczcie sami jak to wygląda w rzeczywistości (jakość obraz w rzeczywistości jest dużo lepsza – tutaj obniżyła ją kamerka). Kamerę ustawiłem ok. 1,5m od telewizora:

W to wszystko można pograć bez instalowania żadnych dodatkowych programów.
Czy gry w chmurze zmniejszą pozycję konsol do gier na rynku? Sądzę, że tego typu usługi z pewnością będą się rozwijać i zdobywać rzesze ich zwolenników.

Własna aplikacja na TV?

Saumsung udostępnia SDK do swoich telewizorów, dzięki któremu każdy może napisać sobie swój własny program.
Tutaj krótka prezentacja na temat tworzenia aplikacji w SDK w wersji 5.1:

Podsumowanie

Tak jak pisałem na początku, artykuł nie jest sponsorowany. Jednak po jego przeczytaniu można zauważyć, że chyba jestem zadowolony z zakupu. I to prawda.

Artykuł Game streaming w nowych telewizorach pochodzi z serwisu Notatnik programisty.

Siedem dni, siedem książek z rabatem -50%

$
0
0

Jak co roku przed Świętami Helion wybiera 7 pozycji wśród najpopularniejszych książek roku i rabatują je o 50% codziennie inny z tej puli. Poniżej znajdziesz dzienny harmonogram i ceny po rabacie. Promocja -50% dotyczy także eBooków.

WAŻNE: poniższe linki będą aktywne w podany dzień. Cała akcja trwa od 7 do 13 grudnia włącznie.

Do 13 grudnia ważny jest kod rabatowy o wartości 40 zł dla zamówień za min. 150 zł: PREZENTHELION. Jednak nie łączy się on z zestawami i innymi zniżkami.

Poniedziałek, 49,50 zł: 

AngularJS. Profesjonalne techniki

AngularJS. Profesjonalne techniki

Autor: Adam Freeman

ISBN: 978-83-283-0197-9

Format: 168x237, stron: 632

Data wydania: 2015-02-06

Cena: 99.00 zł
(Cena e-booka: 79.00 zł)

 

Wtorek, 24,50 zł:

Algorytmy, struktury danych i techniki programowania. Wydanie V

Algorytmy, struktury danych i techniki programowania. Wydanie V

Autor: Piotr Wróblewski

ISBN: 978-83-283-1406-1

Format: 158x235, stron: 376

Data wydania: 2015-09-08

Cena: 49.00 zł
(Cena e-booka: 39.00 zł)

 

Środa, 44,50 zł:

C# 6.0 i MVC 5. Tworzenie nowoczesnych portali internetowych

C# 6.0 i MVC 5. Tworzenie nowoczesnych portali internetowych

Autor: Krzysztof Żydzik, Tomasz Rak

ISBN: 978-83-246-9496-9

Format: 158x235, stron: 528

Data wydania: 2015-02-26

Cena: 89.00 zł
(Cena e-booka: 69.90 zł)

 

Czwartek, 49,50 zł:

CCNA 200-120. Zostań administratorem sieci komputerowych Cisco

CCNA 200-120. Zostań administratorem sieci komputerowych Cisco

Autor: Adam Józefiok

ISBN: 978-83-246-9101-2

Format: 158x235, stron: 704

Data wydania: 2015-05-12

Cena: 99.00 zł
(Cena e-booka: 79.00 zł)

 

Piątek, 49,50 zł:

JavaScript i jQuery. Interaktywne strony WWW dla każdego

JavaScript i jQuery. Interaktywne strony WWW dla każdego

Autor: Jon Duckett

ISBN: 978-83-283-0126-9

Format: 170x230, stron: 648

Data wydania: 2015-04-27

Cena: 99.00 zł
(Cena e-booka: 79.00 zł)

 

Sobota, 39,50 zł: 

Fotografia cyfrowa. Edycja zdjęć. Wydanie VII

Fotografia cyfrowa. Edycja zdjęć. Wydanie VII

Autor: Scott Kelby

ISBN: 978-83-246-6812-0

Format: 164x239, stron: 446

Data wydania: 2013-07-29

Cena: 79.00 zł
(Cena e-booka: 62.90 zł)

 

Niedziela, 34,50 zł:

Czysty kod. Podręcznik dobrego programisty

Czysty kod. Podręcznik dobrego programisty

Autor: Robert C. Martin

ISBN: 978-83-283-0234-1

Format: 168x237, stron: 424

Data wydania: 2010-02-19

Cena: 69.00 zł
(Cena e-booka: 54.99 zł)

 

Artykuł Siedem dni, siedem książek z rabatem -50% pochodzi z serwisu Notatnik programisty.

Świąteczny konkurs, do wyboru nagrody o wartości 450 zł!

$
0
0
Kilka dni temu pytałem się na Facebooku, czy chciałby ktoś z Was otrzymać całkowicie za darmo zestaw do Adafruit Flory. Zgłosił się Kamil i w tym tygodniu paczka o wartości ok. 300 zł wyjedzie właśnie do niego :) Lubię wspierać chętnych do rozwoju i sprawia mi to wielką przyjemność, dlatego mam jeszcze dla Was mały konkurs w którym do wygrania są:
 
Promuję edukację, dlatego wygra ta osoba, która kupi sobie książki związane z programowaniem o największej wartości zamówienia spośród wszystkich uczestników konkursu w sklepach:
 

Regulamin:

  1. Organizatorem konkursu jest Notatnik Programisty (notatnikprogramisty.pl, krzysztofjelonek.net).
  2. Warunkiem uczestnictwa w konkursie jest kupno książki (lub ebooka) po kliknięciu w dowolny odnośnik prowadzący do wyżej wymienionych sklepów, umieszczony na blogu notatnikprogramisty.pl (krzysztofjelonek.net) lub opublikowany na facebooku Notatnik Programisty.
    Uwaga; w celu rozwiania wątpliwości – zamówienie zostanie zaliczone po wejściu przez te dwa linki: 
    helion.pl  ebookpoint.pl i zamówieniu dowolnej książki po uprzednim wyszukaniu.
  3. Blog jest partnerem grupy Helion, a zamówienia zostaną zweryfikowane pod względem spełnienia warunków regulaminu.
  4. Konieczne jest dokonanie płatności elektronicznej bezpośrednio po zakupie.
  5. Po dokonaniu zakupu należy w komentarzu (na facebooku pod wpisem odwołującym się do tego artykułu) przesłać numer zamówienia z wybranego sklepu.
  6. Spośród wszystkich zamówień wyłonione zostaną trzy zwycięskie o największej kwocie.
  7. W przypadku gdy jedna osoba złoży więcej niż jedno zamówienie, ich wartość zostanie zsumowana.
  8. Nagrody:
    1. I miejsce – możliwość wyboru dwóch nagród z dostępnej puli.
    2. II miejsce – możliwość wyboru jednej nagrody z dostępnej puli.
    3. III miejsce – możliwość wyboru jednej nagrody z dostępnej puli.
  9. W przypadku gdy kilka osób złoży zamówienia o tej samej wartości, będzie się liczyła kolejność ich zgłoszenia na facebooku.
  10. Konkurs trwa do godz. 23:59 13 grudnia (niedziela).
  11. O godzinie 20:00 14 grudnia zostaną opublikowane wyniki konkursu, a paczki z nagrodami zostaną wysłane w poniedziałek 14 grudnia – czyli zdążycie odebrać prezent pod choinkę :)
  12. Prezenty zostaną wysłane na mój koszt.
  13. Konkurs nie jest grą losową (loterią).
  14. Ostatni punkt regulaminu to tylko prośba o udostępnienie na facebooku i w grupach facebookowych informacji o tym konkursie :)

 

Nie wiem jaki będzie odzew na mój prezent świąteczny. Wokół Notatnika Programisty skupia się wąskie grono osób, dlatego może się okazać, że wystarczy już zakup jednej książki aby wygrać :)

Jeśli ktoś z Was planował sobie kupić jakąś książkę przed Świętami, to przy okazji można wziąć udział w tym konkursie. Jeśli nie, to mam nadzieję że zmotywuję choć jedną osobę do samorozwoju.

 

Przypominam, że trwają obecnie niezłe promocje w Helionie:
 

Dlaczego takie warunki konkursu?

Bo nie chcę się mieszać w problemy prawne związane przeprowadzaniem loterii losowej. Tutaj wygra matematyka – dane posortuję i wyłonię trzech zwycięzców. Jeśli ktoś kupuje książki, to z dużym prawdopodobieństwem je czyta, a z pewnością chce się rozwijać.  Z przykrością obserwuję grupy facebookowe, w których młodzi ludzie, często studiujący na renomowanych uniwersytetach wymieniają się pirackimi wersjami ebooków. Kilka razy wdawałem się w dyskusje odnośnie takiego zachowania. Argument zawsze jest jeden – książki są za drogie. No to ile powinny kosztować? Czy książki, które można znaleźć w różnych promocjach kosztujące od kilku do kilkudziesięciu złotych rzeczywiście są takie drogie? Czy przypadkiem wyjście do kina nie kosztuje tyle co dobra książka w promocji?

Mam wrażenie, że nasza branża (IT) rządzi się innymi prawami pod tym względem. Może dlatego, że sami produkujemy treści elektroniczne (oprogramowanie), wiemy jak sporo czasu to pochłania i nie chcemy by piractwo nas dosięgło.

Warto się rozwijać, warto czytać i warto przy tym wszystkim wspierać autorów, bez których każdy z nas byłby kimś innym.

Artykuł Świąteczny konkurs, do wyboru nagrody o wartości 450 zł! pochodzi z serwisu Notatnik programisty.

Wyniki Poznań Open Team Programming Championship

$
0
0

XMWPZ2_smallW miniony weekend na Wydziale Matematyki i Informatyki UAM w Poznaniu  oraz na Wydziale Informatyki Politechniki Poznańskiej odbyły się X Mistrzostwa  Wielkopolski  w Programowaniu Zespołowym (Poznań Open Team Programming Championship).

W tegorocznej edycji udział wzięło 140 drużyn trzyosobowych z całej Polski. Wśród Zawodników znalazły się 82 drużyny reprezentowane przez studentów, 46 drużyn ze szkół średnich oraz 11 zespołów „zawodowych”. W tym samym czasie, po raz pierwszy w historii zawodów programowano zdalnie za granicą Polski, dokładnie w Nowym Yorku. Tam pod okiem dra Macieja Kalkowskiego udział w zawodach wzięła jedna drużyna. Działania te miały charakter czysto pilotażowy, aby w przyszłym roku możliwe było zorganizowanie  w USA już dla większej ilości drużyn.

Zwycięzcą zawodów została drużyna Som Merek z Uniwersytetu Warszawskiego,  w składzie: Marek Sommer, Kamil Dębowski, Błażej Magnowski. Rozwiązali 11 na 12  zadań w czasie 34:42:16, wyprzedzając Trio Warszawsko – Jagiellońskie, które tę samą  liczbę zadań rozwiązało w czasie: 39:15:19. Warto nadmienić, iż w tym roku w dziesiątce  najlepszych drużyn zawodów znalazła się jedna drużyna z Poznania –  Pisarze Miłości,  reprezentanci Wydziału Matematyki i Informatyki UAM w Poznaniu.

Dla przedstawicieli szkół średnich powstała osobna kategoria – JUNIOR.  Zwycięzcami w tym rankingu była drużyna Tabash Razors z VI LO im. Jana  Kochanowskiego w Radomiu oraz XIV LO im. Stanisława Staszica w Warszawie, w składzie:  Mateusz Radecki, Jan Tabaszewski, Jakub Boguta. Pokonali 134 drużyny, plasując się tym  samym na 5 miejscu  w rankingu ogólnym.

Z roku na rok zawody zyskują coraz więcej zawodników i zwolenników. W 2003 roku  w zawodach brało udział 230 uczestników i 60 wolontariuszy. W tym roku  było to 420 zawodników z całej Polski oraz 120 wolontariuszy. Chęć udziału w wydarzeniu zgłosiło kilka drużyn z Azji oraz Stanów Zjednoczonych. Niestety z powodu bardzo wysokich kosztów przyjazdu, w tym roku nie wzięli udziału w zawodach.

Więcej informacji na stronie: www.mwpz.poznan.pl.

Artykuł Wyniki Poznań Open Team Programming Championship pochodzi z serwisu Notatnik programisty.

Zagadka – znajdź zakodowane hasło

Viewing all 102 articles
Browse latest View live