অনেলাইনার একই প্রথম ক্ষেত্রের সাথে লাইনগুলিকে একীভূত করতে


15

এটি আমার প্রথম কোডগল্ফ প্রশ্ন, তাই যদি এটি যথাযথ না হয় তবে আমি আগেই ক্ষমা চেয়ে নিচ্ছি এবং আমি কোনও প্রতিক্রিয়াকে স্বাগত জানাই।

এই ফর্ম্যাটটি সহ আমার একটি ফাইল রয়েছে:

a | rest of first line
b | rest of second line
b | rest of third line
c | rest of fourth line
d | rest of fifth line
d | rest of sixth line

আসল বিষয়বস্তু পৃথক, ডিলিমিটারের মতো হয়। বিষয়বস্তু কেবল পাঠ্য। ডিলিমিটার কেবল প্রতি লাইনে একবার উপস্থিত হয়। এই ধাঁধার জন্য, ডিলিমিটারটি নির্দ্বিধায় অনুভব করুন, উদাহরণস্বরূপ ডিলিমিটার হিসাবে "%" ব্যবহার করুন।

পছন্দসই আউটপুট:

a | rest of first line
b | rest of second line % rest of third line
c | rest of fourth line
d | rest of fifth line % rest of sixth line

এটিকে মার্জ করার জন্য আমার কাছে ইতিমধ্যে রুবি এবং অ্যাজক উভয় স্ক্রিপ্ট রয়েছে, তবে আমি সন্দেহ করি যে এটির একটি সংক্ষিপ্ত অনেলাইনার পাওয়া সম্ভব। অর্থাত্ একটি ওয়ান-লাইনার যা কমান্ড লাইনের পাইপ এবং অন্যান্য কমান্ডের সাথে ব্যবহার করা যেতে পারে। আমি এটি বুঝতে পারি না, এবং আমার নিজস্ব স্ক্রিপ্টটি কেবল কমান্ড লাইনে সংকুচিত হওয়ার জন্য দীর্ঘস্থায়ী।

সংক্ষিপ্ততম অক্ষর পছন্দসই। ইনপুট অগত্যা বাছাই করা হয় না, তবে আমরা কেবল প্রথম ক্ষেত্রের সাথে টানা লাইনগুলি মার্জ করতে আগ্রহী। মিলবে প্রথম ক্ষেত্রের সাথে সীমাহীন লাইন। মাঠ 1 কোনও কিছু হতে পারে, যেমন ফলের নাম, সঠিক নাম ইত্যাদি could

(আমি ম্যাকোএসে চলি, তাই ম্যাকের সাথে চালিত বাস্তবায়নগুলিতে আমি ব্যক্তিগতভাবে আগ্রহী)।


এখানে একটি দ্বিতীয় উদাহরণ / পরীক্ষা। বিজ্ঞপ্তি "|" সীমানা হয়। "|" এর আগে স্থান অপ্রাসঙ্গিক, এবং বিরক্তি যদি মূল অংশ হিসাবে বিবেচনা করা উচিত। আমি আউটপুটে সীমাবদ্ধ হিসাবে "%" ব্যবহার করছি, তবে আবারও ডিলিমিটার পরিবর্তন করতে নির্দ্বিধায় (তবে বর্গাকার বন্ধনী ব্যবহার করবেন না)।

ইনপুট:

why|[may express] surprise, reluctance, impatience, annoyance, indignation
whom|[used in] questions, subordination
whom|[possessive] whose
whom|[subjective] who
whoever|[objective] whomever
whoever|[possessive] whosever
who|[possessive] whose
who|[objective] whom

পছন্দসই আউটপুট:

why|[may express] surprise, reluctance, impatience, annoyance, indignation
whom|[used in] questions, subordination%[possessive] whose%[subjective] who
whoever|[objective] whomever%[possessive] whosever
who|[possessive] whose%[objective] whom

আউটপুট শুরুতে একটি নতুন লাইন অনুমোদিত?
mIllIbyte

