প্যালিনড্রোমগুলি স্ট্রিং ক্রমের সংখ্যা ations


13

আপনার ইনপুটটি ছোট ইংরেজী বর্ণগুলির সমন্বয়ে একটি স্ট্রিং হবে।

আপনার কাজটি হল একটি প্যালিনড্রোম যে মূল স্ট্রিংয়ের স্বতন্ত্র ক্রমানুসারে সংখ্যা নির্ধারণ করা।

ইনপুট স্ট্রিংয়ের 100 টি পর্যন্ত অক্ষর রয়েছে। দীর্ঘতর স্ট্রিংয়ের ক্ষেত্রে ফলাফলটি খুব বড় হতে পারে ফলে আউটপুটটি 666013 মডুলোর ক্রমবর্ধনের সংখ্যা হওয়া উচিত।

উদাহরণ স্বরূপ,

cababaa -> 3

সম্ভাব্য আদেশগুলি হ'ল:

aabcbaa
abacaba
baacaab

এটি , তাই সংক্ষিপ্ত উত্তরটি জেতে!


2
"স্ট্রিংয়ের 100 টিরও বেশি অঙ্কের ফলাফল দেওয়াতে অবশ্যই% 666013 হওয়া উচিত।" যদি তা হয় তবে সংশ্লিষ্ট পরীক্ষার কেস অন্তর্ভুক্ত করা ভাল ধারণা হবে।
মার্টিন ইন্ডার

4
আমি% 666013 লাইন বুঝতে পারি না। যদিও এটি একটি প্রতিশ্রুতিবদ্ধ চ্যালেঞ্জ, এবং আমি একবার ব্যাখ্যা করার পরে আবার খুলতে ভোট দিতে আগ্রহী।

12
ওহ, এখন এটি সম্পাদিত হয়েছে, আমি দেখছি আপনি কী পাচ্ছেন। আমি মনে করি না যে লাইনটি চ্যালেঞ্জকে আরও বাড়িয়েছে; এটি বেশিরভাগ স্বেচ্ছাসেবী-নির্ভুল পূর্ণসংখ্যা ছাড়া ভাষাগুলিকে শাস্তি দেয়। সাধারণত আমরা এমন কিছু করি যা "আপনার ভাষার অনুমানিত পূর্ণসংখ্যার সাথে অনুমান করা যায় তবে উত্তরটি সঠিক হওয়া উচিত"।

7
এটি সত্যিই আরও পরীক্ষার ক্ষেত্রে ব্যবহার করতে পারে।
স্মিল

3
পরীক্ষা ক্ষেত্রে জন্য পরামর্শ (যদিও তাদের যাচাই করে নিন): abcdabcddddd -> 120 (কোন বিজোড় অক্ষর সংখ্যা) , abcdabcdddddd -> 120 (এক অদ্ভুত অক্ষর সংখ্যা) , abcdabcddddddeee -> 0 (দুই বিজোড় চরিত্র গনণা করা হয়) , aabbccddeeffgghhiijj -> 298735 (মডিউল দ্বারা প্রভাবিত)
স্মলস

উত্তর:


5

ব্র্যাচল্যাগ (2), 15 বাইট

{p.↔}ᶠdl%₆₆₆₀₁₃

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

ব্যাখ্যা

{p.↔}ᶠdl%₆₆₆₀₁₃
{   }ᶠdl          Count (l) the number of distinct (d) results (ᶠ) obtainable by:
 p                  permuting {the input}
  .                 to produce an output
   ↔                that, if reversed, is still the output
        %₆₆₆₀₁₃   then take that number modulo 666013

2
আমার অবশ্যই এটি "অনন্য সন্ধান করুন" বাস্তবায়ন করা দরকার ...
শে

2
@ ফ্যাটালাইজ: হ্যাঁ! আমি মনে করি এমনকি 1-বাইট উপস্থাপনের পক্ষে চ্যালেঞ্জগুলিতেও "অনন্য গণনা অনন্য" প্রায়শই ঘটে। অন্যদিকে, "মডুলো 666013" প্রায় অবশ্যই না ;-)

5

05 এ বি 1 , 17 16 13 বাইট

-1 জোনাথন অ্যালান থেকে বাইট

এমিনা এবং আদনান -3 বাইট

œÙvyÂQO•E›j•%

ব্যাখ্যা:

œÙ                # Unique permutations of [implicit] input
  vy              # For each permutation...
    ÂQ            # Check if it is a palindrome
      O           # If so, increment the counter
       •E›j•%     # Modulo 666013 (no clue why this number, or even why this rule is in place)

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


