একটি বাক্যটির অন্তর্নিহিত লামা বের করুন


33

আপনার উদ্দেশ্য হ'ল ইনপুট গ্রহণ করা

Pie is good.  I just ate a bunch of pies early this morning.  Actually, it was closer to the afternoon.  Mornings are good.

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

Pie is good.  I just ate a bunch of pies early this morning.  Actually, it was closer to the afternoon.  Mornings are good.
                                            ^                      ^        ^                            ^        ^

সুতরাং অ্যারে দেখতে হবে:

[44, 67, 76, 105, 114]

(যদি আপনার অ্যাপ্লিকেশনটি 0-ভিত্তিক নয় এমন সূচক ব্যবহার করে তবে সংখ্যাগুলি পৃথক দেখাবে That's এটি দুর্দান্ত))

যদি পাঠ্যের কোনও লামা না থাকে তবে অ্যারেটি খালি, শূন্য, নাল বা অপরিজ্ঞাত হওয়া উচিত।

যে কোনও কোড ভাষা গ্রহণ করা হয়। এটি একটি প্রতিযোগিতা, তাই স্বল্পতম অক্ষর জয়!


7
@ দ্য ওয়ার্ল্ডফুফেট আপনি নিজের ব্যবহারকারীর নাম এবং ছবি পরিবর্তন করছেন। এমন একটি সময় ছিল যখন আপনি "ডুরকনব" ছিলেন এবং তাঁর ছবি ছিল। এখন, আপনার ছবিটি একটি ভেড়া। আপনার এটি একটি লামায় পরিবর্তন করা উচিত।
জাস্টিন

1
0-ভিত্তিক বনাম 1-ভিত্তিক সূচক সম্পর্কে কী? আমরা কি কেবল আমাদের ভাষার দ্বারা ব্যবহৃত সূচকগুলি ব্যবহার করতে পারি বা সমস্ত সাবমিশনগুলিকে একটি সম্মেলনের সাথে মিলিত হতে পারে (কোনটি)?
মার্টিন ইন্ডার

1
@ কুইনকুনস মেষরা এতে'২২ 'বলেছে!
Cilan

2
@ দ্যফোবফেট অনেকগুলি গণিতমুখী উপায়: - / (মতলব, ম্যাথমেটিকা, জুলিয়া, আমি আর সম্পর্কে জানি না) ... লুয়া এবং স্মলটালকও। কোড গল্ফিংয়ের সাথে প্রাসঙ্গিকদের মধ্যে একমাত্র ম্যাথামেটিকা ​​হবে তবে সম্ভবত স্ট্রিং ম্যানিপুলেশন কাজের জন্য নয়।
মার্টিন ইন্ডার

3
আপনি কি কেবল এটি করতে চান যা এটি করে বা পুরো প্রোগ্রামটি করে? আপনি কি ইনপুট / আউটপুট কোডটি চান?
জাজম

উত্তর:


11

সিজোম - 33

lel"llama"{1$#)_T+:T\@>}/;]___|=*

এটি 1-ভিত্তিক সূচকগুলি পায় (0-ভিত্তিক আরও 2 বাইট)

ব্যাখ্যা:

lইনপুট থেকে একটি লাইন পড়ে ( qপুরো ইনপুট সহ প্রতিস্থাপন ) প্রতিটি "লামা" চিঠির জন্য ব্লকটি কার্যকর করে
elছোট অক্ষরে রূপান্তর করে বর্তমান স্ট্রিংটি
"llama"{...}/বর্ণের বর্ধনের সূচকটি সন্ধান করে এবং নকলগুলি টি যুক্ত করে (প্রাথমিকভাবে 0), টি আপডেট করে এবং এটি ছেড়ে যায় স্ট্যাক প্রায় অদলবদল আইটেম, এখন আমরা বর্তমান-টি, সূচি, স্ট্রিং আছে স্ট্রিং সূচক থেকে শুরু টুকরা পপ অবশিষ্ট স্ট্রিং একটি অ্যারের মধ্যে তুলে ধরেছেন ইনডেক্স এই বিন্দু আমরা সবাই 1 ভিত্তিক সূচী আছে এ; যদি কোনও চিঠি পাওয়া যায় নি, অ্যারেতে নকল থাকবে। অ্যারের আরও 3 টি অনুলিপি তৈরি করে (2 অ্যারের অনুলিপি সহ) সদৃশগুলি সরান
1$
#
)_
T+:T
\@
>
;
]

___
|
=তুলনা করুন, ডুপ্লিকেট থাকলে
*0 বা তারপরে 1 যদি 0 অনুসারে 1 বা 1 বারে অ্যারের গুণিত হয় resulting


Sourceforge.net/p/cjam/wiki/Homes ভাষা সম্পর্কে আরও তথ্যের জন্য। আমার কাছে নতুন
ট্যাঙ্কোরসাম্যাস

12

পার্ল, 52 বাইট

