सबसे लंबा संगीतमय विकल्प खोजें


9

एक संगीत स्ट्रिंग किसी भी स्ट्रिंग है जिसे पियानो कीबोर्ड पर बजाया जा सकता है।

हम में से जो लोग बच्चों के रूप में पियानो सीखने के लिए मजबूर नहीं थे, उनके लिए यहां कीबोर्ड जैसा दिखता है।

पियानो

तो स्ट्रिंग feed a dead cabbageएक संगीतमय स्ट्रिंग है क्योंकि हर एक अक्षर इन नोटों में से एक से मेल खाता है।

आपकी चुनौती एक प्रोग्राम लिखना है जो STDIN से इनपुट के रूप में एक स्ट्रिंग लेता है, और सबसे लंबे समय तक संगीतमय विकल्प ढूंढता है। तब आपके प्रोग्राम को सबस्ट्रिंग प्रिंट करना होगा, और यह लंबाई है। यहाँ कुछ नमूना इनपुट / आउटपुट दिए गए हैं।

इनपुट: "मुझे फ़ीड! मुझे भूख लगी है!"

आउटपुट: फ़ीड 4


इनपुट: नो नो नो, नो मस्टीस्टरिन!

ऊपुत: ०


इनपुट: "A **bad** !!!fAd82342"

आउटपुट: abadfad 7


इनपुट: "गुड गोल्फिंग!"

आउटपुट: dg 2

नियम

  • आपका आउटपुट ऊपरी या निचला-मामला हो सकता है, लेकिन कोई विराम चिह्न या रिक्त स्थान नहीं होना चाहिए।

  • इनपुट स्ट्रिंग में कैपिटलाइज़ेशन और विराम चिह्न है, लेकिन यह प्रभावित नहीं करता है कि क्या एक विकल्प को "संगीतमय" माना जाता है या नहीं।

  • संगीत प्रतिस्थापन, और संख्या के बीच एक स्थान होना चाहिए।


1
केवल पूर्ण कार्यक्रम, कोई कार्य नहीं?
एलेक्स ए।

@ एलेक्सा हां, पूरा कार्यक्रम।
जेम्स

क्या आउटपुट मिश्रित मामला हो सकता है?
nderscore

@nderscore हाँ, यह हो सकता है।
जेम्स

जवाबों:


4

पायथ, 25 23 बाइट्स

pdJef!-T<G7+k.:@Grz0)lJ

2 बाइट्स @Jakube की बदौलत बच गए।

प्रदर्शन। दोहन ​​परीक्षण।

स्पष्टीकरण:

  • rz0: इनपुट, लोअरकेस में।
  • @Grz0: किसी भी गैर-अक्षर वर्ण की पट्टी।
  • .:@Grz0): सभी सबस्ट्रिंग्स उत्पन्न करें।
  • +k.:@Grz0): खाली स्ट्रिंग में जोड़ें।
  • f ... +k.:@Grz0): इन तारों पर फ़िल्टर करें।
  • -T<G7: गैर-संगीत पात्रों के लिए प्रत्येक स्ट्रिंग को फ़िल्टर करें।
  • !-T<G7: परिणाम को नापें। यह Trueऔर केवल अगर स्ट्रिंग संगीतमय था।
  • f!-T<G7+k.:@Grz0): म्यूजिकल स्ट्रिंग्स को फ़िल्टर करें।
  • ef!-T<G7+k.:@Grz0): आखिरी ऐसा तार लें। .:आकार द्वारा सबस्ट्रिंग ऑर्डर करता है, इसलिए यह सबसे लंबा संगीतमय विकल्प भी है।
  • Jef!-T<G7+k.:@Grz0): परिणाम को असाइन करें J
  • pdJ: प्रिंट J, के साथ d, अंतरिक्ष, अंत चरित्र के रूप में।
  • lJ: फिर, की लंबाई प्रिंट करें J

2

रूबी, 83 75 वर्ण

