ลองตัดสินหนังสือจากปก


47

ทุกคนรู้ว่าเนื้อหาเป็นคำถาม แต่ชื่อที่ดีก็ช่วยได้เช่นกันและนั่นคือสิ่งแรกที่เราเห็น ถึงเวลาที่จะเปลี่ยนความประทับใจครั้งแรกให้เป็นโปรแกรมและหาว่าประเภทใดที่มีชื่อเรื่องมากขึ้น

คุณถูกท้าทายในการเขียนโปรแกรมหรือฟังก์ชั่นที่ใช้ชื่อคำถาม PPCG เป็นข้อมูลป้อนเข้าและส่งกลับการทำนายคะแนน

ตัวอย่างเช่นคุณอาจได้รับCounting Grains of Riceเป็นอินพุตและคุณจะพยายามส่งคืนสิ่งที่ใกล้เคียงกับคะแนน59ในกรณีนี้ การเดาที่ไม่ใช่จำนวนเต็มนั้นใช้ได้ แต่การเดาที่หรือต่ำกว่า-20นั้นไม่ใช่

นี่คือข้อมูลสำหรับการทดสอบและการให้คะแนน:

http://data.stackexchange.com/codegolf/query/244871/names-and-upvotes

การให้คะแนน:โปรแกรมของคุณจะทำงานกับทุกคำถามในประวัติเว็บไซต์ (PPCG) นี้ไม่ใช่การนับคำถามที่ปิด ฟังก์ชั่นln(score + 20)จะถูกนำไปใช้กับคะแนนแต่ละคะแนนและกับการเดาแต่ละครั้ง รูท - ค่าเฉลี่ย - ข้อผิดพลาดระหว่างชุดผลลัพธ์สองชุดคือคะแนนของคุณ ต่ำกว่าดีกว่า

ตัวอย่างเช่นโปรแกรมที่เดา 0 ทุกครั้งจะได้คะแนน 0.577 ในขณะที่รายการที่เดา 11 ทุกครั้งจะได้คะแนน 0.362

โปรดคำนวณคะแนนของคุณและรวมไว้ในหัวข้อคำตอบของคุณ โปรดระบุการคาดการณ์ของโปรแกรมของคุณสำหรับจำนวน upvotes ที่คำถามนี้จะได้รับ

ข้อ จำกัด:

  • เพื่อป้องกันการเข้ารหัสที่หนักเกินไปไม่เกิน 1,000 ตัวอักษร

  • ต้องทำงานกับข้อมูลทั้งหมดที่ตั้งไว้ข้างต้นภายในไม่กี่นาทีบนเครื่องที่เหมาะสม

  • ช่องโหว่มาตรฐานถูกปิด


นี่คือเครื่องมือทดสอบที่เขียนใน Python สำหรับการใช้งานของคุณและ / หรือเพื่อกำจัดความคลุมเครือ:

import sys
import math
import csv

scores_dict = {}

with open(sys.argv[1], 'r') as csv_file:
    score_reader = csv.reader(csv_file)
    for score, title in score_reader:
        if score == 'Score':
            continue
        scores_dict[title] = int(score)

def rate_guesses(guesser):
    def transform(score):
        return math.log(score + 20) if score > -20 else 0
    off_by_total = 0
    lines_count = 0
    for title in scores_dict:
        guessed_score = guesser(title)
        real_score = scores_dict[title]
        off_by_total += (transform(real_score) - transform(guessed_score)) ** 2
    return (off_by_total/len(scores_dict)) ** .5

def constant11(title):
    return 11

print(rate_guesses(constant11))

19
เป็นแนวคิดที่ดี แต่เป็นความอัปยศของชุดข้อมูลที่ไม่เสถียรดังนั้นคะแนนจะไม่ถูกต้องหลังจากผ่านไประยะหนึ่ง นอกจากนี้ยังมีความเป็นไปได้เล็กน้อยในการลงคะแนนเชิงกลยุทธ์: ทุกคนที่ตอบคำถามนี้และรับตราสัญลักษณ์ vox-populi ในสัปดาห์เดียวกันควรดูด้วยความสงสัย! ;-)
ระดับแม่น้ำเซนต์