1
সামগ্রীটি, E›jঅঙ্কগুলি উপস্থাপন করে [14, 116, 45]যা বেস থেকে রূপান্তরিত হয় 214এবং হয়ে যায় 14*214^2 + 116*214 + 45 = 666013। আমি অঙ্কগুলির জন্য রেফারেন্সটি কোথায় তা পুরোপুরি নিশ্চিত নই, তবে তারা তথ্য পৃষ্ঠায় তাদের আদেশের সাথে লাইন (ইশ?) রয়েছে বলে মনে হচ্ছে । @ আদনান আমাদের আলোকিত করতে পারে।
জোনাথন অ্যালান

1
@ এমিগনা যখন আপনি ভাষা জানেন তখন সহজ: ডি
জোনাথন অ্যালান

1
আপনি যদি যাইহোক যাইহোক স্ট্যাকের প্রয়োজনীয় মানগুলি রাখেন হিসাবে আপনি œÙvyÂQ}O•E›j•%
আই

2
@ জোনাথান অ্যালান এখানে সম্পূর্ণ অঙ্ক (এবং অক্ষর) পাওয়া যাবে :) found
আদনান

1
@ Emigna এর মন্তব্যে নির্মাণের, আপনি বন্ধ বন্ধনী সরিয়ে অন্য বাইট সংরক্ষণ করতে পারেন: œÙvyÂQO•E›j•%
আদনান

4

পার্ল 6 , 104 108 88 84 বাইট

{my &f={[*] 1..$_ div 2}
.comb.Bag{*}.&{(2>.grep(*%2))*f(.sum)/[*]($_».&f)%666013}}

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

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

আমি সহজেই সমস্ত ক্রম তৈরি করতে পারি এবং এগুলি ফিল্টার করতে পারি না, এমনকি যদি জ্যোতির্বিদ্যার রান- permutationsটাইমের অনুমতি দেওয়া হয় তবে পার্ল 6 এর অন্তর্নির্মিত রুটিন 20 টিরও বেশি উপাদানগুলির তালিকাকে অনুমতি দিতে অস্বীকৃতি জানায় এবং টাস্কের বর্ণনায় 100 টি পর্যন্ত ইনপুট দরকার হয় requires চরিত্র.

সুতরাং পরিবর্তে আমি ইনপুটটির চিঠি ফ্রিকোয়েন্সিগুলির ভিত্তিতে একটি সরাসরি সূত্র ব্যবহার করি:

  1. আমার & এফ = {[*] 1 .. $ _ দ্বি 2}

    একটি সহায়ক ফাংশন যা একটি সংখ্যা অর্ধেক করে একে একে নিকটতম পূর্ণসংখ্যার দিকে বৃত্তাকার করে দেয় এবং তারপরে এর ফ্যাক্টরিয়ালটি নেয়।

  2. .কম্ব.ব্যাগ {*}। & {};

    ইনপুট স্ট্রিংয়ে বর্ণের ফ্রিকোয়েন্সিগুলি টেল আপ করুন এবং বাকী কোডের জন্য এগুলি বিষয়টিকে তৈরি করুন । যেমন ইনপুট জন্য abcdabcddddddএই তালিকা হবে (2, 2, 2, 7)

  3. (2> .grep (*% 2)) *

    যদি একের বেশি অক্ষরের ফ্রিকোয়েন্সি থাকে তবে ফলাফলটি শূন্য দ্বারা গুণ করুন, কারণ কোনও প্যালিনড্রোম সে ক্ষেত্রে সম্ভব নয়।

  4. চ (.sum) / [*] ($: _ »& F।)

    প্রতিটি প্যালিনড্রোমের "একপাশে" থাকা অক্ষরের সম্ভাব্য অনুমানের সংখ্যা গণনা করুন (যা ইনপুট লেটারের ফ্রিকোয়েন্সিগুলি অর্ধেক করে এবং ফ্লোরিংয়ের ফলে প্রাপ্ত বহুগুণগুলির সাথে একটি মাল্টিসেটের সাথে মিলে যায়) । ব্যবহৃত সূত্রটি এই পিডিএফ থেকে :
    (এন 1 + ... + এন কে )! / (ঢ 1 ! ⋅ ... ⋅n 1)
    যেমন ইনপুট অক্ষর ফ্রিকোয়েন্সি জন্য (2,2,2,7), উপর অক্ষর এক যে শব্দ কবিতা প্রভৃতি উলটা করিয়া পড়িলেও একই থাকে ফর্ম multiplicities সঙ্গে একটি multiset পাশ (1,1,1,3), এবং একাধিক বিন্যাসন এইভাবে হয় (1+1+1+3)! / (1!⋅1!⋅1!⋅3!) = 120

  5. % 666013

    666013 ফলাফলটি নিন।


