ডাউনগোট-ইফির প্রাণী!


25

আমার ডাউনগোট অবতারে বেশ কয়েকটি স্বতন্ত্র বৈশিষ্ট্য রয়েছে

এই বৈশিষ্ট্যগুলি অন্য যে কোনও প্রাণীর ক্ষেত্রেও প্রযোজ্য।

সবিস্তার বিবরণী

কোনও প্রাণীর একটি চিত্র দেওয়া (প্রযুক্তিগতভাবে যে কোনও কিছু হতে পারে), আপনাকে অবশ্যই এটিতে ডাউনগোটের বৈশিষ্ট্য প্রয়োগ করতে হবে।

সীমানা পিক্সেলগুলি চিত্রের বাইরের সর্বাধিক পিক্সেল।

পটভূমির রঙ সীমান্ত পিক্সেলে সবচেয়ে সাধারণ রং হিসেবে সংজ্ঞায়িত করা হয়। সেই রঙটি যখন (0, 256) থেকে প্রতিটি চ্যানেলের সাথে একটি (আর, জি, বি, ক) রঙ হিসাবে ব্যাখ্যা করা হয়, তখন ব্যাকগ্রাউন্ডটি এমন অঞ্চল হিসাবে সংজ্ঞায়িত করা হয় যেখানে প্রদত্ত পিক্সেলের প্রতিটি চ্যানেল 50 এর 50 এর মধ্যে থাকে " পেছনের রং".

প্রক্রিয়া:

  • ব্যাকগ্রাউন্ড এবং সমস্ত স্বচ্ছ পিক্সেল সেট করা #232323,RGBA(35, 35, 35, 1.00)
  • সব পিক্সেল যা পটভূমি নয় সেট #FC0D1B, RGBA(252, 13, 27, 1.00)
  • উল্লম্বভাবে চিত্র প্রতিফলিত করুন
  • -1চিত্রের কেন্দ্রস্থলে আরিয়াল ফন্টে পাঠ্য যুক্ত করুন । পাঠ্যের মোট উচ্চতা চিত্রের ক্ষুদ্রতম মাত্রার (অর্থাত্ min(width, height) * 0.25) 25% হওয়া উচিত ।

বিধি

  • ফন্টগুলি ইতিমধ্যে ইনস্টল করা আছে নির্দ্বিধায়
  • আপনার থ্রেশহোল্ড হওয়ার কথা 50, তবে আপনি এই সংখ্যাটি ইনপুট হিসাবে নিতে পারেন। এটি করার জন্য আপনি কোনও হ্রাস বাইট গণনা পাবেন না
  • আই / ও ফর্ম্যাট সম্পর্কিত যে কোনও প্রশ্নের জন্য আমাদের চিত্র I / O ডিফল্ট দেখুন
  • চিত্র সর্বদা কমপক্ষে 3x3 আকারের হবে
  • যদি সর্বাধিক সাধারণ "সীমান্তের পিক্সেল রঙ" না থাকে তবে আপনি কোন পটভূমির পিক্সেল রঙটি "পটভূমির রঙ" হিসাবে ব্যবহার করেন তা বিবেচনাধীন নয়, তবে এটি অবশ্যই সামঞ্জস্যপূর্ণ হতে হবে।

উদাহরণ

ইনপুট: ছাগল

আউটপুট: Downgoat


ইনপুট: স্কুইড

আউটপুট: Downsquid

ইনপুট: Downgoat

আউটপুট: Downdowngoat


ইনপুট: ডেনিস

আউটপুট: Downdennis


ইনপুট: Trichoplax

আউটপুট: Downtrichoplax


আরও উদাহরণ?

একটি অনলাইন বাস্তবায়ন এখানে উপলব্ধ: vihan.org/p/downgoatify/#50


এটি তাই বাইট জিতে সংক্ষিপ্ততম কোড। শুভকামনা!


6
-1 প্রথম পরীক্ষার মামলাটি কোনও প্রাণী নয় -_-
জিওবিটস

10
-1ˢᵗ পরীক্ষার ক্ষেত্রেও কোনও প্রাণী নয়।
অ্যাডম


