भविष्यवाणी करें कि क्या कोई संदेश 50 बाइट्स में तारांकित होगा या नहीं


41

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

आप किसी भी सत्य या झूठे मूल्यों का उपयोग कर सकते हैं , लेकिन वे समान होना चाहिए (अर्थात केवल दो संभावित आउटपुट, एक सत्य और एक मिथ्या होना चाहिए)। इनपुट को हटाए गए नए के साथ कच्चे एचटीएमएल के रूप में दिया जाएगा, और इसमें गैर-एएससीआईआई यूनिकोड वर्ण शामिल हो सकते हैं। यदि आपको UTF-8 के अलावा किसी और चीज़ में इनपुट की आवश्यकता है, तो कृपया अपने उत्तर में ऐसा कहें।

इस चुनौती के लिए विजयी सबमिशन वह होगा जो चैट संदेशों के उच्चतम प्रतिशत की सही ढंग से भविष्यवाणी करता है, नीचे दी गई सूची से बाहर। यदि दो दिए गए सबमिशन में एक ही सफलता दर है, तो कम जमा करने वाले की जीत होगी।

कृपया संदेशों के पूरे सेट पर अपना कोड चलाने और प्रतिशत सही गणना करने के लिए निर्देश प्रदान करें। आदर्श रूप से, यह बॉयलरप्लेट कोड का एक बिट होना चाहिए (आपके 50 बाइट्स की ओर गिना नहीं जाता है) जो कि सकारात्मक परीक्षण के मामलों से गुजरता है और आउटपुट करता है कि उनमें से कितने आपके कोड सही हो गए और फिर नकारात्मक परीक्षण के मामलों के लिए भी यही करता है। (समग्र स्कोर तब मैन्युअल रूप से गणना की जा सकती है (correctPositive + correctNegative) / totalMessages।)

ताकि आपका कोड यथोचित परीक्षण योग्य हो, यह उचित आधुनिक दिन के हार्डवेयर पर चैट संदेशों की पूरी सूची के लिए 5 मिनट या उससे कम समय में पूरा होना चाहिए।

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


4
चैट के व्यवहार को जानने का, मुझे लगता है कि निम्नलिखित Pyth पर्याप्त होगा:O2
आर्कटुरस

9
पिछले अभिनीत संदेशों के इतिहास पर विचार करते हुए, रेगेक्स, 11 बाइट्स:Don'?t star
डाउनगोट

11
यह बहुत आसान होगा यदि आपको उपयोगकर्ता को इनपुट के भाग के रूप में भी दिया गया है।
मामा फन रोल

3
कुछ बिंदु पर मैंने रेगेक्स, 2 बाइट्स का जवाब दिया है\^
पुरकाकूदरी

14
मुझे लगता है कि आपको इसे अगले 1,000 संदेशों पर फिर से चलाना चाहिए, और देखें कि वास्तव में किसने स्टारडनेस की भविष्यवाणी की है
abligh

जवाबों:


29

रेटिना , 50 बाइट्स, 71.8% 72.15%

