বর্ণমালা ফ্যানকুচ


14

ফানকুচ একটি ক্লাসিক বেনমার্ক প্রোগ্রাম। নামটি জার্মান "ফ্যাফানকুচেন" থেকে এসেছে - প্যানকেকস - প্যানকেকের স্তুপগুলিতে উল্টানো আলগোরিদিমের সাদৃশ্যটির জন্য। নীচে সংখ্যার একটি ফানকুচ ক্রম গঠিত হয়:

Perm 1 ..... n of এর অনুক্রমটি নিন, উদাহরণস্বরূপ: {4,2,1,5,3}} এখানে প্রথম উপাদানটি নিন 4 এবং প্রথম 4 টি উপাদানের ক্রমটি বিপরীত করুন: {5,1,2,4,3}} প্রথম উপাদানটি 1 না হওয়া পর্যন্ত এটি পুনরাবৃত্তি করুন, সুতরাং উল্টানো আরও কিছু পরিবর্তন করবে না: {3,4,2,1,5}, {2,4,3,1,5},, 4,2,3, 1,5}, 1,3,2,4,5}

আপনাকে এমন একটি প্রোগ্রাম বা ফাংশন লিখতে হবে যা বর্ণানুক্রমিক অক্ষরের স্ট্রিংয়ের জন্য ফ্যানকুচের মতো ক্রম গণনা করে। তালিকার কতগুলি উপাদান প্রতিবার উল্টানো উচিত তা বোঝাতে সংখ্যাগুলি ব্যবহার না করে বর্ণমালায় একটি বর্ণের অবস্থান ব্যবহার করা উচিত। উদাহরণস্বরূপ, একটি নেতৃস্থানীয় cইঙ্গিত দেয় যে আপনার প্রথম 3 টি উপাদানের aক্রমটি বিপরীত করা উচিত, যখন একটি শীর্ষস্থানীয় নির্দেশ করে যে ক্রমটি সম্পূর্ণ।

ইনপুট

স্টিডিনের মাধ্যমে স্ট্রিং বা ফাংশন আর্গুমেন্ট হিসাবে ইনপুট সরবরাহ করা হবে। স্ট্রিংটিতে 1 থেকে 26 টি পৃথক ছোট হাতের অক্ষর থাকবে। স্ট্রিংগুলিতে এমন অক্ষর থাকবে না যার সমতুল্য সূচকটি ফ্যানকুচ অ্যালগরিদমকে উপস্থিতির চেয়ে আরও বেশি উপাদানগুলি ফ্লিপ করতে পারে।

আউটপুট

প্রোগ্রামিং বা ফাংশনগুলিতে ফ্যানকুচ অ্যালগরিদম প্রয়োগ করে উত্পাদিত শর্তগুলির ক্রমগুলি aপ্রারম্ভিক হওয়া বা প্রিন্ট করা উচিত যতক্ষণ না প্রাথমিক স্ট্রিং সহ একটি শীর্ষস্থানীয় উপস্থিত না হয় encountered উদাহরণস্বরূপ, যদি ইনপুট হয় তবে bcaআপনি মুদ্রণ করতে পারেন:

bca
cba
abc

মুদ্রিত ফলাফলগুলি যেকোন যুক্তিসঙ্গত বিভাজক-কমা, নিউলাইনগুলি ব্যবহার করতে পারে wh

অন্য উদাহরণ হিসাবে, যদি আপনার ইনপুট হয় eabdcআপনি ফিরে আসতে পারেন:

("eabdc"
 "cdbae"
 "bdcae"
 "dbcae"
 "acbde")

বিধি এবং স্কোরিং

এটি - সংক্ষিপ্ততম প্রোগ্রামের জয়। স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়।

উত্তর:


11

পাইথ, 16 বাইট

.u+_<NJhxGhN>NJz

প্রদর্শন.

পাইথের হ্রাস কার্যকারিতাটির "পুনরাবৃত্তি না হওয়া অবধি" এখানে বৈশিষ্ট্যযুক্ত। এটি .uসমস্ত ফলাফল আউটপুট করতে, ক্রমহ্রাসমান হ্রাস ফাংশন সহ ব্যবহার করা হয় । হ্রাসের শরীরটি যতটা নিখুঁত, তবে আমি এর চেয়ে ভাল আর কিছু পাইনি।


5

টি-এসকিউএল, 213 বাইট

