সমান স্কোর সহ একটি শব্দ ভাগ করুন


9

এ = 1, বি = 2 ... জেড = 26, এবং একটি শব্দের মান এই বর্ণের মানগুলির যোগফল হিসাবে ধরে নেওয়া, কিছু শব্দের দুটি টুকরো করে ভাগ করা সম্ভব যেগুলির সমান মান রয়েছে।

উদাহরণস্বরূপ, "ওয়ার্ডস্প্লিট" এটিকে দুটি টুকরো টুকরো টুকরো করা যেতে পারে: অর্ডসেল ডাব্লুপিট, কারণ ও + আর + ডি + এস + ল = ডাব্লু + পি + আই + টি।

এটি আমার কম্পিউটিং শিক্ষক আমাদের দেওয়া একটি চ্যালেঞ্জ ছিল - এটি একটি পুরানো লায়নহেড স্টুডিওজ চ্যালেঞ্জ, স্পষ্টতই। আমি এটি পাইথনে সমাধান করেছি এবং খুব শীঘ্রই আমার উত্তর পোস্ট করব।

চ্যালেঞ্জ: সংক্ষিপ্ত প্রোগ্রাম যা সমান স্কোর থাকা সমস্ত সম্ভাব্য বিভাজনকে তালিকাভুক্ত করতে পারে। মনে রাখবেন যে এটি অক্ষরের প্রতিটি গ্রুপের জন্য কেবল একটির তালিকা তৈরি করতে হবে - উদাহরণস্বরূপ, আরডসেল wpit rdosl wtip এর সমান। তারা কথায় যে ক্রম আসে সেগুলি তালিকাভুক্ত করা আরও সহজ।

বোনাস:

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

প্রোগ্রামটি অবশ্যই মিশ্র কেস ইনপুটকে সমর্থন করবে? এবং যদি তাই এটি আউটপুট জন্য কেস বাতিল করতে পারেন?
নিমো 157

@ নিমো 157 এটি কেস উপেক্ষা করতে পারে এবং আউটপুট এ সংরক্ষণ করতে হবে না।
থমাস ও

প্রোগ্রামটি আউটপুট অতিরিক্ত স্টাফ রাখতে পারে, যতক্ষণ আউটপুটটির অনুরোধ করা অংশটি মানুষের কাছে পরিষ্কার?
জেবি

@ জেবি হ্যাঁ এটা করতে পারে।
থমাস হে

ঠিক আছে, আমি সেই পার্লটি তখন উন্নত করব;) ধন্যবাদ
জেবি

উত্তর:


4

পার্ল, 115 118 123

