ගණිතය, 100%, බයිට් 141
f@x_:=Count[1>0]@Table[ImageInstanceQ[x,"caprine animal",RecognitionThreshold->i/100],{i,0,50}];If[f@#>f@ImageReflect@#,"Up","Down"]<>"goat"&
හොඳයි, මෙය වංචාවකට වඩා ටිකක් දැනෙනවා. එය ඇදහිය නොහැකි තරම් මන්දගාමී මෙන්ම ඉතා මෝඩ වීමකි. fගණිතයේ පරිගණක දෘෂ්ටි බිල්ඩින් වලින් එකක ඔබට පිළිගැනීමේ සීමාව සැකසිය හැකි බව ශ්රිතය දළ වශයෙන් දකින අතර රූපය තවමත් කැප්රින් සතෙකු ලෙස හඳුනා ගනී.
එවිට රූපය හෝ පෙරළන ලද රූපය වඩා එළු දැයි අපි බලමු. ඔබගේ පැතිකඩ රූපය මත ක්රියා කරන්නේ පහත් කොටසට පක්ෂව ටයි කැඩී ඇති බැවිනි. රූපය බොවිඩ්ස් හෝ කැප්රින් සත්ව වස්තු වර්ගයේ වෙනත් සාමාන්යකරණයන් නියෝජනය කරන්නේ දැයි විමසීම ඇතුළුව මෙය වැඩිදියුණු කළ හැකි ක්රම රාශියක් ඇත.
ඇල්ගොරිතමය එළු 1 සඳහා අවිනිශ්චිත ප්රති result ලයක් ලබා දෙන බැවින් පළමු පරීක්ෂණ කට්ටලය සඳහා 100% ක් සහ දෙවන පරීක්ෂණ කට්ටලය සඳහා 94% ක් ලිඛිත ලකුණු ලෙස පිළිතුරු දෙන්න. මෙය ඊටත් වඩා දිගු ගණනය කිරීමේ වේලාවක වියදමින් 100% දක්වා ඉහළ නැංවිය හැකිය. හි වැඩි අගයන් පරීක්ෂා කිරීම RecognitionThreshold. සිට රැස් 100කිරීමට 1000sufficies; කිසියම් හේතුවක් නිසා ගණිතය සිතන්නේ එය ඉතා අශෝභන රූපයක් බවයි! කැප්රින් සත්වයාගේ සිට හූෆඩ් ක්ෂීරපායී දක්වා හඳුනාගැනීමේ ආයතනය වෙනස් කිරීම ද සාර්ථක බව පෙනේ.
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]එහි තර්කය එළිපත්ත සහිත එළු රූපයක් ද නැද්ද යන්න නැවත ලබා දෙයි t.
fපරාමිති තුනක් ගනී: රූපයක්, සහ ඉහළ සහ පහළ සීමාව එළිපත්ත. එය පුනරාවර්තන ය; එය ක්රියාත්මක වන්නේ mඉහළ සහ පහළ එළිපත්ත අතර එළිපත්ත පරීක්ෂා කිරීමෙනි (පහළ දෙසට පක්ෂග්රාහී). රූපය සහ පරාවර්තනය කළ රූපය එළු හෝ එළු නොවන ඒවා නම්, එය පරාසයේ පහළ හෝ ඉහළ කොටස සුදුසු පරිදි ඉවත් කර නැවත තමාටම කියා ගනී. එසේ නොමැතිනම්, එක් රූපයක් එළු සහ අනෙක් රූපය එළු නොවන Upgoatනම් , එය පළමු රූපය එළු සහ Downgoatවෙනත් ආකාරයකින් නම් (දෙවන, පරාවර්තනය කළ රූපය එළු නම්) නැවත පැමිණේ.
ශ්රිත අර්ථ දැක්වීම් සුළු පැහැදිලි කිරීමක් අවශ්ය වේ. පළමුව, ශ්රිත යෙදුම වම් සහායක වේ. මෙයින් අදහස් කරන්නේ වැනි g[x][y]දෙයක් අර්ථකථනය කර ඇති බවයි (g[x])[y]; "අදාළ වීමේ ප්රති result g[x]ලය y."
දෙවනුව, ගණිතයේ පැවරුම ආදේශන රීතියක් අර්ථ දැක්වීමට දළ වශයෙන් සමාන වේ. එනම්, f[x_] := x^2නැත නැත අදහස් "නමින් උත්සවයක් ප්රකාශ fපරාමිතිය සමඟ xබව ප්රතිලාභ x^2;" එහි තේරුම වඩාත් සමීප වන්නේ, "ඔබ වැනි දෙයක් දකින සෑම විටම f[ ... ], ඇතුළත ඇති දේ අමතා xමුළු දේම ප්රතිස්ථාපනය කරන්න x^2."
මේ දෙක එකට ගත් විට, අර්ථ gදැක්වෙන්නේ ගණිතයට ඕනෑම ආකාරයක ප්රකාශනයක් (g[ ... ])[ ... ]පැවරුමේ දකුණු පසින් ආදේශ කරන ලෙසට ය .
ගණිතමය ප්රකාශනයට g[m](දෙවන පේළියේ f) හමු වූ විට, එම ප්රකාශනය තමන් දන්නා කිසිදු රීතියකට නොගැලපෙන බවත් එය නොවෙනස්ව පවතින බවත් පෙනේ. එවිට එය Mapක්රියාකරුට ගැලපේ /@, කාගේ තර්ක g[m]සහ ලැයිස්තුව {i, ImageReflect@i}. ( /@ඉන්ෆික්ස් අංකනය; මෙම ප්රකාශනය හරියටම සමාන වේ Map[g[m], { ... }].) Mapඑහි පළමු තර්කය එහි දෙවන තර්කයේ එක් එක් මූලද්රව්යයට යෙදීමෙන් ප්රතිස්ථාපනය වේ, එබැවින් අපට ලැබේ {(g[m])[i], (g[m])[ ... ]}. දැන් ගණිතයේ දැක්වෙන්නේ එක් එක් මූලද්රව්යය අර්ථ දැක්වීමට ගැලපෙන බවත් gඑය ප්රතිස්ථාපනය කරන බවත්ය.
මේ ආකාරයට අපට gවෙනත් ශ්රිතයක් ලබා දෙන ශ්රිතයක් මෙන් ක්රියා කිරීමට සිදුවිය. එනම්, එය දළ වශයෙන් අප ලියා ඇති ආකාරයට ක්රියා කරයි:
g[t_] := Function[{i}, ImageInstanceQ[i, "caprine animal", RecognitionThreshold -> t]]
(මෙම අවස්ථාවෙහිදී g[t]එය තනිවම ඇගයීමට ලක් කිරීම හැර 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 *)