1
শিরোনামে এবং পুরো প্রশ্ন জুড়ে "প্রাণী" কে "অবতার" এ পরিবর্তন করে এটি প্রাণী কিনা তা নিয়ে আপনি উদ্বেগ দূর করতে পারেন।
গ্লেন রেন্ডার্স-পেহারসন

4
হরফটি ব্যবহার করতে বলার কী আছে? এটি কেবলমাত্র ভাষাগুলিকে শাস্তি দেওয়া যেখানে ফন্ট পরিবর্তন করা আরও বাইট নেয়
ফ্যাটালাইজ করুন

উত্তর:


9

চিত্রম্যাগিক 7.0.3 + বাশ + সেড, 379 বাইট

M=magick K=\#232323 P='-chop x%[fx:u[0].h-2]-0+1'
$M $1 -depth 8 ppm:W;$M W $P T;$M W -rotate 90 -shave 1x $P L
C=`$M T L +append -statistic mode +0 txt:-|sed -e "1d;s/.*#/#/;s/ .*//;q"`
$M W -background $K -flatten -fill $K -fuzz 20% -opaque $C +fuzz -fill \#FC0D1B +opaque $K -flip -pointsize %[fx:.282*min\(u[0].w,u[0].h\)] -fill white -draw 'gravity center text 0,0 "-1"' x:

Ungolfed

# Make aliases for things we'll use repeatedly
M=magick K=\#232323 P='-chop x%[fx:u[0].h-2]-0+1'

# Copy the input file to a PPM file
$M $1 -depth 8 ppm:W

# Extract the border pixels into "T" (top and bottom), and "L" (left and right)
# PPM files, removing the ends from the "L" because they were already counted 
$M W $P T;$M W -rotate 90 -shave 1x $P L

# Put the borders into one strip and reduce to a txt image of the "mode"
# color on stdout, then convert the first pixel to hex format string "C"
C=`$M T L +append -statistic mode +0 txt:-|sed -e "1d;s/.*#/#/;s/ .*//;q"`

# Make background "#232323" and compose transparent pixels against it
# Convert any pixels with color within "fuzz" distance of background to #232323
# Convert any remaining pixels to "#FC0D1B"
# Flip the image vertically
# Determine pointsize for text, 1/5 of min(w,h). 1 pixel == 1.44 points
# Draw text "-1" centered on the image
# Display the result to an X window

$M W -background $K -flatten                     \
-fill $K -fuzz 20% -opaque $C                    \
+fuzz -fill \#FC0D1B +opaque $K                  \
-flip                                            \
-pointsize %[fx:.282*min\(u[0].w,u[0].h\)]       \
-fill white -draw 'gravity center text 0,0 "-1"' \
x:

ইনপুট এবং আউটপুট

ডেনিস ইমেজের জন্য আমি বেশ আলাদা উত্তর পাচ্ছি, সম্ভবত কারণ ইমেজম্যাগিকের "-ফজ" 2g ইউনিটের ব্যাসের সাথে একটি গোলককে আরজিবি স্থানাঙ্কগুলিতে গণনা করে যখন নিয়মগুলি rgb স্থানাঙ্কগুলিতে 101 ইউনিটের পক্ষের সাথে একটি ঘনক গণনা করার আহ্বান জানায়। "Fuzz" বৈচিত্র্যপূর্ণ কিছু সাহায্য করেছে। এছাড়াও, আসল জেপিইজি শিল্পকর্মগুলি রূপান্তরটিতে হস্তক্ষেপ করছে বলে মনে হচ্ছে।


আমি ইমেজম্যাগিকের সাথে ফিমিলিয়ার নই, সুতরাং এটি খুব অশিক্ষিত হতে পারে তবে আপনি # 0000 রঙের কোডটি কেবল # 0 দিয়ে প্রতিস্থাপন করতে পারেন?
tuskiomi

না, # 0 কাজ করে না। উভয়ই # 000 করে না কারণ এটি অস্বচ্ছ কালো এবং আমাদের এখানে স্বচ্ছ কালো প্রয়োজন।
গ্লেন রেন্ডার্স-পেহারসন