1
ชื่อเรื่องจะมีหรือไม่รวมสิ่งที่ชอบ[closed]และ[on hold]ที่เกี่ยวข้องหรือไม่
es1024

4
@ steveverrill ทีนี้การพลิกของนั้นเป็นไปตามเวลาเราจะสามารถดูว่าโปรแกรมทำได้ดีในการโพสต์ในอนาคตเช่นเดียวกับที่ผ่านมา
isaacg

6
มันยากที่จะเอาชนะการเข้ารหัสอย่างหนัก คำถามที่ได้รับการโหวตอย่างหนักแต่ละข้อสามารถลดได้มากถึง 0.4 คะแนน และดูเหมือนว่าจะมีลวดลายไม่ธรรมดาเหมือนกันฮ่าฮ่า ฉันคาดการณ์ว่าคำตอบนั้นจะแข่งขันกันเพื่อให้ได้ผลลัพธ์ที่มีขนาดตายตัว 1,000 ไบต์
justhalf

5
คุณไม่ควรใช้คำถามทั้งหมดเป็นชุดทดสอบของคุณ คุณควรเลือกหมายเลขที่แน่นอน (10% -20%) โดยการสุ่มและกำหนดให้เป็นชุดการทดสอบของคุณ (แต่ไม่บอกใครว่าเป็นอะไร) มันง่ายกว่ามากในการสร้างอัลกอริทึมที่ทำนายประวัติศาสตร์ที่ผ่านมามากกว่าอันที่มีค่าการทำนายอนาคต (เช่นอันที่ทำงานได้ดีกับเซตย่อยใด ๆ ) (มันจะดียิ่งขึ้นกว่าเดิมที่จะลบ 10% เหล่านั้นออกจากสิ่งที่เราเห็นได้ทั้งหมด แต่นั่นก็ไม่ได้ผลดีนัก)
Joe

คำตอบ:


9

Python 2, 991 ตัวอักษร, คะแนน 0.221854834221, ทำนาย 11

import base64
e={}
d=base64.decodestring('vgAcRAEVDAIsqgQYalYaggcjQKwVXAoZWAsYQg0Ckg4VlWEX9hEDRhMe0hckCBkeuhsW3CAWQiEm\nSiMZMiwgTDAZZjIcSLMZfDQDnjwCe2AVaEQCYWEBIEgnDEoXzk0e3lQb5FYVKlkVZlwB+F0XwmI/\nGmRcuGUXWmYdVGkbzmwafG8eaHMdInkggHonRn5sKoMXgIkpbowVOI4cNJAubpQdYpcydJgVypkA\nZpweMp8ZsqEcRKMghKQYkKVPPXEWMqkWHKwbjrEdzLIBNLMf1LQivrYC99UV9rxNRsABNMEiPzob\npc0ActAhn3gcrNUZYNcWYNov/t8VgOEXAuMYqOUWsqUiCPIefPWNbvtKevwWvP0Cl9UsjQMdWwQb\nfQdpJQgWYwkCZRLBjxMWWdkqHRkWNxwB6x8p2SEZyyICSyYcgysaOS0CUy8hezAaGeEVpTRQ3zUz\nZzkZRzohizwwST4c8UAdF0OqG9AXIuEYYRN6208nU1AktVEVJ1IVWeMkIVQXdY4D2VYYD/cYb1om\nG1xA0zoY3uUaRWAhWpBSHWUXQTxGe+cad20CO3AZX3EBw3IiMXcef3gecXsVGXwhw30VbX4W24BD\n6qyQ45YaYYgZ4YobbYwauY4bMY82HZEdO5YmQ5cV35sVxaMbY6gYNas576ws+bADO7QpN7hdLJ8B\n4Eoks8EYX8VU68cYWfcar82QOdAaxdEfQ9UiW/kXL9k2ddwCW90m694enqUCkeEBE+IYWvsfA1FC\nJ+spMVIjhe4WEP0fAfYax/c3MfgbgfkqP/0DLf4V\n')
for i in range(0,600,3):
 e[ord(d[i])*256+ord(d[i+1])]=ord(d[i+2])*2-8
