मैं अपने एमपी 3 संग्रह को सॉर्ट करने के लिए एक "अंतिम फेरबदल" एल्गोरिदम लिखना चाहूंगा


33

मैं अपने एमपी 3 फ़ाइलों को एक तरह से शीर्षक और कलाकार पुनरावृत्ति से बचा जाता है के लिए छद्मकोड सुझावों की तलाश कर रहा हूं । मैं क्रोनर्स सुनता हूं - फ्रैंक सिनात्रा, टोनी बेनेट, एला फिट्जगेराल्ड आदि पुराने मानकों को गाते हुए। प्रत्येक कलाकार एक ही गीत के कई रिकॉर्ड करता है - फ्लाई मी टू द मून, द वे यू लुक टुनाइट, स्टारडस्ट आदि। मेरा लक्ष्य कलाकारों और गीत शीर्षकों के बीच अधिकतम स्थान के साथ गाने (या प्लेलिस्ट का आदेश देना) है। इसलिए अगर मेरे पास 2000 गाने हैं और 20 एला के हैं तो मैं उसे हर 100 गाने में केवल एक बार सुनना चाहूंगा। अगर 10 कलाकार फ्लाई मी टू द मून गाते हैं तो मैं इसे हर 200 गीतों में एक बार सुनना चाहता हूं। बेशक मैं अपने "परम फेरबदल" बनाने के लिए इन दो आवश्यकताओं को जोड़ना चाहता हूं।

मुझे पता है कि यह एक काफी विस्तृत खुला प्रश्न है। मैंने अभी तक इसकी प्रोग्रामिंग शुरू नहीं की है इसलिए मैं सिर्फ एक अच्छे दृष्टिकोण के सुझाव लेना चाहता हूं। मेरे पास वास्तव में समान रूप से अन्य गीत विशेषताओं को रखने के संबंध में कुछ अन्य आवश्यकताएं हैं, लेकिन मैं यहां नहीं जाऊंगा।


एक प्रारंभिक बिंदु के रूप में मैं कोड को संशोधित कर रहा हूं जो मुझे एमपी 3 फ़ाइलों में हेरफेर करने और आईडी 3 टैग पढ़ने के लिए मिला है

मैंने एक छोटा सा ऐप लिखा है जो नीचे पार्सिफाल के उत्तर का उपयोग करके मेरी आवश्यकता को पूरा करता है। मैंने यहां एक अनुवर्ती प्रश्न भी लिखा था । सभी महान प्रतिक्रियाओं के लिए धन्यवाद!


3
शांत सवाल, शांत समस्या, कोई है जो एल्गोरिदम को वास्तव में अच्छी तरह से जानता है, आपके लिए औपचारिक तरीकों के आधार पर एक शानदार जवाब होगा।
जिमी हॉफ

इसलिए, यदि आपके संगीत संग्रह का 50% उसी कलाकार का है, तो आप कलाकार को हर 2 गाने सुनना पसंद करेंगे, चाहे कितने भी अन्य कलाकार हों ... शायद 50% के बराबर नहीं, लेकिन आप इसे प्राप्त करें विचार। शायद सिर्फ मेरी राय है, लेकिन यह एक "अंतिम फेरबदल" की तरह नहीं है, जब तक कि आपके पास हर कलाकार के गाने की मात्रा समान नहीं है। दूसरी ओर, यदि आपके पास केवल एक कलाकार का 1 गीत है, तो आप नहीं चाहते कि वह बहुत अधिक बजाए। 2 के बीच संतुलन खोजना मुश्किल नहीं होना चाहिए।
Dukeling

मैं बस इस छद्म कोड की तरह कुछ करूँगा: while (length(songs) > 0) { x := rand(); addElem(shuffle, songs[x]); remElem(songs, x); }लेकिन आप कहते हैं कि आप एक "अंतिम फेरबदल" चाहते हैं। मुझे नहीं पता कि आप वास्तव में क्या चाहते हैं, यहां तक ​​कि सवाल भी पढ़ रहे हैं ...
कोल जॉनसन

क्या आप अपनी गीत सूची कहीं और अपलोड कर सकते हैं - शीर्षक और कलाकार टैब या पाइप अलग या XML
tgkprog

Banshee में (एक प्लगइन या कोर के रूप में) प्यारा होगा!
phw

जवाबों:


5

