বাক্যটি পুনরুদ্ধার করুন


12

এই চ্যালেঞ্জ দুটি অংশ নিয়ে গঠিত। বিজয়ীর সর্বনিম্ন মোট বাইট গণনা সহ সমাধান হবে। উভয় চ্যালেঞ্জের জন্য একই ভাষা ব্যবহার করতে হবে।

অংশ 1:

একটি ফাংশন বা প্রোগ্রাম লিখুন যা ইনপুট হিসাবে কেবল বৈধ শব্দের সাথে একটি বাক্য গ্রহণ করে এবং ব্যবহৃত অক্ষরের একটি তালিকা বের করে দেয়, প্রতিটি অক্ষর কতবার ব্যবহৃত হয় এবং মূল বাক্যে প্রতিটি শব্দের অক্ষরের সংখ্যা। এই প্রোগ্রামটি থেকে আউটপুট অবশ্যই পরবর্তী প্রোগ্রামে বৈধ ইনপুট হতে হবে (ঠিক যেমনটি আউটপুট হয়)

আমি আরও নীচে উদাহরণ এবং বিস্তারিত নিয়ম যুক্ত করব।

অংশ ২:

একটি ফাংশন বা প্রোগ্রাম লিখুন যা প্রথম প্রোগ্রাম থেকে আউটপুটটিকে ইনপুট হিসাবে গ্রহণ করে এবং ইংরেজী শব্দের এই তালিকাটি ব্যবহার করে এবং আউটপুট থেকে প্রাপ্ত তথ্যের সাথে একটি বাক্য পুনরায় তৈরি করে। বাক্যটি মূল বাক্যটির মতো হতে হবে না।

অধিক তথ্য. নিয়ম এবং বিধিনিষেধসমূহ:

অংশ 1:

  • প্রথম ইনপুট কোনও উপযুক্ত বিন্যাসে, উদ্ধৃতি চিহ্ন সহ বা ছাড়াই, ফাংশন আর্গুমেন্ট হিসাবে বা এসটিডিআইএন থেকে, বন্ধনী সহ বা ছাড়াই থাকতে পারে etc.
  • ইনপুট বাক্যটিতে কোনও সময়কাল / বিন্দু বাদে কোনও বিরামচিহ্ন বা বিশেষ অক্ষর থাকবে না। পিরিয়ড সিম্বল ব্যতীত ইনপুটে থাকা সমস্ত অক্ষর শব্দ তালিকায় থাকবে।
  • সাজার প্রথম চিঠিটি বড় হাতের অক্ষর হবে, বাকীটি লোয়ার কেস হবে।
  • অংশ 2 এর আউটপুট অবশ্যই মূল বাক্য হিসাবে একই বড় বড় অক্ষরের সাথে শুরু হওয়া উচিত (সুতরাং ইনপুটটিকে ছোট কেসিতে রূপান্তরিত করার প্রস্তাব দেওয়া হয় না (তবে ঠিক আছে))।
  • আউটপুট যে কোনও উপযুক্ত বিন্যাসে হতে পারে:
    • পরবর্তী প্রোগ্রাম / ফাংশনে সরাসরি আউটপুট অনুলিপি করা সম্ভব হবে
    • অনুলিপি-পেস্ট করার সময় কোনও পরিবর্তন করা যায় না, পুরো আউটপুট অবশ্যই অনুলিপি করে কপি এবং পুরো হিসাবে আটকানো উচিত।
    • আপনি উদাহরণস্বরূপ বর্ণমালার সমস্ত অক্ষরের একটি হিস্টোগ্রাম আউটপুট করতে পারেন, বা কেবল ব্যবহৃত অক্ষরগুলি (সাধারণভাবে, অংশ 2 সম্পূর্ণ করার জন্য যা প্রয়োজন)
    • আপনি অক্ষরগুলির একটি তালিকা আউটপুট করতে পারবেন না যেখানে একাধিক ঘটনার পুনরাবৃত্তি হয়। উদাহরণস্বরূপ, The queueএকটি আউটপুট উত্পাদ পারে না: Teeehquu (3,5), এটা ভালো কিছু হওয়া উচিত: Tehqu, (1 3 1 1 2),(3 5)

