একটি ক্রিয়া লিখুন যা প্রদত্ত ক্রিয়াটির অতীত কালকে ফিরিয়ে দেয়


14

চ্যালেঞ্জ

একটি ক্রিয়া লিখুন যা একটি আর্গুমেন্ট গ্রহণ করে যা একটি ক্রিয়া, এবং ক্রিয়াটির অতীত কালকে ফিরিয়ে দেয়। (ধরুন ক্রিয়াটি নিয়মিত)

অতীত কাল

দ্রষ্টব্য: y কে ব্যঞ্জনা বা স্বরবর্ণ হিসাবে বিবেচনা করুন।

সাধারণত, কেবল যোগ করা ed ক্রিয়াপদের সমাপ্তির পরে করার ফলে ক্রিয়াটির অতীত কাল হয়ে যায়।

উদা: jumpjumped,askasked

তবে, অন্যান্য নিয়ম আছে।

  • প্রদত্ত ক্রিয়াটির সর্বশেষ অক্ষর হলে eকেবল যুক্ত করুনd

    উদাঃ loveloved,movemoved

  • যদি ক্রিয়াটি ব্যঞ্জনবর্ণ + সহ সমাপ্ত হয় yতবে পরিবর্তিত yহয়ে iযুক্ত করুন ed

    উদাঃ studystudied,crycried

  • তবে, যদি ক্রিয়াটি একটি স্বর + দিয়ে শেষ হয় yতবে কেবল যোগ করুন ed

    উদাঃ playplayed,staystayed

  • স্বর এবং ব্যঞ্জনবর্ণের সাহায্যে যদি কোনও ক্রিয়া সমাপ্ত হয় তবে ব্যঞ্জনবর্ণকে আরও একবার লিখুন এবং যুক্ত করুন ed

    উদাঃ stopstopped,planplanned

  • তবে, যদি কোনও ক্রিয়াটি একাধিক স্বর + একটি ব্যঞ্জনবর্ণ বা একক স্বর + একাধিক ব্যঞ্জনবর্ণের সাথে সমাপ্ত হয় তবে কেবল যুক্ত করুন ed

    উদাঃ looklooked,jumpjumped

আরও নিয়ম আছে তবে আসুন কেবল নিয়মের উপরে নজর দেওয়া উচিত। উদাহরণস্বরূপ, উপরোক্ত নিয়ম অনুসারে, visitvisitted

বিজয়ী

যেহেতু এটি কোড গল্ফ, সেই সংক্ষিপ্ততম কোড যা সঠিকভাবে অতীতকালীন জয়গুলি ফেরত দেয়।

উদাহরণ (জেএস, 127)

function f(x){return x.replace(/([^aeiouy])y$/,'$1i').replace(/([^aeiouy][aeiou])([^aeiouy])$/,'$1$2$2').replace(/e$/,'')+'ed'}


এখন এটি একটি দুর্দান্ত চ্যালেঞ্জ।
FUZxxl

উল্টো স্টেমিং! মজাদার! আমি ঘরে ফিরে এসে চেষ্টা করার চেষ্টা করব :)
ডালালোসা

1800 টির চেয়ে কম সংখ্যক সংক্ষিপ্ত সমাধানের সমাধান (অনিয়মিত ক্রিয়াগুলি) is
Quantary

@ গুপ্তচরিত কারণেই আমি বলেছিলাম '(ক্রিয়াটি নিয়মিত মনে করুন)'
জিমিনপি

@ গুপ্তচর: একেবারে সত্য নয় ... দেখুন বেলারিসিয়াসের উত্তর
সাইমন

উত্তর:


6

সেড, 76 টি অক্ষর

একটি সেড স্ক্রিপ্ট কি এই সমস্যার জন্য একটি কার্য হিসাবে গণনা করে?

s/\([^aeiou]\)y$/\1i/
s/\([^aeiou][aeiou]\)\([^aeiouy]\)$/\1\2\2/
s/e\?$/ed/

4

গণিত 43 টি চর

f=WordData[#,"InflectedForms","List"][[1]]&

ব্যবহার:

f /@ {"call", "try", "use", "wash", "play", "stop", "look"}

{"called", "tried", "used", "washed", "played", "stopped", "looked"}

এছাড়াও:

f /@ {"buy", "run", "swim"}

{"bought", "ran", "swam"}

আপনি কি মনে করেন না যে কোনও অভিধান চেহারা কি প্রতারণা করছে? :-)
সাইমন

3
@ সিমন অবশ্যই না ওয়ার্ডডেটা ভাষার অংশ :)
ডঃ বেলিসারিয়াস

3

গ্রোভি - 111 টি অক্ষর

v={it==~'[aeiou]'};p={s->r=s[0..-2];a=s[-1];b=v s[-2];(a=='e'?r:a=='y'?!b?r+'i':s:v(s[-3])|!b|v(a)?s:s+a)+'ed'}

assert ['jump', 'ask', 'love', 'move', 'study', 'cry', 'play', 'stay', 'stop', 'plan', 'look'].collect { p(it) } == ['jumped', 'asked', 'loved', 'moved', 'studied', 'cried', 'played', 'stayed', 'stopped', 'planned', 'looked']

2

পার্ল 5 (82 টি অক্ষর):

sub f{$_=pop;$C='[^aeiouy]';s/($C)y$/$1i/;s/($C[aeiou])($C)$/$1$2$2/;s/e?$/ed/;$_}