আমার বিকল্প পদ্ধতিটি বৈধ কিনা তা দেখতে ভাল !
জোনাথন অ্যালান

3

পাইথন 3, 81 80 বাইট

from itertools import*
lambda s:sum(a==a[::-1]for a in{*permutations(s)})%666013

এটিই আমি নিয়ে আসতে পারি or নিশ্চিত করা যায় না যদি অনুমতিগুলি আরও সহজে উত্পন্ন করা যায় ...

ব্যাখ্যা

lambda s:                       # Anonymous function taking a parameter <s>. 
    sum(                        # Sum the following terms.
        a==a[::-1]              # Check whether the permutation <a> is a palindrome,
        for a in                # for each element <a>,
        {                       # inside a set that can only contain distinct elements.
            *                   # Splat the elements of the following object:
            permutations(s)     # the permutations of the input parameter <s>.
        }                       #
    )%666013                    # Modulo the sum by 666013.

মন্তব্য

  1. চেকটি a==a[::-1]একটি বুলিয়ান মান দেয়, তবে sum(...)ফাংশনটি স্পষ্টতই এটি একটি পূর্ণসংখ্যার (0 বা 1) এ কাস্ট করে এবং তদনুসারে যোগফল।
  2. অবজেক্ট থেকে উপাদানগুলি বের করতে আমাকে ' স্প্ল্যাট অপারেটর ' (আসল নাম নয়) ব্যবহার করতে হবে permutations(...)। অন্যথায় সেট ( {...}) এ কেবলমাত্র একটি উপাদান থাকবে the
  3. আমি {...}ভিতরে একটি স্বতন্ত্র অনুমতি রাখার জন্য একটি সেট ( ) ব্যবহার করি ।

ফ্লোরয়েডে, এটি (প্রায়) z(T(a==aDKaIW(cb(L)))%666013), তবে পরিবর্তে ফলাফলটি মুদ্রণ করে এবং কমান্ড লাইনের মাধ্যমে ইনপুট নেয়।

বাইট সংরক্ষণের জন্য @ জোনাথন অ্যালানকে ধন্যবাদ ! -> importস্টাইল পরিবর্তন করা হয়েছে

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


3

জেলি , 13 বাইট

Œ!QŒḂ€S%“µɲ€’

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

কিভাবে?

একটি ব্রুট ফোরসর

Œ!QŒḂ€S%“µɲ€’ - Main link: string
Œ!            - all permutations
  Q           - unique
     €        - for each
   ŒḂ         - isPalindromic? (yep a built-in!)
      S       - sum
       %      - mod
        “µɲ€’ - base 250 compressed number 666013

আমি বিশ্বাস করি যে এই এটা আরো দক্ষতার সঙ্গে করতে হবে, কিন্তু এটা 30 বাইট (সম্পাদনা: এই PDF এটি নিশ্চিত করতে মনে হয়, সৌজন্যে smls এর উত্তর ):

ÑHḞµS!÷!P$ - Link 1, palindrome count: string a    e.g. 'abcabcd'
Ñ          - call the next link (2) as a monad(a)  e.g. [2, 2, 2, 1]
 H         - halve                                 e.g. [1, 1, 1, 0.5]
  Ḟ        - floor (get pair counts)               e.g. [1, 1, 1, 0]
   µ       - start a new monadic chain - call that p
    S      - sum(p)                                e.g. 3
     !     - factorial                             e.g. 6
         $ - last 2 links as a monad:
       !   -     factorial(p) (vectorises)         e.g. [1, 1, 1, 1]
        P  -     product                           e.g. 1
      :    - integer division                      e.g. 6

ĠL€ - Link 2, count characters: string a           e.g. 'abcabcd'
Ġ   - group indexes                                e.g. [[1, 4], [2, 5], [3, 6], 7]
 L€ - length of €ach                               e.g. [2, 2, 2, 1]

ÇḂS⁼LḂ$aÑ%“µɲ€’ - Main link: string a              e.g. 'abcabcd'
                - first check to see if any palindromes will be possible:
Ç               - last link (2) as a monad         e.g. [2, 2, 2, 1]
 Ḃ              - mod 2                            e.g. [0, 0, 0, 1]
  S             - sum                              e.g. 1
      $         - last two links as a monad:
    L           -     length(a string)             e.g. 7
     Ḃ          -     mod 2                        e.g. 1
   ⁼            - equal?                           e.g. 1 (1 when palindromes are possible)
       a        - and
        Ñ       - next link as a monad             e.g. 6
         %“µɲ€’ - mod 666013, as in the brute force version.