def p(t):
 return e.get(hash(t)%256**2,11)

คำอธิบาย:

นี่คือการเข้ารหัสแบบไม่มียางอาย แต่พยายามทำอย่างมีประสิทธิภาพ

preprocessing:

ในรหัสแยกกันฉันแฮชแต่ละหัวเรื่องให้มีค่าระหว่าง 0 ถึง 256 ^ 2-1 ลองเรียกค่าเหล่านี้ไปที่ถังขยะ สำหรับแต่ละถังฉันคำนวณคะแนนเฉลี่ย (จำเป็นต้องใช้ค่าเฉลี่ยเพราะสำหรับส่วนเล็ก ๆ ของถังขยะมีการชนกัน - มีแฮชมากกว่า 1 หัวเรื่องไปยังถังขยะเดียวกัน แต่สำหรับส่วนใหญ่แต่ละหัวเรื่องจะจับคู่กับถังขยะของตัวเอง)

แนวคิดเบื้องหลังโค้ด 2 ไบต์สำหรับแต่ละชื่อเรื่องคือ 1 ไบต์ไม่เพียงพอ - เราได้รับการชนกันมากเกินไปดังนั้นเราจึงไม่รู้ว่าจะให้คะแนนใดกับถังขยะ 1 ไบต์ในแต่ละครั้ง แต่ด้วยถังขยะ 2 ไบต์เกือบจะไม่มีการชนกันและเราได้รับการแทน 2 ไบต์ของแต่ละชื่ออย่างมีประสิทธิภาพ

จากนั้นจัดอันดับถังขยะ - คำนวณหากำไรในคะแนนถ้าเรากำหนดถังขยะนี้ให้คำนวณค่าแทนการคาดเดา 11 นำถังขยะ N อันดับแรกและใส่รหัสลงในสตริง (ซึ่งคือ d ในรหัสจริง)

การเข้ารหัส: กุญแจของถังขยะจะถูกเข้ารหัสเป็น 2 ไบต์ ค่าถูกเข้ารหัสโดยใช้ 1 ไบต์ ฉันพบค่าระหว่าง -8 ถึง 300 + บางอย่างดังนั้นต้องบีบบิตเพื่อให้ได้ 1 ไบต์: x -> (x + 8) / 2

รหัสจริง:

อ่าน d เป็นไบต์สามเท่าถอดรหัสการเข้ารหัสที่อธิบายไว้ข้างต้น เมื่อมีการกำหนดหัวเรื่องให้คำนวณแฮชของมัน (modulo 256 ^ 2) และหากพบคีย์นั้นใน dict ให้ส่งคืนค่าที่แม็พกับ มิฉะนั้นส่งคืน 11


3
ข้อเสนอแนะ: คะแนนเฉลี่ยไม่ค่อยดีนัก ดูฟังก์ชั่นการให้คะแนนความท้าทายมันไม่ใช่แบบเชิงเส้น
Deduplicator

1
@Dupuplicator ขอบคุณฉันตระหนักว่าหลังจากฉันทำเสร็จแล้ว สิ่งนี้สำหรับถังขยะ 99% ไม่มีการชนดังนั้นค่าเฉลี่ยจึงเป็นเพียงคะแนนของชื่อเรื่องเดียวที่แมปไปยังถังขยะนั้น
Ofri Raviv

16

Javascript ES6

คะแนน: 0.245663
ความยาว: 1000 ไบต์
คาดการณ์: 5

(ฉันเดาว่าคำถามนี้เกิดจากหิมะถล่มที่ไม่คาดคิด: P)

minified