সমাধানটি ফাংশন হিসাবে সরবরাহ করা হয় যা স্ট্রিংটিকে আর্গুমেন্ট হিসাবে গ্রহণ করে এবং পজিশনের একটি তালিকা প্রদান করে।

  • এক-ভিত্তিক অবস্থান, কেস-সংবেদনশীল অনুসন্ধান, নিউলাইন ছাড়াই: 52 বাইট

    sub l{pop=~/(l).*?(l).*?(a).*?(m).*?(a)/;@+[1..$#+]}

    কেস-সংবেদনশীল অনুসন্ধান প্রশ্নের উদাহরণে একটি খালি অ্যারে প্রদান করে, কারণ প্রথম তিনটি বর্ণের সাথে মিলে যাওয়ার পরে ছোট হাতের অক্ষরটি mইনপুট পাঠ্যে অনুপস্থিত।

  • নতুন লাইনের সমর্থন: + 1 বাইট = 53 বাইট

    sub l{pop=~/(l).*?(l).*?(a).*?(m).*?(a)/s;@+[1..$#+]}

    পাঠ্যটি এখন বেশ কয়েকটি লাইন বিস্তৃত করতে পারে।

  • কেস-সংবেদনশীল অনুসন্ধান: + 1 বাইট = 54 বাইট

    sub l{pop=~/(l).*?(l).*?(a).*?(m).*?(a)/si;@+[1..$#+]}

    এখন প্রশ্নের উদাহরণ সূচী পদের তালিকার প্রতিবেদন করে, তারা হ'ল এক-ভিত্তিক সংখ্যা:

    [45 68 77 106 115]
    
  • শূন্য-ভিত্তিক অবস্থান: + 9 বাইট = 63 বাইট

    sub l{pop=~/(l).*?(l).*?(a).*?(m).*?(a)/si;map{$_-1}@+[1..$#+]}

    প্রশ্নের উদাহরণের জন্য ফলাফল:

    [44 67 76 105 114]
    

Ungolfed:

পরবর্তী রূপগুলি কমবেশি অন্যান্য রূপগুলি অন্তর্ভুক্ত করে।

sub l {
    # pop() gets the last argument 
    pop() =~ /(l).*?(l).*?(a).*?(m).*?(a)/si;
    # the letters inbetween are matched against ".*?",
    # the non-greedy variant of ".*". Thus ".*?"
    # matches only as few as possible characters.
    # The modifier /i controls the case-sensitivity
    # and means ignore case. Without the case matters.
    # Modifier /s treats the string as single line,
    # even if it contains newlines.
    map { $_-1 }   # subtract 1 for zero-based positions
        @+[1..$#+]
    # Array @+ contains the end-positions of the last
    # submatches, and of the whole match in the first position.
    # Therefore the first value is sliced away.
    # @+ is available since Perl 5.6.
}

# test
my @result = l(<<"END_STR");
Pie is good.  I just ate a bunch of pies early this morning.  Actually, it was closer to the afternoon.  Mornings are good.
END_STR
print "[@result]\n";

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

@ ট্রেজকাজ: ইউনিকোড এখানে মোটেও গুরুত্বপূর্ণ নয়: (ক) "লামা" এএসসিআইআই এবং এর চিঠিগুলি কোনও অ-এএসসিআইআই ইউনিকোড চরিত্রের সাথে বা ইউটিএফ -8 এর বাইট উপস্থাপনার সাথে সংঘর্ষে আসে না। (খ) মাল্টি-বাইট এনকোডিংগুলি মাথায় রেখে, প্রশ্নের "সূচক" শব্দটি অপ্রচলিত হবে। সূচি অক্ষরের অবস্থান বা বাইট (সঞ্চয়স্থান) অবস্থানের সাথে সম্পর্কিত হতে পারে। (গ) অক্ষরের অবস্থানগুলির সাথে কোনও এনকোডিং সমর্থন করার অর্থ হ'ল, এনকোডিংটি জানা উচিত এবং অতিরিক্ত যুক্তি হিসাবে সরবরাহ করা প্রয়োজন।
হাইকো ওবারডিক

আপনার প্রথম দুটি সমাধান মুদ্রণ []এবং তৃতীয় প্রিন্টগুলি [ ]আমার জন্য ( দীর্ঘতরগুলি সঠিকভাবে কাজ করে)। আমি "পার্ল, v5.8.8 এমএসএস -৪৮int জন্য নির্মিত" চালাচ্ছি। আপনার কি বাগ আছে বা এটি পার্লের আলাদা সংস্করণে কাজ করে?
টিম এস

@ টিমস .: []প্রথম সমাধানের জন্য সঠিক, Mকেস-সংবেদনশীল অনুসন্ধানে মেলে না। মামলা-সংবেদনশীলতা সম্পর্কে প্রশ্নটি বেশ অস্পষ্ট।
হাইকো ওবারডিক

ঠিক আছে, তাই []প্রথম দুটি জন্য গ্রহণযোগ্য। তবে প্রথম তিনটি সমাধান এখনও আমার পক্ষে সঠিকভাবে কাজ করছে না: আপনি যদি ইনপুট দেন যা সূচকগুলি ফেরত দেয়, এটি ফিরে আসে[ ]
টিম এস

10

সেড, 299 + 1

হ্যাঁ, সেড একটি লামা খুঁজে পেতে পারেন। না, সেড গণিত করতে পারে না। এটি এখন পর্যন্ত দীর্ঘতম উত্তর, 299 + 1 টি অক্ষরে, কারণ আমাকে গুনতে শিখতে হয়েছিল।

এই উত্তরের জন্য বর্ধিত নিয়মিত প্রকাশ ( sed -Eবা sed -r) সহ একটি সেড প্রয়োজন requires আমি ওপেনবিএসডি সেড ব্যবহার করেছি (1) । ইনপুট প্রতি লাইনে একটি স্ট্রিং। (অতএব, স্ট্রিংটিতে একটি নতুন লাইন নাও থাকতে পারে)) আউটপুট সংখ্যার একটি লাইন বা কিছুই নয়।

ব্যবহার (এর জন্য +1 অক্ষর -r):

$ echo 'All arms on all shoulders may ache.' | sed -rf llama.sed
1 2 12 26 30 

উত্স কোড (299 টি অক্ষর):

s/%/z/g
s/(.*)[Aa]/\1%/
s/(.*)[Mm](.*%)/\1%\2/
s/(.*)[Aa]((.*%){2})/\1%\2/
s/(.*)[Ll]((.*%){3})/\1%\2/
s/(.*)[Ll]((.*%){4})/\1%\2/
/(.*%){5}/!d
s/[^%]/z/g
:w
s/(z*)%/\10 z\1/
s/z*$//
s/z0/1/
s/z1/2/
s/z2/3/
s/z3/4/
s/z4/5/
s/z5/6/
s/z6/7/
s/z7/8/
s/z8/9/
s/([0-9]z*)z9/z\10/g
s/(z*)z9/1\10/
/[%z]/bw

প্রোগ্রামটি প্রথমে পাঁচটির সাথে লামার পরিবর্তে %। (সকল %এই প্রোগ্রামে আক্ষরিক আছে।) প্রথম কমান্ড s/%/z/gকোনো পরিবর্তন %করতে zইনপুট লাইনে। পরবর্তী পাঁচটি কমান্ড লামাটিকে সন্ধান করে, সুতরাং সমস্ত কাঁধের সমস্ত বাহুতে ব্যথা হতে পারে। % ll কাঁধে% ay% che এ A %% বাহ্য হয়ে ওঠে যেহেতু প্রত্যেকটি .*লোভী, আমি সর্বদা ডানদিকে লোলাকে খুঁজে পাই : লামা লামা লামায় পরিণত হবে %%%%% । যদি আমি পাঁচটি না পেতে পারি %তবে /(.*%){5}/!dইনপুট লাইনটি মুছে ফেলে এবং পরবর্তী কমান্ডগুলি এড়িয়ে যায়।

s/[^%]/z/gপ্রতিটি ভাষার প্রতিটি অক্ষরের কিন্তু পরিবর্তনগুলি %করতে z। তারপরে আমি একটি লুপ প্রবেশ করি। s/(z*)%/\10 z\1/প্রথম পরিবর্তন %করতে 0, কপি শূন্য বা তার বেশি zথেকে ডানে বামে, এবং আরও এক যোগ zডানদিকে। এটি তাই সংখ্যার zসূচককে সমান করবে। উদাহরণস্বরূপ, zz%zzz%...হয়ে যায় zz0 zzzzzzzz%...কারণ প্রথম %সূচক 2 এ ছিল এবং পরবর্তীটি %সূচক 8 এ রয়েছে। স্ট্রিংয়ের শেষে থেকে s/z*$//অতিরিক্ত zসরানো।

পরবর্তী এগারোটি কমান্ড zপ্রতিটি অপসারণ করে zএবং গণনা থেকে গণনা করে 0। মনে হচ্ছে, মোট ছাত্র zzz0, zz1, z2, 3। এছাড়াও, 1zzzz9হয়ে যায় z1zzz0(পরে 23), বা zzzz9হয়ে যায় 1zzz0(পরে 13)। এই লুপটি অব্যাহত থাকে যতক্ষণ না আরও থাকে %বা থাকে z


1
সিড গণনা করার জন্য +1। সেডের চেয়ে লামাকে গুনতে শেখানো সহজ।
Andreï Kostyrka

9

ফরট্রান - 154 148

ফোর্টরান গল্ফ করাতে সফল হয়, তবে কেবল প্রমাণ করতে যে পার্সিং স্ট্রিংগুলি গণিত ভিত্তিক ভাষায় করা যায়, আমি তা করেছি:

function f result(r);integer::r(5),j=1;do i=1,len(s);if(s(i:i)==a(j:j).or.s(i:i)==b(j:j)) then;r(j)=i;j=j+1;endif;enddo;if(any(r==0))r=0;endfunction

আমি fশেষে থাকা প্রয়োজনগুলি না করে endfunctionএবং এর if(any(r==0))পরিবর্তে ব্যবহার করে কয়েকটি অক্ষর সংরক্ষণ করেছি if(.not.all(r>0))

এটির প্রয়োজন:

  1. s পাঠ্য সহ স্ট্রিং হতে
  2. aলোয়ার কেস পরীক্ষা (যেমন, llama) হতে
  3. bউচ্চতর ক্ষেত্রে পরীক্ষা হতে (যেমন, LLAMA)

সম্পূর্ণ, আন-গল্ফড প্রোগ্রামটি

program find_llama
   character(len=123) :: s = "Pie is good.  I just ate a bunch of pies early this morning.  Actually, it was closer to the afternoon.  Mornings are good."
   character(len=5) :: a="llama",b="LLAMA"

   print *,f()
 contains
   function f result(r)
     integer::r(5),j=1
     do i=1,len(s)
        if(s(i:i)==a(j:j).or.s(i:i)==b(j:j)) then
           r(j)=i
           j=j+1
        endif
     enddo
     if(any(r==0)) r=0
   end function
end program find_llama

আধুনিক ফোর্টরান কমপক্ষে পিচ এবং পুট অঞ্চলে অনুমোদিত। ফরটান চতুর্থ এখনও পাগল গল্ফ খেলতে হবে।
রিক

4
@ ক্লিকরিক: ফোর্টরান চতুর্থটি এমন কিছু যা আমি শিখি নি। নিশ্চিত যে আমি চাই। জোরপূর্বক ইনডেন্টেশন এবং মূলধন সম্পর্কে কিছু আমাকে বিরক্ত করে।
কাইল কানোজ

7

সি # - 119

স্ট্রিং নেয়, অ্যারে আউটপুট দেয়। স্ট্রালে কোনও লামা না থাকলে নাল।

int[]a(string s){var i=0;var o="llama".Select((x,y)=>i=s.IndexOf(x,y>0?i+1:0));return o.All(x=>x>=0)?o.ToArray():null;}

1
+1 এর জন্যx=>x>=0
রিক

আমি অভিভূত. এটির জন্য আমার যে কোনও ধারণার চেয়ে ছোট। আমি খুঁজে পেয়েছি যে আপনি i-1 থেকে আরম্ভ করে এবং .ToArray () -কে। স্টেটমেন্ট স্টেটমেন্টে রেখে নির্বাচন করুনint[]a(string s){var i=-1;var o="llama".Select(x=>i=s.IndexOf(x,i+1)).ToArray();return o.All(x=>x>=0)?o:null;}
Grax32

7

রুবি, 56 65 63

সম্পাদনা করুন : +9 টি অক্ষর যাতে এটি কেস-সংবেদনশীল হয়।

একটি ফাংশন (ল্যাম্বদা, প্রযুক্তিগতভাবে) সংজ্ঞায়িত করে f

f=->s{i=0;'LLAMA'.chars.map{|c|i=s.upcase.index(c,i+1)||break}}

ফেরত পাঠায় nilযদি কোন Llama হয়। এটি যদি [](ফাঁকা অ্যারে) হতে হয় তবে মোট 4 অতিরিক্ত অক্ষরের জন্য ||[]শেষের আগে কেবল যুক্ত করুন ।}

পঠনযোগ্য সংস্করণ:

innerLlama = -> str{
    index = 0;
    str.downcase!
    arr = 'llama'.each_char.map{|char|
        index = str.index(char, index + 1)
        break unless index
    }
    # uncomment this line for empty array on failure
    #arr || []
}

আমি কিছু সময়ের পরে আমার প্রশ্ন সম্পাদনা করার জন্য ক্ষমা চাইছি, তবে আমি কেবল যুক্ত করেছি যে অ্যারে, যদি কোনও লামা না থাকে তবে শূন্য, নাল, খালি বা অপরিজ্ঞাত হতে পারে।
Cilan

21
আপনি একটি ললম্বদা দিয়ে এটা কি?
ম্যাসন হুইলার

@ ডুরকনব কম নম্বর না করে আপকেস ব্যবহার করে দুই বাইট খাটো হতে হবে?
dstarh

@dstarh হাঁ, ধন্যবাদ
Doorknob

আপনি করে সস্তা বাইট কেস-insensitivity একটি পেতে পারেন index(/#{c}/iপরিবর্তে upcase
হিস্টোক্র্যাট

6

সি - 53

এর সাথে সংকলন:

gcc -D L=\"llama\" -D W=\"Lie\ is\ good.\ \ I\ just\ ate\ a\ bunch\ of\ pies\ early\ this\ morning.\ \ Actually,\ it\ was\ closer\ to\ the\ afternoon.\ \ Mornings\ are\ good.\"

আমি এই সংকলন কমান্ডটি সাইগউইনের জিসিসি দিয়ে পরীক্ষা করেছি। অন্যান্য পরিবেশগুলি স্পেসগুলি এবং অন্যান্য বিশেষ অক্ষরগুলি আলাদাভাবে পরিচালনা করতে পারে।

0-ভিত্তিক ফলাফল অ্যারেতে সংরক্ষণ করা হয় r। স্ট্রিংয়ে লামা না থাকলে এর বিষয়বস্তু অপরিজ্ঞাত।

  • সংবেদনশীল (53)

    i,m,r[5];main(){for(;W[i];i++)W[i]==L[m]?r[m++]=i:i;}

  • কেস-সংবেদনশীল (58)

    i,m,r[5];main(){for(;W[i];i++)(W[i]|96)==L[m]?r[m++]=i:i;}


4

জাভাস্ক্রিপ্ট (ECMAScript 6) - 68 টি অক্ষর

(/((((.*l).*l).*a).*m).*a/.exec(s)||[]).map(x=>x.length-1).reverse()

ধরে নেওয়া যায় যে পরীক্ষার স্ট্রিংটি ভেরিয়েবলের মধ্যে রয়েছে s। আপনি যদি এটি কোনও ফাংশনে রূপান্তর করতে চান তবে প্রিপেন্ড করুন f=s=>(অতিরিক্ত 5 টি অক্ষরের জন্য)।

আউটপুট:

[]

কেস সংবেদনশীল - 69 অক্ষর

(/((((.*l).*l).*a).*m).*a/i.exec(s)||[]).map(x=>x.length-1).reverse()

আউটপুট:

[68, 80, 93, 105, 114]

কেস সংবেদনশীল এবং প্রথম মিল - 74 টি অক্ষর

(/((((.*?l).*?l).*?a).*?m).*?a/i.exec(s)||[]).map(x=>x.length-1).reverse()

আউটপুট:

[44, 67, 76, 105, 114]

4

পাইথন, 100

আমি সর্বকালের সবচেয়ে খারাপ গল্ফার। : P: P

@ এক্সনরকে 6 বাইট বন্ধ শেভ করার জন্য ধন্যবাদ

g,n,o='llama',0,[]
for i in s:
 if g:exec("o+=[n];g=g[1:];"*(i.lower()==g[0])+"n+=1")
o*=len(o)>4

o অ্যারে পরে থাকে।

সম্পাদনা : স্থির।

সম্পাদনা 2 : len(g)থেকে g, o==5থেকে o>4@ xnor এর পরামর্শ অনুযায়ী।

সম্পাদনা 3 : @ ওল্ফ্রামএহহ এটি ঠিক করেছে।


2
o*=(len(o)==5)হয় চমৎকার । এটা ভয়াবহ, তবে আমি এটি ভালবাসি!
কেভিনস

আমি মনে করি না যে এই লাইনের বাইরের বন্ধনীগুলি প্রয়োজনীয়। আপনি দুটি অক্ষর অপসারণ করে সেভ করতে পারেন।
ব্যবহারকারী 2357112 মনিকা

@ ব্যবহারকারী 2357112 যে দ্বিতীয় শেষ লাইনে? আমি তাদের সরিয়ে দেব
সিজেফুরে

আমি ধরে নিই sইনপুট স্ট্রিং, তাই না? তাহলে কি s.lowerহওয়া উচিত নয় i.lower? যাইহোক, এই করণীয়
মনিকা পুনরায়

@ ওল্ফ্রামএহ আহ, হ্যাঁ, আগামীকাল ঠিক হয়ে যাবে।
সিজেফুরে

3

পাইথন 71

ইনপুট ধরে s। আউটপুট ইন o

F=s.lower().find
o=F('l'),
for c in'lama':o+=F(c,o[-1]+1),
o*=min(o)>=0

সম্পাদনা: 2 বাইট সংরক্ষণের জন্য তালিকাগুলি থেকে টুপলেস এ পরিবর্তন করা হয়েছে।


1
বুলিয়ানদের দ্বারা তালিকার গুণগুলি মজাদার, তাই না? ; ডি
সিজেফুরে

আমি পছন্দ করি যে আপনি কীভাবে কোনও সমস্যা oগ্রহণের দরকার নেই তা শুরু করার প্রয়োজন o[-1]। হয়তো এটা খাটো যদিও মাত্র শুরু করার জন্য oযেমন [-1]এবং পরে কি করতে o=o[1:]? বিরক্তিকরভাবে, প্রাথমিক -1ট্রিপস oরয়েছে কিনা তা পরীক্ষা করে দেখছি -1
xnor

@ এক্সনর: আমি মনে করি না -1-আইডিয়ার কাজ করা যেতে পারে। অন্তত, আমি সফল হয়নি :-( যাইহোক, আমি tuples থেকে তালিকা পরিবর্তিত 2 বাইট সংরক্ষণ করতে :-)।
পুনর্বহাল মনিকা

2

পাইথন 100

import re
x=input()
print[re.search(r"l.*?(l).*?(a).*?(m).*?(a)",x,re.I).start(i) for i in range(5)]

নমুনা:

in  = Pie is good.  I just ate a bunch of pies early this morning.  Actually, it was closer to the afternoon.  Mornings are good.
out = [44, 67, 76, 105, 114]
in[out] = ['l', 'l', 'a', 'M', 'a']

2

হাস্কেল, ১১১

import Data.Char
l i(a:as)t@(b:bs)|a==b=i:l(i+1)as bs|True=l(i+1)as t
l _ _ _=[]
r s=l 0(map toUpper s)"LLAMA"

Ungolfed:

import Data.Char

llama :: Int -> String -> String -> [Int]
llama i (a:as) t@(b:bs)
  | a==b      = i : llama (i+1) as bs
  | otherwise = llama (i+1) as t
llama _ _ _ = []

runme :: String -> [Int]
runme s = llama 0 (map toUpper s) "LLAMA"

উদাহরণ:

*Main> r "Pie is good.  I just ate a bunch of pies early this morning.  Actually, it was closer to the afternoon.  Mornings are good."
[44,67,76,105,114]

2

মতলব, 61 96

স্ট্রিং অনুসন্ধান করে এবং পরবর্তী চরিত্রের অনুসন্ধানের আগে প্রতিটি ম্যাচ অবধি জিব্বারিশের সাথে সবকিছু প্রতিস্থাপন করে। ছাড়বে sঅনির্ধারিত যদি কোনো শব্দ ঘটবে না।

t='llama';for q=1:5;s(q)=min(regexpi(z,t(q))),z(1:s(q))=0;end

নোট করুন যে ক্ষেত্রে সংবেদনশীলতা অনুমোদিত হলে চারকাউন্টটি হ্রাস করা যেতে পারে।

পূর্বের সংস্করণসমূহ

 try;t='llama';for q=1:length(t);s(q)=find(lower(z)==t(q),1);z(1:s(q))=ones(1,s(q));end;catch;end

স্ট্রিং অনুসন্ধান করে এবং পরবর্তী চরিত্রের অনুসন্ধানের আগে প্রতিটি ম্যাচ অবধি জিব্বারিশের সাথে সবকিছু প্রতিস্থাপন করে। ত্রুটি হ্যান্ডলিং (ট্রাই-ক্যাচ-এন্ড) সম্ভবত ফেলে দেওয়া যেতে পারে, তবে লামা না পাওয়া গেলে প্রোগ্রামটি ক্র্যাশ হয়ে যাবে (তবে এটি প্রয়োজনীয় হিসাবে অপরিবর্তিত হবে)।

বাস্তবায়ন:

>> z='Pie is good.  I just ate a bunch of pies early this morning.  Actually, it was closer to the afternoon.  Mornings are good.';
>> try;t='llama';for q=1:length(t);s(q)=find(lower(z)==t(q),1);z(1:s(q))=ones(1,s(q));end;catch;end
>> s
s =

    45    68    77   106   115

ত্রুটি পরিচালনা ছাড়া:

t='llama';for q=1:length(t);s(q)=find(lower(z)==t(q),1);z(1:s(q))=ones(1,s(q));end

ধারণা মত, চারক্যান্ট কিছুটা হ্রাস করেছেন।
ডেনিস জহেরুদ্দিন

2

ভাষা জাভা

 final int[] wordIndexInSentence(String sentence, String word)
  {
    final int[] returnArr = new int[word.length()];
    int fromIndex = 0;
    word = word.toUpperCase();
    sentence = sentence.toUpperCase();
    for (int i = 0; i < word.length(); i++)
    {
      final char c = word.charAt(i);
      returnArr[i] = sentence.indexOf(c, fromIndex);
      fromIndex = returnArr[i] > 0 ? returnArr[i] + 1 : fromIndex;
    }
    return returnArr;
  }

2

পাইথন (70)

r=[];c=-1
for x in'llama':c=s.lower().find(x,c+1);r+=[c]
r*=1-(-1in r)

আমরা 'llama'পূর্ববর্তী সন্ধানী অক্ষরের অবস্থানের পরে শুরু করে প্রতিটি চরিত্রের সন্ধান করি । যদি কোনও অক্ষর না পাওয়া যায়, cএর ডিফল্ট মান হয়ে যায়, -1সেক্ষেত্রে শেষ লাইনটি rখালি তালিকায় পরিবর্তিত হয়।

সম্পাদনা করুন: এটি 4 টি অক্ষর সংরক্ষণ করে str.find(s,...)হিসাবে আহ্বান করা যেতে পারে Founds.find(...)


2

ওপেনউফুরিয়া, 147 128

আমার দুটি উদাহরণ আছে। প্রথমত: সংক্ষিপ্ততম:

object t=and_bits(gets(0),#DF),L="LLAMA",i=0,X={}for j=1 to 5 do 
i=find(L[j],t,i+1)X&=i 
end for 
if find(0,X) then X={} end if?X

আমি উপরের সি সংস্করণটির মতো "বা" পরিবর্তে "এবং" ব্যবহার করি তবে আমি এটি 126 টি অক্ষরে নামাতে পারি। যাইহোক, এই এছাড়াও স্ট্রিং মিলে যায় ''!-!যেমন llama। অসাধারণ, কিন্তু এখনও একটি সম্ভাব্য ত্রুটি।

object t=or_bits(gets(0),96),L="llama",i=0,X={}for j=1 to 5 do 
i=find(L[j],t,i+1)X&=i 
end for 
if find(0,X) then X={} end if?X

এবং তারপরে নিয়মিত এক্সপ্রেশন ব্যবহার করে সংস্করণ:

include std/regex.e
include std/sequence.e
include std/utils.e
object X=regex:find(new("(?i)(l).*?(l).*?(a).*?(m).*?(a)"),gets(0))
? iff(atom(X),{},vslice(X[2..6],2))

উভয়ই এসটিডিআইএন থেকে ইনপুট নেয় এবং এসটিডিউটে পোস্ট করে।

সম্পাদনা: সংক্ষিপ্ত রেজেক্স উদাহরণ:

include std/regex.e
include std/sequence.e
object X=regex:find(new("(?i)(l).*?(l).*?(a).*?(m).*?(a)"),gets(0))
if atom(X)then?{}else?vslice(X[2..6],2)end if

split/ joinবা explode/ দিয়ে implodeরেজিक्स তৈরি করে কিছু সংরক্ষণ করা সম্ভব , বা ওপেনঅফোরিয়ায় এর সংক্ষিপ্ত সংস্করণ নেই?
পিটার টেলর

ওপেনঅফোরিয়া অক্ষরের স্ট্রিংগুলির সাথে বিভক্ত / যোগদান করতে পারে, তবে এটির সংক্ষিপ্ত উপায়ে করার উপায় আমি দেখতে পাচ্ছি না। আমি নিয়মিত প্রকাশের সাথে খুব ভাল না; এখানে ব্যবহৃত রেজেক্স এই পৃষ্ঠার অন্যান্য উদাহরণগুলির মধ্যে একটি থেকে "অনুপ্রাণিত" (নির্লজ্জভাবে চুরি) হয়েছিল।
টিনসোল্ডার

2

শক্তির উৎস - 121 85

আমি এখনও পাওয়ারশেলের সাথে অনুশীলন করছি, আশা করি এটি আরও উন্নত হতে পারে

এর স্ট্রিং রয়েছে, ফলাফল অ্যারে $ এ

মূল সংস্করণ

$a=@();$w="llama";$n=$c=0;foreach ($i in $s.tochararray()) {if ($i -eq $w[$n]) {$a+=$c;$n+=1} $c+=1};$a*=$a.length -gt 4

Ungolfed

$a=@()
$w="llama"
$n=$c=0
foreach ($i in $s.tochararray()) {
 if ($i -eq $w[$n]) {
  $a+=$c
  $n+=1
 } $c+=1
}
$a*=$a.length -gt 4

@ গোরিককে প্রচুর ধন্যবাদ সহ নতুন সংস্করণ

$a=@();$n=$c=0;[char[]]$s|%{if($_-eq"llama"[$n]){$a+=$c;$n++}$c++};$a*=$a.length-gt4

112 অবধি জিনিসগুলি সংক্ষিপ্ত করতে আপনি সেখানে প্রচুর স্থান সরিয়ে ফেলতে পারেন:$a=@();$w="llama";$n=$c=0;foreach($i in $s.tochararray()){if($i-eq$w[$n]){$a+=$c;$n+=1}$c+=1};$a*=$a.length-gt4
গোরিক

এছাড়াও, আপনি প্রতিস্থাপন করতে পারেন foreach($i in $s.tochararray())সঙ্গে [char[]]$s|%দীর্ঘ পরবর্তী পরিবর্তন হিসাবে, $iএকটি থেকে $_। এটি এটিকে শেভ করে 93:$a=@();$w="llama";$n=$c=0;[char[]]$s|%{if($_-eq$w[$n]){$a+=$c;$n+=1}$c+=1};$a*=$a.length-gt4
গোরিক

$wসম্পূর্ণরূপে চলক অপসারণ করে আরও 5 টি অক্ষর সংরক্ষণ করুন , যেহেতু এটি একবারে একবার ব্যবহৃত হয়েছিল। কেবল এটির মধ্যে ইনলাইন করুন:if($i-eq"llama"[$n])
গোরিক

..এবং, অবশ্যই, আপনার প্রতিস্থাপন +=1s এর সাথে ++গুলি
goric

1

পিএইচপি

এখনও পিএইচপি উত্তর নেই? আমি মনে করি একটি ভাষা ভারি স্ট্রিং-ভিত্তিক কমপক্ষে গণিত-ভিত্তিক কোনওটিকে পরাজিত করতে পারে

function x($s){$i=$j=0;$r=str_split('llama');$s=strtolower($s);while($i<strlen($s)){if($s[$i]==$r[$j]){$r[$j]=$i;$j++;if($j>4)return$r;}$i++;}return[];}

152 ফোর্টরানের বিরুদ্ধে 154, কাজ শেষ হয়েছে: পি

ungolfed

function x($s){
    $i=$j=0;$r=str_split('llama');
    $s=strtolower($s);
    while($i<strlen($s)){
        if ($s[$i]==$r[$j]){
            $r[$j]=$i;
            $j++;
            if($j>4)
                return $r;
        }
        $i++;
    }
    return[];
}

যদি কলার সর্বদা একটি ছোট হাতের স্ট্রিংটি পাস করে তবে এটি 137 এ নেমে যায়


<?আপনার কোডটিকে বৈধ করার জন্য আপনাকে প্রথমে যুক্ত করতে হবে। দুঃখিত ...

1

জাভাস্ক্রিপ্ট, 122 115

function(s,b){z=[];for(i=0;i<5;i++){z.push(b=s.toLowerCase().indexOf("llama"[i],++b))};return z.indexOf(-1)<0?z:[]}

কোনও ফাংশনকে সংজ্ঞায়িত করে যা স্ট্রিংটিকে তার একমাত্র আর্গুমেন্ট হিসাবে গ্রহণ করে (দ্বিতীয় আরগটি সস্তা var) এবং খালি অ্যারে বা 5-এলিমেন্ট অ্যারে দেয় returns

যদি আমি একটি একক চর ভেরিয়েবল ( s) এ ইনপুট নিই এবং অন্য ( b) এ আউটপুট ছেড়ে যাই তবে 108 এ নেমে যাবে :

var b=((z="llama".split('').map(function(a){return (b=s.toLowerCase().indexOf(a,++b))})).indexOf(-1)<0?z:[])

সম্পাদনা করুন: লুপের জন্য অদলবদলের মানচিত্র।


ECMAScript 6 সংস্করণ (81 টি অক্ষর) -b=(z=[].map.call("llama",a=>b=s.toLowerCase().indexOf(a,++b))).indexOf(-1)<0?z:[]
এমটি0

1

রেবোল, 97

f: func[s][a: copy[]foreach n"llama"[if none? s: find s n[return[]]append a index? s s: next s]a]

রেবোল কনসোলে ব্যবহারের উদাহরণ:

>> f "Pie is good.  I just ate a bunch of pies early this morning.  Actually, it was closer to the afternoon.  Mornings are good." 
== [45 68 77 106 115]

>> f "nearly llami"       
== []

>> f "Llama"
== [1 2 3 4 5]

>> f reverse "llama"
== []

রেবোল 1-ভিত্তিক সূচক ব্যবহার করে। []কোনও লামা ক্রম না পাওয়া গেলে খালি তালিকা ফেরত দেয় (কেস সংবেদনশীল)।

Ungolfed:

f: func [s] [
    a: copy []
    foreach n "llama" [
        if none? s: find s n [return []]
        append a index? s
        s: next s
    ]
    a
]

1

এপিএল, 47

+\↑⊃{a s←⍵⋄~⍺∊s:⍬⍬⋄a,←n←s⍳⍺⋄a(n↓s)}/'amall',⊂⍬⍞

সংক্ষিপ্ততম কোড নয়, তবে একটি এপিএল উপায়ে বেশ রেপযুক্ত।

ব্যাখ্যা

'amall',⊂⍬⍞ 6 টি উপাদানের একটি অ্যারে তৈরি করুন: অক্ষরগুলি 'অ্যামল' এবং 2 টি উপাদানের একটি সাববারি, তারা নিজেরাই সাববারে: খালি অ্যারে এবং ইনপুট থেকে পড়া অক্ষরের একটি লাইন।

{...}/... প্রদত্ত ফাংশনটি ব্যবহার করে 6-উপাদান অ্যারে হ্রাস করুন (ডান-ভাঁজ)।

a s←⍵ সূচকগুলির অ্যারে এবং বাকি স্ট্রিংয়ের (শুরুতে খালি অ্যারে এবং সম্পূর্ণ স্ট্রিং)) মধ্যে সঠিক যুক্তিটি বিভক্ত করুন)

~⍺∊s:⍬⍬ যদি স্ট্রিংগুলিতে পরবর্তী অক্ষর না থাকে তবে গণনা বন্ধ করুন এবং খালি অ্যারেটি ফিরিয়ে দিন।

a,←n←s⍳⍺ অন্যথায়, এর অবস্থানটি সন্ধান করুন, এটিকে এন কল করুন এবং সূচকের অ্যারেতে যুক্ত করুন।

a(n↓s) 2 টি উপাদানের একটি অ্যারে তৈরি করুন এবং ফেরত দিন: সূচকগুলির বর্ধিত অ্যারে এবং অবশিষ্ট সাবস্ট্রিং।

+\↑⊃... ভাঁজটির আউটপুট আনপ্যাক করুন, প্রথম উপাদানটি (সূচকের অ্যারে) নিন এবং এটির সাথে স্ক্যান করুন, আপেক্ষিক অফসেটগুলিকে পরমার্থে পরিণত করতে।

উদাহরণ

      +\↑⊃{a s←⍵⋄~⍺∊s:⍬⍬⋄a,←n←s⍳⍺⋄a(n↓s)}/'amall',⊂⍬⍞
All cats meow aloud.
2 3 6 10 15

 

      +\↑⊃{a s←⍵⋄~⍺∊s:⍬⍬⋄a,←n←s⍳⍺⋄a(n↓s)}/'amall',⊂⍬⍞
Some cats purr instead.
 

1

জুলিয়া, 76

জুলিয়া ভাষা ব্যবহার করে আর একটি রেইগেক্স উদাহরণ।

f(s)=(m=match(r"(?i)(l).*?(l).*?(a).*?(m).*?(a)",s);m==nothing?m:m.offsets)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.