একটি স্ট্রিংয়ের "ভাগ্য" নির্ধারণ করুন


35

একটি স্ট্রিং দেওয়া হয়েছে, সেই স্ট্রিংয়ের "ভাগ্য" ফিরিয়ে দিন।

একটি স্ট্রিংয়ের ভাগ্য, যেমন আমি এই চ্যালেঞ্জের উদ্দেশ্যে সম্পূর্ণরূপে তৈরি করেছি, এটি একটি পূর্ণসংখ্যা, এটি নির্ধারিত:

  • একটি স্ট্রিংয়ের জন্য বেস ভাগ্য 1।
  • প্রতিটি পরপর চিঠি শব্দ "ভাগ্যবান" (কেস অবশ), সংখ্যাবৃদ্ধি 2. দ্বারা ভাগ্য সঙ্গে এটি শেয়ারের জন্য উদাহরণস্বরূপ, আপনার STRING "ছিল লু mberjack" বা "SMA CK (আরো" আপনি চাই 4. গুন বিশেষভাবে, 2 consec ধারাবাহিক অক্ষর ভাগ করে নেওয়া)
    • ভাগ করা অক্ষরগুলি একইভাবে পরের ক্রমে থাকতে হবে এটি "ভাগ্যবান" এ প্রদর্শিত হয় তবে একই মানের জন্য শব্দটি যে কোনও জায়গায় শুরু করতে পারে ("লুসি" এর সাথে "সিকি" হিসাবে একই 8 * গুণক রয়েছে)।
    • যদি শব্দটির একাধিক ঘটনা থাকে যেখানে এটি ভাগ্যবানদের সাথে একটানা অক্ষরগুলি ভাগ করে, অক্ষরের দীর্ঘতম ধারাবাহিক স্ট্রিংটি ব্যবহার করুন।
  • যে কোনও চিঠির জন্য এটি ভাগ্য থেকে 2 "বিয়োগ" বিয়োগ শব্দটি ভাগ করে।
    • এটি কোনও ক্রমের সাথে কোনও পরিমাণের সাথে কোনও পরিমাণের মিল করতে পারে। উদাহরণস্বরূপ, স্ট্রিং "nnnnnomeomen" 24 ভাগ্য হারায় (12 টি মিলছে অক্ষর)

উদাহরণ:

luck("lucky")
>>32

2 ^ 5 (পরপর 5 টি অক্ষর) = 32

luck("firetruck")
>>6

2 ^ 3 - 2 (থেকে 3 পরপর চিঠি uck , লক্ষণ সঙ্গে ভাগ করে নেওয়া)

luck("memes")
>>-7

1 - 8 (বেস পরিমাণ, 4 "অদ্বিতীয়" সাথে ভাগ করা)

এটি কোড গল্ফ, সুতরাং কয়েকটি বাইটের সাথে উত্তর জিতল।

আপনি যেভাবে চান ইনপুট এবং আউটপুট করতে পারেন - একটি ফাংশন লিখুন, স্ট্যান্ডার্ড ইনপুট ব্যবহার করুন ইত্যাদি

ফাংশনগুলির জন্য, ধরে নিন যে কোনও তথ্যের ধরণটি সেই ভাষার জন্য অর্থবোধ করবে। (উদাহরণস্বরূপ, জাভাস্ক্রিপ্টে, আপনি একটি পাস Stringএবং একটি ফেরত চাই Number)

সম্পাদনা: আপনি যে কোনও ইনপুট লোয়ারকেস ধরে নিতে পারেন।


8
ভাল লাগলো প্রথম চ্যালেঞ্জ!
অ্যালেক্স এ।

2
প্রোগ্রামটি বড় হাতের ইনপুট গ্রহণ করা উচিত?
বুসুক্সুয়ান

2
@ বুসুকক্সুয়ান ভাল প্রশ্ন - না, এটি বড় হাতের ইনপুট গ্রহণ করার প্রয়োজন নেই।
charredgrass

@ কেট নিশ্চিত না আপনি কী জিজ্ঞাসা করছেন তা আমি যথেষ্ট বুঝতে পেরেছি। তবে আপনি ধরে নিতে পারেন সমস্ত ইনপুট ছোট হাতের হবে এবং আপনার কোনও বড় হাতের ইনপুট ধরার দরকার নেই।
চারডগ্রাস