অংশ ২:

  • প্রোগ্রাম / ফাংশনটি অবশ্যই ইনপুটটি প্রথম অংশ 1 এর মতো গ্রহণ করতে হবে (একটি ব্যতিক্রম, ফাইলের নামটিকে ইনপুট হিসাবে নেওয়ার বিষয়ে নীচে মন্তব্য দেখুন))
    • পার্শ্ববর্তী বন্ধনী, উদ্ধৃতি চিহ্ন বা অনুরূপ যদি ইনপুট পার্স করতে প্রয়োজনীয় হয় তবে এগুলি অবশ্যই অংশ 1 থেকে আউটপুট অংশ হতে হবে।
  • শব্দ তালিকা এখানে পাওয়া যাবে।
    • শব্দ তালিকাটি হয় স্থানীয়ভাবে স্থানীয়ভাবে সংরক্ষণ w.txtকরা যেতে পারে, বা এটি ইউআরএল থেকে আনা যেতে পারে। ইউআরএলটি কেবল 5 বাইট হিসাবে গণ্য হবে, সুতরাং আপনার কোনও ইউআরএল-সংক্ষিপ্তকারী প্রয়োজন হবে না।
    • প্রোগ্রাম stdin থেকে একটি ইনপুট হিসেবে নাম পড়া ছাড়া একটি ফাইল খুলতে পারবে না থাকলে (আমার বিশ্বাস এই হল অন্তত Pyth কেনার ক্ষেত্রে ছিল), তারপর ফাইলের নাম আলাদা ইনপুট আর্গুমেন্ট হিসাবে গ্রহণ করা যেতে পারে।
  • আউটপুট অবশ্যই একটি বাক্য হতে হবে (বৈধ শব্দের তালিকা), একটি পিরিয়ড এবং alচ্ছিক নিউলাইন দিয়ে শেষ হবে।
    • আউটপুটে অবশ্যই অংশ 1 এর মূল বাক্যটির মতো একই সংখ্যার অক্ষরের শব্দ থাকতে হবে (সঠিক ক্রমে)
    • মূল বাক্যে ব্যবহৃত সমস্ত অক্ষর অবশ্যই নতুন আউটপুট ব্যবহার করা উচিত in
    • বাক্যটি অবশ্যই মূল ইনপুট বাক্যটির মতো একই বড় বড় অক্ষরের সাথে শুরু হওয়া উচিত এবং একটি পিরিয়ডের সাথে শেষ হতে হবে।

উভয় অংশ:

  • উভয় অংশই কার্যকর করতে 2 মিনিটের বেশি সময় নেওয়া উচিত নয় (কোনও সমাধান গৃহীত না হওয়া পর্যন্ত এলোমেলোভাবে শব্দগুলি বেছে নেওয়া)।

উপরের তালিকাভুক্ত বিধিগুলির সাথে, যথাযথ একই বাক্যটি পুনরুত্পাদন করার উপযুক্ত সুযোগ থাকতে হবে, তবে এটি কোনও প্রয়োজন নয়।

উদাহরণ:

নীচের উদাহরণগুলিতে, কয়েকটি আলাদা ইনপুট এবং আউটপুট ফর্ম্যাট প্রদর্শিত হবে। আরও অনেক গৃহীত হয়।

অংশ 1:

ইনপুট:

Zulus win.

আউটপুট ধরণ 1:

Z i l n s u w
1 1 1 1 1 2 1
5 3

আউটপুট টাইপ 2:

(('Z',1),('i',1),('l',1),('n',1),('s',1),('u',2),('w',1)), (5,2)

আউটপুট টাইপ 3:

'Zilnsuuw',[1,1,1,1,1,2,1],[5,2]

অংশ ২:

ইনপুট: অংশ 1 থেকে আউটপুট একটি সঠিক অনুলিপি। আউটপুট:

Zulus win.

নোট করুন যে অন্য শব্দের সংমিশ্রণগুলি যতক্ষণ না তারা একটি দিয়ে শুরু হয় ততক্ষণ গ্রহণ করা হয় Zএবং প্রথম শব্দের 5 টি বর্ণ থাকে এবং দ্বিতীয়টিতে 3 থাকে।

বাইটস মধ্যে সংক্ষিপ্ত কোড।


এখানে প্রতিশ্রুতিবদ্ধ হ'ল
PurkkaKoodari

@ লিজিওনম্যামাল ৯78৮: হ্যাঁ, আপনি নিম্নলিখিত বিধিনিষেধের আওতায় এটি করতে পারেন: যে আউটপুটটি এতে f1আটকানো f2হয়েছে তাতে চ্যালেঞ্জে নির্দিষ্ট সমস্ত ডেটা থাকতে হবে। কোনও অতিরিক্ত ডেটা আউটপুট অংশ হতে পারে না f1। কোনও তথ্য f1এটিকে কল করার সময় উপলভ্য করার ক্ষেত্রে "সঞ্চয়" করা যায় না f2f1প্রতি কল প্রতি ইনপুট হিসাবে কেবল একটি স্ট্রিং নিতে পারে।
স্টিভি গ্রিফিন