E="ABCDEFGHIJKLMNOPQRSTUVWXYZ";E=E+E.toLowerCase()+"0123456789!@#$%;*()";P="RCRHIFMGPGIDQKHMJLLRMLFJGKHEqHPOgJNKGPCHPJNUPOSGJQKKKMELMIJHLKIKNcKDOfSJLFHDILGKIOUKLMLLKMKIHGHJGIIJDGJKIHIIFIGMTIHFJMIKDJGQJKGMKJHPRJPLMGIOPIIIIPBYFMGLEIKIMMRUKFLFGJFKFTHPFODEQTGTHKIJDHNJGDGiHKNYLHHDLJHGILOEViKNEKGQZfHJMIISIJFRHKLJMLPIFJILKKKJKKJESHNLLIKIGKGJJJHKJRGULLSLRONJNEeLKIQGGPQIHPLEIHHIDXjQHNBKOGWWIENRbYoHINHNMKTNKHTGMIPXFJLLMLIHPPLDJJKFUMIQMOKJLJJKIJKNLHRILJIAIbJEZOGIELGHGLOINDPJMJeJWRIIJHSOZDOsOFRRIOIOTIJSGGJKFUIDOINGOcLQEJFEITLMNIIGIGIMG7LPSNLKVOKIFGHJITGOFUJIIRN";K={};"99r1501vz076mip077myv0733it280exx081gt9118i1g279dyx102uho203ejd07433z087uje097kdg1567ft2088rk275dmu1203ez106lih1763ei126f6q101aax084owh088aid161i9y179gvn236ptn3338vf132i55080fke101l4z3789ai281ulm081blm124euz074o5m07513z14117l095qdn092gl30757n5153".replace(/(...)(...)/g,(_,a,b)=>K[a]=1*b);D=40655;N=479;H=(s,T)=>(h=7,[...s].map(c=>h=~~(h*T+c.charCodeAt(0))),h);S=s=>(y=H(s,31),K[((y%D+D)%D).toString(36)]||E.indexOf(P[(H(s,48)%N+N)%N]));

ขยาย

E = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
E = E + E.toLowerCase() + "0123456789!@#$%;*()";
K = {};
P = "RCRHIFMGPGIDQKHMJLLRMLFJGKHEqHPOgJNKGPCHPJNUPOSGJQKKKMELMIJHLKIKNcKDOfSJL" +
    "FHDILGKIOUKLMLLKMKIHGHJGIIJDGJKIHIIFIGMTIHFJMIKDJGQJKGMKJHPRJPLMGIOPIIIIP" +
    "BYFMGLEIKIMMRUKFLFGJFKFTHPFODEQTGTHKIJDHNJGDGiHKNYLHHDLJHGILOEViKNEKGQZfH" +
    "JMIISIJFRHKLJMLPIFJILKKKJKKJESHNLLIKIGKGJJJHKJRGULLSLRONJNEeLKIQGGPQIHPLE" +
    "IHHIDXjQHNBKOGWWIENRbYoHINHNMKTNKHTGMIPXFJLLMLIHPPLDJJKFUMIQMOKJLJJKIJKNL" +
    "HRILJIAIbJEZOGIELGHGLOINDPJMJeJWRIIJHSOZDOsOFRRIOIOTIJSGGJKFUIDOINGOcLQEJ" +
    "FEITLMNIIGIGIMG7LPSNLKVOKIFGHJITGOFUJIIRN";

   ("99r1501vz076mip077myv0733it280exx081gt9118i1g279dyx102uho203ejd07433z087u" +
    "je097kdg1567ft2088rk275dmu1203ez106lih1763ei126f6q101aax084owh088aid161i9" +
    "y179gvn236ptn3338vf132i55080fke101l4z3789ai281ulm081blm124euz074o5m07513z" +
    "14117l095qdn092gl30757n5153").
        replace( /(...)(...)/g, (_,a,b) => K[a] = 1*b );

D = 40655;
N = 479;
H = (s,T) => (
    h = 7,
    [...s].map( c => h = ~~(h*T + c.charCodeAt(0)) ),
    h
);

S = s => (
    y = H( s, 31 ),
    K[((y%D + D)%D).toString( 36 )] || E.indexOf( P[(H( s, 48 )%N + N)%N] )
);

ฟังก์ชั่นSยอมรับสตริง (ชื่อเรื่อง) และส่งกลับคะแนน