1
আমরা কি প্রদত্ত ইনপুটটির ভাগ্যের উপরের উপরের বা নিম্ন সীমানাকে ধরে নিতে পারি? উদাহরণস্বরূপ, আমি যে বিট / ডেটা টাইপের সাথে সংক্ষিপ্তসার পেতে পারি তার সংক্ষিপ্ত সংখ্যাটি কী, বা এটি আমার ভাষা যেমন পরিচালনা করতে পারে তত বড়? অর্থাৎ এটি হওয়া int8_t str_luck(const char* str);উচিত বা হওয়া উচিত uint64_t str_luck(const char* str);?
বিড়াল 4

উত্তর:


7

05 এ বি 1 ই , 36 32 28 26 বাইট

Œv'¸éyåiyˆ}}¯é¤go¹'ƒÖ¦Ãg·-

ব্যাখ্যা

Œv         }                  # for each substring of input
  '¸éyåi  }                   # if substring is part of "lucky"
        yˆ                    # add it to global array
            ¯é¤               # get the longest such substring
               go             # raise 2 to its length
                 ¹'ƒÖ¦Ã       # remove all chars from input that isn't in "omen"
                       g·     # get length and multiply by 2
                         -    # subtract
                              # implicitly display

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

আদনানকে ধন্যবাদ 2 বাইট সংরক্ষণ করা


1 শব্দের সংক্ষেপণ এছাড়াও দিয়ে করা যায় ', সুতরাং 26: Œv'¸éyåiyˆ}}¯é¤go¹'ƒÖ¦Ãg·-:) এর জন্য।
আদনান

@ আদনান: অদ্ভুত আমি নিশ্চিত যে আমি চেষ্টা করেছিলাম। দৃশ্যত না. ধন্যবাদ!
এমিগিনা

কেন এই শীর্ষ উত্তর না?
noɥʇʎԀʎzɐɹƆ

7

জাভাস্ক্রিপ্ট (ES7), 123 112 107 বাইট

s=>2**[5,4,3,2,1,0].find((i,_,a)=>a.some(j=>s.includes("luckyL".substr(j,i))))-2*~-s.split(/[omen]/).length

সম্পাদনা: 11 টি বাইটস সংরক্ষণ করে @ টিটাসকে ধন্যবাদ ধরে নিলে যে অক্ষরটি ইনপুটটিতে Lউপস্থিত হবে না। @ অরিওলকে 5 টি বাইট সংরক্ষণ করা হয়েছে। 125 114 109 বাইটের জন্য ES6 সংস্করণ :

f=
s=>(1<<[5,4,3,2,1,0].find((i,_,a)=>a.some(j=>s.includes("luckyL".substr(j,i)))))-2*~-s.split(/[omen]/).length
;
<input oninput=o.textContent=f(this.value)><pre id=o></pre>


আপনি replace([^])পরিবর্তে ব্যবহার করবেন না কেন match([])? আপনি কি 3 বাইট নষ্ট করেন বা এর কোনও কারণ আছে?
তিতাস

@ টিটাস nullম্যাচের ফলাফলটি মোকাবেলায় কতগুলি বাইট খরচ হয় ?
নিল

1
স্ট্রিংয়ের জন্য চারটি, এবং ()এই ক্ষেত্রে একটি জুড়ি ; আপনি যে ছয়টি দিয়ে সাশ্রয় করবেন তা খেয়ে ফেলুন match(/[omen]/)। কৃপা.
টাইটাস

1
@ টিটাস নিশ্চিত নয় যে এটি আপনি কী বোঝাতে চেয়েছিলেন তবে Lসাবস্ট্রারের শেষের দিকে (যা কখনই মূল স্ট্রিংয়ে উপস্থিত হবে না) যুক্ত করে আমাকে বহিরাগত ম্যাচগুলি নিয়ে চিন্তা করতে হবে না এবং আমি [5,4,3,2,1,0]উভয় সময় একই অ্যারে ব্যবহার করতে পারি , একটি বৃহত 13 বাইট সংরক্ষণ!
নীল

1
-2*s.split(/[omen]/).length+2খাটো হয়।
ওরিওল

6

পাইথ, 27 26 28 বাইট

-^2le+k}#"lucky".:Q)yl@"omen

ওপিকে: 1- এর জন্য 1 টি বাইট সংরক্ষণ করা হয়েছে

ব্যাখ্যা:

                                 Implicit Q as input
                .:Q              Find all substrings of input
     +k}#"lucky"                 Filter for substring of "lucky", prepend "" in case of []
    e                            Take last element, which is longest
   l                             Get its length
 ^2                              Raise two to that
                      @"omen"Q   Filter Q for characters in "omen"
                     l           Get length; counts how many characters in "omen" there are
                    y            Double that