1
3 টিরও বেশি শব্দের সাথে একই বাক্যটি বের করার
সুযোগটি

সাধারণভাবে হ্যাঁ, তবে এমন অনেকগুলি ক্ষেত্রে রয়েছে যেখানে আপনার একই বাক্যটি কার্যকর হওয়ার সম্ভাবনা রয়েছে। যদি আপনার ঠাকুরমা আপনার পুরাতন সোয়েটারটি পুনরায় করাতে ক্লান্ত হয়ে পড়ে, তবে সে হতে পারে: "রিফটিং বোনাটি ছেড়ে দেওয়া"। আমি পরীক্ষা করে দেখিনি, তবে আমি মনে করব আপনার ঠাকুমা এখনও অংশ 2 পরে ছেড়ে যাবেন Also এছাড়াও দীর্ঘতর শব্দগুলির সংমিশ্রণে একই বাক্যটি ফিরে আসতে পারে।
স্টিভি গ্রিফিন

1
@ স্টেভি গ্রিফিন আপনি সহজেই "উইগ ... ওয়াও" পেতে পারেন। ফিরে যে উদাহরণ বাক্য দিয়ে।
question_asker

উত্তর:


5

ল্যাবভিউ, 166 ল্যাবভিউ পুরষ্কার

প্রথমত আমি 2 টি পৃথক প্রোগ্রাম তৈরি করি নি কারণ ল্যাবভিউ ডেটাফ্লো করে তাই সত্যিই কোনও প্রয়োজন নেই।

প্রথম উপাদান দিয়ে হিস্টোগ্রাম সংরক্ষণ করে = 1-26 থেকে প্রথম অক্ষরের বাকী ascii কোড পরিমাণে যায়। দৈর্ঘ্য কেবল একটি অ্যারেতে সংরক্ষণ করা হয়।

প্রথম শব্দটিতে 3 টি চেক, প্রথম অক্ষর, দৈর্ঘ্য এবং হিস্টোগ্রামে উপলব্ধ অক্ষর রয়েছে। প্রথম শব্দের পরে প্রথম অক্ষরের চেক বন্ধ হয়ে যায়।

আমি হিস্টগ্রামটি প্রতিটি চিঠির জন্য এটি হ্রাস করে এবং এটি 0 এর নিচে নেমে যায় কিনা তা পরীক্ষা করে দেখেছি।

যদি আমি আমার নবম শব্দটি খুঁজে পেয়েছি এবং কোনও শব্দ নেই যা অক্ষরের বাম দিক থেকে গঠনযোগ্য হবে আমি একনায়ক থেকে শব্দগুলি মুছতে শুরু করব এবং Nth শব্দটি আবার করব এবং যতক্ষণ না আমি কোনও সমাধান পেয়েছি।

এটি বাক্যগুলির জন্য বা নাও কার্যকর হতে পারে, যেহেতু এটি গণনা করতে চিরকালের জন্য লাগে (আমার উদাহরণটি ইতিমধ্যে কয়েক সেকেন্ড সময় নিয়েছে)।

আমি কি চেষ্টা করেছি

In: Zulus win.
Out: Zulus win.

In: Dovecot flagships oleander.
Out: Dolphin advocates forelegs.

In: Abash abel mammal test.
Out: Amass abbe hamlet malt.


3

পাইথন 2.7, 353 বাইট

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

পর্ব 1, 76 বাইট

h=lambda s:({c:s.count(c)for c in s if c.isalnum()},map(len,s[:-1].split()))

ভিতরে: 'Hi there.'

বাইরে: {'H':1, 'i':1, 't':1, 'h':1, 'e':2, 'r':1}, (2, 5)

সুতরাং, একটি তালিকা রয়েছে:

  • হিস্টোগ্রাম সহ একটি হ্যাশম্যাপ

  • চিঠি গণনা একটি তালিকা

পার্ট 2, 277 বাইট

import itertools as i
m=lambda c:' '.join([s for s in i.product(*[[w for w in open('w.txt')if len(w)==length]for length in c[1]])if sorted(''.join(s))==sorted(sum([[k.lower()]*n for k,n in c[0].items()],[]))and s[0][0]==filter(str.isupper,c[0])[0].lower()][0]).capitalize()+'.'

