 constant values
const int numberOfLEDs = 3;
const int ledPin[ numberOfLEDs ] = {
  10, 11, 12};
const int delayTime = 1000;

// changing values
int shuffledPin[ numberOfLEDs ];
int inByte =0;

void setup()
{
  // activate pins
  for ( int i = 0; i < numberOfLEDs; i++ ) {
    pinMode ( ledPin[i], OUTPUT);
    shuffledPin[i] = ledPin[i];
  }

  // start serial port at 9600 bps:
  Serial.begin( 9600 );
}

void loop()
{
  while ( Serial.available() > 0 ) {
    // A new key is pressed / entered
    inByte = Serial.read();

    // shuffle pin numbers ( http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle )
    for ( int i = numberOfLEDs; i > 1; i-- ) {
      int j = random( 0, i );
      int tmp = shuffledPin[j];
      shuffledPin[j] = shuffledPin[i-1];
      shuffledPin[i-1] = tmp;
    }

    // convert key press to a 0, 1, 2, ... numberOfLEDs
    // filter out other characters and set to 0
    int keyboardNumberEntered = (int) inByte - 48;
    keyboardNumberEntered = keyboardNumberEntered < 0 ? 0 : keyboardNumberEntered > numberOfLEDs ? 0 : keyboardNumberEntered;

    // turn the first keyboardNumberEntered LEDs on, and turn the remaining off
    for ( int pinIndex = 0; pinIndex < numberOfLEDs; pinIndex++ )
      if ( pinIndex < keyboardNumberEntered )
        digitalWrite( shuffledPin[pinIndex], HIGH );
      else
        digitalWrite( shuffledPin[pinIndex], LOW );

  }  // end of new key-press handling

  delay( delayTime );
}

