Perl спешит на помощь!
#!/usr/bin/perl
use warnings;
use strict;
my $group_size = 3;
my @first = split ' ', <>;
my @groups;
my $start_index = 0;
while ($start_index < @first) {
my $step = 1;
while ( $step < $group_size
&& $start_index + $step < @first
&& $first[$start_index] == $first[ $start_index + $step ]
) {
++$step;
}
push @groups, $step;
print $first[$start_index], ' ';
$start_index += $step;
}
print "\n";
my @numbers = split ' ', <>;
my $last;
for my $size (@groups) {
my @group = splice @numbers, 0, $size;
my $value = $group[-1] - $group[0];
$value = $group[0] - $last if 1 == $size;
$last = $group[-1];
print $value, ' ';
}
print "\n";
Вы не указали, что должно произойти, если в самой первой группе всего один член.
Операционные системы жестко определяют размер страницы в зависимости от архитектуры (и, в некоторых случаях, -конфигурации ядра во время сборки ). Например, на x86 базовый размер страницы всегда 4КиБ — это свойство архитектуры процессора; в Linux вы увидите это определение в include/asm/page_types
. На 64-битном -ARM размер страницы можно настроить во время сборки -как 4 КБ, 16 КБ или 64 КБ. Некоторые архитектуры имеют несколько размеров страниц во время выполнения (, например. огромные страницы на x86 ), но все размеры известны заранее и базовый размер фиксирован.
В Linux каноническим определением размера страницы является PAGE_SIZE
, и вы получаете его, включив asm/page.h
, который зависит от архитектуры -(, который может использовать другие заголовки, как это происходит на x86 ). Эликсир предоставляет удобный список всех PAGE_SIZE
определений .
Большинство архитектур, поддерживаемых ядром Linux, поддерживают страницы размером 4 КБ; исключениями являются Alpha, ARC, некоторые системы Motorola 68k, OpenRISC и 64 -бит SPARC, все из которых используют страницы размером 8 КБ. Многие архитектуры можно настроить для использования других размеров страниц.