@_=~/./g;for$i(1..1<<@_){$l=$
r;$i&1<<$_?$l:$r+=64-ord$_[$_
]for 0..$#_;$l-$r||$i&1<<$_&&
print$_[$_]for 0..$#_;say""}

সাথে চালাও perl -nE '<code goes here>'। সেই 'এন' কোড আকারে গণনা করা হয়।

Respaced:

@_ = /./g;
for $i (1 .. 1<<@_) {
  $l = $r;
  $i & 1<<$_ ? $l : $r -= 64 - ord $_[$_] for 0 .. $#_;

  $l - $r      ||
  $i & 1<<$_   &&
  print $_[$_]
    for 0 .. $#_;

  say ""
}

মন্তব্য এবং পরিবর্তনশীল নাম সহ:

# split a line of input by character
@chars = /./g;

# generate all binary masks of same length
for $mask (1 .. 1<<@_) {

  # start at "zero"
  $left_sum = $right_sum;

  # depending on mask, choose left or right count
  # 1 -> char goes left; 0 -> char goes right
  $mask & 1<<$_ ? $left_sum : $right_sum
    -= 64 - ord $chars[$_]   # add letter value
      for 0 .. $#chars;      # for all bits in mask

  # if left = right
  $left_sum - $right_sum ||

  # if character was counted left (mask[i] = 1)
  $mask & 1<<$_          &&

  # print it
  print $chars[$_]

  # ...iterating on all bits in mask
    for 0 .. $#chars;

  # newline
  say ""
}

ব্যবহৃত কিছু কৌশল:

  • 1..1<<@_হিসাবে একই বিট পরিসীমা কভার 0..(1<<@_)-1, কিন্তু কম। (দ্রষ্টব্য যে একাধিকবার পরিসীমা সীমানা সহ আরও দূরে থেকে সমস্যাটি বিবেচনা করা যাই হোক না কেন কোনও ভুল আউটপুট তৈরি করবে না)
  • $ বাম_আরঞ্জ এবং $ ডান_রেঞ্জ বাস্তব "0" সংখ্যার শূন্যে পুনরায় সেট করা হয় না: যেহেতু আমরা কেবল তাদের সংগ্রহ করি এবং শেষ পর্যন্ত তাদের তুলনা করি, কেবল আমাদের প্রয়োজন একই মান থেকে শুরু করা।
  • 64-ord$_[$_]যোগ করার পরিবর্তে বিয়োগ করা ord$_[$_]-64একটি অদৃশ্য চরিত্রকে জয় করে: যেহেতু এটি একটি ডিলিমিটার দিয়ে শেষ হয়, তাই এটি স্থানটিকে forঅপ্রয়োজনীয় আগে তৈরি করে ।
  • পার্ল আপনি যদি একটি পরিবর্তনশীল তিন শর্তসাপেক্ষ অপারেটর দ্বারা নির্ধারিত নির্ধারিত করতে দেয়: cond ? var1 : var2 = new_value
  • বুলিয়ান এক্সপ্রেশনগুলি শৃঙ্খলাবদ্ধ &&এবং ||যথাযথ শর্তাবলীর পরিবর্তে ব্যবহৃত হয়।
  • $l-$r এর চেয়ে কম $l!=$r
  • এমনকি ভারসাম্যহীন না এমন বিভাজনেও একটি নতুন লাইন আউটপুট আউট করবে। খালি লাইনগুলি নিয়ম করে ঠিক আছে! আমি জিজ্ঞাসা করেছিলাম!

আমাদের মধ্যে যারা লাইন শব্দ করে না তাদের ব্যাখ্যা করার জন্য যত্নশীল? দেখে মনে হচ্ছে আপনি আমার মতো বাইনারি মাস্ক পদ্ধতির ব্যবহার করছেন এবং আমি means৪ টি অর্থ '@' = 'এ' - 1 দেখতে পেয়েছি এবং এর পরে আমি বেশ হারিয়েছি।
dmckee --- প্রাক্তন-মডারেটর বিড়ালছানা

এই সম্পাদনা কি আরও ভাল?
জেবি

খুশী হলাম। বাম বা ডান যোগফলের প্রতিটি গণনা যুক্ত করার সুবিধা নেওয়ার বিষয়ে আমার চিন্তা করা প্রয়োজন। সুস্পষ্ট হওয়া উচিত ছিল, কিন্তু আমি এটি মিস করেছি।
ডিএমকেকে --- প্রাক্তন-মডারেটর বিড়ালছানা

3

জে (109)

~.(/:{[)@:{&a.@(96&+)&.>>(>@(=/@:(+/"1&>)&.>)#[),}.@(split~&.>i.@#@>)@<@(96-~a.&i.)"1([{~(i.@!A.i.)@#)1!:1[1

এর জন্য আউটপুট wordsplit:

┌─────┬─────┐
Wllw ipdipst│
├─────┼─────┤
Iltdiltw│oprs │
├─────┼─────┤
Tiptw lodlors│
├─────┼─────┤
Lodlors│iptw │
├─────┼─────┤
Rsoprs │diltw│
├─────┼─────┤
Ipdipst│lorw │
└─────┴─────┘

ব্যাখ্যা:

  • 1!:1[1: স্টিডিন থেকে একটি লাইন পড়ুন
  • ([{~(i.@!A.i.)@#): সমস্ত অনুমতি পেতে
  • "1: প্রতিটি অনুক্রমের জন্য:
  • (96-~a.&i.): লেটার স্কোর পেতে
  • }.@(split~&.>i.@#@>)@<: প্রথম এবং শেষ সংখ্যার পরে ব্যতীত প্রতিটি সম্ভাব্য স্থানে স্কোরগুলির প্রতিটি ক্রম বিভাজন বিভক্ত করুন
  • >(>@(=/@:(+/"1&>)&.>)#[): দেখুন কোন আদেশের সাথে মিল রয়েছে অর্ধেক এবং সেগুলি নির্বাচন করুন
  • {&a.@(96&+)&.>: স্কোরগুলি অক্ষরে পরিণত করুন
  • ~.(/:{[): তুচ্ছ বৈচিত্রগুলি দূর করুন (যেমন ordsl wpitএবং ordsl wpti)

আপনার কয়েকটি উত্তর সদৃশ।
ডেভিডসি

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

কোন সামান্য উদ্দেশ্য ছিল না। আমি কেবল বোঝাতে চেয়েছিলাম, উদাহরণস্বরূপ, আপনার প্রথম উত্তর, {"lorw", "ডিপস্ট" final আপনার চূড়ান্ত উত্তরের একটি সদৃশ, {"ডিপস্ট", "লোর"}} কেবল শব্দের ক্রম আলাদা।
ডেভিডসি

@ ডেভিডকারেরার: ওফস: পিআই ভেবেছিল আপনার অর্থ আমি কারওর উত্তর অনুলিপি করেছিলাম ... যাইহোক এই প্রশ্নটি বলছে (যদি আমি এটি সঠিকভাবে ব্যাখ্যা করি) যেখানে অনুলিপিগুলি পৃথক অংশগুলির একে অপরের অনুমতি, তবে অপসারণের জন্য নয় অংশগুলির ক্রম পৃথক, যেমন {a,bc}ইতিমধ্যে যদি পাওয়া যায় {a,cb}তবে অপসারণ করতে কিন্তু অপসারণের জন্য নয় {bc,a}। (এবং অবশ্যই আমি অসন্তুষ্ট নই, যদি আমি আসলে / কারওর উত্তরটিকে নকল করে থাকি তবে কেউ যদি এটি নির্দেশ করে তবে আমি এটিকে পছন্দ করব।)
মেরিনাস

আপনি ঠিক বলে মনে হচ্ছে। নির্দেশাবলী বলে যে শব্দের ক্রম অগ্রাহ্য করা ঠিক আছে ("নোট করুন যে এটি কেবলমাত্র প্রতিটি বর্ণের জন্য একটি করে তালিকা তৈরি করতে হবে"), তবে তাদের এটির প্রয়োজন হয় না। এটি আমার কয়েকটি চরিত্র সংরক্ষণ করতে পারে। ধন্যবাদ।
ডেভিডসি

2

c99 - 379 প্রয়োজনীয় অক্ষর

#include <stdio.h>
#include <string.h>
#include <ctype.h>
int s(char*w,int l,int m){int b,t=0;for(b=0;b<l;++b){t+=(m&1<<b)?toupper(w[b])-64:0;}return t;}
void p(char*w,int l,int m){for(int b=0;b<l;++b){putchar((m&1<<b)?w[b]:32);}}
int main(){char w[99];gets(w);int i,l=strlen(w),m=(1<<l),t=s(w,l,m-1);
for(i=0;i<m;i++){if(s(w,l,i)==t/2){p(w,l,i);putchar(9);p(w,l,~i);putchar(10);}}}

পদ্ধতির বিষয়টি বেশ সুস্পষ্ট। একটি ফাংশন রয়েছে যা একটি মুখোশ অনুসারে শব্দের যোগ করে এবং এটি একটি মুখোশ অনুসারে প্রিন্ট করে। স্ট্যান্ডার্ড ইনপুট থেকে ইনপুট। একটি অদ্ভুততা হ'ল মুদ্রণ রুটিনটি মুখোশের মধ্যে নয় অক্ষরের জন্য স্থান সন্নিবেশ করায়। গ্রুপগুলি পৃথক করতে একটি ট্যাব ব্যবহার করা হয়।

আমি কোনও বোনাস আইটেমই করি না বা এগুলি সহজে সমর্থন করার জন্য রূপান্তরিত হয় না।

পাঠযোগ্য এবং মন্তব্য করা হয়েছে:

#include <stdio.h>
#include <string.h>
#include <ctype.h>
int s(char *w, int l, int m){ /* word, length, mask */
  int b,t=0;                  /* bit and total */
  for (b=0; b<l; ++b){        
/*     printf("Summing %d %d %c %d\n",b,m&(1<<b),w[b],toupper(w[b])-'A'-1); */
    t+=(m&1<<b)?toupper(w[b])-64:0; /* Add to toal if masked (A-1 = @ = 64) */
  }
  return t;
}
void p(char *w, int l, int m){
  for (int b=0; b<l; ++b){ 
    putchar((m&1<<b)?w[b]:32);  /* print if masked (space = 32) */
  }
}
int main(){
  char w[99];
  gets(w);
  int i,l=strlen(w),m=(1<<l),t=s(w,l,m-1);
/*   printf("Word is '%s'\n",w); */
/*   printf("...length %d\n",l); */
/*   printf("...mask   0x%x\n",m-1); */
/*   printf("...total  %d\n",t); */
  for (i=0; i<m; i++){
/*     printf("testing with mask 0x%x...\n",i); */
    if (s(w,l,i)==t/2) {p(w,l,i); putchar(9); p(w,l,~i); putchar(10);}
    /* (tab = 9; newline = 10) */
  }
}

ভ্যালিডেশন

 $ wc wordsplit_golf.c
  7  24 385 wordsplit_golf.c
 $ gcc -std=c99 wordsplit_golf.c
 $ echo wordsplit | ./a.out
warning: this program uses gets(), which is unsafe.
 or sp          w  d  lit
wor   l            dsp it
 ords l         w    p it
w    p it        ords l  
   dsp it       wor   l  
w  d  lit        or sp   

1

রুবি: 125 টি অক্ষর

r=->a{a.reduce(0){|t,c|t+=c.ord-96}}
f=r[w=gets.chomp.chars]
w.size.times{|n|w.combination(n).map{|s|p([s,w-s])if r[s]*2==f}}

নমুনা রান:

bash-4.2$ ruby -e 'r=->a{a.reduce(0){|t,c|t+=c.ord-96}};f=r[w=gets.chomp.chars.to_a];w.size.times{|p|w.combination(p).map{|q|p([q,w-q])if r[q]*2==f}}' <<< 'wordsplit'
[["w", "o", "r", "l"], ["d", "s", "p", "i", "t"]]
[["w", "p", "i", "t"], ["o", "r", "d", "s", "l"]]
[["o", "r", "s", "p"], ["w", "d", "l", "i", "t"]]
[["w", "d", "l", "i", "t"], ["o", "r", "s", "p"]]
[["o", "r", "d", "s", "l"], ["w", "p", "i", "t"]]
[["d", "s", "p", "i", "t"], ["w", "o", "r", "l"]]

1

গণিত 123 111

শব্দের সমস্ত উপসর্গ সন্ধান করে যা শব্দের "এসকি মোট" 1/2 রয়েছে d,। তারপরে সেই সাবসেটগুলির পরিপূরকগুলি সন্ধান করুন।

d = "ওয়ার্ডস্প্লিট"

{#, Complement[w, #]}&/@Cases[Subsets@#,x_/;Tr@x==Tr@#/2]&[Sort[ToCharacterCode@d - 64]];
FromCharacterCode[# + 64] & /@ %

IP IP "আইপিটিডাব্লু", "ডিএলআরএস"}, L "লোর", "ডিআইপিএসটি"}, O "ওপিআরএস", "দিল্টডব্লিউ"}, D "দিল্টডব্লু", "ওপিআরএস"}, D "ডিআইপিএসটি", "লোর" " , {"DLORS", "IPTW"}


1

জে, 66 অক্ষর

প্রতিটি সম্ভাব্য সাবসেট নির্বাচন করতে বেস 2 সংখ্যাগুলির অঙ্কগুলি ব্যবহার করে।

   f=.3 :'(;~y&-.)"{y#~a#~(=|.)+/"1((+32*0&>)96-~a.i.y)#~a=.#:i.2^#y'
   f 'WordSplit'
┌─────┬─────┐
│Worl │dSpit│
├─────┼─────┤
│Wdlit│orSp │
├─────┼─────┤
│Wpit │ordSl│
├─────┼─────┤
│ordSl│Wpit │
├─────┼─────┤
│orSp │Wdlit│
├─────┼─────┤
│dSpit│Worl │
└─────┴─────┘

0

আমার সমাধান নীচে। এটি আকারে প্রায় অ্যান্টি-গল্ফ, তবে এটি খুব ভালভাবে কাজ করে। এটি এন-ওয়ে বিভক্তিকে সমর্থন করে (যদিও প্রায় 3 টি বিভাজনের চেয়ে আরও বেশি সময়ের জন্য গণনার সময় খুব দীর্ঘ হয়ে যায়) এবং এটি সদৃশ অপসারণকে সমর্থন করে।

class WordSplitChecker(object):
    def __init__(self, word, splits=2):
        if len(word) == 0:
            raise ValueError, "word too short!"
        if splits == 0:
            raise ValueError, "splits must be > 1; it is impossible to split a word into zero groups"
        self.word = word
        self.splits = splits

    def solve(self, uniq_solutions=False, progress_notifier=True):
        """To solve this problem, we first need to consider all the possible
        rearrangements of a string into two (or more) groups.

        It turns out that this reduces simply to a base-N counting algorithm,
        each digit coding for which group the letter goes into. Obviously
        the longer the word the more digits needed to count up to, so 
        computation time is very long for larger bases and longer words. It 
        could be sped up by using a precalculated array of numbers in the
        required base, but this requires more memory. (Space-time tradeoff.)

        A progress notifier may be set. If True, the default notifier is used,
        if None, no notifier is used, and if it points to another callable,
        that is used. The callable must take the arguments as (n, count, 
        solutions) where n is the number of iterations, count is the total 
        iteration count and solutions is the length of the solutions list. The
        progress notifier is called at the beginning, on every 1000th iteration, 
        and at the end.

        Returns a list of possible splits. If there are no solutions, returns
        an empty list. Duplicate solutions are removed if the uniq_solutions
        parameter is True."""
        if progress_notifier == True:
           progress_notifier = self.progress 
        solutions = []
        bucket = [0] * len(self.word)
        base_tuple = (self.splits,) * len(self.word)
        # The number of counts we need to do is given by: S^N,
        # where S = number of splits,
        #       N = length of word.
        counts = pow(self.splits, len(self.word))
        # xrange does not create a list in memory, so this will work with very
        # little additional memory.
        for i in xrange(counts):
            groups = self.split_word(self.word, self.splits, bucket)
            group_sums = map(self.score_string, groups)
            if len(set(group_sums)) == 1:
                solutions.append(tuple(groups))
            if callable(progress_notifier) and i % 1000 == 0:
                progress_notifier(i, counts, len(solutions))
            # Increment bucket after doing each group; we want to include the
            # null set (all zeroes.)
            bucket = self.bucket_counter(bucket, base_tuple)
        progress_notifier(i, counts, len(solutions))
        # Now we have computed our results we need to remove the results that
        # are symmetrical if uniq_solutions is True.
        if uniq_solutions:
            uniques = []
            # Sort each of the solutions and turn them into tuples.  Then we can 
            # remove duplicates because they will all be in the same order.
            for sol in solutions:
                uniques.append(tuple(sorted(sol)))
            # Use sets to unique the solutions quickly instead of using our
            # own algorithm.
            uniques = list(set(uniques))
            return sorted(uniques)
        return sorted(solutions)

    def split_word(self, word, splits, bucket):
        """Split the word into groups. The digits in the bucket code for the
        groups in which each character goes in to. For example,

        LIONHEAD with a base of 2 and bucket of 00110100 gives two groups, 
        "LIHAD" and "ONE"."""
        groups = [""] * splits
        for n in range(len(word)):
            groups[bucket[n]] += word[n]
        return groups

    def score_string(self, st):
        """Score and sum the letters in the string, A = 1, B = 2, ... Z = 26."""
        return sum(map(lambda x: ord(x) - 64, st.upper()))

    def bucket_counter(self, bucket, carry):
        """Simple bucket counting. Ex.: When passed a tuple (512, 512, 512)
        and a list [0, 0, 0] it increments each column in the list until
        it overflows, carrying the result over to the next column. This could
        be done with fancy bit shifting, but that wouldn't work with very
        large numbers. This should be fine up to huge numbers. Returns a new
        bucket and assigns the result to the passed list. Similar to most
        counting systems the MSB is on the right, however this is an 
        implementation detail and may change in the future.

        Effectively, for a carry tuple of identical values, this implements a 
        base-N numeral system, where N+1 is the value in the tuple."""
        if len(bucket) != len(carry):
            raise ValueError("bucket and carry lists must be the same size")
        # Increase the last column.
        bucket[-1] += 1 
        # Carry numbers. Carry must be propagated by at least the size of the
        # carry list.
        for i in range(len(carry)):
            for coln, col in enumerate(bucket[:]):
                if col >= carry[coln]:
                    # Reset this column, carry the result over to the next.
                    bucket[coln] = 0
                    bucket[coln - 1] += 1
        return bucket

    def progress(self, n, counts, solutions):
        """Display the progress of the solve operation."""
        print "%d / %d (%.2f%%): %d solutions (non-unique)" % (n + 1, counts, (float(n + 1) / counts) * 100, solutions) 

if __name__ == '__main__':
    word = raw_input('Enter word: ')
    groups = int(raw_input('Enter number of required groups: '))
    unique = raw_input('Unique results only? (enter Y or N): ').upper()
    if unique == 'Y':
        unique = True
    else:
        unique = False
    # Start solving.
    print "Start solving"
    ws = WordSplitChecker(word, groups)
    solutions = ws.solve(unique)
    if len(solutions) == 0:
        print "No solutions could be found."
    for solution in solutions:
        for group in solution:
            print group,
        print

নমুনা আউটপুট:

Enter word: wordsplit
Enter number of required groups: 2
Unique results only? (enter Y or N): y
Start solving
1 / 512 (0.20%): 0 solutions (non-unique)
512 / 512 (100.00%): 6 solutions (non-unique)
dspit worl
ordsl wpit
orsp wdlit

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

2
@ সুগারম্যান: এটি একটি রেফারেন্স বাস্তবায়ন, খেলা জয়ের চেষ্টা নয়। আমি পৃষ্ঠার শীর্ষে স্থান গ্রহণের চেয়ে উত্তর হিসাবে রেফারেন্স বাস্তবায়ন পছন্দ করি এবং লিঙ্ক পচনের ঝুঁকি অপসারণ করতে আমি তাদের সাইটে অনুরুপভাবে পছন্দ করি।
dmckee --- প্রাক্তন-মডারেটর বিড়ালছানা

@ সুগারম্যান: জমা দিচ্ছেন না কেন? কিছু না থাকার থেকে এটা ভালো. এটি হ্রাস করা যেতে পারে, তবে কেন বিরক্ত হবে - আমি সত্যই আমার নিজের প্রশ্নটি গ্রহণ করতে পারি না (ভাল, আমি পারি , তবে এটি এর
টমাস ও

কারণ এর গোড়ায় এটি একটি প্রশ্নোত্তর সাইট। উত্তর হিসাবে উদ্দিষ্ট কিছু এমন পোস্ট করা উচিত নয়।
জেফ সোয়েনসেন

1
যেমনটি আমি আমার প্রথম মন্তব্যে বলেছি, আমি প্রশ্নটির উপর একটি মন্তব্যে বা আপনার প্রশ্নের মালিক হওয়ার কারণে সেখানে লিঙ্কটি সম্পাদনা করব I যতক্ষণ না আপনি অন্য সকলকে (এবং ভোটদানের ফলাফল) বিবেচনা না করে স্বয়ংক্রিয়ভাবে নিজের উত্তরটি স্বীকার না করেন ততক্ষণ আপনার নিজের প্রশ্নের উত্তর জমা দেওয়ার ক্ষেত্রেও কোনও ভুল নেই।
জেফ সোয়েনসেন

0

লুয়া - 195

a=io.read"*l"for i=0,2^#a/2-1 do z,l=0,""r=l for j=1,#a do b=math.floor(i/2^j*2)%2 z=(b*2-1)*(a:byte(j)-64)+z if b>0 then r=r..a:sub(j,j)else l=l..a:sub(j,j)end end if z==0 then print(l,r)end end

ইনপুট অবশ্যই ক্যাপগুলিতে থাকতে হবে:

~$ lua wordsplit.lua 
>WORDSPLIT
WDLIT   ORSP
DSPIT   WORL
WPIT    ORDSL

0

পাইথন - 127

w=rawinput()
for q in range(2**len(w)/2):
 a=[0]*2;b=['']*2
 for c in w:a[q%2]+=ord(c)-96;b[q%2]+=c;q/=2
 if a[0]==a[1]:print b

এবং এখানে ডুপ্লিকেট ছাড়াই 182 বাইট সহ একটি এন-বিভক্ত সংস্করণ:

n,w=input()
def b(q):
 a=[0]*n;b=['']*n
 for c in w:a[q%n]+=ord(c)-96;b[q%n]+=c;q/=n
 return a[0]==a[1] and all(b) and frozenset(b)
print set(filter(None,map(b,range(n**len(w)/n))))

ইনপুট যেমন:

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