জাভা অ্যাসিস্ট্রিক আয়তক্ষেত্র [বন্ধ]


15

আমার সিএস ক্লাসের জন্য, আমার প্রশিক্ষকটি জাভাতে এটির মাধ্যমে আঁকানো তির্যক রেখার সাথে তারকাচিহ্নগুলি দিয়ে তৈরি একটি আয়তক্ষেত্র তৈরি করার দায়িত্ব দিয়েছেন।

তিনি আমাদের যতটা সম্ভব কম বাইটে এটি লিখতে বলেছিলেন। আমি এটিকে 190 বাইটে নামিয়েছি, তবে বাইট হ্রাস করার জন্য এই কোডটি আরও সহজ করার জন্য আমার কয়েকটি সন্ধান করতে হবে। যে কেউ এই আমাকে সাহায্য করতে পারেন?

এই কোডটি কার্যকরী:

interface d{static void main(String[]a){for(int z=0,w=new Byte(a[0]),h=new Byte(a[1]);z<h*w;){int y=z/w,x=z++%w;System.out.print((x>w-2)?"*\n":(y%(h-1)*x*((y-x)%3)==0)?"*":" ");}}}

ইনপুট হয় 10 10

আউটপুট:

**********
**  *  * *
* *  *  **
*  *  *  *
**  *  * *
* *  *  **
*  *  *  *
**  *  * *
* *  *  ** 

25
তাকে এসও-তে পুনর্নির্দেশ করবেন না; তিনি জীবিত খাওয়া হবে।
লিকি নুন

3
আপনি কি প্রোগ্রামটির আউটপুট এবং চশমা স্পষ্ট করতে পারেন? উদাহরণস্বরূপ ইনপুট / আউটপুট ইত্যাদি
TheLethalCoder

25
কেন এটি নিকটে ভোট দেওয়া হয়েছে তা আমি পুরোপুরি নিশ্চিত নই। এটি অবশ্যই কোনও সাধারণ প্রোগ্রামিং প্রশ্ন নয়। এটি বেশ মানক টিপস প্রশ্ন, যা বিষয়টিতে খুব বেশি very আমি হোমওয়ার্কের বিষয়ে আমাদের নীতি আছে কিনা তা আমি নিশ্চিত নই, যদিও যতদূর আমি দেখতে পাচ্ছি ওপি তাদের নিজস্ব প্রচেষ্টা দেখিয়ে চলেছে, তাই আমি মনে করি না এর সাথে আসলেই কিছু ভুল আছে?
মার্টিন ইন্ডার

3
নির্দিষ্ট golfing সমস্যার জন্য @NathanMerrill এডভাইস সবচেয়ে স্পষ্টভাবে বিষয় বন্ধ নয়
মার্টিন ইন্ডার

3
@ লিক্যনুন আমরা মানুষকে জীবিত না খেয়ে থাকি, আমরা প্রথমে তাদের হত্যা করি;)

উত্তর:


1

যৌক্তিকভাবে, প্রতিবার i == j& i+j==w-1( ত্রিভুজগুলির জন্য), i == 0এবং j == 0(উপরের লাইন এবং বাম পাশে) এবং j == w-1এবং i==h-1 (ডান দিক এবং নীচের লাইনের জন্য) অস্টেরিক ("*") থাকা উচিত ।

class d {
    public static void main(String[] a) {
        for(int i=0,w=new Byte(a[0]),h=new Byte(a[1]);i<h;i++) {
            for(int j=0;j<w;j++) {
                System.out.print(i==0 || j==0 || i==h-1 || i+j==w-1 || j==w-1 || i==j ? "*":" ");
            }
            System.out.println();
        }
    }
}

আমি জানি না এটি ব্যবহারকারীর যুক্তির কোনও উদাহরণ বা পুরো গল্ফযুক্ত কোড কিনা। এটি যদি দ্বিতীয় ক্ষেত্রে হয় তবে এখানে গল্ফ করার মতো অনেক কিছুই আছে। যেমন, System.out.println()ওআর পাইপ ( ||) এবং টের্নারি অপারেটরের মধ্যে অকেজো এবং সমস্ত অকেজো সাদা জায়গাগুলি।
Yytsi

1
এটি @ টুকুএক্সএক্স যুক্তিযুক্তর উদাহরণ মাত্র।
আব্বাস কারারওয়ালা

1

আপনার প্রদত্ত কোডটি এটি করে হ্রাস করা যেতে পারে:

  • "*" 42 দ্বারা এবং "" দ্বারা "" প্রতিস্থাপন করুন (* এর জন্য চারকোডের সুবিধা নিচ্ছেন)
  • ((y - x)% 3) বাড়ানোর জন্য যে জিনিসগুলি গুণিত করা যায় তার আশেপাশে যান এবং আশেপাশের বন্ধনীগুলি সরান
  • (x> w - 2) এবং ((y - x)% 3 * y% (h - 1) * x == 0) থেকে আশেপাশের বন্ধনীগুলি সরান

ফলাফল কোড হবে:

interface r{static void main(String[]a){for(int z=0,w=new Byte(a[0]),h=new Byte(a[1]);z<h*w;){int y=z/w,x=z++%w;System.out.print(x>w-2?"*\n":(y-x)%3*y%(h-1)*x==0?42:' ');}}}

দ্রষ্টব্য: প্রশ্নের শেষ আউটপুটটিতে গত লাইনটি অনুপস্থিত! নমুনা কোডের আউটপুট আলাদা।


0

আমার কম্পিউটারে আসলে জাভা নেই তাই আমি এটি পরীক্ষা করতে পারছি না তবে আমি মনে করি এটি 174 বাইটের জন্য কাজ করা উচিত এবং প্রায় স্পষ্টভাবে আরও গল্ফ করা যেতে পারে

class d{static void main(String[]a){for(int i=0,w=new Byte(a[0]),h=new Byte(a[1]);i<h;i++)for(int j=0;j<w;j++)System.out.print(j==w-1?"*\n":i%h-1==0||!j||i+j%2==0?"*":" ");}}

সাদা স্পেস স্পষ্টতার জন্য রাখা:

class d {
    static void string main(String[] a) {
        for(int i=0,w=new Byte(a[0]),h=new Byte(a[1]);i<h;i++)
            for(int j=0;j<w;j++)
                System.out.print(j==w-1 ? "*\n" : i % h-1 == 0 || !j || i+j % 2 == 0 ? "*":" ");
    }
}

প্রতিটি লাইনের সর্বশেষ চরের জন্য "* \ n" মুদ্রণ করুন, প্রথম এবং শেষ লাইন এবং প্রথম কলামের জন্য "*" এবং সারি এবং কলামের যোগফল যে কোনও সময়ের জন্য "*" প্রিন্ট করুন, অন্যথায় মুদ্রণ করুন ""

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.