হ্যাঁ এটা করে, %মোড।
জোনাথন অ্যালান

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

বাহ, বাইট জন্য বাইট? আমার আরও 13 জন রয়েছে, তবে মনে হয় এটি কিছুটা কম দক্ষ :)
জোনাথন অ্যালান

সংখ্যাটি আলাদা বেসে সংকুচিত হয় বা কী? : পি
ইয়াতসি

আমার টিআইও ট্যাব থেকে Œ!QŒḂ€S%“µɲ€’,। আমার কাছে এটি বাইচটি অভিন্ন দেখায়।

2

গণিত, 46 বাইট

Permutations@#~Count~_?PalindromeQ~Mod~666013&

ইনপুট হিসাবে অক্ষরের একটি তালিকা নেয়।

মারাত্মকভাবে অদক্ষ, কারণ এটি প্রকৃতপক্ষে ইনপুটটির সমস্ত ক্রিয়াকলাপ উত্পন্ন করে এবং তারপরে প্যালিনড্রোমিকগুলি গণনা করে।


আমি মনে করি 0যে স্ট্রিংটিতে বিজোড় গুণ (যেমন "abcdabcddddddeee") এর সাথে একাধিক অক্ষর রয়েছে তার পরিবর্তে এটি ভুলভাবে একটি ইতিবাচক উত্তর দেয় ।
গ্রেগ মার্টিন

@ গ্রেগমার্টিন ধন্যবাদ, স্থির। এটি যেভাবেই অকারণে জটিল ছিল।
মার্টিন ইন্ডার

2

গণিত, 68 বাইট

