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
การ1000
sufficies; ด้วยเหตุผลบางอย่าง 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 *)