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


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.