แสดงกราฟผลการค้นหาของ Google


9

เมื่อคุณค้นหาบางสิ่งบางอย่างในGoogleAbout 53,000,000 results (0.22 seconds)ก็อำนวยความสะดวกให้ข้อความอยู่ด้านบนของหน้าพูดอะไรบางอย่างเช่น (ตัวเลขเปลี่ยนไปตามสิ่งที่ค้นหาแน่นอน)

ในการท้าทายนี้คุณจะเขียนโปรแกรมที่ดึงกราฟ ASCII แบบลอการิทึมของจำนวนผลลัพธ์ที่กำหนดโดย Google เมื่อค้นหาคำนำหน้าที่ไม่ว่างเปล่าทั้งหมดของวลีค้นหาที่ระบุ

ค้นหาวลีถูกกำหนดให้เป็นหนึ่งหรือมากกว่าสตริงของตัวเลขและตัวอักษรตัวพิมพ์เล็กแยกออกจากพื้นที่หนึ่งจากแต่ละอื่น ๆ ใน Regex (?:[a-z0-9]+ )*[a-z0-9]+ค้นหาวลีคือ

ดังนั้นim ok, rและ1a 2ทุกคนค้นหาวลี แต่I'm OK, R, 1a 2และจะไม่ได้

(ข้อ จำกัด ของตัวละครอยู่ในตำแหน่งเพราะ Google ไม่ค่อยคำนึงถึงตัวพิมพ์ใหญ่หรือสัญลักษณ์พิเศษเข้ามาด้วยการหลีกเลี่ยงอักขระที่ไม่ใช่ตัวอักษรและตัวเลขใน URL ก็เป็นเรื่องยุ่งยากเช่นกัน)

สเป็ค

โปรแกรมของคุณจะต้องใช้วลีค้นหาและเลขทศนิยมเป็นบวก H จาก stdin หรือบรรทัดคำสั่ง (คุณสามารถสันนิษฐานได้ว่ามันใช้ได้และไม่เป็นไรถ้าคุณต้องการคำพูดหรือสิ่งที่อยู่รอบ ๆ วลีค้นหา)

เป็นตัวอย่างการทำงานสมมติว่าวลีค้นหาคือa carและ H = 0.75

ขั้นตอนที่ 1:
รวบรวมคำนำหน้าไม่ว่างเปล่าของการค้นหาวลีของคุณและใส่ไว้ในเครื่องหมายคำพูดคู่ เครื่องหมายคำพูดทำให้แน่ใจว่าจะค้นหาวลีที่ถูกต้องหลีกเลี่ยงการเปลี่ยนเส้นทาง'คุณหมายถึง ... 'หรือไม่

a[space]ยกเว้นคำนำหน้าทั้งหมดที่สิ้นสุดในพื้นที่เช่น

Prefixes
"a"
"a c"
"a ca"
"a car"

ขั้นตอนที่ 2:
ค้นหาแต่ละคำเหล่านี้ตามที่ปรากฏโดยใช้https://www.google.comและจดบันทึกจำนวนผลลัพธ์ที่ส่งคืน

Search Term    Message                                       Results
"a"            About 6,950,000,000 results (0.27 seconds)    6950000000
"a c"          About 861,000,000 results (0.27 seconds)      861000000 
"a ca"         About 2,990,000 results (0.30 seconds)        2990000
"a car"        About 53,900,000 results (0.39 seconds)       53900000

หากคำค้นหาไม่ตรงกับเอกสารใด ๆให้ใส่ 0 ในResultsคอลัมน์

ขั้นตอนที่ 3:
คำนวณy = floor(H * log10(r + 1))สำหรับแต่ละแถวโดยที่ r คือResultsค่า H ยังคงเป็น 0.75 ที่นี่

Search Term    Results       y
"a"            6950000000    7
"a c"          861000000     6
"a ca"         2990000       4
"a car"        53900000      5

ขั้นตอนที่ 4:
จัดเรียงyจำนวนของแถบแนวตั้ง ( |) ด้านบนอักขระสุดท้ายของคำค้นหาที่ไม่มีเครื่องหมายอัญประกาศใช้ช่องว่างเพื่อเติมพื้นที่ว่างในกราฟแท่ง