क्या आप अपना प्रोग्राम एक बार चलाना चाहते हैं और एक प्लेलिस्ट तैयार करना चाहते हैं, या अगले गीत को जीना चाहते हैं?

यदि उत्तरार्द्ध है, तो उत्तर सरल है:

  • एक ऐसी सरणी बनाएं जिसमें कलाकार और शीर्षक के साथ आपके सभी गाने हों
  • हाल ही में खेले गए गाने के शीर्षक रखने के लिए एक सूची (बेहतर सूची से जुड़ा हुआ) बनाएं। यह सूची खाली होने लगती है, और हर बार जब आप कोई गाना बजाते हैं तो आप उसे सूची में जोड़ देते हैं। जब सूची आपके वांछित "नो सॉन्ग रिपीट" आकार को हिट करती है, तो सबसे पुरानी (पहली) प्रविष्टि को छोड़ दें।
  • कलाकारों की सूची के लिए डिट्टो।

एक गीत चुनना फिर निम्न चरणों का क्रम बन जाता है:

  1. बेतरतीब ढंग से "सभी गाने" सरणी से एक गाना चुनें। यह केवल 0 और सरणी के आकार के बीच एक यादृच्छिक संख्या है।
  2. देखें कि क्या वह गाना पहले से ही खेले गए गाने की सूची में है। यदि ऐसा है, तो चरण # 1 पर वापस जाएं।
  3. देखें कि क्या कलाकार पहले से ही खेले गए कलाकार की सूची में है। यदि ऐसा है, तो चरण # 1 पर वापस जाएं।
  4. यदि आवश्यक हो तो पुरानी प्रविष्टियों को छोड़ते हुए गीत कलाकार / शीर्षक को उचित सूचियों में जोड़ें।
  5. गाना बजाओ।

संभावित मुद्दों के एक जोड़े हैं, लेकिन वे केवल तभी बात करना चाहिए जब आप यह होमवर्क के रूप में कर रहे हैं और एक वास्तविक परियोजना नहीं है।

  • जैसा कि @ डुकलिंग ने एक टिप्पणी में कहा, यदि आपका संग्रह किसी एकल कलाकार या गाने के शीर्षक के पक्ष में नाटकीय रूप से असंतुलित है, तो आप एक लूप में आ सकते हैं जहां आप लगातार गाने को अस्वीकार करते हैं। व्यवहार में, यह कोई मुद्दा नहीं है। समाधान यह है कि आपको "पहले से देखी गई" सूचियों के आकार को कम करने की आवश्यकता है। और चरण # 2 और # 3 पर काउंटर जोड़ना आपको बता सकता है कि क्या यह एक समस्या है (यदि आप एक पंक्ति में 10 विफलताओं को देखते हैं, तो एक चेतावनी बढ़ाएं और / या सूची के आकार को कम करें)।
  • यदि आप एक ऐसी प्लेलिस्ट बनाने की कोशिश कर रहे हैं जिसमें आपके सभी गाने केवल एक बार बजाए गए हों, तो आपको स्रोत सरणी से गाने हटाने होंगे। यह भी बदलेगा कि आप कितने "हाल ही में खेले" विफलताओं से निपटते हैं (क्योंकि अंततः आप अपने स्रोत सरणी में केवल एक कलाकार के साथ समाप्त हो सकते हैं)।
  • यदि आपके ID3 टैग मेरे जैसे कुछ भी हैं, तो उनमें बहुत सारी गलतियाँ हैं। क्या "ड्यूक एलिंगटन" को "ड्यूक एलिंग्टन" से अलग होने की आवश्यकता है? यदि हाँ, तो "हाल ही में खेली गई" सूचियों को स्कैन करते समय एक लेवेनस्टीन मैचर का उपयोग करते हुए देखें।

मैं RockBox ( rockbox.org ) का उपयोग करता हूं । गानों के किसी भी फ़ोल्डर के लिए यह एक गतिशील प्लेलिस्ट बना सकता है (जिसे सहेजा और बुकमार्क भी किया जा सकता है)। मेरी योजना प्रत्येक गाने के शीर्षक ०१०१, ०००२ को उपसर्ग करने की है और फिर उन्हें उसी क्रम में बजाया।
DeveloperDan