মূল প্রশ্নের মধ্যে মন্তব্য যুক্ত। এবং, @ এমিলআইবাইট, একটি নতুন লাইন আমার কাছে অপ্রাসঙ্গিক। তবে আমার ধারণা অনুসারে, কোনও ফাঁকা লাইন নেই, এবং কোনও ত্রুটি পরীক্ষা করে নেই। আমি ধরে নিলাম সমস্ত লাইনের পাঠ্য আছে এবং কমপক্ষে প্রথম কলাম এবং ডিলিমিটার রয়েছে।
মাইকেলকোডস

পরীক্ষার কেসগুলি বিচার করে, কী কী সমস্ত কী গোষ্ঠীযুক্ত তা ধরে নেওয়া বাঁচানো যায়? উদাহরণস্বরূপ: ["A|some text", "B|other text", "A|yet some other text"]পরীক্ষার জন্য একটি পছন্দসই ইনপুট নয়, কারণ এর মূলশব্দগুলি Aতালিকার একের পর এক নয়।
কেভিন ক্রুইজসেন

আমি ধরে নিলাম সমস্ত কী গ্রুপ করা আছে। তারা যেখানে নেই সে ক্ষেত্রে আমি উদ্বিগ্ন নই, যদিও তত্ত্ব অনুসারে, এটি তাদের অনন্য কী হিসাবে ব্যবহার করা হবে না।
মাইকেলকোডস

উত্তর:


7

রেটিনা , 17 বাইট

  • @ মার্টিনইেন্ডারে 12 বাইট সংরক্ষণ করা হয়েছে
  • @ জিমি 23013 কে ধন্যবাদ 1 বাইট সংরক্ষিত

আইএসও 8859-1 এনকোডড বাইটে স্কোর।

ইনপুট ক্ষেত্র বিভাজক হিসাবে ;পরিবর্তে ব্যবহার করে |

(?<=(.+;).+)¶\1
%

এটি অনলাইনে চেষ্টা করুন।



2
পছন্দ করুন প্রথমবার যখন চেহারাটি ব্যবহার করা হয় তখন এটি লাইনের পুরো উপসর্গটি ক্যাপচার করে এবং এরপরে রেজেক্স ইঞ্জিন আর এটিতে ব্যাকট্র্যাক করবে না।
মার্টিন ইন্ডার

5

ভি , 16 13 বাইট

òí^¨á«©.*úsî±

এটি অনলাইন চেষ্টা করুন!

তুমি বলেছিলে

সীমানা পরিবর্তন করতে নির্দ্বিধায়

সুতরাং আমি |সীমানা হিসাবে বেছে নিয়েছি যদি এটি অবৈধ হয় তবে আমাকে জানান এবং আমি এটি পরিবর্তন করব।

ব্যাখ্যা:

ò                #Recursively:
 í               #Search for the following on any line:
  ^¨á«©          #1 or more alphabetic characters at the beginning of the line
       .*        #Followed by anything
         ús      #Mark everything after this to be removed:
           î±    #A new line, then the first match again (one or more alphabetic characters)

1
তোমাকে জানাই???
এরিক আউটগলফার

@ ΈρικΚωνσταντόπουλος হ্যাঁ? এটা কি একটা সমস্যা?
জেমস

এই ধাঁধার জন্য, ডিলিমিটারটি নির্দ্বিধায় অনুভব করুন, যেমন "ডিলিমিটার" হিসাবে "%" ব্যবহার করুন। যেমন নয়
এরিক দ্য আউটগল্ফার

2
"|" ডিলিমিটার ঠিক আছে।
মাইকেলকোডস

@ মিশেলকোডস আপনি কি আরও কিছু পরীক্ষার কেস যুক্ত করতে পারেন যাতে সমাধানটি গণনা করা যায় কিনা তা আমরা যাচাই করতে পারি?
জেমস

3

পার্ল -0n, 2 + 43 = 45 বাইট

s/
.*\|/%/g,print for/(.*\|)((?:
\1|.)*
)/g

ডেমো:

$ perl -0ne 's/
> .*\|/%/g,print for/(.*\|)((?:
> \1|.)*
> )/g' <<EOF
> why|[may express] surprise, reluctance, impatience, annoyance, indignation
> whom|[used in] questions, subordination
> whom|[possessive] whose
> whom|[subjective] who
> whoever|[objective] whomever
> whoever|[possessive] whosever
> who|[possessive] whose
> who|[objective] whom
> EOF
why|[may express] surprise, reluctance, impatience, annoyance, indignation
whom|[used in] questions, subordination%[possessive] whose%[subjective] who
whoever|[objective] whomever%[possessive] whosever
who|[possessive] whose%[objective] whom

3

এসকিউএল (পোস্টগ্রিএসকিউএল), 43 72 বাইট

COPY T FROM'T'(DELIMITER'|');SELECT a,string_agg(b,'%')FROM T GROUP BY A

এটি পোস্টগ্রাইএসকিউএল-এ হ্যান্ডি স্ট্রিং_এগ্রিক সামগ্রিক ফাংশনের সুবিধা গ্রহণ করে। ইনপুটটি কোনও Tকলাম Aএবং 2 কলাম সহ ডাকা টেবিল থেকে আসে B। প্রশ্নটি আরও ভালভাবে মেনে চলার জন্য আমি কোনও ফাইল থেকে টেবিলের মধ্যে ডেটা লোড করার জন্য কমান্ডটি অন্তর্ভুক্ত করেছি। ফাইলটিও রয়েছে T। আমি টেবিল তৈরি বিবৃতি গণনা করি নি।
আউটপুট আনঅর্ডার করা হবে, তবে যদি সমস্যা হয় তবে এটি একটি দিয়ে স্থির করা যেতে পারেORDER BY A

এসকিউএলফিডাল আমার পক্ষে খেলতে চায়নি, তবে এটি আমার সেটআপে পাওয়া যায়।

CREATE TABLE T (A VARCHAR(9),B VARCHAR(30));

COPY T FROM'T'(DELIMITER'|');SELECT a,string_agg(b,'%')FROM T GROUP BY A
a   string_agg
--- ----------------------------------------
c   rest of fourth line
b   rest of second line%rest of third line
a   rest of first line
d   rest of fifth line%rest of sixth line

1
ন্যায়সঙ্গতভাবে, আমি টেবিলের মধ্যে উল্লিখিত ফাইল ফর্ম্যাটটির বিষয়বস্তুগুলি পড়ার জন্য একটি কপি কমান্ড সহ পরামর্শ দেব, অন্যথায় আপনি অন্য সবার মতো একই সমস্যাটি সমাধান করছেন না।
জুলে

@ জুলস যথেষ্ট ভাল, আমি উত্তর দিলে আমি এই ডিফল্ট i / o কনসেন্সাসের কথা ভাবছিলাম । যদিও আমি উত্তরটি সম্পাদনা করি তবে প্রশ্নটি পুনরায় পড়া।
মিকিটি

2

সি, 127 বাইট

o[99],n[99],p=n;main(i){for(;gets(n);strncmp(o,n,i-p)?printf(*o?"\n%s":"%s",n),strcpy(o,n):printf(" /%s",i))i=1+strchr(n,'|');}

জিসিসি নিয়ে কাজ করে। ডিলিমিটারে পরিবর্তন করা হয়েছে /। স্টিডিনের কাছ থেকে ইনপুট নেয় এবং স্ট্যান্ডআউটে আউটপুট লেখায়, তাই ইনপুট পুনঃনির্দেশের সাথে কল করুন./a.out <filename

Ungolfed:

o[99],n[99] //declare int, to save two bytes for the bounds
,p=n; //p is an int, saves one byte as opposed to applying an (int) cast to n,
//or to declaring o and n as char arrays
main(i){for(;gets(n);strncmp(o,n,i-p //an (int)n cast would be needed;
// -(n-i) does not work either,
//because pointer arithmetics scales to (int*)
)?printf(*o?"\n%s":"%s" //to avoid a newline at the beginning of output
,n),strcpy(o,n):printf(" /%s",i))i=1+strchr(n,'|');}