बहुत स्व-व्याख्यात्मक।

puts"#{s=gets.gsub(/[^a-z]/i,'').split(/[^a-g]/i).max_by &:size} #{s.size}"

इस तथ्य का लाभ उठाता है कि रूबी रेगेक्स ( .split(/[^a-g]/)) पर तारों को विभाजित कर सकती है ।


1

पर्ल, 58

#!perl -p
$\=0;map{$i++;$\="$& $i"if/[a-g]{$i}/i}(s/\W//gr)x y!!!cd

उपयोग:

$ perl ~/mus.pl <<<"FEED ME! I'm hungry!"
FEED 4

या

$ perl -pe'$\=0;map{$i++;$\="$& $i"if/[a-g]{$i}/i}(s/\W//gr)x y!!!cd' <<<"FEED ME! I'm hungry!"
FEED 4

0

जावा, 268

class Z{public static void main(String[]a){String s=new java.util.Scanner(System.in).nextLine().toLowerCase().replaceAll("[^a-z]",""),t;for(int i=s.length();i-->0;)if(!(t=s.replaceFirst("^(.*)([a-g]{"+i+"})(.*)$","$2")).equals(s)){System.out.println(t+" "+i);break;}}}

विस्तारित:

class Z {
    public static void main(String[] a) {
        String s = new java.util.Scanner(System.in).nextLine().toLowerCase().replaceAll("[^a-z]", ""), t;
        for (int i = s.length(); i-- > 0;) {
            if (!(t = s.replaceFirst("^(.*)([a-f]{" + i + "})(.*)$", "$2")).equals(s)) {
                System.out.println(t + " " + i);
                break;
            }
        }
    }
}


0

आर, 98 94 बाइट्स

p=strsplit(gsub("[^a-z]","",readline(),T),"[^a-gA-G]+")[[1]];m=max(n<-nchar(p));cat(p[n==m],m)

असंगठित + स्पष्टीकरण:

# Read from STDIN and remove all non-alphabetic characters
r <- gsub("[^a-z]", "", readline(), ignore.case = TRUE)

# Split r into a vector of substrings on characters other than a-g
p <- strsplit(r, "[^a-g]+")[[1]]

# Get the number of characters in each substring
n <- nchar(p)

# Get the length of the longest substring
m <- max(n)

# Print the string and length
cat(p[n == m], m)

सुझावों का स्वागत है!

नोट: आउटपुट अब मिश्रित-केस है, जिसे ओपी के संपादन के अनुसार अनुमति दी गई है। इससे 4 बाइट बच गईं।


0

गोल्फलुआ , 84 85 84 बाइट्स

B=I.r():g("%A",""):g("[^a-gA-G]"," ")M=0Q=""~@W B:gm("(%w+)")?#W>M M=#W Q=W$$w(Q,M)

मैं पहली बार बल लोअरकेस, तो पट्टी रिक्त स्थान बिना वर्ण के अक्षर, तो इनपुट (stdin) पर सभी गैर-संगीत पत्र को हटा दें। फिर मैं प्रत्येक शेष शब्द के माध्यम से स्कैन करता हूं और सबसे बड़ी और लंबाई (स्टडआउट) को आउटपुट करने से पहले इसकी लंबाई की तुलना करता हूं। लूप करने का शायद एक छोटा तरीका है, लेकिन इस समय मुझे यही मिला है।

एक अनगुल्ड लुआ कोड होगा

Line = io.read()                                  -- read stdin
NoSpaced = Line:gsub("%A","")                     -- strip non-letter chars
MusicalLetters = NoSpaced:gsub("[^a-gA-g]", " ")  -- remove non-musical letters
WordLen = 0, LongWord = ""                        -- helpers
for words in MusicalLetters:gmatch("(%w+)") do    -- scan for longest word
   if words:length() > WordLen then 
      WordLen = words:length()
      LongWord = words 
   end
end
print(LongWord, WordLen)                          -- output solution
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.