^.*([[CE;ಠ-ﭏ]|tar|ol|l.x|eo|a.u|pin|nu|o.f|"$)

@ मार्टिनबटनर के सुझाव पर कुछ रेगेक्स गोल्फिंग की कोशिश की। यह 704 संदेशों से मेल खाता है और 739 अतारांकित संदेशों से मेल नहीं खाता है।

यह ^.*( ... )सुनिश्चित करना है कि हमेशा 0 या 1 मैच हो, क्योंकि रेटिना डिफ़ॉल्ट रूप से मैचों की संख्या को आउटपुट करता है। आप मल्टीलाइन m`मोड के लिए प्रीपेन्डिंग करके प्रोग्राम फाइल को रन कर सकते हैं , फिर रनिंग कर सकते हैं

Retina stars.retina < starred.txt

और इसी तरह के लिए unstarred.txt


विश्लेषण / स्पष्टीकरण

मैंने एक कार्यक्रम का उपयोग करके उपरोक्त स्निपेट्स (और कई और अधिक) उत्पन्न किए, फिर उन लोगों को चुना जिन्हें मैं स्वयं चाहता था। यहाँ कुछ अंतर्ज्ञान है कि उपरोक्त स्निपेट क्यों काम करते हैं:

  • C: मेल खाता है PPCG,@CᴏɴᴏʀO'Bʀɪᴇɴ
  • E: मेल खाता है @ETHproductions,@El'endiaStarman
  • ;: क्योंकि परीक्षण मामले HTML हैं, यह मेल खाता है &lt;और&gt;
  • ಠ-ﭏ: यूनिकोड वर्णों की एक श्रृंखला से मेल खाता है, सबसे प्रमुख ಠ_ಠऔर@Doorknob冰
  • tar: मेल के रूपांतरों star, @El'endiaStarman(फिर) और भी gravatarजो oneboxes नई पोस्ट बॉट द्वारा पोस्ट में प्रकट होता है
  • ol: मेल rel="nofollow"जो बहुत सारे लिंक और वनबॉक्स में है
  • l.x: मेल खाता है @AlexA.,@trichoplax
  • eo: मुख्य रूप से मेल खाता है people, लेकिन इसके लिए भी तीन मामले हैं@Geobits
  • a.u: मुख्य रूप से मेल खाता है graduation, status, featureऔरabuse
  • pin: मैच pingऔर शब्दों का अंत pingpineappleओवरफिटिंग के उदाहरण के रूप में , चर्चा में कुछ पोस्ट से मेल खाता है।
  • nu: शब्दों के मिश्रित बैग से मेल खाता है, जिनमें से सबसे आम है number
  • o.f: मेल खाता है golf,conf(irm|use)
  • "$: एक अंतिम चरित्र के रूप में एक दोहरे उद्धरण से मेल खाता है, जैसे @phase He means "Jenga."

यह [कुछ खास नहीं है - मेरे पास बस एक चरित्र बचा था इसलिए मुझे लगा कि मैं इसका उपयोग एक और मामले से मेल खाने के लिए कर सकता हूं।


(मैंने परीक्षण कोड अभी तक पोस्ट नहीं किया है क्योंकि ऐसा लगता है कि यह धीरे-धीरे चल रहा है, और मैं यह पता लगाना चाहता हूं कि ऐसा क्यों है? हालांकि अब बहुत देर हो चुकी है।)
Sp3000

1
प्रत्येक परीक्षण मामले के लिए एक बार रेटिना को निष्पादित करने में लंबा समय लगेगा। मल्टी-लाइन मोड दावा किए गए स्कोर को बहुत तुरंत रिपोर्ट करता है।
डेनिस

@ डेनिस धन्यवाद, मैं पूरी तरह से भूल गया कि मैं ऐसा कर सकता हूं।
Sp3000

3
LOL, अब मेरा नाम एक स्टार चुंबक है?
20

18

जावास्क्रिप्ट ईएस 6, 50 बाइट्स, 71.10%

सही ढंग से 670 तारांकित और 752 गैर-तारांकित की पहचान करता है।

x=>/ .[DERv]|tar|a.u|l.x|<i|eo|ol|[C;ಠ]/.test(x)

अब 70% अवरोध के पार, और रेटिना को छोड़कर सभी की पिटाई!

trueयदि संदेश में इनमें से कोई भी चीज़ है तो लौटाता है :

  • एक शब्द है जो की दूसरी पत्र है D, E, R, या v;
  • tar(आमतौर पर star);
  • aऔर uबीच में एक चार के साथ;
  • lऔर xबीच में एक चार (आमतौर पर alex) के साथ;
  • इटैलिक पाठ;
  • eoया ol;
  • C, अर्धविराम, या ए

यहां कुछ और फलदायक मैच हैं जो दूसरों से छुटकारा पाने के लायक नहीं हैं:

  • nf
  • nu
  • yp
  • n.m

यह रेटिना के उत्तर के करीब और बढ़ रहा है, लेकिन मैंने अपने आप में अधिकांश सुधार पाए हैं।

इनमें से किसी एक पृष्ठ के कंसोल में इसका परीक्षण करें: स्टार टेक्स्ट , नो-स्टार टेक्स्ट

var r=document.body.textContent.replace(/\n<br/g,"<br").split("\n").slice(0,-1);
var s=r.filter(function(x){return/ .[DERv]|tar|a.u|l.x|<i|eo|ol|[C;ಠ]/.test(x)}).length;
console.log("Total:",r.length,"Matched:",s,"Not matched:",r.length-s);

यहाँ एक वैकल्पिक संस्करण है। /a/.testतकनीकी रूप से एक समारोह है, लेकिन संतुष्ट नहीं करता हमारे मापदंड :

/ .[ERv]|a.u|l.x|<i|eo|yp|ol|nf|tar|[C;ÿ-ff]/.test

यह स्कोर 71.90% (697 तारांकित, 741 अतारांकित) है।


मैं सूचियों पर कुछ विश्लेषण चला रहा हूं, यह देखने के लिए कि कौन से रेगेक्स समूह सबसे अधिक तारांकित और सबसे कम अप्रकाशित पदों से मेल खाते हैं। विश्लेषण इस Gist में पाया जा सकता है । अब तक, मैंने जाँच की है aaऔर a.aमेल खाता है। a.u28 के स्कोर के साथ # 50 पर नीचे है, फिर भी यह अपने प्रारूप का सबसे कुशल मैच है ...


केवल 1000 संदेश हैं ...?
कॉनर ओ'ब्रायन

2
@ C @O'Bʀɪᴇɴ कुछ मल्टी-लाइन थे, जिनका स्निपेट में कोई हिसाब नहीं था। यह तय किया गया है।
ETHproductions

कोई उपयोग क्यों नहीं करता /regexp/.test()? मुझे लगता है कि इसके साथ कुछ और मामलों में भी निचोड़ संभव है।
n --h'a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

8
आज मैंने सीखा कि मैं सिर्फ अपना नाम कहकर चैट स्टार प्राप्त कर सकता हूं।
एलेक्स ए।

@ n @h da̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ धन्यवाद, पता नहीं कैसे मैंने ऐसा नहीं सोचा था
ETHproductions

15

पायथ, 50 बाइट्स, 67.9%

0000000: 21 40 6a 43 22 03 91 5d d3 c3 84 d5 5c df 46 69 b5 9d  !@jC"..]....\.Fi..
0000012: 42 9a 75 fa 74 71 d9 c1 79 1d e7 5d fc 25 24 63 f8 bd  B.u.tq..y..].%$c..
0000024: 1d 53 45 14 d7 d3 31 66 5f e8 22 32 43 7a              .SE...1f_."2Cz

यह 322 बाल्टी में से एक में इनपुट को धोता है और उस बाल्टी के आधार पर बूलियन को चुनता है।

स्कोरिंग

$ xxd -c 18 -g 1 startest.pyth
0000000: 72 53 6d 21 40 6a 43 22 03 91 5d d3 c3 84 d5 5c df 46  rSm!@jC"..]....\.F
0000012: 69 b5 9d 42 9a 75 fa 74 71 d9 c1 79 1d e7 5d fc 25 24  i..B.u.tq..y..].%$
0000024: 63 f8 bd 1d 53 45 14 d7 d3 31 66 5f e8 22 32 43 64 2e  c...SE...1f_."2Cd.
0000036: 7a 38                                                  z8
$ echo $LANG
en_US
$ pyth/pyth.py startest.pyth < starred.txt
[[345, False], [655, True]]
$ pyth/pyth.py startest.pyth < unstarred.txt
[[703, False], [297, True]]

14

CJam, 45 बाइट्स, 65.55%

l_c"\"#&'(-.19<CEFHIJLMOPSTXY[_qಠ"e=\1b8672>|

यह जाँचता है कि पहला वर्ण किसी विशिष्ट सूची में है या सभी कोड बिंदुओं का योग 8,672 से बड़ा है।

स्कोरिंग

$ cat startest.cjam
1e3{l_c"\"#&'(-.19<CEFHIJLMOPSTXY[_qಠ"e=\1b8672>|}*
$ java -jar cjam-0.6.5.jar startest.cjam < starred.txt | fold -1 | sort | uniq -c
    308 0
    692 1
$ java -jar cjam-0.6.5.jar startest.cjam < unstarred.txt | fold -1 | sort | uniq -c
    619 0
    381 1

foldकमांड के बारे में मुझे सिखाने के लिए +1 , वास्तविक उत्तर के साथ।
दरवाज़े

6

मतलाब / ऑक्टेव, 17 बाइट्स 60.15%

सही ढंग से 490 संदेशों को स्टार्स के रूप में वर्गीकृत करता है, 713 संदेशों को अनस्टर्ड के रूप में

वर्तमान संस्करण:

बस लंबाई की जाँच कर रहा है।

f=@(w)numel(w)>58

पुराना संस्करण:

किसी अन्य भाषा में अनुवाद किया जा सकता है। यह सिर्फ यह जांचता है कि संदेश में स्टार शब्द है या नहीं।score: 59/911/52.5%

f=@(w)nnz(strfind(lower(w),'star'))>0 %

इस कोड का उपयोग करके टेस्टकेस के परिणाम:

slCharacterEncoding('UTF-8');

fid = fopen('codegolf_starred_messages_starred.txt');
line = fgetl(fid);
starred = 0;
while ischar(line)
    if f(line);
        starred = starred +1;
    end

    disp(line)
    line = fgetl(fid);
end
fclose(fid);


fid = fopen('codegolf_starred_messages_unstarred.txt');
line = fgetl(fid);
unstarred = 0;
while ischar(line)
    if ~f(line);
        unstarred = unstarred +1;
    end

    disp(line)
    line = fgetl(fid);
end
fclose(fid);

disp(['  correctly classified as *ed: ',num2str(starred)])
disp(['correctly classified as un*ed: ',num2str(unstarred)])
disp(['                  total score: ',num2str((starred+unstarred)/20),'\%'])

3

सीजाम, 32 बाइट्स, कुल मिलाकर स्कोर 0.5605 (56%)।

सही ढंग से 428 तारांकित संदेशों और 693 अतारांकित संदेशों की पहचान करता है। कुल स्कोर है (360+730)/2000=0.545

l_el"sta"/,1>\,)4%!|

जीतने की उम्मीद नहीं, बीमार देखें कि यह कैसा प्रदर्शन करता है। ऊपर एकल संदेश के लिए कोड है, एकाधिक उपयोग के साथ चलने के लिए इस संशोधित संस्करण का उपयोग करता है जो तारांकित संदेशों की मात्रा लौटाता है:

1000{l_el"star"/,1>\,)6%!|}fA]:+

बस इसे STDIN के साथ या तो फ़ाइल के कच्चे पाठ का परीक्षण करें। यदि संदेश में "स्टार" या है तो सही है length + 1 mod 4 = 0


2
इसलिए ... यदि चार किसी संदेश की लंबाई से अधिक को विभाजित करते हैं, तो यह तारांकित होने का एक मौका है?
कॉनर ओ'ब्रायन

2
@ C @O'Bʀɪᴇɴ हाँ, लेकिन यह एक उच्च स्कोर के लिए प्रदान करता है
GamrCorps

3

जावास्क्रिप्ट ईएस 6, 0.615 = 61.5%

342 सही ढंग से अभिनीत के रूप में पहचाने गए, 888 सही ढंग से अतारांकित के रूप में पहचाने गए, (342+888)/2000 = 0.615

x=>-~x.search(/(bo|le)x|sta|ಠ|ツ/i)

इस या इस तरह से परीक्षण करें :

r=document.body.innerHTML.replace(/<\/*pre>/g,"").split`
`.filter(x=>-~x.search`(bo|le)x|sta|ಠ|ツ`).length

मैं अभी भी मिल सकता है, तुम मेरी शादी!


1
मैं तुम्हें अब मिल गया है;)
ETHproductions

@ETHproductions जीजी। मैं कुछ और सामान्य पैटर्न खोजूंगा।
कॉनर ओ'ब्रायन

3

रेटिना, 46 बाइट्स, 68.55

^.*([zj_C;&¡-ff]|sta|san|soc|bo|eo|xk|l.x|<.>)

679 स्टार: 692 अनस्टार

रेटिना में स्विच करने के लिए ... कुछ और काम नहीं किया।


अरे हाँ, उस के बारे में भूल गया। मैं इसे ठीक कर दूंगा।
मामा फन रोल

1

C # 6.0 (.NET फ्रेमवर्क 4.6), 50 बाइट्स, 63,60%

bool s(string i)=>Regex.IsMatch(i,"ol|tar|l.x|ಠ");

परीक्षण प्रयोजनों के लिए उपयोग किया जाने वाला कार्यक्रम:

void Main()
{
    var starred = @"C:\starred.txt";
    var unstarred = @"C:\unstarred.txt";

    var linesStarred = File.ReadAllLines(starred);
    var linesUnstarred = File.ReadAllLines(unstarred);

    var cls = linesStarred.Count();
    var clsc = 0;

    foreach (var line in linesStarred)
    {
        if ( s(line) ) clsc++;
    }

    var clu = linesUnstarred.Count();
    var cluc = 0;

    foreach (var line in linesUnstarred)
    {
        if (!s(line)) cluc++;
    }

    $"Starred {clsc}/{cls} correct ({(clsc/cls*100):0.00}%)".Dump();
    $"Unstarred {cluc}/{clu} correct ({(cluc /clu*100):0.00}%)".Dump();
    $"{(((clsc+cluc)/(decimal)(cls+clu))*100):0.00}".Dump();
}

bool s(string i)=>Regex.IsMatch(i,"ol|tar|l.x|ಠ");
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.