সংক্ষিপ্ততম পেংরাম্যাটিক উইন্ডো


15

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

সুতরাং, আমরা তার অক্ষরের দৈর্ঘ্যের উপর ভিত্তি করে প্রদত্ত পাঠ্যের একটি ছোট্ট অংশটি খুঁজে পেতে আগ্রহী! থিমটি মাপসই করার জন্য অবশ্যই বাইটগুলির মধ্যে সংক্ষিপ্ততম কোডে।

বিধি এবং নির্দেশিকা

  • ইনপুট হিসাবে একটি স্ট্রিং পান এবং ইনপুটটিতে ক্ষুদ্রতম পেঙ্গামাম্যাটিক উইন্ডোটির স্ট্রিং যদি থাকে তবে তা ফিরিয়ে দিন। যদি তা না থাকে তবে বুলিয়ান ফ্যালস বা খালি স্ট্রিংটি ফেরত দিন।
  • কোনও স্ট্রিং প্যাংরাম্যাটিক উইন্ডো হোক বা না তা কেস-সংবেদনশীল এবং কেবল ২ 26 টি বর্ণের উপর নির্ভর করে, কোনও বিরামচিহ্ন বা সংখ্যা বা অন্যান্য বিজোড় প্রতীক নয়।
  • একইভাবে, একটি পেঙ্গামাম্যাটিক উইন্ডোটির অক্ষরের দৈর্ঘ্য হ'ল কেবলমাত্র এতে অক্ষরের কতগুলি উপস্থিতি দেখা যায় এবং কেবলমাত্র প্রতিটি চরিত্রের সংখ্যা নয় the প্রত্যাবর্তিত মানটি অবশ্যই এই গণনার উপর ভিত্তি করে ক্ষুদ্রতম হতে হবে। আমরা ভাষাবিদ, সর্বোপরি, প্রোগ্রামার নই।
  • পেঙ্গ্রাম্যাটিক উইন্ডোটির আউটপুট অবশ্যই অবশ্যই ইনপুটটির একটি সঠিক স্তর হতে হবে, একই মূলধন এবং বিরামচিহ্ন ইত্যাদি containing
  • যদি একই বর্ণের দৈর্ঘ্যের একাধিক সংক্ষিপ্ততম পেংরাম্যাটিক উইন্ডো থাকে তবে সেগুলির যে কোনও একটিকে ফিরিয়ে দিন।

পরীক্ষার কেস

'This isn't a pangram.'
==> False

'Everyone knows about that infamous Quick-Brown-Fox (the one who jumped over some lazy ignoramus of a dog so many years ago).'
==> 'Quick-Brown-Fox (the one who jumped over some lazy ig'

'"The five boxing wizards jump quickly." stated Johnny, before beginning to recite the alphabet with a bunch of semicolons in the middle. "ABCDEFGHI;;;;;;;;;;;;;;;JKLMNOPQRSTUVWXYZ!" he shouted to the heavens.'
==> 'ABCDEFGHI;;;;;;;;;;;;;;;JKLMNOPQRSTUVWXYZ'

1
সর্বশেষ পরীক্ষার মামলার জন্য কেন The five boxing wizards jump quicklyফিরে আসেনি?
নীল

1
দ্বিতীয় কেসটির জন্য, আপনি কি পূর্ববর্তী স্থানটির অনুমতি দিচ্ছেন Q? এটি লেটার কাউন্টে যোগ করে না।
নিল

2
@ মুডিফিশ কারণ এটির 31 টি বর্ণ রয়েছে, যেখানে প্রত্যাশিত আউটপুটটি কেবল 26 টি
মার্টিন ইন্ডার

4
প্রথম প্রথম প্রশ্ন!
Rɪᴋᴇʀ

2
হাঁ। কোন কারণেই এটি হওয়া উচিত নয়। "সত্য" ন্যূনতম গ্রহণ এর আত্মা প্রশ্নই, কিন্তু এটা প্রয়োজনীয় নয়।
রিসার 6

উত্তর:


6

পাইথ, 20 16 14 বাইট

hol@GNf!-GrT0.:

ব্যাখ্যা:

             .: - substrings of input()
      f!-GrT0   - filter to ones which contain the alphabet
 ol@GN          - sort by number of alphabetical chars
h               - ^[0]

      f!-GrT0   - filter(lambda T:V, substrings)
          rT0   -    T.lower()
        -G      -   alphabet-^
       !        -  not ^

 o              - sort(^, lambda N:V)
   @GN          -   filter_presence(alphabet, N)
  l             -  len(^)