หมายเหตุเกี่ยวกับพฤติกรรม:

  • titles 70 ชื่อโหวตได้รับการจัดการแยกต่างหากจาก> 70 ชื่อโหวต
  • ≤ 70 คะแนนโหวตถูกจัดเรียงเป็นถังขยะโดยใช้คีย์เวิร์ดที่มีความซับซ้อนสูงในการติดตามอัลกอริธึมการเพิ่มประสิทธิภาพอัลกอริธึมที่ไม่เหมือนฟังก์ชั่นแฮชสตริง
  • หลังจากแคลคูลัสมีความสุขเล็กน้อยปรากฎว่าการเดาที่ดีที่สุดสำหรับแต่ละถังเป็นเพียงค่าเฉลี่ยทางเรขาคณิตของ (โหวต +20) สำหรับทุกชื่อในถังลบ 20
  • การคาดเดาที่ดีที่สุดสำหรับถังขยะทั้งหมด 479 ถังจะถูกเข้ารหัสเป็นสตริงฐาน 70 ตัวอักษร 479
  • สำหรับชื่อเรื่องการลงคะแนนเสียงมากกว่า 70 เรื่องจะได้รับการกำหนดรหัสพื้นฐาน 3 หลัก 36 หลักที่สร้างขึ้นโดยใช้เทคนิคการแฮ็กที่ทันสมัยซึ่งรับประกันว่าจะไม่ขัดแย้งกับการลงคะแนนเสียงแบบอื่น ๆ > 70 คะแนนและไม่มีการตรวจจับที่ผิดพลาด เทคนิคล้ำสมัยนี้ไม่มีความคล้ายคลึงกับการลองสุ่มถังนับจนกระทั่งไม่มีการชนกัน
  • รหัสชื่อการลงคะแนน> 70 และจำนวนการลงคะแนนของพวกเขาจะถูกเข้ารหัสในสตริง (6 ไบต์ต่อชื่อเรื่อง) ซึ่งจะถูกแปลงเป็นตารางค้นหาแบบง่าย รูทีนมีข้อผิดพลาดเป็นศูนย์สำหรับชื่อการลงคะแนนทั้งหมด> 70 รายการ

10

Python 2, คะแนน = 0.335027, 999 chars, ทำนาย 11.34828 สำหรับคำถามนี้

เพียงเพื่อให้ได้ลูกบอลกลิ้ง นี่เป็นสิ่งที่ดีที่สุด

สิ่ง SVM แฟนซีเป็นเพียงความคิดแบบสุ่มของฉันและฉันรู้สึกเหมือนนำไปใช้ดังนั้นนี่คือ มันปรับปรุงพื้นฐานได้ 0.02 คะแนนดังนั้นฉันจึงมีความสุขมาก แต่การที่จะแสดงให้เห็นว่าการเข้ารหัสที่ป้อนเข้ามาอย่างหนักนั้นเป็นจุดที่การปรับปรุงส่วนใหญ่มาจากฉันก็เขียนรหัสด้วย

หากไม่มีการเข้ารหัสอย่างหนักคะแนนคือ 0.360 (และจริงๆแล้วการทำนายทั้งหมดอยู่ที่ประมาณ 11 ฮ่าฮ่า)

ฉันใช้scikit เรียนรู้และnltk

import sys
import math
import csv
from sklearn.feature_extraction.text import TfidfVectorizer as TV
from sklearn.svm import SVR
from nltk.stem.porter import PorterStemmer as PS
sd = {}
lr = None
tv = None
with open(sys.argv[1], 'r') as cf:
    sr = csv.reader(cf)
    for sc, t in sr:
        if sc == 'Score':
            continue
        sd[t] = int(sc)
ts,scs = zip(*sd.items())
s = PS()
def analyzer(st):
    r = []
    for word in st.split():
        if word.isdigit():
            r.append('<NUM>')
        elif not word.isalnum():
            r.append('<PUNCT>')
        else:
            r.append(s.stem(word.lower()))
    return r
