Джаваскриптеры и не только решают задачку:
Написать функцию, которая для заданного отсортированного массива чисел (все числа разные) выводит текстовую строку диапазонов:
getRanges([0, 1, 2, 3, 4, 7, 8, 10]); // 0-4,7-8,10
getRanges([4, 7, 10]); // 4,7,10
getRanges([2, 3, 8, 9]); // 2-3,8-9
Кто-то создает на каждый чих по объекту, кто-то собирается писать “с помощью гугла и Stackoverflow”, обсуждают читаемость простынки в несколько десятков строк с нетривиальной логикой… Ребята! Неужели приведенное на хабре решение более “читаемо”, чем такое (простите, но это будет plain old C), написанное за десять минут?
void printRanges( int *arr, int len ) {
int start = arr[0];
int prev = arr[0];
int printed = 0;
int i;
for ( i = 1; i < len + 1; i++ ) {
if ( i == len || arr[i] != prev + 1 ) {
if ( printed ) {
printf( "," );
}
if ( start == prev ) {
printf( "%i", start );
} else {
printf( "%i-%i", start, prev );
}
printed = 1;
if ( i < len ) {
start = arr[i];
}
}
if ( i < len ) {
prev = arr[i];
}
}
printf( "\r\n" );
}
Да, тут есть возможные улучшения - но неужели решение из поста кажется более понятным?
Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там, используя свое имя пользователя из ЖЖ (вход по OpenID).