আমি যে বাগটি উল্লেখ করেছি, # ImageMagick 7.0.1 through 7.0.3-7 fails hereতা আইএম বিকাশকারীদের প্রতিবেদন করা হয়েছে এবং এটি 7.0.3-8 সংস্করণে স্থির করা হয়েছে।
গ্লেন রেন্ডার্স-পেহারসন

10

সি, 32-বিট উইন্ডোজ, 987 বাইট

#include <windows.h>
#define A CreateCompatibleDC(c)
#define F z=GetPixel(d,x,y);r=z;g=z>>8;b=z>>16
#define C(X,Y) (X<0||Y<0||X>=s[2]||Y>=s[3]||!GetPixel(e,X,Y))
#define D ((C(x-1,y)||C(x+1,y)||C(x,y-1)||C(x,y+1))&&!C(x,y))
#define E(X,Y) ((Z+X-Y)*(Z+X-Y)<2501)
main(int a,int*n){HDC c,d,e,f,w;int x,y,s[9],z,*o,m,t,Z;unsigned char r,g,b,R,G,B;c=GetDC(w=GetDesktopWindow());d=A;e=A;SelectObject(d,f=LoadImage(0,n[1],0,0,0,16));SelectObject(e,LoadImage(0,n[2],0,0,0,16));GetObject(f,24,s+1);o=LocalAlloc(64/*Fixed,ZeroInit*/,8*s[2]*s[3]);for(x=t=Z=s[1]=s[0]=0;x<s[2];x++)for(y=0;y<s[3];y++)if D{F;for(m=0;m<t&&o[m]!=z;m+=2);o[m]=z;o[m+1]++;t+=2*(m>=t);}for(x=y=1;x<t;x+=2)if(o[x]>o[y])y=x;z=o[y-1];R=z;G=z>>8;B=z>>16;for(x=0;x<s[2];x++)for(y=0;y<s[3];y++){F;SetPixel(c,x,s[3]-y-1,(C(x,y)||(E(r,R)&&E(g,G)&&E(b,B)))?0x232323:0x1B0DFC);}SelectObject(c,CreateFont(-(s[2]>>2),0,0,0,400,0,0,0,0,0,0,0,0,"Arial"));SetBkMode(c,1);SetTextColor(c,0xFFFFFF);DrawText(c,"-1",2,s,37);ReleaseDC(w,c);}
  • ফাইলটি এলএফ দিয়ে লাইন শেষ হিসাবে সংরক্ষণ করা হয়েছে, কিছু বাইট সংরক্ষণ করতে সিআর + এলএফ দিয়ে নয়।
  • প্রোগ্রামটি এমনভাবে লেখা হয়েছে যাতে আরও কয়েকটি বাইট সংরক্ষণের জন্য সংকলক সতর্কতা উত্পন্ন হয়।
  • ফাইলটি সম্ভবত 64-বিট প্রোগ্রাম হিসাবে সংকলন করবে না কারণ অ্যারে " s[]" কিছু অন্তর্নিহিত কাস্টিংয়ের জন্য ব্যবহৃত হয় ...
  • প্রোগ্রামটি দুটি ছবি নেয় (ফাইলের নাম কমান্ড লাইনের মাধ্যমে দেওয়া হয়):
    • প্রথম চিত্র (প্রথম কমান্ড লাইন আর্গুমেন্ট) হ'ল উইন্ডোজ .BMP ফর্ম্যাটে আর / জি / বি চিত্র
    • দ্বিতীয় চিত্রটি আলফা চ্যানেল (কালো অর্থ: 0%, অন্য কোনও রঙের অর্থ: 0% নয়); ফাইলটি .BMP ফর্ম্যাটেও রয়েছে এবং অবশ্যই এটির আকার বা প্রথম চিত্রের চেয়ে বড় হওয়া উচিত
  • আউটপুট চিত্রটি স্ক্রিনের বাম উপরের কোণায় প্রদর্শিত হবে
  • আমি ছেলেটির হলুদ চুল দিয়ে পুনরুত্পাদন করতে পারিনি। হলুদ সাদা থেকে অনেক দূরে (> 50) বলে মনে হচ্ছে!

অবরুদ্ধ সংস্করণ:

#include <windows.h>

/*
 * Although this line costs us 32 bytes
 * Replacing "CreateCompatibleDC(c)" we'll
 * save 42 bytes in the golfed version later
 * so we save 10 bytes using this define!
 */
