से ऑफ़सेट के साथ संख्याओं की श्रृंखला निकालें मैं पूर्णांक की सरणी के भीतर संख्याओं की श्रृंखला की खोज करने की कोशिश कर रहा हूं। उदाहरण के लिए, यदि सरणी संख्या 1,2,3,10,12,14
के होते हैं, यहपर्ल - सरणी
1 से 3 करने के लिए ऑफसेट 1,
10 के साथ 14 को संक्षेप किया जा सकता है ऑफसेट 2
मेरे कोड के नीचे, जहाँ मैं पाश से अधिक के साथ दूसरा तत्व से सरणी, ट्रैक लगातार सरणी तत्वों के बीच ऑफसेट और एक नया 'श्रृंखला' अगर ऑफसेट परिवर्तन बनाने के लिए:
012:use strict;
use warnings;
my @numbers = (1,2,3,10,12,14); #array to extract series from
my $last_diff;
my $start = $numbers[0];
my $end;
my @all_series; #array will hold all information on series
for my $i (1..($#numbers+1)){
my $diff;
if ($i <($#numbers+1)){
$diff = $numbers[$i] - $numbers[$i-1];
}
if (!$diff || ($last_diff && ($last_diff != $diff))) {
$end = $numbers[$i-1];
my $series = { 'start'=> $start,
'end' => $end,
'offset'=> $start == $end ? 1 : $last_diff,
};
push @all_series, $series;
$start = $numbers[$i];
}
$last_diff = $diff;
}
use Data::Dumper;
print Dumper(@all_series);
आउटपुट के रूप में निम्नानुसार लग रहा है
$VAR1 = {
'offset' => 1,
'end' => 3,
'start' => 1
};
$VAR2 = {
'offset' => 1,
'end' => 10,
'start' => 10
};
$VAR3 = {
'offset' => 2,
'end' => 14,
'start' => 12
};
यह वांछित परिणाम नहीं है, क्योंकि अंतिम दो श्रृंखलाओं को एक (10 से 14, दो श्रृंखला के बजाय ऑफ़सेट 2) में सारांशित किया जा सकता है।
एल्गोरिदम में दोष perl से स्वतंत्र है, हालांकि, शायद कोई मुझे इस सर्वोत्तम तरीके से कैसे पहुंचे इस पर एक संकेत दे सकता है, शायद इसके लिए कुछ perl- विशिष्ट चाल मौजूद हैं।
मेरे आवेदन में, सरणी में सभी पूर्णांक आरोही क्रम में हैं और डुप्लिकेट संख्या मौजूद नहीं है।
EDIT यदि एकल संख्याएं होती हैं जो किसी गंभीर को असाइनमेंट नहीं कर सकती हैं, तो वे लंबाई की एक श्रृंखला होनी चाहिए।
अधिक संख्या श्रृंखला के लिए संक्षेप किया जा सकता है, बेहतर है (मैं श्रृंखला की संख्या को कम करना चाहते हैं!)
आपका विनिर्देश अभी भी अस्पष्ट है। '1 2 3 5 7' लें: 3 कहां जाना चाहिए? इसके अलावा, '1 2 3 10 12 20 21 22' के लिए, क्या आप एक श्रृंखला' 10 12' चाहते हैं, या उन्हें 2 सिंगलटन श्रृंखला बना सकते हैं? – choroba
मैंने इसके बारे में सोचा नहीं था। पहले मामले के लिए: मेरे आवेदन में इससे कोई फर्क नहीं पड़ता कि तीन या दूसरे अनुक्रम में तीन भाग हैं या नहीं। बाद के मामले के लिए: '10 12' एक श्रृंखला होना चाहिए। – user1981275