আমি এটিকে 100% খাঁটি কার্যক্ষম করে তুলতে পেরে সত্যিই আনন্দিত। এটি সত্যিকারের গল্ফিংয়ের সাথে সহায়তা করে কিনা তা নিশ্চিত নয় তবে আমি অবশ্যই অবহেলা অংশটি পেয়েছি: ডি এখানে আরও একটি মানবিক বান্ধব সংস্করণ version 2 (ঠিক একই প্রবাহ, তবে পরিবর্তনশীল নামের সাথে):

from itertools import product

def matching(counts):
  histo, word_lengths = counts
  first_letter = filter(str.isupper, histo)[0].lower()

  letters_nested = [ [char.lower()]*count for char, count in histo.items() ]
  letters = sum(letters_nested, [])

  word_options = [[word for word in open('w.txt') if len(word)==length] for length in word_lengths]

  sentences = product(*word_options)

  valid = [sentence for sentence in sentences if sorted(''.join(sentence))==sorted(letters) and sentence[0][0]==first_letter]
  return ' '.join(valid[0]).capitalize()+'.'

3

পার্ল, 516 504 বাইট

এর জন্য 2x +1 অন্তর্ভুক্ত -p

@l=map{length}/\w+/g;s/\w/$c{$&}++/eg;@h=map{"$_$c{$_}"}keys%c;$_="@h @l";chomp(@w=`cat w.txt`);s/([A-Z])1//;$o=$1;s/(\w)(\d)/$h{$1}=$2,''/eg;@L=/\d/g;$l=shift@L;@O=$_,s/^.//,g([@L],%h)&&last for grep{$l==length&&/^$o/i&&h(\%h,substr$_,1)}@w;$_="@O.";s/^./uc$&/e;sub g{my%g;($R,%g)=@_;my@R=@$R;if($j=shift@R){s/./$g{$&}--/eg;my@C=grep{$j==length&&h(\%g,$_)}@w;push(@O,$_),g([@R],%g)and return 1 or pop@O for@C;0}else{1}}sub h{($y,$z)=@_;my%T;$z=~s/\w/$T{$&}++/eg;$K=1;$K&=$T{$_}<=$y->{$_}for keys%T;$K}

আছে প্রয়োজন w.txtমধ্যে UNIX ফরম্যাট ( \nলাইন শেষা w শ)। catফাইল পড়তে ব্যবহার করে; typeউইন্ডোজ জন্য পরিবর্তন করুন ।
উপরের অনেলাইনারটিকে সংরক্ষণ করুন এবং এটি 534.plহিসাবে চালান echo Test. | perl -p 534.pl

বেশ বড়, তবে এটি একটি শুরু - প্রচুর গল্ফিংয়ের সুযোগ, তবে আমি ল্যাবভিউ উত্তরটি আরও নিঃসঙ্গভাবে তৈরি করতে পোস্ট করতে চেয়েছিলাম ;-)। আমি সাব-সেকেন্ড এক্সিকিউশনটির জন্য অপটিমেশানগুলি বাদ দিয়েছি, 30+ বাইট সংরক্ষণ করে।


প্রথম স্নিপেট (by৩ বাইট):

@l=map{length}/\w+/g;s/\w/$c{$&}++/eg;@h=map{"$_$c{$_}"}keys%c;$_="@h @l"

এটি একটি হিস্টগ্রাম এবং কমপ্যাক্ট ফর্ম্যাটে শব্দ দৈর্ঘ্য তৈরি করে। ইনপুট জন্য Zulus win.এটি টাইপ -2 আউটপুট উত্পাদন করে (,), যা এখানে প্রয়োজনীয় নয়:

s1 l1 u2 Z1 w1 i1 n1 5 3

এটি এখানে, নিরপেক্ষ:

sub i{
    $_=shift;                       # get parameter
    @l = map{length} /\w+/g;        # cound word lengths
    s/\w/$c{$&}++/eg;               # count letters in hash %c
    @h=map{"$_$c{$_}"}keys%c;       # construct letter-frequency pairs
    "@h @l"                         # implicit interpolation with $" (space) separator
}

দ্বিতীয় স্নিপেট (441 বাইট)

এই প্রধান অংশটি সাবরোটাইন ব্যবহার করে আই / ও এবং প্রথম চিঠির বিশেষ চিকিত্সার সাথে সম্পর্কিত gএবং hসেগুলি নীচে তালিকাভুক্ত করা হয়েছে।