If[i=Floor[t=Last/@Tally@#/2];Tr[t-i]<1,Multinomial@@i,0]~Mod~666013

খাঁটি ফাংশন ইনপুট হিসাবে অক্ষরের একটি তালিকা গ্রহণ করে এবং পূর্ণসংখ্যা ফেরত দেয়। মার্টিন ইন্ডারের ম্যাথমেটিকা ​​উত্তরের মতো সংক্ষিপ্ত নয় , তবে এটি একটি সুন্দর পদ্ধতির তবে এটি স্মাইলসের পার্ল answer উত্তরের মতোই একই দৃষ্টিভঙ্গি বলে মনে হচ্ছে ।

প্রথমে, t=Last/@Tally@#/2ইনপুটটিতে পৃথক সমস্ত অক্ষরের সংখ্যা গণনা করে 2; তারপরে যে i=Floorকোনও ভগ্নাংশ ঘটবে তা গোল করে t। নোট করুন যে মূল গণনাগুলির মধ্যে সর্বাধিক এক বিজোড় সংখ্যা রয়েছে যখন, যখন সর্বাধিক এক ভগ্নাংশ থাকে তখন ইনপুটটির প্যালিনড্রমিক ক্রমশক্তিগুলি ঠিক উপস্থিত থাকে t। আমরা কেবল এটির জন্য t-i(ব্যবহারের Tr) সমস্ত উপাদান যুক্ত করে পরীক্ষা করতে পারি : উত্তরটি যদি কম 1হয় তবে প্যালিনড্রমিক ক্রমশক্তি থাকে, অন্যথায় নয়।

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


1

কে, 23 বাইট

{666013!+/{x~|x}'cmb x}

যদি ওকে ব্যবহার করে বা cmbবিদ্যমান না থাকে তবে এর prmপরিবর্তে ব্যবহার করুন cmb



1

সি ++ 14, 161 বাইট

নামবিহীন ল্যাম্বদা যেমন ধরে নিচ্ছে ইনপুটটি std::stringরেফারেন্স প্যারামিটারের মাধ্যমে ফিরে আসে।

#import<algorithm>
[](auto s,int&n){auto a=s.begin(),b=s.end();std::sort(a,b);n=0;do n=(n+std::equal(a,b,s.rbegin()))%666013;while(std::next_permutation(a,b));}

অবরুদ্ধ এবং ব্যবহার:

#include<iostream>
#include<string>

#import<algorithm>
auto f=
[](auto s,int&n){
 auto a=s.begin(),b=s.end();
 std::sort(a,b);
 n=0;
 do
  n=(n+std::equal(a,b,s.rbegin()))%666013;
 while(std::next_permutation(a,b));
}
;

using namespace std;


int main(){
 string s;
 s = "cababaa";
 s = "abcdabcddddd";
 int n;
 f(s,n);
 cout << n << endl;
}

1

রুবি, 67 57 52 59 অক্ষর

->s{s.chars.permutation.uniq.count{|t|t.reverse==t}%666013}

কোডগল্ফের জমাগুলি স্নিপেট নয়, যথাযথ প্রোগ্রাম / ফাংশন / ল্যাম্বডাস হওয়া উচিত । আমি কোনও রুবি প্রোগ্রামার নই, তবে আমার মনে হয় আপনি এটিকে আবৃত করে ল্যাম্বডায় পরিণত করতে পারেন ->s{ }, তাই না?
স্মলস

এছাড়াও, ডকুমেন্টেশনের উপর ভিত্তি করে , (s.size)আর্গুমেন্ট রিন্ডন্ড্যান্ট নয়?
09 এ স্মিলস্

1
আমি এটি রুবি ২.৪-তে পরীক্ষা করেছি এবং এটিও ছাড়াই কাজ .to_aকরে।
স্মিল

@ এসএমএলস রুবি ২.৩.৩ এ কাজ করে না ( undefined method # < গণকের জন্য একীক '), তবে ঠিক এটি রুবি ২.৪-তে কাজ করে, ধন্যবাদ :)
ডোরিয়ান

ফলাফল কি নিতে হবে mod 666013?
ননলাইনফর্ট

1

জাপট , 20 18 বাইট

á f_¥Zw} l %666013

ETH প্রডাকশনগুলির জন্য 2 বাইট সংরক্ষণ করা।

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


খুব ভাল, আমি কি করতাম। সংক্ষিপ্ত f_¥Zw}হিসাবে আপনি দুটি বাইট সংরক্ষণ করতে পারেন_Z{Z
ETH প্রোডাকশনগুলি

á fêS â l %666013আপনি একটি বাইট বাঁচাতে হবে।
বুলেটগুলি

0

এমএটিএল, 13 বাইট

Y@Xu!"@tP=Avs

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

ব্যাখ্যা

        % Implicitly grab input as a string
Y@      % Compute all permutations of the inputs (one per row)
Xu      % Determine the unique rows
!       % Take the transpose so each permutation is a column
"       % For each unique permutation
  @     % Take this permutation
  tP=A  % Duplicate it, reverse it, and compare (yields 1 for palindrome and 0 otherwise)
  v     % Vertically concatenate the entire stack
  s     % Compute the sum of all elements
        % Implicitly end for loop and display the result

0

সিজেম , 19 বাইট

qe!{_W%=}%:+666013%

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

ব্যাখ্যা:

কিউ! {_ ডাব্লু% =}%: + 666013% ই # সম্পূর্ণ প্রোগ্রাম।
কিউ # সমস্ত ইনপুট পান।
 ই! e # সমস্ত অনন্য অনুমতি পান।
   {_W% =} e # তালিকাটি প্যালিনড্রোম কিনা তা পরীক্ষা করার জন্য কার্য।
    _ ই # নকল টোস
     ডাব্লু% ই # বিপরীত টস (পুশ -1, টোসের মডুলার সূচক)।
       = ই # টিওএস STOS এর সমান কিনা তা পরীক্ষা করুন।
         % ই # মানচিত্র।
          : + ই # সমষ্টি (যোগ করে হ্রাস করুন)।
            666013 ই # পুশ 666013।
                  % ই # মডুলো।


0

ওহম, 17 বাইট

I⌐:_₧?¡;;¼,

ব্যাখ্যা:

I⌐:_₧?¡;;¼,  ■Main wire
I⌐:     ;    ■for _ in permutations(input()){
   _₧? ;     ■  if(palindrome(_)){
      ¡      ■    counter++;
       ;     ■  }
        ;    ■}
         ¼,  ■print(counter)

0

পিএইচপি, 182 বাইট

function f($a,$b=1){return$a?f($a-1,bcmul($a,$b)):$b;}$a=count_chars($argv[1],$r=1);foreach($a as$v){$c+=$v%2?:0;$c>1?die("0"):$z+=$f=$v/2^0;$r=bcmul(f($f),$r);}echo bcdiv(f($z),$r);

অনলাইন সংস্করণ

ভাঙ্গন

function f($a,$b=1){  #Factorial
    return$a?f($a-1,bcmul($a,$b)):$b;
}
$a=count_chars($argv[1],$r=1); # Array count for every char
foreach($a as$v){
    $c+=$v%2?:0; # counter mod 2 ==1
    $c>1?die("0"):$z+=$f=$v/2^0; # end program if there are 2 chars which cannot divide by 2
    $r=bcmul(f($f),$r);
}
echo bcdiv(f($z),$r);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.