दो मानों की जाँच करें, यदि ओवरलैप है तो उनके स्कोर की जाँच करें और किसी अन्य फ़ाइल में उच्चतम स्कोर के साथ प्रिंट करें


-2

मेरे पास एक फ़ाइल है, जिसमें से मुझे प्रत्येक क्वेरी लेनी है और Alt_from और Alt_to मानों की जांच करनी है। यदि Alt_from और Alt_to के मान ओवरलैप करते हैं, तो उच्चतम स्कोर के साथ पंक्ति की जांच करें और इसे गैर-अतिव्यापी मूल्यों के साथ एक फ़ाइल में प्रिंट करें।

इनपुट फ़ाइल:

Sr.No   query   score   ALIfrom ALIto
1        g1     135.2   93      231
2       g182    40.5    244     296
3       g182    45.4    247     311
4       g182    53.1    302     348
5       g182    50.6    305     362
6       g182    52.9    354     396
7       g182    24.9    357     397
8       g19     45.2    19      181
9       g19    166.8    19      208
10      g19    182.3    27      258
11      g22     94.5    46      139
12      g22    101.3    141     221
13      g22     66.7    230     353
14      g22     36.8    230     391
15     g266     57.7    47      127
16     g266     12.6    343     375
17     g266     17.8    348     375

अपेक्षित उत्पादन:

Sr.No   query   score   ALIfrom ALIto
1        g1     135.2   93      231
2       g182    40.5    244     296
4       g182    53.1    302     348
6       g182    52.9    354     396
10      g19    182.3    27      258
11      g22     94.5    46      139
12      g22    101.3    141     221
13      g22     66.7    230     353
15     g266     57.7    47      127
17     g266     17.8    348     375

मैंने पर्ल का उपयोग करने की कोशिश की लेकिन यह सही ओवरलैपिंग मूल्यों की जांच नहीं करता है। ओवरलैप से मेरा मतलब है कि उदाहरण के लिए, क्वेरी g1 (Sr.no 2) में Alt_from और Alt_to मानों की सीमा 150 से 200 है और क्वेरी g1 (Sr.no 3) में Alt_from और Alt_to मानों की सीमा 160 से 190 है। Sr.no 3 के मान Sr.no 2 में मानों की श्रेणी में आते हैं, यह ओवरलैप है। ऐसे मामले में कोड को अपने स्कोर की जांच करनी चाहिए और उच्चतम स्कोर वाले को लेना चाहिए। जैसा कि आप अपेक्षित आउटपुट में देख सकते हैं, Sr.no 2 के साथ पंक्ति कम स्कोर के कारण हटा दी जाती है और Sr.no 3 को लिया जाता है क्योंकि इसमें उच्च स्कोर होता है


अतिव्यापी मूल्यों से आपका क्या अभिप्राय है?
सातु कटुरा

@ Sat isKatsura से मेरा आशय ओवरलैप से है, उदाहरण के लिए क्वेरी g1 (Sr.no 2) में Alt_from और Alt_to का मान 150 से 200 और क्वेरी g1 (Sr.no 3) में Alt_rom और Alt_to का मान 160 से 190 है। । Sr.no 3 के ये मूल्य Sr.no 2 में मानों की श्रेणी के भीतर आते हैं। यह ओवरलैप है। ऐसे मामले में कोड को अपने स्कोर की जांच करनी चाहिए और उच्चतम स्कोर वाले लोगों को लेना चाहिए। जैसा कि आप अपेक्षित आउटपुट में देख सकते हैं, Sr.no 2 के साथ पंक्ति कम स्कोर के कारण हटा दी जाती है और Sr.no 3 को लिया जाता है क्योंकि इसमें उच्च स्कोर होता है।
हरि

प्रत्येक प्रश्न में कितनी पंक्तियाँ हो सकती हैं?
सातु कटुरा

1
कृपया अपने प्रश्न को संपादित करें और i) टिप्पणी में आपके द्वारा जोड़ी गई जानकारी को शामिल करें (टिप्पणियों को याद करना आसान है और चेतावनी के बिना हटाया जा सकता है); ii) समझाएं कि आपने पर्ल के साथ क्या किया और यह कैसे विफल हुआ।
terdon

1
यदि आप तीन श्रेणियों, (1,2), (2,3), (3,4), स्कोर 1, 2 और 3 के साथ एक क्वेरी के लिए कौन सी लाइन आउटपुट करते हैं? क्या यह फ़ाइल में ऑर्डर करने पर निर्भर करता है?
Kusalananda

जवाबों:


0

एक हल्की परीक्षित पर्ल स्क्रिप्ट:

#!/usr/bin/env perl

use strict;
use warnings;

my $header = <>;
print $header;

my $query = '';
my @store = ();
LINE: while (<>) {
    my ( $line, %data );

    $line = $_;

    chomp;
    @data{qw/sr query score from to/} = split /\s+/;

    if ( $data{query} eq $query ) {
        for ( my $i = @store - 1 ; $i >= 0 ; $i-- ) {
            my %odata = %{ $store[$i]->[1] };
            if ( $odata{to} > $data{from} and $odata{from} < $data{to} ) {

                # overlap
                if ( $data{score} > $odata{score} ) { splice @store, $i, 1 }
                else                                { next LINE }
            }
        }
        push @store, [ $line, \%data ];
    }
    else {
        for (@store) { print $_->[0] }
        @store = ( [ $line, \%data ] );
        $query = $data{query};
    }
}
for (@store) { print $_->[0] }

@SatoKatsura यह कोड आंशिक रूप से काम कर रहा है। मेरी वास्तविक फ़ाइल बहुत बड़ी है और जैसे ही यह फ़ाइल नीचे जाती है, यह सही मान नहीं छापती है।
हरि

@Hari यह आपके द्वारा ऊपर पोस्ट किए गए नमूना डेटा के साथ काम कर रहा है। यदि आप इनपुट डेटा का एक उदाहरण पोस्ट करते हैं जहां यह टूट जाता है तो मैं इसे ठीक करने की कोशिश कर सकता हूं।
सातु कटुरा

@Satokatsura मैंने इनपुट डेटा और अपेक्षित आउटपुट को अपडेट किया है। कृपया सलाह दें।
हरि

@ हरि ने स्क्रिप्ट का संपादन किया। हालाँकि, मैं इसका परीक्षण नहीं कर सकता, क्योंकि आपका नमूना डेटा असंगत है, सीरियल 21 के साथ फाई लाइन इनपुट और आवश्यक आउटपुट में भिन्न दिखती है।
सातु कटुरा

@Satokatsura यह मेरी तरफ से एक गलती है। मैंने इनपुट और आउटपुट फ़ाइल को सुसंगत बनाया है। कृपया सलाह दें। धन्यवाद
हरि
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.