tv = TV(min_df=25, stop_words='english', analyzer=analyzer)
ti = tv.fit_transform(ts)
lr = SVR()
lr.fit(ti, scs)
d={'4 w':378,'y 42':333,'eeta':280,'an Got':279,'s 2 ':275,"e I'":208,'r CP':203,'? No':179,'B.O':156}
def c(t):
    for s in d.keys():
        if s in t:
            return d[s]
    t = tv.transform([t])
    r = lr.predict(t)[0]+1.5
    return r

ฉันไม่แน่ใจว่าฉันเข้าใจ - คุณอ่านคะแนนจากไฟล์ภายนอกหรือไม่ ดังนั้นทำไมไม่เพียงแค่ทำนาย sd [t]? นี่จะให้คะแนนเป็น 0 ...
Ofri Raviv

2
เพราะนั่นคงไม่ใช่เรื่องสนุก = p
justhalf

4

Python 2, 986 ตัวอักษร, คะแนน 0.3480188, ทำนาย 12

M,S=14.29,23.02
D=lambda x:[ord(y)-32 for y in x]
w='fiLoNoNuMiNoTiMoShOnLoGoLeThRantexgensuBaSqUnInPeReGaMuLinprOuThInThEvEnClOpExPyThADdiSoLiSiMaTrEqUsImAsCoManstARrePoWoReawhapoLandradeTyPaLOsoReCreprediVeReSpebeTiPrImPladaTrihelmakwhicolpaReValpaTrafoROsoumovfinfunpuzyoufaSeQuiwhecoDeChagivcouchehanpoStrdiGraconjavwricalfrowitbinbrafrabuipoi'
for i in range(26):w=w.replace(chr(65+i),chr(97+i)*2)
w=[w[i:i+3]for i in range(0,372,3)]
m=D("(+),+)+=*...+..++'(*)5)/2)*43++16+0,+33*4*/(0.'+>-)+13+(2?8+6;,3;43+4(+.('(,.*.*+56+6)0((++(B,))+E0,-7/)/*++),+***)2+(3(.*)'")
s=D("))'B)'*j+:51(*3+0')+)^'/<-+MG,-1=),-0:A+T&J&K1%,O*()4Y-%:_A.=A*C]MJ-N%)5(%%-0+).*3Q(M&0'%(+$p*)()a8:-T?%5(-*'/.'+)+@,'J&1'&&")
def G(x,m,s):s=s or 1e-9;return(.4/s)*(2.78**(-(x-m)**2./(2*s*s)))
d={w[i]:(m[i],s[i])for i in range(124)}
def Z(t,c):
 p=1
 for W in t.split():
  if len(W)>3:
   W=W[:3].lower()
   if W in d:p*=G(c,*d[W])
 return p*G(c,M,S)
def J(t):return max([(Z(t,r),r)for r in range(-9,99)])[1]

Jฟังก์ชั่นที่เกี่ยวข้องคือ

โปรแกรมนี้ใช้ชื่อว่าNaive Bayesโดยใช้คำว่า title เป็นฟีเจอร์ แต่มันถูก จำกัด อย่างมากเนื่องจากข้อ จำกัด ของ char จำกัด อย่างไร ดี...

  • สำหรับแต่ละชื่อเรื่องเราแปลงเป็นตัวพิมพ์เล็กและดูที่คำอย่างน้อย 4 ตัวอักษร จากนั้นเราจะนำตัวอักษรสามตัวแรกของแต่ละคำเหล่านั้นมาเป็นคุณสมบัติ เราข้ามเครื่องหมายวรรคตอนการปอกเพื่อบันทึกบนตัวอักษร
  • เราเลือกเฉพาะตัวอักษรสามตัวที่เริ่มต้นอย่างน้อย 19คำ (คำเหล่านี้ถูกจัดเก็บไว้wด้านบน) การบีบอัดทำได้โดยการจัดเรียงทริปเปิลใหม่เพื่อให้มีตัวอักษรสองเท่าจำนวนมากที่เป็นไปได้และคู่เหล่านี้จะถูกแทนที่ด้วย ASCII ตัวพิมพ์ใหญ่ที่สอดคล้องกันของพวกเขา (เช่น fiLoNoN ... → fil, lon, non, ... )
  • สำหรับ triplet แต่ละครั้งเราจะดูคะแนนของชื่อที่ปรากฏและคำนวณค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐานของคะแนน แล้วเราแปลงเหล่านั้นเพื่อจำนวนเต็มและเก็บไว้ในm, sข้างต้นโดยใช้ความจริงที่ว่า / SD เฉลี่ยอยู่ที่ 90 ส่วนใหญ่ (ที่ช่วยให้การเข้ารหัส ASCII โดยตรงเนื่องจากมี 95 ASCII พิมพ์)
  • G เป็นฟังก์ชั่นการแจกแจงแบบปกติ - เราปัด e เป็น 2 dp และสแควร์รูทผกผันของ 2 pi ถึง 1 dp เพื่อบันทึกบนตัวอักษร

