जावा तारांकन आयत [बंद]


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
मुझे पूरी तरह से यकीन नहीं है कि यह करीबी मतदान क्यों है। यह निश्चित रूप से सामान्य प्रोग्रामिंग प्रश्न नहीं है। यह बहुत मानक सुझाव सवाल है, जो विषय पर बहुत अधिक है। मुझे यकीन नहीं है कि हमारी होमवर्क पर कोई नीति है, हालाँकि जहाँ तक मैं देख सकता हूँ कि ओपी भी अपना प्रयास दिखा रहा है, तो मुझे नहीं लगता कि इसमें वास्तव में कुछ गलत है?
मार्टिन एंडर

3
विशिष्ट गोल्फिंग समस्याओं के लिए @NathanMerrill सलाह सबसे निश्चित रूप से विषय नहीं है
मार्टिन एंडर

3
@LeakyNun हम लोगों को जीवित नहीं खाते हैं, हम उन्हें पहले मारते हैं;)

जवाबों:


1

तार्किक रूप से, हर बार i == jऔर i+j==w-1(विकर्ण के लिए ) Asterik ("*") होना चाहिए , 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()OR पाइप ( ||) और टर्नरी ऑपरेटर के बीच बेकार और सभी बेकार व्हाट्सएप ।
यति

1
यह सिर्फ @TuukkaX तर्क के लिए एक उदाहरण है।
अब्बास करारावाला

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" प्रिंट करें, पहली और आखिरी पंक्तियों और पहले कॉलम के सभी के लिए "*", और "*" किसी भी समय के लिए कि पंक्ति और स्तंभ का योग समान है, अन्यथा प्रिंट ""

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.