1

পাইথ - 15 বাইট

সমস্যাটি সম্পর্কে কয়েকটি অনুমান করা, যখন ওপি স্পষ্ট করে তখন পরিবর্তন হবে।

jm+Khhd-sdK.ghk

এটি এখানে অনলাইনে চেষ্টা করুন


"কী" শব্দটি একক বর্ণের পরিবর্তে হয় না, এটি কাজ করে না। (ওপি মন্তব্যগুলিতে স্পষ্ট করে)
জেমস

1

পাইথন 3 - 146 বাইট

ইনপুট হ'ল ফাইলের নাম বা ফাইলের পথ, আউটপুটটি স্টডআউট করতে হয়। যদি আমি কমান্ড লাইন থেকে কাঁচা পাঠ্য হিসাবে ইনপুট নিতে পারি তবে খুব ছোট হতে পারে

স্টিডিন এবং আউটপুট থেকে স্টিডিনে ইনপুট নেয়। বিভাজক সঙ্গে সেটআপ "|"। প্রথম উদাহরণটি ইনপুট পরীক্ষা করতে পৃথককারীটি ব্যবহার করুন" | "

from itertools import*
for c,b in groupby([x.split("|")for x in input().split("\n")],key=lambda x:x[0]):print(c,"|"," % ".join((a[1]for a in b)))

চ্যালেঞ্জটি কোনও ফাইল থেকে স্পষ্টভাবে ইনপুটটি পড়ার দরকার পড়ে না, তাই আমি অনুমান করি যে আমাদের ডিফল্ট I / O পদ্ধতিগুলি এখানে প্রয়োগ হয়। এবং যেহেতু অন্যান্য উত্তরগুলিও এসটিডিইএন থেকে ইনপুট নেয়, আমি মনে করি ওপি এটির সাথে ভাল।
ডেনকার

@ ডেনারএফ ঠিক আছে আমি এটিকে সম্পাদনা করব, এটি পুরোপুরি অকেজো হবে কারণ আমি মনে করি না যে আপনি স্টিডিন থেকে প্রকৃত মাল্টলাইন ইনপুটও দিতে পারবেন।
কেটিঞ্জ

আপনি স্ক্রিপ্টটি চালানোর সময় আপনি ইনপুট পুনর্নির্দেশ করতে পারেন।
mIllIbyte

1

জাভা 7, 167 বাইট

এটি সম্ভবত কোনও ভিন্ন পদ্ধতির সাহায্যে আরও গল্ফ করা যেতে পারে ..

import java.util.*;Map c(String[]a){Map m=new HashMap();for(String s:a){String[]x=s.split("=");Object l;m.put(x[0],(l=m.get(x[0]))!=null?l+"%"+x[1]:x[1]);}return m;}

দ্রষ্টব্য: উপরের পদ্ধতিটি HashMapপছন্দসই কী-মানযুক্ত জোড়গুলি তৈরি করে এবং প্রদান করে । তবে এটি |কী এবং নতুন মানগুলির মধ্যে আউটপুট-ডিলিমিটার হিসাবে ওপি-র প্রশ্নের মতো সঠিক আউটপুটে এটি মুদ্রণ করে না । মিকিটির এসকিউএল উত্তরের দ্বারা বিচার করা যেখানে তিনি একটি ডেটাবেস টেবিল ফিরিয়েছেন যেখানে আমি অনুভব করেছি যে এটি অনুমোদিত; যদি না হয় একটি মুদ্রণ ফাংশন জন্য আরও বাইট যোগ করা উচিত।

অবরুদ্ধ এবং পরীক্ষার কোড:

import java.util.*;

class Main{

    static Map c(String[] a){
        Map m = new HashMap();
        for(String s : a){
            String[] x = s.split("\\|");
            Object l;
            m.put(x[0], (l = m.get(x[0])) != null
                            ? l + "%" + x[1]
                            : x[1]);
        }
        return m;
    }