sub o {
    $_=shift;
    chomp(@w=`cat w.txt`);          # load the wordlist.

    s/([A-Z])1//; $o=$1;            # get and remove the uppercase character,
    s/(\w)(\d)/$h{$1}=$2,''/eg;     # reconstruct histogram in hash %h.
    @L=/\d/g;                       # get the word counts.

    $l = shift @L;                  # get the first word length.

    @O = $_,                        # initialize output with first word,
    s/^.//,                         # strip first char of word
    g([@L],%h) && last              # call the main algoritm and quit on success

    for grep {                      
            $l==length &&           # check length
            /^$o/i &&               # only match words starting with the uppercase char
            h(\%h,substr$_,1)       # check if the word satisfies the histogram
        } @w;                       # iterates all words (speedups removed).

    $_="@O.";                       # construct output sentence.
    s/^./uc$&/e;                    # make first char uppercase.
    $_
}

এই পুনরাবৃত্তি ফাংশন হিস্টোগ্রামের একটি অনুলিপি, বাকী শব্দ গণনার একটি অনুলিপি এবং বর্তমান শব্দ গ্রহণ করে word শব্দের দৈর্ঘ্যের অ্যারেটি খালি থাকলে সত্য ফিরে আসে। অন্যথায় এটি প্রদত্ত শব্দের অক্ষরের জন্য হিস্টগ্রাম গণনা হ্রাস করে, পরবর্তী শব্দ-দৈর্ঘ্য গ্রহণ করে এবং শব্দের তালিকা থেকে উপযুক্ত শব্দের একটি তালিকা খুঁজে পায়। প্রতিটি উপযুক্ত শব্দের জন্য, এটি পুনরাবৃত্তি করে।

sub g {
    my%g;                           # local version of histogram
    ($R,%g)=@_;                     # get parameters.
    my@R=@$R;                       # dereference arrayref copy of word lengths.

    if($j=shift @R)                 # get the next word-length.
    {
        s/./$g{$&}--/eg;            # update histogram

        my @C =                     # get a list of suitable words.
        grep { $j==length && h(\%g,$_) }
        @w;

        push(@O,$_),                # append word to output
        g( [@R], %g )               # recurse.
            and return 1            # true: append word we're done.
            or pop @O               # remove word from output
        for @C                      # (for some reason the @C=grep doesn't work here)

        ;0
    } else { 1 }                    # no more words, done!
}

এবং পরিশেষে, এই সাবরুটাইন একটি শব্দ এবং বাক্য হিস্টোগ্রাম দেওয়া হয়। এটি শব্দের জন্য একটি নতুন হিস্টোগ্রাম গণনা করে এবং হিস্টোগ্রাম বাক্য দ্বারা অনুমোদিত হওয়ার চেয়ে সমস্ত বর্ণগুলি প্রায়শই না ঘটে কিনা তা পরীক্ষা করে।

# check if first histogram is within bounds of second
sub h{
    ($y,$z)=@_;
    my%T; $z =~ s/\w/$T{$&}++/eg;    # calc histogram

    $K=1;
    $K &= $T{$_} <= $y->{$_}
    for keys %T;#$_[0];
    $K
}

আপনি sub i/o/g/hএকটি একক ফাইলে অগল্ফড স্নিপেটগুলি ( ) পেস্ট করতে পারেন এবং নীচের পরীক্ষার কোডটি যুক্ত করতে পারেন।

sub t {
    print $i=i(shift),$/,o($i),$/x2;
    %c=%h=@L=@X=@O=();
}

t "Test.";                              # Test.
t "Zulus win.";                         # Zulus win.
t "Happy solstice.";                    # Happy solstice.
t "Abash abel mammal test.";            # Abase alms embalm that.
t "Dovecot flagships oleander.";        # Dangled horoscope festival.
t 'This code requires further golfing.';# Tech deer fighting ferrous liquors.

  • 504 আপডেট করুন : 12 টি বাইট সংরক্ষণ করুন substrএবং এর জন্য একটি পরামিতি sub g

আমি দেখছি, আমার উদাহরণ চুরি! কেবলমাত্র রসিকদের সাথে মজা করা হ'ল হাস্যকর এক্সডি
ইউমেল

@ ইমেল হ্যাঁ, তারা আপনার চেয়ে আলাদা ছিল তাই আমি তাদেরকে অন্তর্ভুক্ত করেছি :-)
কেনে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.