এখানে চেষ্টা করুন!

যখন কোনও সঠিক সমাধান নেই, প্রোগ্রামটি stdout না দিয়ে কোনও ত্রুটি সহ প্রস্থান করে।


আপনি প্রথম কোড ব্লকে কোডটি আপডেট করেননি বলে মনে হচ্ছে। এছাড়াও !-GrT0ফিল্টার অবস্থার জন্য খাটো, আমি বিশ্বাস করি। আমি আরও মনে করি lসঠিকভাবে সাজানোর কাজটি করার জন্য আপনার দরকার need
FryAmTheEggman

ওহ, আমি ভুল কথা বলি, আমি লিঙ্কটি বোঝাতে চাইছি। আপনার লিঙ্কটিতে এখনও রয়েছে lএবং এটি ছাড়া আপনি বিভিন্ন ফলাফল পান । আমি বিশ্বাস করি যে সমস্যাটি বারবার অক্ষরগুলি হয়, তবে আমি 100% নিশ্চিত নই।
FryAmTheEggman

সুতরাং এটি গুরুত্বপূর্ণ - এবং অপ্টিমাইজেশনের জন্য ধন্যবাদ!
নীল


2

রুবি, 100 বাইট

উইন্ডো না পাওয়া গেলে শূন্য দেয়।

