ছোট / বড় হাতের অক্ষরে শব্দের সমস্ত সম্ভাব্য সংমিশ্রণ পান


14

আমি একটি নির্দিষ্ট শব্দের সম্ভাব্য সমস্ত নিম্ন এবং উচ্চতর কেস আদেশগুলি মুদ্রণের জন্য বাশ স্ক্রিপ্ট লিখতে চাই, যেমন হারলে:

harley
harleY
harlEy
harLey
...
HARLey
HARLEy
HARLEY

আমার নিষ্পাপ সমাধানটি এই নির্দিষ্ট শব্দের জন্য এন-থ (এন লেন (শব্দ)) নেস্টেড ফর-লুপ লিখতে হবে:

#!/bin/bash
for a in {h,H}; do
    for b in {a,A}; do
    ...
    done
done

তবে আমাকে আবার আলাদা শব্দের জন্য স্ক্রিপ্ট কোড করতে হবে।

এটি সম্পাদন করার আরও ভাল উপায় আছে?

উত্তর:


18

কিছুটা ভাল সমাধান:

echo {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y}

সম্পূর্ণ স্কেল্যাবিলিটির জন্য:

echo harley \
| perl -nle 'print "echo ",
                    join "",map { "{" . lc . "," .uc ."}" } split //' \
| xargs -I {} bash -c "{}"

আপনার যদি অবশ্যই প্রতি লাইনে একটি শব্দ থাকতে পারে তবে সাথে যান

for w in {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y};do echo $w;done

ম্যাটডেম এর মন্তব্যে ধন্যবাদ

সম্পর্কিত স্কেলেবল সংস্করণটি হ'ল:

echo harley \
| perl -nle 'print join "",map { "{" . lc . "," .uc ."}" } split //' \
| xargs -I {} bash -c 'for w in {};do echo $w;done'

মজাদার জন্য, "সুপারলিফরাগিলিস্টিসিপিয়ালিডোসিয়াস" এর সাথে "হারলে" প্রতিস্থাপনের চেষ্টা করুন 5 মিনিট হয়ে গেছে এবং আমার কম্পিউটারটি এখনও এটির উপর ক্রাচ করছে এবং সম্ভবত শেষ হবে না :)


1
W {h, H} {a, A} {r, R} {l, L} {e, E} {y, Y for এর জন্য; ইকো $
ডাব্লু

4
এখনও এক-সরল এক-লাইন সমাধান:printf '%s\n' {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y}
1024

2
@ John1024 আমি যে পোস্ট করুন একটি উত্তর হিসাবে আমরা আপনাকে উত্সাহিত করি, এটি একটি অধীনে মুল্যায়ন এর ব্যাশ এর বৈশিষ্ট্যprintf
steeldriver

10
ইভাল প্রতিধ্বনি $ (প্রতিধ্বনি " শব্দ " | সেডস এর / / / {\ ইউ এবং, \ এল ও} / জি ')
  • sed 's/./{&,&}/g'পরিণত Fooহবে {F,F}{o,o}{o,o}, যা বেশ অকেজো হবে। তবে যোগ করুন \Uএবং \Lআপনি প্রতিটি চিঠির উপরের এবং নিম্নতর কেস পাবেন; যেমন {F,f}{O,o}{O,o},।
  • তারপরে evalশেলটিকে { X , x } ব্রেস ক্রমগুলি প্রসারিত করতে বলার জন্য এটি সাধারণ বিষয় ।

1
দুর্দান্ত কৌশল :)। আমি যদি দুটি উত্তর গ্রহণ করতে পারি, আপনারও গৃহীত হবে! যেভাবেই হোক আপভোট করুন
পলিম

5

সম্পাদনা 2: এই উত্তরটি ভুল। এটি যেমন করা উচিত তেমন 2 comb n সংমিশ্রণ তৈরি করে না।

সম্পাদনা করুন: আমি জানি না কেন, কিন্তু এই সমাধান সত্যিই দ্রুত কম 0.3 সেকেন্ডের মধ্যে @Joeseph আর দ্বারা Perl সমাধান তুলনায় এটি হবে "Supercalifragilisticexpialidocious" রান!

এটি আমার ক্র্যাক এখানে:

#!/bin/bash

str=${1^^}  # convert to uppercase
len=${#str} # get length of string

for ((perm=0; perm <= len; perm++)); do
    for ((i=0; i <= len; i++)); do
        lower=${str,,}   # convert to lowercase

        # Uppercase n-th letter for permutation
        if [ $perm -gt 0 ]; then
            nth=${lower:perm-1}
            lower=$(echo ${lower:0:perm-1}${nth^})
        fi

        echo -n ${str:0:i} # print orig string from 0 to $i
        echo ${lower:i}    # print new string from $i to end
    done
done | sort -u

এটি চালানো:

$ ./permutations.sh hi
hi
hI
Hi
HI

$ ./permutations.sh harley
harley
harleY
harlEy
harLey
haRley
hArley
Harley
HarleY
HarlEy
HarLey
HaRley
HArley
HArleY
HArlEy
HArLey
HARley
HARleY
HARlEy
HARLey
HARLeY
HARLEy
HARLEY

এটিকে কাঁটাচামচ ও সংশোধন করতে দ্বিধা বোধ করুন, আমি নিশ্চিত এটি অনুকূলিত হতে পারে be https://gist.github.com/ryanmjacobs/4c02ad80f833dee0c307


1
কোডটি পরিষ্কারভাবে সমস্ত ফলাফল মুদ্রণ করে না। সঙ্গে harleyআপনি 64 ফলাফল, যেখানে এর থাকা উচিত harLEY, উদাহরণস্বরূপ?
ডেনিস

1
@ ডেনিস ইউপ আপনি ঠিক বলেছেন প্রতিবার 2 ^ n ফলাফল হওয়া উচিত, যেখানে n হল মূল স্ট্রিংয়ের অক্ষরের সংখ্যা। এই উত্তরটি ভুল।
ryanmjacobs

0

আপনি যদি কোডিংয়ের পরিবর্তে প্রস্তুত সরঞ্জামগুলি ব্যবহার করতে পছন্দ করেন তবে আপনি টেক্সটমেকানিক (ক্রমশক্তি / সংমিশ্রণ জেনারেটর সরঞ্জাম) এবং ইউনিট- রূপান্তর.আইনফো ব্যবহার করতে পারেন


তারা ঠিক কীভাবে এই সরঞ্জামগুলি পাবে এবং ব্যবহার করবে?
জেফ শ্যাচলার

এই প্রকল্পগুলির জন্য হোম পৃষ্ঠাগুলি বা গিটহাবের সংগ্রহস্থল এবং / অথবা যদি সেগুলি প্যাকেজ থেকে ইনস্টল করা যায় তবে কয়েকটি বিশদ যুক্ত করে এই উত্তরটি ব্যাপকভাবে উন্নত করা যেতে পারে।
অ্যান্টনি জিওগেইগান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.