#define A CreateCompatibleDC(c)

/*
 * Macro: Get a pixel value at (x,y) to z
 * Also get r, g, b
 */
#define F z=GetPixel(d,x,y); \
    r=z; \
    g=z>>8; \
    b=z>>16

/*
 * Macro checking if a pixel is a
 * transparent colour or lies outside the
 * image
 */
#define C(X,Y) (X<0 || Y<0 || X>=s[2] || Y>=s[3] || !GetPixel(e,X,Y))

/*
 * Macro checking if a pixel at (x,y) is a border pixel
 */
#define D ((C(x-1,y) || C(x+1,y) || C(x,y-1) || C(x,y+1)) && !C(x,y))

/*
 * Macro checking if the difference between X and Y is less than 50
 * The variable "Z" must be type "int" and zero. It is used to
 * perform an implicit cast from "BYTE" to "int".
 */
#define E(X,Y) ((Z+X-Y)*(Z+X-Y)<2501)

/*
 * Note that the second argument is "char **",
 * not "int *".
 * We ignore resulting compiler warnings...
 */
main(int a, int * n)
{
    HDC c, d, e, f, w;
    int x, y, s[9], z, *o, m, t, Z;
    unsigned char r, g, b, R, G, B;

    /*
     * Get the HDC handle to the
     * screen (allowing us to create HDCs
     * for accessing bitmap files as well as
     * drawing directly to the screen!)
     */
    c=GetDC(w=GetDesktopWindow());
    /*
     * Create two virtual HDCs for accessing
     * the bitmap files.
     */
    d=A; /* Macro */
    e=A; /* Macro */
    /*
     * Load the two images:
     * The first argument is the image file with
     * the R/G/B channel
     * The second argument is the image file
     * containing the mask defined by the Alpha
     * channel:
     *   Black means = Alpha=0
     *   White means = Alpha>0
     *   (Any other colour means: Alpha>0)
     *
     * Note that "f" is of the type "HBITMAP",
     * not "HDC". We save 4 bytes in the golfed
     * version using HDC instead of HBITMAP and
     * compile the C file with compiler warnings
     * switched off!
     *
     * The second image should have the same size
     * as the first one. However it may be larger
     * than the first one. It must not be smaller!
     */
    SelectObject(d,f=LoadImage(0,n[1],0,0,0,16 /* 16=LR_LOADFROMFILE */));
    SelectObject(e,LoadImage(0,n[2],0,0,0,16));
    /*
     * Get the image information (size)
     */
    GetObject(f,24,s+1);
    /*
     * Search all background colours
     */
    o=LocalAlloc(64 /* Fixed, ZeroInit */,8*s[2]*s[3]);
    for(x=t=Z=s[1]=s[0]=0;x<s[2];x++)
        for(y=0;y<s[3];y++)
            if D
    {
        F; /* Macro */
        for(m=0;m<t && o[m]!=z;m+=2);
        o[m]=z;
        o[m+1]++;
        t+=2*(m>=t);
    }
    /*
     * Search the most common one
     */
    for(x=y=1;x<t;x+=2) if(o[x]>o[y]) y=x;
    z=o[y-1];
    R=z;
    G=z>>8;
    B=z>>16;
    /*
     * Draw the image directly to the screen
     */
    for(x=0;x<s[2];x++)
        for(y=0;y<s[3];y++)
    {
        F; /* Macro */
        /* C and E are macros: */
        SetPixel(c,x,s[3]-y-1,(C(x,y) ||
            (E(r,R) && E(g,G) && E(b,B)))?
            0x232323:0x1B0DFC);
    }
    /*
     * Draw the text over the image
     */
    SelectObject(c,CreateFont(-(s[2]>>2),0,0,0,400,0,0,0,0,0,0,0,0,"Arial"));
    SetBkMode(c,1 /* TRANSPARENT */);
    SetTextColor(c,0xFFFFFF);
    DrawText(c,"-1",2,s,37 /* center, vcenter, singleline */);
    /*
     * Unfortunately DrawText() won't work
     * when not doing this!
     */
    ReleaseDC(w,c);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.