Mathematica, 100%, 141 bytes
f@x_:=Count[1>0]@Table[ImageInstanceQ[x,"caprine animal",RecognitionThreshold->i/100],{i,0,50}];If[f@#>f@ImageReflect@#,"Up","Down"]<>"goat"&
นี่มันให้ความรู้สึกมากกว่าการโกง นอกจากนี้ยังช้าอย่างไม่น่าเชื่อและโง่มาก ฟังก์ชั่นfมองเห็นว่าคุณสามารถตั้งค่า threshold การรู้จำในคอมพิวเตอร์วิสัยทัศน์ของ Mathematica ได้สูงเพียงใดและยังคงรับรู้ภาพในรูปสัตว์ Caprine
จากนั้นเราจะเห็นว่าภาพหรือภาพพลิกเป็นแพะมากขึ้น ใช้งานได้กับภาพโปรไฟล์ของคุณเท่านั้นเนื่องจากการผูกไทม์จะไม่เอื้ออำนวย อาจมีหลายวิธีที่สามารถปรับปรุงให้ดีขึ้นได้รวมถึงถามว่าภาพนั้นเป็นตัวแทนของ Bovids หรือภาพรวมอื่น ๆ ของประเภทเอนทิตีสัตว์ของ Caprine
ตอบเป็นคะแนนเป็นลายลักษณ์อักษร 100% สำหรับชุดการทดสอบแรกและ 94% สำหรับชุดการทดสอบที่สองเนื่องจากอัลกอริทึมให้ผลลัพธ์ที่ไม่สามารถสรุปได้สำหรับแพะ 1 ซึ่งสามารถเพิ่มได้ถึง 100% โดยเสียเวลาในการคำนวณนานขึ้น RecognitionThresholdการทดสอบค่ามากขึ้นของ เพิ่มจาก100การ1000sufficies; ด้วยเหตุผลบางอย่าง Mathematica จึงคิดว่านั่นเป็นภาพที่ไม่สบายใจมาก! การเปลี่ยนการรับรู้จากสัตว์แคปรินเป็นสัตว์เลี้ยงลูกด้วยนม Hoofed ก็ดูเหมือนว่าจะทำงาน
Ungolfed:
goatness[image_] := Count[
Table[
ImageInstanceQ[
image, Entity["Concept", "CaprineAnimal::4p79r"],
RecognitionThreshold -> threshold
],
{threshold, 0, 0.5, 0.01}
],
True
]
Function[{image},
StringJoin[
If[goatness[image] > goatness[ImageReflect[image]],
"Up",
"Down"
],
"goat"
]
]
ทางเลือกในการแก้ปัญหาโบนัส 100%
g[t_][i_] := ImageInstanceQ[i, "caprine animal", RecognitionThreshold -> t]
f[i_, l_: 0, u_: 1] := Module[{m = (2 l + u)/3, r},
r = g[m] /@ {i, ImageReflect@i};
If[Equal @@ r,
If[First@r, f[i, m, u], f[i, l, m]],
If[First@r, "Up", "Down"] <> "goat"
]
]
อันนี้ใช้กลยุทธ์เดียวกันเมื่อก่อน แต่ด้วยการค้นหาแบบไบนารีเหนือขีด จำกัด มีสองฟังก์ชันที่เกี่ยวข้องที่นี่:
g[t]ผลตอบแทนที่ได้หรือไม่ว่าอาร์กิวเมนต์เป็นภาพ goaty tกับเกณฑ์
fใช้พารามิเตอร์สามตัว: รูปภาพและขอบเขตบนและล่างบนขีด จำกัด มันซ้ำ; มันทำงานได้โดยการทดสอบขีด จำกัดmระหว่างขีด จำกัดบนและล่าง (เอนเอียงไปทางด้านล่าง) หากภาพและภาพที่สะท้อนนั้นเป็นทั้งแพะหรือไม่เป็นแพะก็จะกำจัดส่วนล่างหรือส่วนบนของช่วงตามความเหมาะสมและเรียกตัวเองอีกครั้ง มิฉะนั้นถ้าภาพหนึ่งเป็นแพะและอื่น ๆ ที่ไม่ใช่แพะก็จะกลับมาUpgoatถ้าภาพแรกเป็นแพะและDowngoatอื่น ๆ (ถ้าภาพที่สองสะท้อนให้เห็นเป็นแพะ)
นิยามฟังก์ชั่นสมควรได้รับคำอธิบายเล็กน้อย ขั้นแรกให้แอปพลิเคชั่นทำงานเชื่อมโยงกัน ซึ่งหมายความว่าสิ่งที่ชอบg[x][y]ถูกตีความว่าเป็น(g[x])[y]; "ผลลัพธ์ของการg[x]ใช้กับy"
ประการที่สองการมอบหมายใน Mathematica นั้นเทียบเท่ากับการกำหนดกฎการแทนที่ นั่นคือf[x_] := x^2ไม่ได้หมายความว่า "ประกาศฟังก์ชั่นที่fมีชื่อด้วยพารามิเตอร์xที่ส่งกลับx^2;" ความหมายของมันอยู่ใกล้กับ "เมื่อใดก็ตามที่คุณเห็นสิ่งที่ชอบf[ ... ]โทรสิ่งที่อยู่ภายในxและแทนที่สิ่งที่ทั้งมีx^2."
เมื่อรวมสองสิ่งนี้เข้าด้วยกันเราจะเห็นว่าความหมายของการgบอก Mathematica เพื่อแทนที่การแสดงออกใด ๆ ของแบบฟอร์ม(g[ ... ])[ ... ]ด้วยด้านขวามือของการมอบหมาย
เมื่อ Mathematica พบการแสดงออกg[m](ในบรรทัดที่สองของf) จะเห็นว่าการแสดงออกไม่ตรงกับกฎใด ๆ ที่มันรู้และทำให้ไม่เปลี่ยนแปลง จากนั้นก็จะตรงกับMapผู้ประกอบการ/@ที่มีข้อโต้แย้งอยู่และรายการg[m] {i, ImageReflect@i}( /@เป็นสัญกรณ์มัด; แสดงออกตรงนี้เป็นเทียบเท่ากับMap[g[m], { ... }].) The ถูกแทนที่โดยใช้อาร์กิวเมนต์แรกขององค์ประกอบของการโต้แย้งที่สองของแต่ละคนเพื่อให้เราได้รับMap {(g[m])[i], (g[m])[ ... ]}ตอนนี้ Mathematica เห็นว่าแต่ละองค์ประกอบตรงกับคำจำกัดความgและทำการแทนที่
ด้วยวิธีนี้เราgต้องทำหน้าที่เหมือนฟังก์ชันที่ส่งคืนฟังก์ชันอื่น นั่นคือมันทำหน้าที่เหมือนที่เราเขียนไว้:
g[t_] := Function[{i}, ImageInstanceQ[i, "caprine animal", RecognitionThreshold -> t]]
(ยกเว้นในกรณีนี้g[t]ด้วยตัวของมันเองประเมินว่า a Functionในขณะที่ก่อนหน้านี้g[t]มันไม่ได้ถูกแปลงเลย)
เคล็ดลับสุดท้ายที่ฉันใช้เป็นรูปแบบที่เป็นตัวเลือก รูปแบบl_ : 0หมายถึง "จับคู่นิพจน์ใด ๆ และทำให้พร้อมใช้งานเป็นlหรือจับคู่กับอะไรและทำให้0ใช้ได้ในฐานะl" ดังนั้นถ้าคุณโทรf[i]ด้วยอาร์กิวเมนต์หนึ่งตัว (ภาพที่จะทดสอบ) มันก็เหมือนกับว่าคุณได้โทรf[i, 0, 1]มา
นี่คือสายรัดทดสอบที่ฉันใช้:
gist = Import["https://api.github.com/gists/3fb94bfaa7364ccdd8e2", "JSON"];
{names, urls} = Transpose[{"filename", "raw_url"} /. Last /@ ("files" /. gist)];
images = Import /@ urls;
result = f /@ images
Tally@MapThread[StringContainsQ[##, IgnoreCase -> True] &, {names, result}]
(* {{True, 18}} *)
user = "items" /.
Import["https://api.stackexchange.com/2.2/users/40695?site=codegolf", "JSON"];
pic = Import[First["profile_image" /. user]];
name = First["display_name" /. user];
name == f@pic
(* True *)