->s{r=0..s.size
(r.map{|i|s[i,r.find{|j|(?a..?z).all?{|c|s[i,j]=~/#{c}/i}}||0]}-['']).min_by &:size}

2

জাভাস্ক্রিপ্ট (ES6), 139 138 136 বাইট

s=>[r=l="",...s].map((_,b,a)=>a.map((c,i)=>i>b&&(t+=c,z=parseInt(c,36))>9&&(v++,n+=!m[z],m[z]=n<26||l&&v>l||(r=t,l=v)),t=m=[],v=n=0))&&r

সংরক্ষিত 2 বাইট @ নীলকে ধন্যবাদ!

সংভৃত

var solution =

s=>
  [r=l="",...s].map((_,b,a)=> // b = index of start of window to check
    a.map((c,i)=>
      i>b&&(
        t+=c,
        z=parseInt(c,36)
      )>9&&(
        v++,
        n+=!m[z],
        m[z]=
          n<26||
          v>l&&l||(
            r=t,
            l=v
          )
      ),
      t=m=[],
      v=n=0
    )
  )
  &&r
<textarea cols="70" rows="6" id="input">Everyone knows about that infamous Quick-Brown-Fox (the one who jumped over some lazy ignoramus of a dog so many years ago).</textarea><br /><button onclick="result.textContent=solution(input.value)">Go</button><pre id="result"></pre>


আপনি ব্যবহার করতে পারবেন না [r=l="",...s].map((_,b,a)=>?
নিল

@ নীল ধন্যবাদ, আমি mapফাংশনের তৃতীয় প্যারামিটারটি সম্পর্কে সর্বদা ভুলে যাই ।
ব্যবহারকারী 81655

আমি মনে করি @ এডসি 65 এটি পরাজিত করতে পারে তবে আমি তার বিস্ফোরিত সাবস্ট্রিংগুলির কোডটি তার পানগ্রাম পরীক্ষকের জন্য মিশ্রিত করে এবং 134 বাইট ফাংশন দিয়ে শেষ করেছি।
নিল

আমার সেরা এখনও পর্যন্ত 142
edc65

দুর্ভাগ্যক্রমে আমি এটি সংরক্ষণ করার জন্য ভাবি নি এবং আমার পিসি ক্র্যাশ হয়েছিল তাই এখন আমি জানি না আমার কী ছিল; আমি এখন যা করতে পারি তা হ'ল 138 বাইট।
নিল

2

পাওয়ারশেল ভি 2 + 218 বাইট

param($a)$z=@{};(0..($b=$a.length-1)|%{($i=$_)..$b|%{-join$a[$i..$_]}})|%{$y=$_;$j=1;65..90|%{$j*=$y.ToUpper().IndexOf([char]$_)+1};if($j){$z[($y-replace'[^A-Za-z]').Length]=$y}}
($z.GetEnumerator()|sort Name)[0].Value

হ্যাঁ, সুতরাং ম্যানিপুলেশন সাবস্ট্রিং (কোনও বিল্ট-ইন নেই) আসলে পাওয়ারশেলের শক্ত মামলা নয় ...

আমরা ইনপুট নিই param($a) নিই এবং একটি নতুন খালি হ্যাশটেবল সেট করি$z । এটি আমাদের প্রার্থী প্যাংরাম্যাটিক সাবস্ট্রিংয়ের সঞ্চয়স্থান হবে।

বিস্ফোরিত সাবস্ট্রিংগুলি থেকে আমার কোডের একটি সামান্য পরিবর্তন ব্যবহার করে আমরা ইনপুটটির সমস্ত সাবস্ট্রিংগুলি তৈরি করি। হ্যাঁ, এমনকি এক-চরিত্রের বিরামচিহ্ন-কেবল সাবস্ট্রিংগুলি। এটি , না । ;-)

এই সমস্ত সাবস্ট্রিংগুলি প্যারেন্সে আবদ্ধ হয় এবং এর সাথে অন্য লুপে পাইপ হয় |%{...}। আমরা অস্থায়ীভাবে $yআমাদের বর্তমান সাবস্ট্রিংয়ে সেট হয়েছি , একটি সহায়ক কাউন্টার স্থাপন করেছি $jএবং 65..90|%{...}বড় বড় অক্ষরের জন্য ASCII চার কোডগুলির সুবিধার্থে অন্য লুপটি শুরু করি । প্রতিটি অভ্যন্তরীণ লুপ, আমরা তা গ্রহণ করি $yএবং এটি সমস্ত বড় হাতের তৈরি করি এবং .IndexOfসেই নির্দিষ্ট চরটি টান । যেহেতু -1এটি পাওয়া না গেলে এটি ফিরে আসবে , আমরা +1এটিতে গুণিত করার আগে ফলাফল$j । এটি নিশ্চিত করে যে কোনও একটি অক্ষর না পাওয়া গেলে $jশূন্যের সমান হবে।

যা হ'ল ঠিক সেটাই ifসম্পর্কে। যদি $jশূন্য-না হয়, তার অর্থ হ'ল প্রতিটি চিঠিটি অন্তত একবার স্ট্রিংগুলিতে পাওয়া গিয়েছিল $y, সুতরাং আমাদের এটি আমাদের প্রার্থী পুলে যুক্ত করা দরকার। আমরা প্রতিটি অ-অক্ষরকে কিছুই দিয়ে না নিয়ে $yএবং -replaceএইগুলি দ্বারা করি , যা আমাদের সেই স্ট্রিংয়ের অক্ষর-দৈর্ঘ্য লাভ করে। আমরা হ্যাশটেবল $zএবং স্টোরের সূচক হিসাবে এটি ব্যবহার করি$y সেই সূচীতে । এটিতে একই অক্ষরের দৈর্ঘ্যের সাবস্ট্রিংগুলিকে মূল স্ট্রিংয়ে "সর্বাধিক" দেখা যায় এর সাথে ওভাররাইটিংয়ের গণ্ডগোল রয়েছে তবে এটি নিয়ম দ্বারা অনুমোদিত, যেহেতু আমরা কেবলমাত্র অক্ষরের দৈর্ঘ্যের বিষয়ে উদ্বিগ্ন।

শেষ অবধি, আমাদের এর মধ্যে বাছাই করতে হবে $zএবং সবচেয়ে ছোটটি বের করতে হবে। অভ্যন্তরীণ বস্তুগুলিকে.GetEnumerator বাছাই করার জন্য আমাদের কলটি ব্যবহার করতে হবে , তারপরে সেগুলি (অর্থাত্ দৈর্ঘ্য সূচকটি উপরের দিক থেকে) বেছে নিন এবং তার (অর্থাত্ সংক্ষিপ্ততম) নির্বাচন করুন এবং এর (অর্থাত্ স্তরটি) আউটপুট করুন । যদি এ জাতীয় কোনও স্ট্রিংটি ফিট না করে তবে এটি ইনডেক্স করার চেষ্টা করার সময় একটি ত্রুটি টস করবে ( ) এবং কিছুই আউটপুট দেবে না, যা পাওয়ারশেলের ক্ষেত্রে মিথ্যা। (নীচের তৃতীয় পরীক্ষার কেসটি এটি দেখানোর ক্ষেত্রে একটি স্পষ্ট কাস্ট রয়েছে ) $zsortName[0].ValueCannot index into a null array$z[bool]

পরীক্ষার কেস

PS C:\Tools\Scripts> .\golfing\shortest-pangrammatic-window.ps1 '"The five boxing wizards jump quickly." stated Johnny, before beginning to recite the alphabet with a bunch of semicolons in the middle. "ABCDEFGHI;;;;;;;;;;;;;;;JKLMNOPQRSTUVWXYZ!" he shouted to the heavens.'
ABCDEFGHI;;;;;;;;;;;;;;;JKLMNOPQRSTUVWXYZ!" 

PS C:\Tools\Scripts> .\golfing\shortest-pangrammatic-window.ps1 'Everyone knows about that infamous Quick-Brown-Fox (the one who jumped over some lazy ignoramus of a dog so many years ago).'
Quick-Brown-Fox (the one who jumped over some lazy ig

PS C:\Tools\Scripts> [bool](.\golfing\shortest-pangrammatic-window.ps1 "This isn't a pangram.")
Cannot index into a null array.
At C:\Tools\Scripts\golfing\shortest-pangrammatic-window.ps1:2 char:1
+ ($z.GetEnumerator()|sort Name)[0].Value
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NullArray

False

2

হাস্কেল, 180 বাইট

এটি কঠিন ছিল, তবে আমদানি ছাড়াই সত্যই মজাদার।

l=['a'..'z']
u=['A'..'Z']
f&[]=[];f&x=x:f&f x
g#h=(.g).h.g
f x|v<-[y|y<-(tail&)=<<(init&x),and$zipWith((`elem`y)#(||))l u]=last$[]:[z|z<-v,all((length.filter(`elem`l++u))#(<=)$z)v]

অনেক কম গল্ফড:

lowerCase = ['a'..'z']
upperCase = ['A'..'Z']

f & x = takeWhile (not . null) $ iterate f x

(#) = flip on

subStrings x = (tail &) =<< (init & x)

pangram p = and $ zipWith ((`elem` p) # (||)) lowerCase upperCase

leqLetters x y = (length . filter (`elem` lowerCase ++ upperCase)) # (<=)

fewestLetters xs = [ x | x <- xs, all (leqLetters x) xs]

safeHead [] = ""
safeHead xs = head xs

f x = safeHead . fewestLetters . filter pangram . subStrings

আশ্চর্য, অবাক: সত্যিই এটি ধীর।


2

ওরাকল এসকিউএল 11.2, 461 বাইট

WITH s AS (SELECT SUBSTR(:1,LEVEL,1)c,LEVEL p FROM DUAL CONNECT BY LEVEL<=LENGTH(:1)),v(s,f,l)AS(SELECT c,p,p FROM s UNION ALL SELECT s||c,f,p FROM v,s WHERE p=l+1),c AS(SELECT CHR(96+LEVEL)c FROM DUAL CONNECT BY LEVEL<27),a AS(SELECT LISTAGG(c)WITHIN GROUP(ORDER BY 1) a FROM c)SELECT MIN(s)KEEP(DENSE_RANK FIRST ORDER BY LENGTH(s)-NVL(LENGTH(TRANSLATE(LOWER(s),' '||a,' ')),0))FROM(SELECT s,f,SUM(SIGN(INSTR(LOWER(s),c)))x FROM v,c GROUP BY s,f),a WHERE x=26;

আন golfed

WITH s AS (SELECT SUBSTR(:1,LEVEL,1)c,LEVEL p FROM DUAL CONNECT BY LEVEL<=LENGTH(:1))
,v(s,f,l) AS
(
  SELECT c,p,p FROM s
  UNION ALL
  SELECT s||c,f,p FROM v,s WHERE p=l+1 
)
,c AS(SELECT CHR(96+LEVEL)c FROM DUAL CONNECT BY LEVEL<27)
,a AS(SELECT LISTAGG(c)WITHIN GROUP(ORDER BY 1) a FROM c)
SELECT MIN(s)KEEP(DENSE_RANK FIRST ORDER BY LENGTH(s)-NVL(LENGTH(TRANSLATE(LOWER(s),' '||a,' ')),0))
FROM(SELECT s,f,SUM(SIGN(INSTR(LOWER(s),c)))x FROM v,c GROUP BY s,f),a
WHERE x=26

sদৃশ্য অক্ষর ইনপুট splits এবং প্রতিটি অক্ষর অবস্থান ফেরৎ।

পুনরাবৃত্ত দৃষ্টিভঙ্গি vইনপুট
এর প্রতিটি স্ট্রিংকে ফেরৎ দেয় স্ট্রিং
এর প্রথম অক্ষরের
অবস্থানের সাথে বর্তমানের স্ট্রিংয়ের সাথে যুক্ত শেষ অক্ষরের অবস্থান l

দ্য cদৃশ্য একবারে বর্ণমালা, এক চিঠি ফেরৎ

aদৃশ্য বর্ণমালা একটি একক স্ট্রিং হিসেবে ঘনিভূত ফেরৎ

SELECT s,f,SUM(SIGN(INSTR(LOWER(s),c))
এতে উপস্থিত প্রতিটি স্বতন্ত্র অক্ষরের সংখ্যার জন্য প্রতিটি স্ট্রিংয়ের জন্য
INSTRফেরত দেয় স্ট্রিংগুলিতে একটি চিঠির পোস্ট প্রদান করে, 0 উপস্থিত না
SIGNহলে 1 পোস্ট করে তবে পোস্ট> 0, 0 যদি পোস্ট = 0

WHERE x=26
পুরো বর্ণমালা সমন্বিত সাবস্ট্রিং ফিল্টার করে

TRANSLATE(LOWER(s),' '||a,' ')
সাবস্ট্রিং থেকে প্রতিটি অক্ষর মুছে ফেলে

LENGTH(s)-NVL(LENGTH(TRANSLATE(LOWER(s),' '||a,' ')
বর্ণগুলিতে দৈর্ঘ্য হ'ল অক্ষর ব্যতীত বিয়োগফলের বিয়োগের দৈর্ঘ্যের দৈর্ঘ্য

SELECT MIN(s)KEEP(DENSE_RANK FIRST ORDER BY LENGTH(s)-NVL(LENGTH(TRANSLATE(LOWER(s),' '||a,' ')),0))
ছোট অক্ষরের গণনার সাথে কেবল সাবস্ট্রিং রাখে।
যদি একের বেশি থাকে তবে প্রথমটি, স্ট্রিংকে আরোহণের হিসাবে সাজানো হয় is


2

পাইথন 3, 171, 167, 163, 157 , 149 বাইট।

ডিএসএমকে 4 টি বাইট সংরক্ষণ করা হয়েছে।
রুটটোকে 8 টি বাইট সংরক্ষণ করা হয়েছে।

lambda x,r=range:min([x[i:j]for i in r(len(x))for j in r(len(x))if{*map(chr,r(65,91))}<={*x[i:j].upper()}]or' ',key=lambda y:sum(map(str.isalpha,y)))

চিঠি সংখ্যার ভিত্তিতে বাছাই করা আমাকে হত্যা করছে।

পরীক্ষার কেস:

assert f("This isn't a pangram.") == ' '
assert f("Everyone knows about that infamous Quick-Brown-Fox (the one who jumped over some lazy ignoramus of a dog so many years ago).") == ' Quick-Brown-Fox (the one who jumped over some lazy ig', f("Everyone knows about that infamous Quick-Brown-Fox (the one who jumped over some lazy ignoramus of a dog so many years ago).")
assert f('"The five boxing wizards jump quickly." stated Johnny, before beginning to recite the alphabet with a bunch of semicolons in the middle. "ABCDEFGHI;;;;;;;;;;;;;;;JKLMNOPQRSTUVWXYZ!" he shouted to the heavens.') == '. "ABCDEFGHI;;;;;;;;;;;;;;;JKLMNOPQRSTUVWXYZ', f('"The five boxing wizards jump quickly." stated Johnny, before beginning to recite the alphabet with a bunch of semicolons in the middle. "ABCDEFGHI;;;;;;;;;;;;;;;JKLMNOPQRSTUVWXYZ!" he shouted to the heavens.')

.upper()কী ফাংশনে প্রয়োজন তা মনে করবেন না ।
রুট টু

@ রুটটো ওও, হ্যাঁ, আপনি ঠিক বলেছেন। ধন্যবাদ।
মরগান থ্রাপ

1

পাওয়ারশেল (v4), 198 156 বাইট

param($s)
-join(@(1..($y=$s.Length)|%{$w=$_
0..$y|%{(,@($s[$_..($_+$w)]))}}|?{($_-match'[a-z]'|sort -U).Count-eq26}|sort -Pr {($_-match'[a-z]').count})[0])


# Previous 198 byte golf
$a,$b,$c=@(1..($s="$args").Length|%{$w=$_
0..($s.Length-$w)|%{if((($t=$s[$_..($_+$w)]-match'[a-z]')|sort -u).Count-eq26){(,@($t.Length,$_,$w))}}}|sort -pr{$_[0]})[0]
(-join($s[$b..($b+$c)]),'')[!$a]

পরীক্ষার কেস

PS C:\> .\PangramWindow.ps1 "This isn't a pangram."


PS C:\> .\PangramWindow.ps1 'Everyone knows about that infamous Quick-Brown-Fox (the one who jumped over some lazy ignoramus of a dog so many years ago).'
Quick-Brown-Fox (the one who jumped over some lazy ig

PS C:\> .\PangramWindow.ps1 '"The five boxing wizards jump quickly." stated Johnny, before beginning to recite the alphabet with a bunch of semicolons in the middle. "ABCDEFGHI;;;;;;;;;;;;;;;JKLMNOPQRSTUVWXYZ!" he shouted to the heavens.'
ABCDEFGHI;;;;;;;;;;;;;;;JKLMNOPQRSTUVWXYZ!

আসলটির অসম্পূর্ণ ব্যাখ্যা

এটি একটি নিষ্ঠুর-শক্তি নেস্টেড লুপ যা সমস্ত আকারের স্লাইডিং উইন্ডোগুলিকে তৈরি করে:

.SubString(0, 1) -> slide window over the string
.SubString(0, 2) -> slide window over the string
..
.SubString(0, string.Length) -> slide window over the string

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

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

স্ট্রিংয়ের সীমানার বাইরে অনেকগুলি সূচক রয়েছে, যা পাওয়ারশেল ব্যতিক্রম ছোঁড়ার পরিবর্তে $ নাল ফেরায়।

বিশেষ দ্রষ্টব্য। নতুন 156 বাইট এক হ'ল একই পন্থা, তবে পাইপলাইনটি আরও অনেক বেশি ব্যবহার করতে পুনরায় লিখিত।

$string = "$args"

# increasing window widths, outer loop
$allPangramWindows =  foreach ($windowWidth in 1..$string.Length) {

    # sliding windows over string, inner loop
    0..($string.Length - $windowWidth) | ForEach {

        # slice window out of string, returns a char array
        $tmp = $string[$_..($_+$windowWidth)]

        # filter the char array to drop not-letters
        $tmp = $tmp -match '[a-z]'

        # Drop duplicate letters
        $tmpNoDupes = $tmp | sort -Unique

        # If we're left with a 26 character array, this is a pangrammatic window. Output
        # a PowerShell-style tuple of count of letters, start index, width.
        if($tmpNoDupes.Count -eq 26){
            (,@($tmp.Length,$_,$windowWidth))
        }
    }
}

# Force the result into an array (to handle no-results), sort it
# by the first element (num of letters in the window, total)
$allPangramWindows = @( $allPangramWindows | sort -Property {$_[0]} )

# take element 0, a window with the fewest letters
$windowCharCount, $windowStart, $WindowEnd = $allPangramWindows[0]

# uses the results to find the original string with punctuation and whitespace
if ($windowLen) {
    $string[$windowStart..($windowStart + $windowLen)] -join ''
}

বিশেষ দ্রষ্টব্য। অবিশ্বাস্য সংস্করণটি কাজ করে তা নিশ্চিত নয়, কারণ আমি এটি লিখি না তবে এটি গল্ফ, এটি কেবল প্রকাশের জন্য।


0

হাস্কেল, 123 বাইট

import Data.Lists
import Data.Char
h x=take 1$sortOn((1<$).filter isAlpha)[e|e<-powerslice x,['a'..'z']\\map toLower e==""]

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

*Main>  h "'The five boxing wizards jump quickly.' stated Johnny, before beginning to recite the alphabet with a bunch of semicolons in the middle. 'ABCDEFGHI;;;;;;;;;;;;;;;JKLMNOPQRSTUVWXYZ!' he shouted to the heavens."
[". 'ABCDEFGHI;;;;;;;;;;;;;;;JKLMNOPQRSTUVWXYZ"]

কিভাবে এটা কাজ করে:

          [e|e<-powerslice x                  ]  -- for all continuous subsequences
                                                 -- e of the input  
                ,['a'..'z']\\map toLower e==""   -- keep those where the list
                                                 -- difference with all letters is
                                                 -- empty, i.e. every letter appears
                                                 -- at least once
    sortOn((1<$).filter isAlpha)                 -- sort all remaining lists on
                                                 -- their length after removing all
                                                 -- non-letters -> (1<$) see below
take 1                                           -- take the first, i.e. the minimum


calculating the length of a list: we're not interested in the length itself, but
in the relative order of the length. (1<$) replaces each element in a list with
the number 1, e.g. "abc" -> "111", "abcd" -> "1111", etc. Such '1'-strings have
the same order as the length of the original list. One byte saved!
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.