গণিত, 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
দেখতে পাচ্ছে যে আপনি গণিতের কম্পিউটার ভিশন বিল্টিনগুলির মধ্যে একটিতে স্বীকৃতি প্রান্ত স্থাপন করতে পারেন এবং চিত্রটিকে ক্যাপরিন প্রাণী হিসাবে স্বীকৃতি দিতে পারেন।
তারপরে আমরা দেখতে পাই যে চিত্রটি বা উল্টানো চিত্রটি আরও ছাগল। আপনার প্রোফাইল ইমেজে কাজ করে কারণ টাই ডাউনগোটের পক্ষে ভেঙে গেছে। চিত্রটি বোভিডস বা ক্যাপরিন প্রাণী সত্তার ধরণের অন্যান্য জেনারালাইজেশনকে উপস্থাপন করে কিনা তা জিজ্ঞাসা করে এটি উন্নত করার উপায়গুলি সম্ভবত রয়েছে।
প্রথম টেস্টিং সেটটির জন্য লিখিত স্কোর হিসাবে 100% এবং দ্বিতীয় পরীক্ষার সেটটির জন্য 94% উত্তর দিন, কারণ আলগরিদম ছাগলের জন্য 1% একটি অনিবার্য ফলাফল দেয় This এটি আরও দীর্ঘ গণনার সময় ব্যয় করে 100% পর্যন্ত উত্থাপিত হতে পারে আরও মান পরীক্ষা RecognitionThreshold
। থেকে পালন 100
করার জন্য 1000
sufficies; কোনও কারণে ম্যাথামেটিকাকে মনে হয় যে এটি একটি খুব দুষ্টু চিত্র! ক্যাপরিন প্রাণী থেকে হুফেড মামালিতে স্বীকৃতি সত্তা পরিবর্তন করাও কাজ বলে মনে হচ্ছে।
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]
; " g[x]
প্রয়োগের ফলাফল y
।"
দ্বিতীয়ত, ম্যাথামেটিকায় অ্যাসাইনমেন্ট একটি প্রতিস্থাপনের নিয়ম সংজ্ঞায়নের সমান। অর্থাৎ f[x_] := x^2
নেই না মানে "নামে একটি ফাংশন ডিক্লেয়ার f
পরামিতি সঙ্গে x
যে ফেরৎ x^2
;" এর অর্থ এর কাছাকাছি, "যখনই আপনি এর মতো কিছু দেখেন f[ ... ]
, জিনিসটিকে ভিতরে কল করুন x
এবং পুরো জিনিসটি প্রতিস্থাপন করুন x^2
।"
এই দু'টিকে একসাথে রেখে আমরা দেখতে পাচ্ছি যে সংজ্ঞাটি g
ম্যাথমেটিকাকে বলছে যে ফর্মের কোনও অভিব্যক্তি (g[ ... ])[ ... ]
নিয়োগের ডান হাতের সাথে প্রতিস্থাপন করতে ।
ম্যাথামেটিকা যখন প্রকাশের মুখোমুখি হয় g[m]
(এর দ্বিতীয় লাইনে f
), তখন এটি দেখতে পায় যে এক্সপ্রেশনটি তার জানা কোনও নিয়মের সাথে মেলে না এবং এটি অপরিবর্তিত রেখে দেয় leaves তারপরে এটি 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]
নিজেই কোনও রূপান্তর হয়নি was)
আমি যে চূড়ান্ত কৌশলটি ব্যবহার করি তা হ'ল alচ্ছিক প্যাটার্ন। প্যাটার্নটির 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 *)