-                                Find the difference

এটি এখানে পরীক্ষা করুন


1
আমি Pyth একজন বিশেষজ্ঞ নই কিন্তু আমি বিশ্বাস করি আপনি পরিবর্তন করতে পারেন "omen"শুধু "omenএবং Pyth বুঝতে হবে
charredgrass

@ চার্রেডগ্রাস ওফস, আমার ভুল :-)
বুসুক্সুয়ান

1
অক্ষরগুলি বাদ দিয়ে স্ট্রিংয়ের জন্য কাজ করে বলে মনে হয় না এতে "ভাগ্যবান" রয়েছে। উদাহরণস্বরূপ "মেমস"।
এমিগনা

1
@ এমিগনা আহ। শূন্য কেস আবার .... ধন্যবাদ, এটি স্থির!
বুসুক্সুয়ান

6

রুবি, 91 87 বাইট

String#countফিনিকির ব্যবহার আবারও বন্ধ! (একটি স্ট্রিং পাস করার পরে, এটি পুরো স্ট্রিংয়ের সমস্ত উপস্থিতির পরিবর্তে ফাংশন আর্গুমেন্টে প্রতিটি অক্ষরের সমস্ত উপস্থিতি গণনা করে))

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

->s{2**(z=0..5).max_by{|j|z.map{|i|s[b="lucky"[i,j]]?b.size: 0}.max}-2*s.count("omen")}

একটি সংস্করণ যা STDIN থেকে রেখাগুলি নেয় এবং সেগুলি মুদ্রণ করে: 89 বাইট ( -nপতাকা থেকে 86 +3 )

p 2**(z=0..5).max_by{|j|z.map{|i|$_[b="lucky"[i,j]]?b.size: 0}.max}-2*$_.count("omen")

1
._। যে String#countঅদ্ভুত। এটি ব্যবহারের জন্য +1 (আব)। এছাড়াও এটি getsএকটি ফাংশন চেয়ে ব্যবহার খাটো ?
ডাউনগোট

1
@Downgoat যদি আমি getsআমিও হয়েছে putsতাই এই ক্ষেত্রে, আউটপুট জন্য।
মূল্য কালি

4

রুবি: 100 বাইট

->s{2**(m=0;4.times{|j|1.upto(5){|i|m=[i,m].max if s.match"lucky"[j,i]}};m)-s.scan(/[omen]/).size*2}

/[omen]/এটিকে গল্ফ করার জন্য রেজেক্স হিসাবে চেষ্টা করুন - এটি যে কোনও চরিত্রের সাথে মিলবে এবং |একক অক্ষরগুলির জন্য চেইন শাইনের চেয়ে ব্যবহারিক ব্যবহারে ভাল ।
চার্লাদগ্রাস

3

জাভাস্ক্রিপ্ট - 206 বাইট

r=>{var a="lucky";r:for(var e=5;e>0;e--)for(var n=0;6>n+e;n++){var o=a.substring(n,e+n);if(r.includes(o))break r}for(var t=0,e=0;e<r.length;e++)('omen'.indexOf(r[e])+1)&&t++;return Math.pow(2,o.length)-2*t}

1
আপনি এই শর্তটি পরিবর্তন s[k]=='o'||s[k]=='m'||s[k]=='e'||s[k]=='n'করতে পারেন : এটি দেখতে:"oman".split("").includes(s[k])
অ্যাডিসন

1
পিপিসিজিতে আপনাকে স্বাগতম! বাইট সংরক্ষণের জন্য সাদা স্থান সরিয়ে আপনি এটিকে গলফ করতে পারেন। এছাড়াও, পরিবর্তে (s[k]=='o'||s[k]=='m'||s[k]=='e'||s[k]=='n')আপনি ব্যবহার করতে পারেন ('omen'.indexOf(s[k])+1)(এটি জাভাস্ক্রিপ্ট বলে ধরে নেওয়া)
চার্রেডগ্রাস

টিপস জন্য ধন্যবাদ! এটিকে 237-এ নামা হয়েছে, যদিও দেখে মনে হচ্ছে রুবি জনতা আমাকে মারছে।
ক্রিস্টোফার বার্গডরফ

আরেকটি ছোট জিনিস: আপনি সাধারণভাবে সংক্ষেপে করতে function luck(r)নেমে r=>মাত্র এটি একটি বেনামী ফাংশন, এই সব চ্যালেঞ্জ জন্য প্রয়োজনীয় যে যে ভুলবেন না। এছাড়াও আমি চ্যালেঞ্জটিতে একটি সম্পাদনা করেছি যাতে আপনার কেস সম্পর্কে উদ্বিগ্ন হওয়ার দরকার নেই যাতে আপনি r=r.toLowerCase();
46