พรึบอย่าง จำกัด ทั้งหมดนี้ทำให้เป็นหนึ่งในความคิดที่เลวร้ายที่สุดที่ฉันเคยคิดมา แต่ฉันมีความสุขมากที่ฉันสามารถอัดเข้าไปได้ (แม้ว่ามันจะทำงานได้ไม่ดี) หากใครมีแนวคิดที่ดีกว่าสำหรับการบีบอัดโปรดแจ้งให้เราทราบ :)

(ขอบคุณ KennyTM ที่ชี้ให้เห็นถึงการบีบอัดที่ไม่มีจุดหมายของฉัน)


รหัสการบีบอัดของคุณจะยาวเกินกว่าผลลัพธ์ที่คลายการบีบอัด ... w='grge…scse';w=[w[i:i+2]for i in range(0,len(w),2)]คือ 165 ไบต์ในขณะที่คุณใช้รหัสC=lambda:…;w=C('…')179
kennytm

@ KennyTM โอ้ขอบคุณ - ฉันยุ่งกับรหัสมากพยายามที่จะ จำกัด จำนวนตัวละครที่ฉันต้องติดตามการบีบอัดทั้งหมด : P
Sp3000

4

Python 2, 535 ตัวอักษร, คะแนน 0.330910, ทำนาย 11.35

หาคะแนนเฉลี่ยของชื่อที่มีคำแต่ละคำจากนั้นใช้คำบนและล่าง 50 คำเพื่อปรับคะแนน BASE ในguess(title)ฟังก์ชั่น

รหัสหลาม:

BASE = 11.35
word={}
for sc,ti in csv.reader(open(sys.argv[1])):
    if sc == 'Score': continue
    parts = re.findall(r"[-a-zA-Z']+", ti.lower())
    for p in parts:
        a, c = word.get(p, (0.0,0))
        word[p] = (a+int(sc), c+1)

rank = sorted([(sc/ct,wd) for wd,(sc,ct) in word.items() if ct > 2])
adjust = rank[:50] + rank[-50:]

def guess(title):
    score = BASE
    parts = re.findall(r"[-a-zA-Z']+", title.lower())
    for sc,wd in adjust:
        if wd in parts:
            score *= 0.7 + 0.3*sc/BASE
    return score

3

C

คะแนน: ไม่ทราบ
ความยาว: 5 ไบต์
คาดการณ์: 5

แข็งแรงเล่นกอล์ฟ:

int s(char *p){return 5;}

Ungolfed:

int s(char *p)
{
   return 5;
}

แบบสอบถามคะแนนให้คะแนนเฉลี่ย 5

ฉันไม่สามารถทดสอบได้ในขณะนี้ผู้อื่นสามารถเรียกใช้ / แก้ไขได้


Gulfed เพิ่มเติม: int s () {return 5;}
Joshua

"คุณถูกท้าทายในการเขียนโปรแกรมหรือฟังก์ชั่นที่ใช้ชื่อคำถาม PPCG เป็นข้อมูลป้อนเข้าและส่งกลับการทำนายคะแนน" - ขออภัย แต่ไม่: 0
Joshpbarron

ฉันเคยเห็นแพลตฟอร์มที่หากคุณลืม main () ฟังก์ชันแรกของคุณคือ main () บางทีเขาขึ้นอยู่กับว่า
Joshua
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.