সমস্ত অ্যানগ্রামগুলি সন্ধান করুন!


17

ট্যাগ হওয়া 17 টি প্রশ্ন থাকা সত্ত্বেও আমাদের এখনও এই প্রশ্নটি নেই, তাই এটি এখানে।

তোমার কাজ

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

ইনপুট

আপনি কোনও স্ট্যান্ডার্ড ইনপুট পদ্ধতিতে স্ট্রিংটি যে কোনও দৈর্ঘ্যের> ০ হতে পারে তা গ্রহণ করতে পারেন। এটিতে কোনও এএসসিআইআই অক্ষর থাকতে পারে।

আউটপুট

আপনি কোনও স্ট্যান্ডার্ড উপায়ে ইনপুটযুক্ত স্ট্রিংয়ের সম্ভাব্য সমস্ত অ্যানাগ্রাম আউটপুট করতে পারেন। আপনার অবশ্যই একই স্ট্রিংটিকে দু'বার আউটপুট করতে হবে না বা ইনপুটটির সমান স্ট্রিং আউটপুট করা উচিত নয়।

অন্যান্য বিধি

স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়

স্কোরিং

এটি , কমপক্ষে বাইটস জয়।


আমরা কি সাধারণ "প্রোগ্রাম বা ফাংশন" মান মেনে চলতে পারি?
জোনাথন অ্যালান

@ জোনাথান অ্যালান আমি মনে করি যদি এটির স্পষ্টভাবে উল্লেখ না করা হয় তবে আপনি কোনও প্রোগ্রাম বা কোনও অনুষ্ঠান জমা দিতে পারেন। আমি কোনও সমস্যা ছাড়াই আমার প্রশ্নগুলিতে এই বিষয়টি অন্তর্ভুক্ত রেখেছি
ডিজিটাল ট্রমা

হ্যাঁ, অবশ্যই কোনও প্রোগ্রাম বা কোনও ফাংশন সূক্ষ্মভাবে কাজ করবে।
গ্রিফন


@ গ্রিফন আপনি কীভাবে জিনিসগুলি সম্পাদনা করছেন
ফক্সি

উত্তর:


10

05 এ বি 1 , 3 বাইট

œÙ¦

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

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

কিভাবে?

    - push input
œ   - pop and push a list of all permutations (input appears at the head)
 Ù  - pop and push a list of unique items (sorted by first appearance)
  ¦ - pop and push a dequeued list (removes the occurrence of the input)
    - As a full program: implicit print of the top of the stack

অনুমান করা উচিত 05AB1E অতিরিক্ত সংক্ষিপ্ত হবে be
গ্রিফন

4

রুবি , 45 বাইট

->x{(x.chars.permutation.map(&:join)-[x])|[]}

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