@DeveloperDan - एक ही प्रक्रिया काम करती है, लेकिन जैसा कि मैं अंत में ध्यान देता हूं कि आपके पास संभवतः ऐसे गाने होंगे जो नियमों के अनुकूल नहीं हैं। आपके पास दो विकल्प हैं: नियमों और रेरून को अनुकूलित करें, या (यदि कई नहीं हैं) तो बेतरतीब ढंग से गाने डालें।
पारसीफाल

मैं चरण 1 में एक सूची बनाऊंगा और इसे 2 और 3 में हटा दूंगा। इससे लूप में फंसना असंभव हो जाता है, और यदि सूची खाली हो जाती है, तो आप जानते हैं कि आपको नियम बदलने और स्कैन करने की आवश्यकता है। इसे करने का अधिक मजबूत तरीका।
मैके

13

मैंने जनरेटर (सी # में, एक अनंत लूप जो yieldप्रत्येक लूप पुनरावृत्ति का उपयोग करता है) का उपयोग करने से पहले ऐसा कुछ किया है । प्रत्येक पुनरावृत्ति गाने के अपने पूल (या जो कुछ भी) को देखता है और उन लोगों को बाहर निकालता है जो हाल ही में खेले गए हैं (या जो भी नकारात्मक मानदंड हैं)। फिर आप फ़िल्टर्ड सूची में से एक चुनें, और अपनी स्थिति को अपडेट करें। जैसे ही आपका राज्य सूख जाता है (आप गैर-सिनात्रा गाने बजाते हैं) मानदंड टूट जाते हैं और आपके बहिष्कृत गाने फिर से शामिल होने लगते हैं।

निश्चित रूप से इससे निपटने के लिए कोने के मामले हैं:

  • यदि आप सभी गीतों को निकालते हैं तो क्या होता है? (आमतौर पर सिर्फ एक को यादृच्छिक रूप से चुनें, राज्य को अस्थिर करने की उम्मीद)
  • क्या कुछ मानदंडों को प्राथमिकता दी जानी चाहिए? (आम तौर पर मामला है, हो सकता है कि आप फ्लाई मी टू द मून बैक टू बैक नहीं खेलना चाहते हों, और बैक टू बैक सिनात्रा नहीं खेलना पसंद करेंगे, लेकिन अगर यह सब आपके पास है ...)
  • यदि आपके गानों के संग्रह को अपडेट किया जाता है तो मध्य-लड़ाई क्या होती है? (आमतौर पर आसान से निपटने के लिए, लेकिन उपयोग के आधार पर समसामयिक मुद्दे हो सकते हैं)

11

आपके प्रश्न के आउटलेयर को अनदेखा करना, जो कि टेलस्टीन लाता है, ऐसा लगता है कि आपके पास समस्या है । सौभाग्य से, यह एक बहुत अच्छी तरह से प्रलेखित एल्गोरिथ्म है।

विकिपीडिया से

मदों के एक सेट को देखते हुए, प्रत्येक में एक वजन और एक मूल्य होता है, एक संग्रह में शामिल करने के लिए प्रत्येक आइटम की संख्या निर्धारित करते हैं ताकि कुल वजन किसी दिए गए सीमा से कम या बराबर हो और कुल मूल्य जितना संभव हो उतना बड़ा हो।

उस लेख में सूचीबद्ध कुछ संभावित रूप से प्रासंगिक विविधताएं हैं, साथ ही साथ नैकपैक समस्याओं की एक अतिरिक्त सूची भी है


नैकपैक समस्या की एक भिन्नता बहुउद्देश्यीय नैकपैक समस्या है। चींटी कॉलोनी एल्गोरिथ्म है कि समस्या को हल करने का एक साधन के रूप में सुझाव है। आपके प्रश्न के एनपी-कठिन पहलुओं से बचने के लिए चींटी कॉलोनी दृष्टिकोण आपके लिए सबसे आसान तरीका हो सकता है।

मैं आपकी समस्या को यात्रा सेल्समैन समस्या के चरम संस्करण के रूप में भी देख सकता था । यात्रा करने के लिए प्रत्येक शहर वास्तव में एक गीत है जिसे आप खेलना चाहते हैं, लेकिन मुझे यकीन नहीं है कि आप कलाकारों के बीच अंतराल को कैसे निर्दिष्ट करेंगे। यह सुझाव चीफ कॉलोनी के दृष्टिकोण से भी जुड़ा / हल किया जा सकता है।


8

मैं इस धारणा के तहत काम कर रहा हूं कि यह "यहां मेरी लाइब्रेरी है, इस प्रोग्राम को चलाएं और इसमें गाने बजाने का ऑर्डर जेनरेट करें।"

इसे लागू नहीं किया गया है और मैं अनिश्चित हूं कि यह अपने फेरबदल को बेहतर बनाएगा। हो सकता है कि मैं थोड़ा हूँ भी फिल्टर, जो परिणाम होगा (मेरा मानना है कि) गीत का एक आरंभिक सेट दिए गए शेष के लिए एक निर्धारित क्रम में में सख्त।

एक के पास एक ideal_gapहैश है। यह किसी दिए गए गुण (कलाकार, एल्बम, शीर्षक) के साथ एक गीत के घनत्व से गणना की जाती है। यदि किसी के पास 2000 गाने हैं और उनमें से 20 एला नाम के कलाकार के हैं, तो ideal_gap{'artist'}{"ella"}100 होगा।

इस जानकारी के बाद भी आदर्श_गैप मानों की अधिकतम सीमा होती है। चलो यह कहते हैं max_gap

विचार करें: ideal_gapएक गीत को रोकने के लिए अधिकतम मूल्य है जो केवल दो कलाकारों ने दूसरे गीत को बाद में 1000 गाने बजाने से रोकने के लिए गाया है, और साथ ही अधिकतम_गुण मूल्य में काफी वृद्धि हुई है जिसके परिणामस्वरूप "बैक ऑफ, नो गाने, बैक के कई पुनरावृत्तियों में वृद्धि हुई है। बंद, कोई गीत नहीं ”।

खेले गए अंतिम मैक्स_गैप गीतों की जांच करना (यह पिछले रन से पॉपुलेट किया जा सकता है ताकि अगर यह फ्रैंक सिनात्रा गायन फ्लाई मी टू द मून के साथ समाप्त हो जाए, तो अगला रन संयोग से उसी गीत के साथ शुरू नहीं होगा), एक गाने को फिल्टर करता है पुस्तकालय में उम्मीदवार गीतों का एक सेट है। एक गीत केवल उम्मीदवार के गीतों में होगा यदि इसके सभी अंतराल ideal_gapउन गुणों के लिए कम हैं।

उम्मीदवार गीतों के सेट से, यादृच्छिक पर एक का चयन करें।

विचार करें: सेट को भारित करना ताकि अधिक अधिकतम अंतराल के साथ गाने वाले गीतों की संभावना अधिक हो। इस तरह, किसी के पास प्लेलिस्ट के अंत में बड़े अधिकतम गैप वाले गीत नहीं हैं।

विचार करें: सभी तीन गुणों के आदर्श अंतराल से अधिक होने के बजाय, तीन में से सिर्फ दो। इसका मतलब यह हो सकता है कि आदर्श आदर्श की तुलना में जल्द ही कुछ खेला जा सकता है, लेकिन उम्मीदवार गीत के आकार को बढ़ाता है जिसका अर्थ है "यादृच्छिक पर एक का चयन करें" में अधिक विकल्प हैं।

यदि कोई गीत नहीं है जो आवश्यकताओं को भरता है, तो max_gap1 से वापस , और सभी आदर्श_गैप n/max_gapप्रतिशत से जहां nयह बंद हो गया है की संख्या है। इस तरह से अगर max_gap100 की संख्या है, और इसे इस पुनरावृत्ति में 5 बार बंद किया गया है, तो 100 का एक आदर्श_गैप अस्थायी रूप से 95 पर समायोजित किया जाएगा, और 20 का एक आदर्श_गैप अस्थायी रूप से 19 में समायोजित किया जाएगा। कम से कम एक उम्मीदवार गीत होने तक अंतराल, और फिर इसे ऊपर के रूप में चुनें।

विचार करें: एक न्यूनतम पूल आकार है। यह विचरण को जोड़ता है, लेकिन इसका परिणाम यह हो सकता है कि जब कोई अन्य गीत बजाया जा सकता है, तो आदर्श अंतराल की तुलना में जल्द ही एक गाना बजाया जाए।


1

यह एक अनुकूलन काम है, और एक बहुत जटिल एक आप देख रहे हैं, तो इष्टतम समाधान। सौभाग्य से मेरा मानना ​​है कि यह उन मामलों में से एक है जहां काफी अच्छा होगा।

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

एक सरल सूत्र सुझाव, प्रत्येक मापदंड जिसे आप ध्यान में रखना चाहते हैं, उसे एक वजन दिया जाना चाहिए, महत्वपूर्ण मानदंडों को एक उच्च वजन देना चाहिए, और उन मानदंडों के लिए कम वजन होना चाहिए जहां बहुत सारे गीत एक ही संपत्ति साझा करते हैं, ताकि वे हावी न हों :

For each song on the list
    For each other song on the list
        For each criteria
            If the two songs share that criteria
                Add to the quality value: square root( [criteria weight]/[distance between the two songs] )

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

क्रमपरिवर्तन करना

अब आप इस फॉर्मूले को math.stackexchange पर ले जा सकते हैं और उन्हें बता सकते हैं कि कितना कठिन और संभवतः व्यावहारिक रूप से असंभव है, किसी भी चीज़ के लिए इष्टतम समाधान ढूंढना लेकिन एक तुच्छ संख्या में गाने, या आप बस उस पर घड़ी चक्र फेंक सकते हैं और प्राप्त कर सकते हैं अच्छा समाधान।

ऐसा करने के कई तरीके हैं, यहाँ एक है:

Start with a random permutation of the list.
Several million times do the following:
    Select two entries at random
    For each of those two entries calculate their contribution to the quality value
    Swap the positions of the two entries
    Calculate the contribution to the quality value of the two entries at their new position
    If the sum of the calculations in the new positions is greater than the sum in the old positions
        Swap back

यह कुछ हद तक बेकार एल्गोरिथम है, लेकिन इसे लागू करना आसान है और एक इच्छा के रूप में कई मानदंडों से निपट सकता है।

अनुकूलन

विभिन्न ट्वीक और अनुकूलन के भार लागू किए जा सकते हैं, यहाँ कुछ हैं:

गुणवत्ता मूल्य गणना में, सूची के हर दूसरे गीत के खिलाफ एक गीत की जांच करने की जहमत न उठाएं, इसके बजाय इसे 100 या इतने निकटतम गीतों के खिलाफ जांचें। सामान्य मूल्यों के लिए इस गति अनुकूलन का व्यावहारिक रूप से परिणाम की गुणवत्ता पर कोई प्रभाव नहीं पड़ता है।

किसी दिए गए संपत्ति के दुर्लभ मूल्य के लिए उस मूल्य के मौजूदा उदाहरणों को ट्रैक करने के लिए उनकी तुलना में अधिक कुशल हो सकता है।

यदि आपको लगता है कि यह महत्वपूर्ण है कि जिन मूल्यों के कुछ उदाहरण हैं, वे यहां तक ​​कि करीब से भी अलग-थलग पड़ जाते हैं, तो संभवतः उन विशिष्ट मूल्यों के लिए वजन बढ़ाना आवश्यक है, लेकिन उस मानदंड के अन्य मूल्यों के लिए नहीं।

एक छद्म यादृच्छिक फ़ंक्शन जो समान वितरण में सूची से सभी संभावित जोड़े उठाता है, सामान्य यादृच्छिक पिक की तुलना में प्रति पिक थोड़ी बेहतर दक्षता हो सकती है।


मेरा मानना ​​है कि आपका एल्गोरिथम नकली एनालाइजिंग का एक रूप है जो इसे और अधिक परिष्कृत करने के लिए देखने के लिए एक जगह हो सकती है।

@MichaelT नहीं, नकली एनालिंग एक "तापमान" का उपयोग करता है, जो इसे स्थानीय अधिकतम में पकड़े जाने से बचने के प्रयास में कम स्थिति में पुनः प्राप्त करने की अनुमति देता है। यह सिर्फ एक स्थानीय खोज है , इसे सिम्युलेटेड एनेलिंग, या किसी भी अन्य संभाव्य खोज एल्गोरिदम के अपेक्षाकृत आसानी से संशोधित किया जा सकता है, लेकिन मुझे नहीं लगता कि इसके लिए बहुत आवश्यकता है। मूल रूप से सभी अन्य एल्गोरिदम अलग-अलग तरीके से स्थानीय मैक्सिमा से बचने की कोशिश करते हैं, लेकिन मुझे नहीं लगता कि आप इस समस्या के लिए एक स्थानीय मैक्सिमा पाएंगे जो स्वीकार्य समाधान नहीं है।
आआआआआआआआआ आआआआआ आआआआआ

0

यह दिलचस्प है कि लोग अलग-अलग दृष्टिकोण क्या लेते हैं। मैं निम्नलिखित कार्य करूंगा:

अब तक खेले गए सभी ट्रैक के आधार पर, प्रत्येक को एक अंक दें। सबसे कम स्कोर के साथ ट्रैक खेलें (या, समान स्कोर के मामले में, सबसे कम स्कोर वाले एक यादृच्छिक एक)। दोहराएँ।

मुश्किल बिट, निश्चित रूप से, एक अंक दे रहा है। आपके द्वारा खेले जाने वाले प्रत्येक संभावित ट्रैक के लिए, आपको पहले से ही खेले गए प्रत्येक ट्रैक (या सीमित संख्या में) से गुजरना होगा। यदि [संभव अगला] ट्रैक और [हाल ही में खेला गया] ट्रैक में कुछ समान है, तो आप स्कोर में जोड़ते हैं, यह इस बात पर निर्भर करता है कि उनके पास कितना सामान्य है, उनके पास क्या है, और कितने समय पहले [हाल ही में खेला गया] ट्रैक था खेला। आप शायद "0 में सामान्य रूप से कुछ भी नहीं" चाहते हैं, इसलिए आप 0 के रूप में सभी ट्रैक्स के साथ शुरुआत कर सकते हैं।

आप संभवत: गणित को ठीक करने के लिए कुछ हाथ से तैयार की गई प्लेलिस्ट के साथ प्रयोग करना चाहते हैं - क्या आप चाहते हैं कि शब्दों की संख्या आम हो या शब्दों की संख्या का वर्ग समान हो, या संख्या का वर्गमूल हो। आम शब्दों में? के माध्यम से अपनी पूरी प्लेलिस्ट चलाएँ, देखें कि कौन से लोग "सबसे आम" के रूप में शीर्ष पर तैरते हैं, और संतुलन को सही करने के लिए कारकों को हाथ से घुमाते हैं। हो सकता है कि आप प्रति-अक्षर जाना चाहते हों, इसलिए "ड्यूक एलिंगटन" की तुलना में "ड्यूक एलिंगटन" की तुलना में उच्च स्कोर है, लेकिन "किंग एले डटन" की तुलना में अधिक स्कोर होने पर भी (यदि मैंने कोई पत्र नहीं खोया है :) । आपको बहुत सावधानी से विचार करना चाहिए कि आप किन क्षेत्रों की तुलना करना चाहते हैं, और यदि आप खेतों के बीच तुलना करना चाहते हैं। तुम भी ड्यूग्राम (अक्षर के जोड़े; ड्यूक एलिंगटन के मामले में, "दू", "पर विचार कर सकते हैं"

ध्यान दें, यदि आपके पास कोई विशेष कलाकार है, तो उस कलाकार को प्राथमिकता में नीचे गिराया जा सकता है - आप एक अद्वितीय कलाकार द्वारा 5 बार ट्रैक सुन सकते हैं, इससे पहले कि आप अपने 10 सभी ड्यूक एलिंगटन पटरियों को सुनें। यह हो सकता है या आप क्या चाहते हैं नहीं हो सकता है। आप जो कुछ भी तुलना करना चाहते हैं, उसका एक शब्दकोश सेट करके, और कितनी बार वे होते हैं, इसलिए आप इससे बच सकते हैं, इसलिए यदि आपके पास ड्यूक एलिंगटन के बहुत सारे ट्रैक हैं, तो दो ट्रैक जो ड्यूक एलिंगटन द्वारा हैं, बिली जो शेवर द्वारा दो से कम "समान" हैं। ।

यहां तक ​​कि यह दो-दो गानों के संयोजन के साथ एक तालिका को प्री-कैच करने लायक भी हो सकता है। इसके अलावा, जब विचार करना है कि किस गाने को आगे खेलना है, तो आपको केवल अब तक के सर्वश्रेष्ठ गीत को याद रखना होगा; यदि अगले विचार करने के लिए अब तक के सबसे अच्छे गीत की तुलना में खराब स्कोर है, तो आप अगले को छोड़ सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.