পরিবর্তে substringআপনি sliceবিশ্বাস করতে পারেন (এটি পরীক্ষা করুন যদিও আমি নিশ্চিত না)
ডাউনগোট

3

রুবি, 57 বাইট

b=gets.count'omen'
$.+=1while/[lucky]{#$.}/
p 2**$./2-2*b

gets$.পার্শ্ব প্রতিক্রিয়া হিসাবে 1 এ সেট করে, তারপরে আমরা নিয়মিত অভিব্যক্তি না হওয়া পর্যন্ত $.ক্রমাগত ভাগ্যবান চরিত্রগুলির আর মেলে না until


3

হাস্কেল, 99

অন্য পদ্ধতির ... আমি সবেমাত্র ফাংশন আলিয়াসিং সম্পর্কে শিখেছি

import Data.List
s=subsequences
i=intersect
l=length
f n=2^(l$last$i(s"lucky")$s n)-2*l(i n$"omen")

ব্যবহার

f"lucky"
32

f"firetruck"
6

f"memes"
-7

2

গণিত, 86 বাইট

কোড:

2^StringLength@LongestCommonSubsequence[#,"lucky"]-2StringCount[#,{"o","m","e","n"}]&

ব্যাখ্যা:

LongestCommonSubsequenceদীর্ঘতম সংক্ষিপ্ত স্ট্রিংটিকে ইনপুটটিতে সাধারণ দেয় এবং "lucky"StringLengthতার দৈর্ঘ্য দেয়। StringCountইনপুটটিতে থাকা অক্ষরের সংখ্যার সংখ্যা গণনা করে "omen"


2

পাইথন (১৩৯ বাইট)

import itertools as t
s=input()
print 2**max([j-i for i,j in t.combinations(range(6),2)if'lucky'[i:j]in s]+[0])-2*sum(_ in'omen'for _ in s)

আপনি ব্যবহার করে একটি বাইট সংরক্ষণ করতে পারেনfrom intertools import*
wnnmaw

1

টিএসকিউএল, 233 বাইট

Golfed:

DECLARE @t varchar(99)='oluck'

,@z INT=0,@a INT=0,@ INT=1,@c INT=0WHILE @a<LEN(@t)SELECT
@a+=IIF(@=1,1,0),@z=IIF('LUCKY'LIKE'%'+x+'%'and @>@z,@,@z),@c+=IIF(x
IN('O','M','E','N'),2,0),@=IIF(@+@a-1=LEN(@t),1,@+1)FROM(SELECT
SUBSTRING(@t,@a,@)x)x PRINT POWER(2,@z)-@c

Ungolfed:

DECLARE @t varchar(99)='oluck'

,@z INT=0
,@a INT=0
,@  INT=1
,@c INT=0
WHILE @a<LEN(@t)
  SELECT
    @a+=IIF(@=1,1,0),
    @z=IIF('LUCKY'LIKE'%'+x+'%'and @>@z,@,@z),
    @c+=IIF(x IN('O','M','E','N'),2,0),
    @=IIF(@+@a-1=LEN(@t),1,@+1)
    FROM(SELECT SUBSTRING(@t,@a,@)x)x
PRINT POWER(2,@z)-@c

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


1

হাস্কেল ( 134 132 বাইট)

import Data.List
c[]=[]
c s@(_:x)=inits s++c x
l=length
g q=2^(maximum$map(\z->l q-l(q\\z))$c"lucky")-2*(l$intersect q"omen")

কোনও কোড গল্ফার বা হাস্কেল প্রোগ্রামার নয়, তাই এই সম্পর্কে কিছু টিপস পছন্দ করবে।

(উদাহরণ g "firetruck":)


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

1

পাইথন 3, 168 157 152 139 144 136 বাইট

সম্পাদনা: সত্যই সুস্পষ্ট জিনিসগুলি যা আমার আরও সহজে দেখা উচিত ছিল সেগুলি পরিবর্তন করা হয়েছে, এবং কিছুটা কম স্পষ্ট।

সম্পাদনা 2: স্টোপিড (˚n˚)। প্রোগ্রাম ত্রুটি ছুড়েছে। আমি এটা ঠিক করেছিলাম। আসলে না 153 :(

5 বাইট সংরক্ষণ করার জন্য লিকি নুন এবং 13 টি সঞ্চয় করার জন্য জিমিলয়কে ধন্যবাদ 8 বাইট ।

s=input()
p=q=k=len(s)
m=0
while-~p:
 while-~q:m=(m,q-p)[(s[p:q]in"lucky")*q-p>m];q-=1
 p-=1;q=k
print(2**m-2*sum(i in"omen"for i in s))

প্রোগ্রামটি ইনপুটটিতে সমস্ত সম্ভাব্য সাবস্ট্রিংগুলির মধ্য দিয়ে চলেছে (সম্ভবত সম্ভব, কারণ এটি অসম্ভব সাবস্ট্রিংগুলিও গণনা করে, উদাহরণস্বরূপ 8 থেকে 7,), সাবস্ট্রিংটি "ভাগ্যবান" মধ্যে রয়েছে কিনা তা পরীক্ষা করে, তারপরে 2 এর দৈর্ঘ্যকে দৈর্ঘ্য নির্ধারণ করে সাবস্ট্রিংটি বর্তমান মানের চেয়ে বড় হওয়া উচিত। লুপটি কেবলমাত্র একবার ব্যবহার করে সম্ভবত উন্নতি করা যেতে পারে। সম্ভবত কিছু উন্নতি ব্যবহার করতে পারে; আমি এখনও এই ঝুলন্ত পেতে পারি।


while p+1হয়ে যায়while-~p
ফুটো নুন

যেহেতু b=s[p:q], ঠিক len(b)থাকতে হবে q-p?
ফুটো নুন

আমি আপনাকে ইনপুট এবং মুদ্রণ পদ্ধতি চুরি করেছি তবে বাকিগুলি খুব আলাদা করেছি, ধন্যবাদ! আমি মনে করি আপনি যদি print(2**m-2*sum(i in"omen" for i in s))আপনার শেষ তিনটি লাইনের জন্য 148 এর মতো করেন তবে আপনি আরও ভাল করতে পারবেন?
jmilloy

ওহ, এবং আপনি while-~q:n=q-p;m=n if(s[p:q]in"lucky")*n>m else m;q-=1143 এর জন্য যদি কেবল ক্লজ [p: q] এ সরাতে পারেন ?
jmilloy

sum(map(s.count,"omen"))একটি বাইট সংরক্ষণ করে, এটি তৈরি করে 135
ব্ল্যাক আউল কাই

1

পিএইচপি প্রোগ্রাম, 139 135 108 বাইট

কোয়ান্টাম লিপ একাধিক সাবস্ট্রিংয়ের জন্য ব্যর্থ হয় যেখানে প্রথম ঘটনাটি সংক্ষিপ্ত হয়। :(

প্রকৃতপক্ষে আমি পিএইচপি <5.4 এ আরও 7 বাইট সংরক্ষণ করতে পারি নিবন্ধক_গ্লোবালগুলি সহ

<?for($s=$argv[1];$i<5;$i++)for($j=6;--$j;)$r=max($r,strstr($s,substr('lucky*',$i,$j))?2**$j:1);echo$r-2*preg_match_all('/[omen]/',$s);

ব্যবহার: php -d error_reporting=0 <filename> <string>

একটি কার্যের জন্য +5:

function f($s){for(;$i<5;$i++)for($j=6;--$j;)$r=max($r,strstr($s,substr('lucky*',$i,$j))?2**$j:1);return$r-2*preg_match_all('/[omen]/',$s);}

পরীক্ষা (ফাংশনে)

echo '<table border=1><tr><th>input</th><th>output</th><th>expected</th><th>ok?</th></tr>';
foreach([
    'lumberjack'=>0,        'smack'=>2,
    'nnnnnomemenn'=>-23,    'lucky'=>32,
    'omen'=>-7,             'firetruck'=>6,
    'memes'=>-7,            'determine the “luck” of a string'=>0,
    'amazing'=>-3,          'wicked'=>2,
    'chucky'=>16,           'uckyuke'=>14,
    'ugly'=>2,              'lucy'=>8,
    'lukelucky'=>30
] as $x=>$e){
    $y=f($x);
    echo"$h<tr><td>",$x,'</td><td>',$y,'</td><td>',$e,'</td><td>',$e==$y?'Y':'N',"</td></tr>";
}echo '</table>';


0

স্কালা, 155 বাইট

def f(w:String)=(1::List.fill((for(a<-1 to 5;s<-"lucky".sliding(a))yield if(w.contains(s)) a else 0).max){2}).product-2*w.filter("omen".contains(_)).length
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.