আমি নিশ্চিত যে এটি উন্নত করা যেতে পারে।


2

সি - 120 119 টি অক্ষর

টিপিক্যাল সি স্টাইলে, ফাংশন এফ একটি স্ট্রিং বাফার আপডেট করে, ধরে নিই যে কলার তিনটি অতিরিক্ত অক্ষরের জন্য পর্যাপ্ত জায়গা সংরক্ষণ করেছেন। দ্বিতীয় যুক্তিটি 0 হিসাবে দেওয়া উচিত। বিশ্বব্যাপী রাষ্ট্র পরিবর্তনশীলের ঘোষণাকে lমোট অক্ষর গণনার অন্তর্ভুক্ত করা হয়েছে।

#include <stdio.h>
#include <string.h>

l;void f(b,i)char*b;{*b?f(b+1,i/2+4*!strchr("aeiouy",l=*b)):(i-5?*--b=l=='y'&i/2?'i':l:(*b=l),strcpy(b+=l!='e',"ed"));}

int main()
{
  char b[10000];
  while (gets(b)) {
    f(b,0);
    puts(b);
  }
  return 0;
}

ব্যাখ্যা: ফাংশনটি পুনরাবৃত্তভাবে অক্ষরগুলির উপরে পুনরাবৃত্তি করে। দ্বিতীয় iতর্কটি এনকোড করে আগের তিনটি অক্ষরের মধ্যে কোনটি তার নীচে তিনটি বিটগুলিতে ব্যঞ্জনবর্ণ ছিল। স্ট্রিংয়ের শেষে, যদি i==5শেষ তিনটি অক্ষর ব্যঞ্জনবর্ণ, একটি স্বর এবং একটি ব্যঞ্জনবর্ণ ছিল এবং সুতরাং শেষ অক্ষরটি অবশ্যই নকল করা উচিত। একইভাবে, যদি বিটের 1 টি iনির্দেশ করে যে দ্বিতীয় থেকে শেষের অক্ষরটি ব্যঞ্জনবর্ণ ছিল এবং শেষ অক্ষরটি 'y' হয়, তবে 'y' এর পরিবর্তে 'y' স্থানান্তরিত হবে।


1

স্কেলা 199 273 অক্ষর

def v(c:Char)="aeiouy" contains c
def p(o:String)={val s=o.reverse
if(s(0)=='e')o+"d"else
if(!v(s(1))&& s(0)=='y')o.replaceAll("y$","ied")else
if(!v(s(0))&& v(s(1))&& !v(s(2)))o+s(0)+"ed"else
o+"ed"}

আবাহন:

val li = List ("move", "cry", "plan", "play", "look")
li map p

If-else-cascade কে একটি তালিকায় => কোনও ফাংশনে নিয়ে গিয়ে আমার প্রথম পদ্ধতির অবস্থানটি অনেক দীর্ঘ ছিল:

type S=String
def f(l:List[(Boolean,S)]):S=if(l(0)._1)l(0)._2 else f(l.tail)
def v(c:Char)="aeiouy" contains c
def c(o:S)={val s=o.reverse
f(List((s(0)=='e',o+"d"),(!v(s(1))&& s(0)=='y',o.replaceAll("y$","ied")),(!v(s(0))&& v(s(1))&& !v(s(2)),o+s(0)+"ed"),(true,o+"ed")))}

হতে পারে পদ্ধতির আকর্ষণীয়। ডিগল্ফড এবং ব্যাখ্যা করেছেন:

// just for shortening
type S=String
/* take a list of Booleans and Strings, and return early
   if a Boolean is true. This approach would work, 
   if there where much more conditions, I guess.
*/
def doFirst (list: List[(Boolean, S)]): S =
  if (list(0)._1) list(0)._2 else doFirst (list.tail)
// vocal - is it a vocal
def v(c:Char)="aeiouy" contains c
// here is the key function
def toPast(o:S)={
  // reversing the String allows easy access to the last elements, 
  // without considering how long the string is.
  val s=o.reverse
  doFirst (List (
    (s(0)=='e', o+"d"),
    (!v(s(1)) && s(0)=='y', o.replaceAll("y$","ied")),
    (!v(s(0)) && v(s(1)) && !v(s(2)), o+s(0)+"ed"),
    (true, o+"ed")
  ))}

0

রুবি, 101 টি অক্ষর

সম্ভবত আরও ছোট হতে পারে।

def f x;x.sub(/([^aeiouy])y$/,'\1i').sub(/([^aeiouy][aeiou])([^aeiouy])$/,'\1\2\2').sub(/e$/,'')+'ed';end

ব্যবহার:

f("try")  #=> "tried"
f"call"   #=> "called"

f=->(x){...}সংক্ষিপ্ত কোড পেতে রুবি 1.9 ল্যাম্বদা সিনট্যাক্স ব্যবহার করুন । এছাড়াও aeiouyআইএমএইচওর একটি ধ্রুবক হওয়া উচিত।
হাউলেথ


0

পাইথন - 147

ডিফ এফ (ভি): টি, এক্স, এম = 'আইইউ', "এডি", ভি [-1]; টি এবং এম তে ফিরে [[[ভি + এক্স, ভি + এম + এক্স] [ভি [-2] এবং ভি [-3] টি তে নেই, [ভি + এক্স, ভি [: - 1] + "আইইডি"] [ভি [-২] টি তে নেই]] [এম == 'ইয়'], ভি + "ডি "] [মি == 'ই']  
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.