অবশ্যই এসকিউএল হওয়ার কারণে এটি সত্যিই বড়, তবে এটি করা আকর্ষণীয় ছিল। পুনরাবৃত্তির সিটিই কোয়েরি ব্যবহার করে একটি ইনলাইন টেবিল ফাংশন হিসাবে তৈরি করা হয়েছে।

CREATE FUNCTION F(@ CHAR(26))RETURNS TABLE RETURN WITH R AS(SELECT @ S UNION ALL SELECT CAST(STUFF(S,1,ASCII(LEFT(S,1))-96,REVERSE(LEFT(S,ASCII(LEFT(S,1))-96)))AS CHAR(26))FROM R WHERE LEFT(S,1)<>'a')SELECT*FROM R

সম্প্রসারিত

CREATE FUNCTION F(@ CHAR(26))
RETURNS TABLE 
RETURN WITH R AS(
    SELECT @ S            -- Initial string as an anchor for the recursion
    UNION ALL 
    SELECT CAST(
        STUFF(                                    -- Stuff into 
            S,                                    -- string S
            1,                                    -- from position 1
            ASCII(LEFT(S,1))-96,                  -- to index value of first char
            REVERSE(LEFT(S,ASCII(LEFT(S,1))-96))  -- the reverse of the index first chars
            )
        AS CHAR(26))
    FROM R 
    WHERE LEFT(S,1)<>'a'  -- recurse until first char is a
)SELECT*FROM R

নিম্নলিখিত হিসাবে ব্যবহৃত হয়

SELECT * FROM F('eabdc')
S
--------------------------
eabdc                     
cdbae                     
bdcae                     
dbcae                     
acbde                     

(5 row(s) affected)


3

পাইথন 2, 59 বাইট

def p(l):
 print l;o=ord(l[0])-97
 if o:p(l[o::-1]+l[o+1:])

আমি অনুমান করি এটি একটি বরং সহজ উত্তর is পুনরাবৃত্তি এবং পাইথনের স্লাইস সিনট্যাক্স ব্যবহার করে। যেমন কল করুন: p('eabdc')


3

এসএএস, 131 বাইট

sub a(s$);outargs s;put s;do while(b ne 1);b=rank(char(s,1))-96;substr(s,1,b)=reverse(substr(s,1,b));if b>1 then put s;end;endsub;

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


options cmplib=work.funcs;
proc fcmp outlib=work.funcs.funcs;
  sub a(s$);
    outargs s;
    put s=;
    do while (b ne 1 and z<1e5);
        b=rank(char(s,1))-96;
        substr(s,1,b) = reverse(substr(s,1,b));
        if b>1 then put s=;
        z+1;
    end;
  endsub;
quit;

চমৎকার কাজ. আমরা proc fcmpএখানে খুব বেশি পেতে পারি না ।
অ্যালেক্স এ।

2

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

f l@(h:_)|h=='a'=[l]|1<2=l:f(reverse(take d l)++drop d l)where d=fromEnum h-96

ব্যবহার: f "eabdc"-> ["eabdc","cdbae","bdcae","dbcae","acbde"]


ব্যবহার বিবেচনা করুন splitAt- আপনি এটি 71 বাইটে নামতে পারেন!
এমটিএনভিউমার্ক

@ ম্যাটনভিউমার্ক ভাল মনে হচ্ছে ঠিক একই অ্যালগরিদম আমি 68 বাইটের নিচে
রেখেছি

2

কে 5, 21 বাইট

{(|v#x),(v:*x-96)_x}\

একটি এক্সপ্রেশন পুনরায় সাজিয়ে @ জন এবং অন্য একটি বাইটকে 5 টি বাইট সংরক্ষণ করা হয়েছে।

পৃথিবীতে প্রথমবারের মতো, আমি মনে করি কে সিজেমকে পরাজিত করেছে!

27-বাইট সংস্করণ

(~97=*){(|v#x),(v:-96+*x)_x}\

আপনি যদি "স্ক্যান" এর ফিক্স-পয়েন্ট ফর্মটি ব্যবহার করেন তবে আপনি এটিকে কিছুটা খাটো করতে পারেন।
জন

@ জন ধন্যবাদ! আমি বুঝতে পারি নি, যখন প্রথম চিঠিটি একটি a, তখন স্ট্রিংটি পরিবর্তন হবে না।
kirbyfan64sos

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