|
| |
| | |
| |||
| |||
| |||
| |||
a car

กราฟนี้เป็นผลลัพธ์สุดท้ายของโปรแกรมของคุณและสิ่งเดียวที่จำเป็นในการแสดงผล มันควรจะไปที่ stdout

เกณฑ์การให้คะแนน

นี่คือ ดังนั้นโปรแกรมที่สั้นที่สุดเป็นไบต์จะเป็นผู้ชนะ

หมายเหตุ

  • คุณอาจจะใช้ shorteners URL หรือเครื่องมือค้นหาอื่น ๆ / APIs ตราบใดที่ผลจะเป็นเช่นเดียวกับการค้นหาhttps://www.google.com
  • ฉันรู้ว่าการเสนอราคาซ้ำไม่ใช่วิธีที่แน่นอนในการยกเว้นการเปลี่ยนเส้นทาง "คุณหมายถึง ... " การเพิ่ม&nfpr=1URL ไม่ได้ผลเสมอไป ไม่ต้องกังวลกับความไม่ถูกต้องเหล่านี้ เพียงมองหาAbout X results...ข้อความไม่ว่าจะเกิดอะไรขึ้นหรือตั้งค่าResultsเป็น 0 หากไม่มี
  • มีคอลัมน์ว่างเหนือช่องว่างใด ๆ ในการค้นหาวลีในกราฟ
  • กราฟไม่ควรกว้างหรือสูงกว่าที่ควรจะเป็น (เช่นช่องว่าง)
  • ไม่เป็นไรหากโปรแกรมของคุณมีผลข้างเคียงเช่นการเปิดเว็บเบราว์เซอร์เพื่อให้สามารถอ่านหน้า Google html / js ที่เป็นความลับได้เมื่อมีการแสดงผล

ฉันรู้ว่าไม่ใช่เรื่องปกติที่จะได้ผลลัพธ์เป็นศูนย์แต่เมื่อคุณไม่มี "เกี่ยวกับ x ผลลัพธ์ ... " ฉันคิดว่าควรจะตรวจจับและแสดงเป็น 0 บาร์?
Geobits

@Geobits ใช่รับผลลัพธ์ 0 รายการ
งานอดิเรกของ Calvin

1
เพียงแค่คุณรู้ - อย่าค้อน google - มันจะตอบสนองกับ captcha ถ้าคุณตีมันยากเกินไป / บ่อยเกินไปซึ่งอาจทำลายโปรแกรมของคุณ
SeanC

คำตอบ:


4

Ruby, 316 295 ไบต์

require 'open-uri'
s,h=*$*
r=[]
s.size.times{|i|r<<(s[i]==' '?'':?|*(h.to_f*Math.log10((URI.parse("http://google.com/search?q=#{URI::encode ?"+s[0..i]+?"}").read[/About [\d,]+ results/]||?0).gsub(/\D/,'').to_i+1)).floor)+s[i]}
puts r.map{|l|l.rjust(r.map(&:size).max).chars}.transpose.map &:join

น่าเสียดายที่คำขอเพิ่งหยุดทำงานกับผู้ทดสอบออนไลน์ที่ฉันใช้อยู่ดังนั้นฉันต้องตีกอล์ฟนี้คืนนี้หรือพรุ่งนี้

คำอธิบาย: ฉันกำลังรับอินพุตผ่าน ARGV จากนั้นฉันเพียงแค่ส่งคำขอสำหรับสตริงย่อยแต่ละอันที่ไม่ได้อยู่ในช่องว่างค้นหาผลลัพธ์ผ่าน regex (และค่าเริ่มต้น0หาก regex ไม่ตรงกัน) จากนั้นสร้างฮิสโตแกรมที่มีแถบแนวนอน ในตอนท้ายฉันกำลังย้อนกลับทุกบรรทัดและทำการสลับเพื่อสร้างฮิสโตแกรมแนวตั้ง

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