একটি অন্তর্নির্মিত থাকা সত্ত্বেও, "ক্রমশক্তি" শব্দটি আসলেই দীর্ঘ :(


|[]অপ্রয়োজনীয় মনে হচ্ছে?
canhascodez

@ সেথরিন, বেশ নয় অনুমানটি বলে যে সদৃশগুলি সরানো উচিত। |[]তুলনায় খাটো .uniq
ymbirtt

3

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

tY@1&X~

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

ব্যাখ্যা

t     % Implicitly input a string, say of length n. Duplicate
Y@    % All permutations. May contain duplicates. Gives a 2D char array of 
      % size n!×n with each permutation in a row
1&X~  % Set symmetric difference, row-wise. Automatically removes duplicates.
      % This takes the n!×n char array and the input string (1×n char array)
      % and produces an m×n char array containing the rows that are present 
      % in exactly one of the two arrays
      % Implicitly display

3

পাইথ , 8 4

-{.p

অনলাইন পরীক্ষা

  .pQ     # all permutations of the (implicit) input string
 {        # de-duplicate
-    Q    # subtract (implicit) input

দুর্দান্ত গল্ফিং কাজ। অত্যন্ত চিত্তাকর্ষক 05AB1E উত্তর বেঁধে অভিনন্দন।
গ্রিফন

1
দুঃখিত, তবে যদি ইনপুটে দু'বার একই অক্ষর থাকে তবে এটি একই স্ট্রিংটিকে দু'বার আউটপুট করে। দয়া করে এটি ঠিক করুন।
গ্রিফোন

এটি ঠিক করার জন্য ধন্যবাদ। যদিও এটি আপনার বাইট গণনাটিকে আরও বেশি করে দিচ্ছে এটি সম্পর্কে খুব খারাপ।
গ্রিফন

আমি একই উত্তরটি নিয়ে এসেছি তবে নকলটিও ভুলে গিয়েছি। বিখ্যাত মন সর্বদাই অন্যরকম চিন্তা করে?
টর্নেডো 547

3

জাপট , 6 বাইট

á â kU

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

ব্যাখ্যা

 á â kU
Uá â kU   // Ungolfed
          // Implicit: U = input string
Uá        // Take all permutations of U.
   â      // Remove duplicates.
     kU   // Remove U itself from the result.
          // Implicit: output resulting array, separated by commas

জয় চুরির জন্য অভিনন্দন। +1
গ্রিফন

1
@ গ্রিফন এত তাড়াতাড়ি নয়, আমি 05AB1E এ 3 বাইট না হলে আমি হতবাক হয়ে যাব ...
ETH প্রোডাকশন

আমি আপাতত বোঝাতে চাইছি এটি আপনাকে গ্রহণযোগ্য হিসাবে চিহ্নিত করছি এমন নয়।
গ্রিফোন

@ ডেনিস যদি জেলিতে এটি করেন তবে এটি সম্ভবত 2 বাইটের মতো হবে। কেউ ডেনিসকে আউটগল্ফ করে না।
গ্রিফোন

1
3 বাইটের পূর্বাভাসটি ভাল ছিল, তবে সেখানে কি 2 ?!
জোনাথন অ্যালান

3

হাস্কেল, 48 40 বাইট

import Data.List
a=tail.nub.permutations

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

লিওর tailটিপকে ধন্যবাদ 8 বাইট সংরক্ষণ করা


2
tailপরিবর্তে আপনি ব্যবহার করতে পারেন delete x, যেহেতু মূল স্ট্রিং সর্বদা ক্রমানুসারীর তালিকায় প্রথম আসে। এটি আপনাকে একটি বিন্দু মুক্ত সমাধানে স্যুইচ করতে দেয় এবং তারপরে একটি নামহীন ফাংশনে, সংরক্ষণ করতে হবে প্রচুর বাইট!
লিও

@ লিও গ্রেট, ধন্যবাদ!
ক্রিশ্চিয়ান লুপাস্কু

2

সিজেম , 8 বাইট

l_e!\a-p

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

ব্যাখ্যা

l    e# Read string from input
_    e# Duplicate
e!   e# Unique permutations. Gives a list of strings
\    e# Swap
a    e# Wrap in a singleton array
-    e# Set difference. This removes the input string
p    e# Pretty print the list

@ জোনাথান অ্যালান ধন্যবাদ, সংশোধন করেছেন
লুইস মেন্ডো

@ গ্রিফন ওয়েল, জোনাথনের খুব বেশি সংশোধনী সংশোধন করার পরে
লুইস মেন্ডো

আমি এখন এই প্রশ্নের উত্তর দিয়েছি।
গ্রিফোন

উম্ম, টিআইও এখনও আমার জন্য মূল স্ট্রিং আউটপুট দিচ্ছে?
গ্রিফোন

@ গ্রিফোন দুঃখিত, এটি এখন কাজ করা উচিত। আমি এর জন্য পরিষ্কারভাবে খুব ক্লান্ত; বিছানায় যাচ্ছি :
লুইস মেন্ডো

2

গণিত, 47 বাইট

Drop[StringJoin/@Permutations[Characters@#],1]&

আমি এর মধ্যে একটির জন্য অপেক্ষা করছিলাম তবে আমি নিশ্চিত যে এটি জিতবে না। কিন্ডা অবাক হলেন কেবল সেখানে একটি
গ্রিফন

StringJoin/@Rest@Permutations@Characters@#&43 বাইট হয়।
jcai

2

জেলি , 4 বাইট

Œ!QḊ

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

এটি অনলাইন চেষ্টা করুন!(পাদলেখ একটি প্রোগ্রাম তৈরি করে যা তালিকার সাথে নিউলাইন এবং প্রিন্টের সাথে যোগ দেয় অন্যথায় ভাঙা প্রতিনিধিত্ব এড়াতে)।

কিভাবে?

Œ!QḊ - Link: list of characters     e.g. "text"
Œ!   - all permutations of the list      ["text","tetx","txet","txte","ttex","ttxe","etxt","ettx","extt","extt","ettx","etxt","xtet","xtte","xett","xett","xtte","xtet","ttex","ttxe","tetx","text","txte","txet"]
  Q  - de-duplicate                      ["text","tetx","txet","txte","ttex","ttxe","etxt","ettx","extt","xtet","xtte","xett"]
   Ḋ - dequeue (the first one = input)          ["tetx","txet","txte","ttex","ttxe","etxt","ettx","extt","xtet","xtte","xett"]

চিত্তাকর্ষক। আমি জেলি না, কারণ একটি ব্যাখ্যা আছে?
গ্রিফোন

হ্যা অবশ্যই!
জোনাথন অ্যালান

আমি বহু বছর আগে এটি বন্ধ করে দিয়েছি, সুতরাং কেন আমার শিরোনামে "(4?)" ছিল এবং Yফাংশনগুলি অনুমোদিত হলে তা অপসারণ সম্পর্কিত পাঠ্যটি ... আমি দেখতে পাচ্ছি যে আপনি আমার সম্পাদনাটি এই প্রশ্নের পরিবর্তে উল্টে দিয়েছেন যদিও: /
জোনাথন অ্যালান

2

পাইথন 3, 85 76 63 বাইট

একটি ফাংশন হিসাবে এবং অক্ষরের তালিকা হিসাবে স্ট্রিং ফিরিয়ে দেওয়া (@ পিজ্জাপ্যান্টস 184 আমাকে এটির অনুমতি দেওয়ার জন্য ধন্যবাদ):

from itertools import*
lambda z:set(permutations(z))-{tuple(z)}

একটি ফাংশন হিসাবে:

from itertools import*
lambda z:map("".join,set(permutations(z))-{tuple(z)})

পুরো প্রোগ্রাম হিসাবে 85 বাইট:

from itertools import*
z=input()
print(*map("".join,set(permutations(z))-{tuple(z)}))

('A', 'b', 'c') হিসাবে স্ট্রিংগুলি আউটপুট করার অনুমতি দেওয়া হলে কিছুটা হ্রাস করা যেতে পারে (আমি নিশ্চিত নই যে এটি)।


যদি কেবল অজগরটি একটি গল্ফ ভাষা ছিল e
গ্রিফন

1
('A', 'b', 'c') হিসাবে আউটপুট করা ভাল হওয়া উচিত, এই পাইথ উত্তরটি (মূলত) দেয়।
pizzapants184

2

জাভা 8, 245 239 237 বাইট

import java.util.*;s->{Set l=new HashSet();p("",s,l);l.remove(s);l.forEach(System.out::println);}void p(String p,String s,Set l){int n=s.length(),i=0;if(n<1)l.add(p);else for(;i<n;p(p+s.charAt(i),s.substring(0,i)+s.substring(++i,n),l));}

-6 বাইটস @ অলিভিগ্রগ্রোয়ারকে ধন্যবাদ ।

টিপিক্যাল ভার্বোজ জাভা .. আমি প্রচুর <10 বাইট উত্তর দেখতে পাই এবং এখানে আমি 200+ বাইট নিয়ে আছি .. এক্সডি

ব্যাখ্যা:

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

import java.util.*;         // Required import for the Set and HashSet

s->{                        // Method (1) with String parameter and no return-type
  Set l=new HashSet();      //  Set to save all permutations in (without duplicates)
  p("",s);                  //  Determine all permutations, and save them in the Set
  l.remove(s);              //  Remove the input from the Set
  l.forEach(                //  Loop over the Set
    System.out::println);   //   And print all the items
}                           // End of method (1)

// This method will determine all permutations, and save them in the Set:
void p(String p,String s,Set l){
  int n=s.length(),         //  Length of the first input String
      i=0;                  //  And a temp index-integer
  if(n<1)                   //  If the length is 0:
    l.add(p);               //   Add the permutation input-String to the Set
  else                      //  Else:
    for(;i<n;               //   Loop over the first input-String
      p(                    //    And do a recursive-call with:
        p+s.charAt(i),      //     Permutation + char
        s.substring(0,i)+s.substring(++i,n),l)
                            //     Everything except this char
      );                    //   End of loop
}                           // End of method (2)

l.forEach(System.out::println);আপনার মুদ্রণের লুপের পরিবর্তে ব্যবহার করুন । এছাড়াও, আমি Setক্লাস পর্যায়ে সংলগ্ন ক্লাস ছাড়াই সংজ্ঞায়িত হওয়া পছন্দ করি না , একটি ল্যাম্বডা সংজ্ঞায়িত করে কোথায় এবং কোন পদ্ধতি কেউ জানে না। এটি আমার পক্ষে খুব বেশি আমদানিগুলি বাকিগুলি থেকে আলাদা হওয়া আমি বুঝতে পারি, তবে সেখানে স্বয়ংসম্পূর্ণ কিছুই নেই, এটি অন্য কোনও কিছুর চেয়ে স্নিপেটের সংগ্রহের মতো দেখাচ্ছে। আমি দুঃখিত, তবে পিসিজিতে প্রথমবারের মতো আমি -1 :(
অলিভিয়ার গ্রোগোয়ার

@ অলিভিয়ারগ্রোওয়ের সবার জন্য টিপটির জন্য প্রথমে ধন্যবাদ forEach। শ্রেণিকেন্দ্র হিসাবে Set, বিকল্প কি? মেইন-মেথড সহ পুরো ক্লাস পোস্ট করবেন? মূল-পদ্ধতি বাদ দিয়ে পুরো ক্লাসটি পোস্ট করুন, তবে ক্লাসটি নিজেই, ইন্টারফেস এবং ফাংশনটির নাম সহ?
কেভিন ক্রুইজসেন

আমি একটি সম্পূর্ণ ক্লাস লিখতে হবে। এটি আমি খুঁজে পেতে পারি এমন ছোট্ট স্ব-অন্তর্ভুক্ত। যোগ করার দরকার নেই public static void main, কেবল "প্রবেশের পদ্ধতিটি ..." বলুন say জিনিসটি হ'ল আপনার উত্তরটি বর্তমানে যেমন "স্বনির্ভর" সমস্ত নিয়ম ভঙ্গ করে। আমি বিধি নিষেধের বিরুদ্ধে নই, তবে ভঙ্গ করছি? হ্যাঁ, আমি মনে করি :(
অলিভিয়ার গ্রাগোয়ার

1
আরেকটি ধারণা: সেটটি প্যারামিটার হিসাবে পাস করবেন? সহায়ক ফাংশন, আমি এটি পুরোপুরি বুঝতে পারি, তবে এটি সেটটিকে সংজ্ঞায়িত করে যা আমাকে টিক দেয়।
অলিভিয়ার গ্রাগোয়ার

@ অলিভিয়েরগ্রোওয়ের ঠিক আছে, আপনার দ্বিতীয় পরামর্শটি নিয়েছেন। প্রকৃতপক্ষে আরও বোধগম্য করে তোলে, তাই আমি এখন থেকে এটি ব্যবহার করব। সৎ প্রতিক্রিয়ার জন্য ধন্যবাদ।
কেভিন ক্রুইজসেন

1

পার্ল 6 ,  39  38 বাইট

*.comb.permutations».join.unique[1..*]

চেষ্টা করে দেখুন

*.comb.permutations».join.unique.skip

চেষ্টা করে দেখুন

সম্প্রসারিত

*               # WhateverCode lambda (this is the parameter)
.comb           # split into graphemes
.permutations\  # get all of the permutations
».join          # join each of them with a hyper method call
.unique         # make sure they are unique
.skip           # start after the first value (the input)

1

সি ++, 142 বাইট

#include<algorithm>
void p(std::string s){auto b=s;sort(begin(s),end(s));do if(s!=b)puts(s.data());while(next_permutation(begin(s),end(s)));}

ungolfed

#include <algorithm>

void p(std::string s)
{
    auto b = s;                    // use auto to avoid std::string
    sort(begin(s), end(s));        // start at first permutation
    do
      if (s != b)                  // only print permutation different than given string
        puts(s.data());
    while (next_permutation(begin(s), end(s))); // move to next permutation
}

1

কে (ওকে) , 13 বাইট

সমাধান:

1_?x@prm@!#x:

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

ব্যাখ্যা:

মূল্যায়ন ডান থেকে বামে সঞ্চালিত হয়।

1_?x@prm@!#x: / the solution
           x: / store input in variable x
          #   / count length of x, #"abc" => 3
         !    / range, !3 => 0 1 2
     prm@     / apply (@) function permutations (prm) to range
   x@         / apply (@) these pumuted indixes back to original input
  ?           / return distinct values
1_            / drop the first one (ie the original input)

0

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

আমার একটি অতীত উত্তর থেকে গৃহীত ।

S=>(R=new Set,p=(s,m='')=>s[0]?s.map((_,i)=>p(a=[...s],m+a.splice(i,1))):R.add(m),_=p([...S]),[...R])


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