    public static void main(String[] a){
        Map m = c(new String[]{
            "why|[may express] surprise, reluctance, impatience, annoyance, indignation",
            "whom|[used in] questions, subordination",
            "whom|[possessive] whose",
            "whom|[subjective] who",
            "whoever|[objective] whomever",
            "whoever|[possessive] whosever",
            "who|[possessive] whose",
            "who|[objective] whom"
        });

        // Object instead of Map.EntrySet because the method returns a generic Map
        for (Object e : m.entrySet()){
            System.out.println(e.toString().replace("=", "|"));
        }
    }
}

আউটপুট:

whoever|[objective] whomever%[possessive] whosever
whom|[used in] questions, subordination%[possessive] whose%[subjective] who
why|[may express] surprise, reluctance, impatience, annoyance, indignation
who|[possessive] whose%[objective] whom

1

পাওয়ারশেল, 85 বাইট

স্ট্রিংগুলি হ্যাশটেবল ব্যবহার করে মার্জ করা হয়েছে:

%{$h=@{}}{$k,$v=$_-split'\|';$h.$k=($h.$k,$v|?{$_})-join'%'}{$h.Keys|%{$_+'|'+$h.$_}}

উদাহরণ

পাওয়ারশেল যেহেতু স্টিডিন পুনঃনির্দেশকে সমর্থন করে না <, তাই আমি ধরে নিচ্ছি যে এটি Get-Content .\Filename.txt |ডিফল্ট I / O পদ্ধতি হিসাবে ব্যবহৃত হবে।

Get-Content .\Filename.txt | %{$h=@{}}{$k,$v=$_-split'\|';$h.$k=($h.$k,$v|?{$_})-join'%'}{$h.Keys|%{$_+'|'+$h.$_}}

আউটপুট

whoever|[objective] whomever%[possessive] whosever
why|[may express] surprise, reluctance, impatience, annoyance, indignation
whom|[used in] questions, subordination%[possessive] whose%[subjective] who
who|[possessive] whose%[objective] whom

1

এপিএল, ৪২ টি চর

{⊃{∊⍺,{⍺'%'⍵}/⍵}⌸/↓[1]↑{(1,¯1↓'|'=⍵)⊂⍵}¨⍵}

এপিএল এনকোডিংয়ে একটি বাইট নয়।
জাকারি

0

সেড, 55 বাইট

:a N;:b s/^\([^|]*\)|\([^\n]*\)\n\1|/\1|\2 %/;ta;P;D;tb

পরীক্ষা রান:

$ echo """why|[may express] surprise, reluctance, impatience, annoyance, indignation
> whom|[used in] questions, subordination
> whom|[possessive] whose
> whom|[subjective] who
> whoever|[objective] whomever
> whoever|[possessive] whosever
> who|[possessive] whose
> who|[objective] whom""" | sed ':a N;:b s/^\([^|]*\)|\([^\n]*\)\n\1|/\1|\2 %/;ta;P;D;tb'
why|[may express] surprise, reluctance, impatience, annoyance, indignation
whom|[used in] questions, subordination %[possessive] whose %[subjective] who
whoever|[objective] whomever %[possessive] whosever
who|[possessive] whose %[objective] whom

0

কিউ / কেডিবি +, 46 বাইট

সমাধান:

exec"%"sv v by k from flip`k`v!("s*";"|")0:`:f

উদাহরণ:

q)exec"%"sv v by k from flip`k`v!("s*";"|")0:`:f
who    | "[possessive] whose%[objective] whom"
whoever| "[objective] whomever%[possessive] whosever"
whom   | "[used in] questions, subordination%[possessive] whose%[subjective] who"
why    | "[may express] surprise, reluctance, impatience, annoyance, indignation"

ব্যাখ্যা:

`:f            // assumes the file is named 'f'
("s*";"|")0:   // read in file, assume it has two columns delimitered by pipe
flip `k`v      // convert into table with columns k (key) and v (value)
exec .. by k   // group on key
"%"sv v        // join values with "%"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.