একটি লেগো টুকরা মুদ্রণ করুন


48

এই চ্যালেঞ্জটি একটি সাধারণ এক। একটি লেগো অংশের উচ্চতা এবং প্রস্থ বর্ণনা করে দুটি ইনপুট দেওয়া হয়েছে, আপনি এটির একটি ASCII শিল্প উপস্থাপনা মুদ্রণ করেছেন।

এখানে লেগো টুকরোগুলি দেখার মতো বলে মনে হচ্ছে:

(4, 2)

___________
| o o o o |
| o o o o |
-----------

(8, 2)

___________________
| o o o o o o o o |
| o o o o o o o o |
-------------------

(4, 4)

___________
| o o o o |
| o o o o |
| o o o o |
| o o o o |
-----------

(3, 2)

_________
| o o o |
| o o o |
---------

(1, 1)

o

আপনি যদি পরীক্ষার কেসগুলি থেকে বলতে না পারেন তবে উপরের এবং নীচের width*2+3অংশটি আন্ডারস্কোর এবং ড্যাশগুলি রয়েছে এবং প্রতিটি সারিতে পক্ষের জন্য পাইপ রয়েছে, oছোট জিনিসগুলির জন্য এবং সবকিছু স্পেস দ্বারা পৃথক করা হয়।

শুধুমাত্র এই জন্য ব্যতিক্রম নয় (1, 1)যা কেবলমাত্র একটি হল, o

আপনি 0কোনও মাত্রার জন্য পাবেন না ।

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোড !


2
এটি কি প্রস্থ বা উচ্চতা 10 এর বেশি হবে? আমাদের কোন পরিসীমা সমর্থন করা উচিত?
ডিজেএমসিএমহেম

29
বিশেষ কেসটি একটি বাস্তব বামার।
কনর ও'ব্রায়ান

47
পরবর্তী কয়েক বছরে, আমি আরেকটি "প্রিন্ট একটি লেগো টুকরো" চ্যালেঞ্জ দেখতে চাই যা একটি লেগো উত্পাদন করার জন্য একটি 3 ডি প্রিন্টারকে বলতে কোড লিখতে হবে।
কেভিন - মনিকা

8
অপেক্ষা করুন, "আপনার ভাষা সমর্থন করে যে কোনও সংখ্যার পূর্ণ পরিসীমা"? এটি LEGO কীভাবে কাজ করে তা নয়। ইটগুলি কেবলমাত্র কয়েকটি নির্দিষ্ট মাত্রার মুঠোয় উপলব্ধ। এমনকি আপনি প্লেটে যুক্ত করলেও আপনি কেবল আরও কয়েকজন পান। (1,7) বা (5,3) এর মতো ইনপুট বাতিল না করে এমন কোনও স্ক্রিপ্ট সম্পূর্ণ আবর্জনা।
রেজিডউইট

3
কেন একক টুকরো (1,1) এর পক্ষ নেই? একটি কিউবের উপরে এক স্তনের সাথে একটি বাস্তব লেগো টুকরা রয়েছে।
tcrosley

উত্তর:


53

বেফুঞ্জ , 165 227 বাইট

&::&*:1` v
v+3*2:\/\_"o",@
v       _$ v<
>"_",1-:^  2
v:,,"| ",*5<
v         _v
>" o",,1-:^$
>*v>\     #\^
5 #|:-1,"|"<
^2$<
v1, *95<
- >2*3+^
>:    #^_@

আগের মতো সাদা জায়গা নয়, তবে এখনও ফাঁক আছে। পূর্ববর্তী সমাধানের মতো নীতিটি একই, তবে বিন্যাসটি আলাদা। এবার, উভয় সংখ্যা 1 হয় কিনা তা পরীক্ষা করার জন্য, আমি কেবল তাদের পণ্য নিচ্ছি এবং ফলাফলটি 1 এর চেয়ে বেশি কিনা তা দেখতে পাচ্ছি।


পুরানো দ্রবণ (227 বাইট)

v           v       <
&   >>\:2*3+>"_",1-:|
>&:1`|v ,,"| ",*52:$<   :\<
    #\v         <
     :>" o",,1-:|
     1          >"|",$\1-:|
    \`            @       $
    ^_"o",@>:!    |       2
           ^-1,*95<+3*2,*5<

এটি আরও গল্ফ করা সম্ভব হতে পারে। শুধু যে সাদা জায়গা তাকান!

এমস্পেন্টের চিত্র ফর্মের একটি ব্যাখ্যাতে এখানে আমার দুর্বল প্রচেষ্টা: কিভাবে Befunge কোডটি তীরটির দিকে প্রবাহিত।


2
উহু. আমার. সৃষ্টিকর্তা. আমার মন
উড়িয়ে দেয়

25

ভি , 43, 40, 38 36 বাইট

আমি লিখেছি দীর্ঘতম ভি উত্তরগুলির মধ্যে একটি ...

Àio ddÀPñóo î½o
u2Pí.«/| °|
Vr-HVr_

এটি অনলাইন চেষ্টা করুন!

যেহেতু এটিতে ইউনিকোড এবং অপরিশোধিত অক্ষর রয়েছে তাই এখানে একটি বিপরীত হেক্সডাম্প রয়েছে:

0000000: c069 6f20 1b64 64c0 50f1 f36f 20ee bd6f  .io .dd.P..o ..o
0000010: 0d0a 7532 50ed 2eab 2f7c 20b0 7c0d 0a56  ..u2P.../| .|..V
0000020: 722d 4856 725f                           r-HVr_

এই চ্যালেঞ্জটি পাঠ্যের হেরফের সম্পর্কে, তাই ভি এর জন্য নিখুঁত! অন্যদিকে, শর্তসাপেক্ষে এবং গণিতে ভি ভীষণ ভয়ঙ্কর, সুতরাং (1, 1) এর জন্য পৃথক পৃথক আউটপুটটি সত্যই এটিকে খারাপ করে দিয়েছে ... :(

ব্যাখ্যা:

À                   "Arg1 times:
 io <esc>           "Insert 'o '
         dd         "Delete this line, and
           À        "Arg2 times:
            P       "Paste it

এখন আমরা ওগুলির 'উচ্চতা' রেখা তাদের মধ্যবর্তী ফাঁকাসহ রয়েছে।

ñ                   "Wrap all of the next lines in a macro. This makes it so that if any 
                    "Search fails, execution will stop (to handle for the [1, 1] case)
 ó                  "Search and replace
  o î½o             "'o'+space+0 or 1 newlines+another 'o'

u                   "Undo this last search/replace
 2P                 "Paste twice
   í                "Search and replace on every line
    .«/| °|         "A compressed regex. This surrounds every non-empty line with bars.

Vr-                 "Replace the current (last) line with '-'
   H                "Move to line one
    Vr_             "Replace this line with '_'

অ-প্রতিযোগিতামূলক সংস্করণ (31 বাইট):

এটি অনলাইন চেষ্টা করুন!

এই সংস্করণে বেশ কয়েকটি বৈশিষ্ট্য ব্যবহার করা হয়েছে যা আরও নতুন যা এই চ্যালেঞ্জটি 5 বাইট সংক্ষিপ্ত হতে হবে!

দ্বিতীয় ব্যাখ্যা:

ddÀP

যা "লাইনটি মুছুন, এবং এটি n বার পেস্ট করুন " তার পরিবর্তিত হয় ÀÄযা "এই লাইনের n বার পুনরাবৃত্তি করুন" is (-২ বাইট)

óo î½o
u

যা "এই রেজেক্সের প্রথম ম্যাচটি প্রতিস্থাপন করুন; পূর্বাবস্থায়" প্রতিস্থাপন করা হয়েছিল

/o î½o

যা কেবল "এই রেজেক্সের ম্যাচের জন্য অনুসন্ধান করুন" (-1 বাইট)

এবং শেষ অবধি, এর Òএকটি সহজ প্রতিশব্দ Vr, যা উভয়ই "এই লাইনের প্রতিটি অক্ষরকে 'x' দিয়ে প্রতিস্থাপন করে"। (-২ বাইট)



2
@ এমপিএল আমার আসলেই কোন ধারণা নেই। এটি 50x959 এ কাজ করে তবে আপনি প্রস্থ বা উচ্চতা বৃদ্ধি করলে এটি কাজ করা বন্ধ করে দেয়। আমি অনুমান করছি যে এটি সম্ভবত খুব বড় প্রোগ্রাম পরিচালিত হতে বাধা দেওয়ার জন্য ইচ্ছাকৃতভাবে ওয়েবসাইটে একটি বিধিনিষেধ তৈরি করেছিল।
ডিজেএমসিএমহেম

1
মূলত আপনার ব্রাউজারটি ক্র্যাশ হওয়া থেকে সম্মুখভাগটিকে আটকাতে টিআইও আউটপুটটিকে 100 কেবি সীমাবদ্ধ করে
ডেনিস

22

32 16-বিট লিটল এন্ডিয়ান x86 মেশিন কোড, 57 54 51 বাইট

3 বাইট কম ধন্যবাদ @ নিঞ্জালজকে।

ভারীভাবে কোডটি পুনরায় লিখেছেন এবং আরও 3 বাইট শেভ করতে সক্ষম হয়েছেন

হেক্সে

FCBA6F208D48FFE20492AAEB2389D941D1E14151B05FF3AAEB0BB87C20AB89D992F3AB92AAB00AAA4E7DEF59B02DF3AA91AAC3

ইনপুট: বিএক্স = প্রস্থ, এসআই = উচ্চতা, ডিআই বাফারকে নির্দেশ করে যা "UL n" দ্বারা পৃথকীকৃত রেখাগুলির সাথে একটি NULL- সমাপ্ত স্ট্রিং হিসাবে ফলাফল প্রাপ্ত করে receives

disassembly:

fc            cld
ba 6f 20      mov    dx,0x206f      ;Storing ' o' in DX for later use
8d 48 ff      lea    cx,[bx+si-0x1] ;CX=width+height-1
e2 04         loop   _main0         ;--CX & brahch if not zero
92            xchg   dx,ax          ;(1,1) case, swap DX & AX
aa            stosb                 ;AL == 'o', CX == 0
eb 23         jmp    _end
_main0:
89 d9         mov    cx,bx
41            inc    cx
d1 e1         shl    cx,1
41            inc    cx           ;Calculate (width+1)*2+1
51            push   cx           ;and save it for future use
b0 5f         mov    al,0x5f      ;'_'
f3 aa         rep    stosb        ;Output the whole line of them
eb 0b         jmp    _loopstart   ;Jump into the loop
_loop:
b8 7c 20      mov    ax,0x207c    ;' |'
ab            stosw               ;Output it once (left bar + space)
89 d9         mov    cx,bx        ;Copy width
92            xchg   dx,ax        ;AX == ' o'
f3 ab         rep    stosw        ;Output it CX times
92            xchg   dx,ax        ;Swap values back, AL == '|'
aa            stosb               ;Output only the right bar
_loopstart:
b0 0a         mov    al,0x0a      ;Newline. Can be replaced with mov ax,0x0a0d for windows newline
aa            stosb               ;convention (at the cost of 1 byte), with stosb replaced with stosw
4e            dec    si           ;Height--
7d ef         jge    _loop        ;Continue if si >= 0 (this accounts for the dummy first pass)
59            pop    cx
b0 2d         mov    al,0x2d      ;'-'
f3 aa         rep    stosb        ;Output bottom line
_end:
91            xchg   cx,ax        ;CX == 0, so swap to get zero in AL
aa            stosb               ;NULL-terminate output
c3            retn

16-বিট হিসাবে সংক্ষিপ্ত হবে: 3 h 66 উপসর্গের জন্য -3 বাইট, "\ r \ n" লাইন সমাপ্তির জন্য +1 বাইট।
নিনজালজ

পঠনযোগ্যতার জন্য আপনার বাইট গণনাতে ক্রস আউট সংখ্যা এবং বর্তমান সংখ্যাগুলির মধ্যে ফাঁকা স্থান রাখা উচিত।
মান কালি

20

পাইথন 2, 75 73 72 বাইট

lambda x,y:(x*'__'+'___\n'+('| '+'o '*x+'|\n')*y+'-'*(x*2+3),'o')[x<2>y]

1,1 ব্লক পরিচালনা করার শর্তসাপেক্ষে একটি স্ট্রিং ফিরিয়ে দেয়।

লিন এবং চ্যাপনারকে দুটি বাইটের জন্য ধন্যবাদ


lambda x,y:('_'*x*2+'___\n'+ইত্যাদি একটি বাইট সংরক্ষণ করে।
লিন

1
এর x*'__'পরিবর্তে অন্য একটি বাইট বন্ধ করুন 2*x*'_'
চিপনার

জিজ্ঞাসা করার জন্য দুঃখিত, কেবল এই সংঘে যোগদান করুন। আমি কিভাবে এটি চালানো দেখতে পারি? আমি এটি টার্মিনালে পেস্ট করেছি এবং প্রিন্ট করি <function <lambda> at 0x......>। আমি কীভাবে এটি পরীক্ষা করতে পারি?
মিগুয়েল

1
@ মিগুয়েল এটি একটি পরিবর্তনশীলকে বরাদ্দ করে। এটি ফাংশনের মানটি ফিরিয়ে দেবে:f=lambda x:x+1; print(f(9))
এ্যাটলজিস্ট

উত্তর দিতে জটিল না হলে আরও একটি প্রশ্ন। আপনি কীভাবে এতগুলি বিটগুলি সঠিকভাবে সন্ধান করতে পারেন?
মিগুয়েল

13

সিজেম, 34

'_q~'o*"||"\*S*f*f+'-f+zN*_,H='o@?

এটি অনলাইনে চেষ্টা করুন

ব্যাখ্যা:

'_        push a '_' character
q~        read and evaluate the input (height and width)
'o*       repeat the 'o' character <width> times
"||"\*    join the "||" string by the string of o's (putting them in between)
S*        join with spaces (inserting a space between every 2 characters)
f*        repeat each character <height> times, making it a separate string
f+        prepend '_' to each string
'-f+      append '-' to each string
z         transpose the array of strings
N*        join with newlines; lego piece is ready, special case to follow
_,        duplicate the string and get its length
H=        compare with H=17
'o        push 'o' for the true case
@         bring the lego piece to the top for the false case
?         if the length was 17, use 'o' else use the lego piece

11

রুবি, 59 56 বাইট

বেনামে ফাংশন, একাধিক স্ট্রিং প্রদান করে। এটি অনলাইন চেষ্টা করুন!

-3 বাইটস @ এল'এন্ডিয়াস্টারম্যানের কাছ থেকে একটি কৌশল ধার করার জন্য ধন্যবাদ

->w,h{w*h<2??o:?_*(x=2*w+3)+$/+(?|+' o'*w+" |
")*h+?-*x}

11

জাভা, 318 312 297 294 260 258 বাইট

ক্লিফ্রুট ধন্যবাদ 15 বাইট সংরক্ষণ করা !

interface a{static void main(String[]A){int b=Byte.valueOf(A[0]),B=Byte.valueOf(A[1]),C=3+b*2;String c="";if(b<2&B<2)c="o";else{for(;C-->0;)c+="_";for(;B-->0;){c+="\n|";for(C=b;C-->0;)c+=" o";c+=" |";}c+="\n";for(C=3+b*2;C-->0;)c+="-";}System.out.print(c);}}

এটি কমান্ড লাইন আর্গুমেন্টের সাথে কাজ করে।

নিখরচায় একটি মানব-পঠনযোগ্য আকারে:

interface a {
    static void main(String[] A) {
        int b = Byte.valueOf(A[0]),
            B = Byte.valueOf(A[1]),
            C = 3 + b*2;
        String c = "";
        if (b < 2 & B < 2)
            c = "o";
        else {
            for (; C-- > 0;)
                c += "_";
            for (; B-- > 0;) {
                c += "\n|";
                for (C = b; C-- >0;)
                    c += " o";
                c += " |";
            }
            c += "\n";
            for(C = 3 + b*2; C-- >0;)
                c += "-";
        }
        System.out.print(c);
    }
}

হ্যাঁ, প্রোগ্রামটি শৃঙ্খলাবদ্ধ থাকা সত্ত্বেও কী চলছে তা বোঝা এখনও মুশকিল। সুতরাং এখানে ধাপে ধাপে ব্যাখ্যা:

static void main(String[] A)

প্রথম দুটি কমান্ড লাইন যুক্তি-যা আমরা মাত্রা পেতে ব্যবহার করব - প্রোগ্রামে A[0]এবং A[1](যথাক্রমে) ব্যবহার করা যেতে পারে ।

int b = Byte.valueOf(A[0]),
    B = Byte.valueOf(A[1]),
    C = 3 + b*2;
String c = "";

bকলামগুলির Bসংখ্যা, সারিগুলির সংখ্যা Cএবং forলুপগুলিতে ব্যবহারের জন্য নিবেদিত একটি পরিবর্তনশীল ।

cলেগো টুকরা। আমরা এতে সারি যুক্ত করব এবং তারপরে এটি শেষে মুদ্রণ করব।

if (b < 2 & B < 2)
    c = "o";
else {

তাহলে টুকরা ছাপা হবে 1x1 হয়, তাহলে উভয় b(কলামের সংখ্যা) এবং B(সারি সংখ্যা) চেয়ে ছোট 2. হওয়া উচিত তাই আমরা কেবল সেট cএকটি একক থেকে oএবং তারপর লাফালাফি করতে বিবৃতি যে System.out.printটুকরা গুলি সেই বিষয়টিই কিনা তা।

for (; C-- > 0; C)
    c += "_";

এখানে, আমরা (integerValueOfA[0] * 2) + 3আন্ডারস্কোরগুলিকে সংযোজন করি c। এটি সমস্ত গর্তের উপরে শীর্ষ সারিতে most

for (; B > 0; B--) {
    c += "\n|";
    for(C = b; C-- > 0;)
        c+=" o";
    c += " |";
}

এটি সেই লুপ যেখানে আমরা একসাথে এক সারি টুকরোটি তৈরি করি। ভিতরে যা চলছে তা উদাহরণ ছাড়া ব্যাখ্যা করা অসম্ভব। ধরা যাক যে টুকরাটি 4x4:

Before entering the loop, c looks like this:
___________

After the first iteration (\n denotes a line feed):
___________\n
| o o o o |

After the second iteration:
___________\n
| o o o o |\n
| o o o o |

After the third iteration:
___________\n
| o o o o |\n
| o o o o |\n
| o o o o |

c += "\n";
for (C = 3 + b*2; C-- > 0;)
    c += "-";

এখানে, আমরা (integerValueOfA[0] * 2) + 3টুকরা হাইফেন যোগ করুন । এটি সমস্ত গর্তের নীচে একেবারে নীচে সারি।

forলুপটি বোঝানোর জন্য আমি ব্যবহৃত 4x4 টুকরা যেখানে টুকরাটি বাস্তবে নির্মিত তা এখন দেখতে এরকম দেখাচ্ছে:

___________\n
| o o o o |\n
| o o o o |\n
| o o o o |\n
| o o o o |\n
-----------
System.out.print(c);

এবং অবশেষে, আমরা টুকরা মুদ্রণ!


সম্ভবত পুনর্বিবেচনা 3 স্ট্যাক এক্সচেঞ্জে এটি আমার মধ্যে দীর্ঘতম পোস্ট made
dorukayhan

2
আপনি লুপগুলি Cথেকে পরিবর্তনশীল স্থানান্তর করতে পারেন । আপনার সমস্ত লুপের জন্য এটি দেখে মনে হচ্ছে আপনি চেকগুলি ব্যবহার করতে পারেন , এটি 298 করেন, পেস্টবিন.forint b=Byte.valueOf(A[0]),B=Byte.valueOf(A[1]),CC-->0;
com

1
কিছু forবাইট সংরক্ষণের জন্য লুপগুলির কিছু সৃজনশীল ব্যবহার - সংরক্ষণ করা হয়েছে - পেস্টবিন.ডি.এইচএনসিপিআই 6
এন

1
আপনি যদি প্রথমে আপনার যুক্তিগুলিকে বাইটে রূপান্তর করেন তবে আপনার চেকটি ইটের আকার 1x1 হবে if(b==1&B==1)যা আপনাকে 20 বাইটের বেশি সঞ্চয় করতে দেয়
ব্যবহারকারী 902383

1x1 ক্ষেত্রে এটি করার পরিবর্তে System.out.print('o');return;, আপনি c='o'অন্য ব্লকে বিভিন্ন ইটের জন্য যুক্তি স্থাপন এবং স্থাপন করতে পারেন । তারপরে একক মুদ্রণ বিবৃতি থাকা এবং কোনও রিটার্ন না পাওয়া আপনাকে কিছু অতিরিক্ত বাইট সংরক্ষণ করতে দেয়
ব্যবহারকারী 902383

9

মিনকোলং 0.15 , 58 57 56 বাইট

হ্যা, তা ঠিক. আমি বন্ধ golfed এক দুই দুর্গন্ধ ছড়াচ্ছি 'সামান্য বাইট ...

nn$d*1-5&"o"O.rd2*3+$z1$([" o"]" ||"2Rlkr$Dlz["-_"0G]$O.

এখানে চেষ্টা করুন!

ব্যাখ্যা

nn                Take two numbers from input (stack is now [w h])

                  C special case C
  $d              Duplicate stack
    *1-           Multiply and subtract 1
       5&         Jump 5 spaces if truthy
         "o"O.    Top of stack was 1*1-1=0, so output "o" and stop.

                     C precalculates width of top and bottom lines for later use C
         r           Reverse stack (now [h w])
          d          Duplicate top of stack
           2*3+      Multiply top of stack by 2 and add 3
               $z    Pop this and store in register (z = 2*w+3)

                                       C generates the row C
                 1$(                   Open while loop prepopulated with top of stack
                    [" o"]             w times, push "o "
                          " ||"        Push "|| "
                               2R      Rotate twice to the right
                                 l     Push newline (10)
                                  k    Break out of while loop

                                           C duplicates the row h times C
                                   r       Reverse stack
                                    $D     Duplicate whole stack h times
                                      l    Push newline

                     C this is for the top and bottom lines C
        z[           Open for loop that repeats z times
          "-_"       Push "_-"
              0G     Relocate top of stack to bottom of stack
                ]    Close for loop

                 $O.    Output whole stack as characters and stop.

ঠিক আছে, এটি দুটি বাইট সংরক্ষণের জন্য ব্যাখ্যাটির দুটি উল্লেখযোগ্য পুনরায় লেখা। আমি মনে করি না যে আমি এর বাইরে আরও কিছু করতে পারি বা করব। : P: P


3
প্রথম বাইটটি হ'ল কঠোর পদক্ষেপ ... 1000 বাইটের সূচনা একক বিট দিয়ে শুরু হয় ...
কনর ও'ব্রায়ান

8

ব্রেনফাক, 391 বাইট

আমি জানি এটি আরও কমে যেতে পারে, তবে এই মুহুর্তে আমি আনন্দিত এটি কাজ করে। আমি এটিকে গল্ফ করার জন্য কাজ চালিয়ে যাব।

+++++[-<+++[-<+++<++++++<+++++++<++<++++++++>>>>>]<<+<+<<+<++>>>>>>>]<<<<+<++<->>>>>>,<,>>++++++[<--------<-------->>-]<<->>+<<[>>-<<[>>>+<<<-]]>>>[<<<+>>>-]<[<->>>+<<<[>>>-<<<[>>>>+<<<<-]]>>>>[<<<<+>>>>-]<[<<<<<<<.[-].]<<<+>-]<<+>[->++>+<<]>+++[-<<<<.>>>>]>[-<<+>>]<<<<<<<<<.>>>>>>><[->[->+>+<<]<<<<<<.>>>>>>>[<<<<<<.>.>>>>>-]>[-<<+>>]<<<<<<<.<.<.>>>>>>]>[->++>+<<]>+++[-<<<.>>>]>[-<<+>>]<<

ইনপুটটি কেবল দুটি অঙ্ক হিসাবে দেওয়া দরকার। হিসাবে হিসাবে, আপনি (8, 2)কেবল প্রবেশ করতে হবে 82

এটি অনলাইন চেষ্টা করুন!

ভাঙ্গন:

প্রথমে প্রয়োজনীয় অক্ষরগুলি টেপটিতে রেখে দিন: (newline)| o_-

+++++[-<+++[-<+++<++++++<+++++++<++<++++++++>>>>>]<<+<+<<+<++>>>>>>>]<<<<+<++<->>>>>

তারপরে দুটি কক্ষে ইনপুট সংগ্রহ করুন এবং প্রতিটি থেকে 48 টি বিয়োগ করুন (সংখ্যার মানটি পেতে এবং সংখ্যার চরিত্রটি নয়)

>,<,>>++++++[<--------<-------->>-]<<

এরপরে, বিশেষ (1, 1)কেসটির জন্য পরীক্ষা করুন (নোট করুন যে কেবলমাত্র এই চেকটি কোডের 109 বাইটের জন্য অ্যাকাউন্ট করে)। যেন ifব্রেইনফাক করতে যথেষ্ট কষ্ট হয় নি, আমাদের একটি নেস্টেড রয়েছে if:

->>+<<[>>-<<[>>>+<<<-]]>>>[<<<+>>>-]<[<->>>+<<<[>>>-<<<[>>>>+<<<<-]]>>>>[<<<<+>>>>-]<[<<<<<<<.[-].]<<<+>-]<<+

নিম্নোক্ত একটি সেল x শূন্য বা ননজারো কিনা তা পরীক্ষা করার জন্য কাঠামোটি নিম্নরূপ:

temp0[-]+
temp1[-]
x[
 code1
 temp0-
 x[temp1+x-]
]
temp1[x+temp1-]
temp0[
 code2
temp0-]

তবে কোনও নেস্টেডে if, আমাদের 4 টি অস্থায়ী সেল থাকতে হবে।

এখন আমরা অক্ষরের প্রকৃত মুদ্রণ পেতে:

শীর্ষ বার এবং একটি নতুন লাইন মুদ্রণ করুন:

>[->++>+<<]>+++[-<<<<.>>>>]>[-<<+>>]<<<<<<<<<.>>>>>>>

একটি |, একটি সারি o, অন্য |এবং একটি নতুন লাইন উচ্চতার সমান কয়েকবার মুদ্রণ করুন :

<[->[->+>+<<]<<<<<<.>>>>>>>[<<<<<<.>.>>>>>-]>[-<<+>>]<<<<<<<.<.<.>>>>>>] 

এবং নীচের বারটি মুদ্রণ করুন (এখানে কোনও নতুন লাইনের প্রয়োজন নেই):

>[->++>+<<]>+++[-<<<.>>>]>[-<<+>>]<<

7

রেটিনা , 52 বাইট

বাইট গণনাটি আইএসও 8859-1 এনকোডিং ধরেছে। মনে রাখবেন যে ষষ্ঠ লাইনে একটি একক স্থান থাকার কথা।

\G1?
$_¶
1* 



.+
|$&|
\G.
_
r`.\G
-
s`^.{17}$|1
o

এটি অনলাইন চেষ্টা করুন!

ইনপুটটি অবিচ্ছিন্ন অবস্থায় রয়েছে, আনারি অংক 1হিসাবে স্থান ব্যবহার করে , পৃথককারী হিসাবে স্থান এবং প্রস্থের পরে উচ্চতা।

ব্যাখ্যা

এই প্রোগ্রামের সমস্ত স্তর হ'ল নিয়মিত রেইগেক্স সংশোধক (কোনও পুনরাবৃত্তি বা লুপস নয়, অন্য কোনও ধাপের পদক্ষেপ নেই) সহ অনাবল বিকল্পগুলি। এমনকি লাইনফিডের জন্য সাধারণ উপন্যাস বাদে রেটিনা-নির্দিষ্ট প্রতিস্থাপন বৈশিষ্ট্যগুলিও ব্যবহার করে না ।

\G1?
$_¶

এর উদ্দেশ্য হ'ল দুটি ইনপুটকে "গুণ করা"। আমাদের লক্ষ্য হ'ল প্রতিটি h+2দিয়ে সারি তৈরি করা w 1( h+2যাতে আমরা উপরের এবং নীচে _এবং -পরে পরিবর্তিত করতে পারি )। \Gনোঙ্গর শুরু করার জন্য যেখানে গত এক বন্ধ করেছিলাম সেখান থেকে ম্যাচ প্রয়োজন। এটি হ'ল আমরা যদি স্ট্রিংয়ের কোনও অক্ষরের সাথে মেলে না যায় তবে আরও অক্ষর মেলে না। আমরা এটি কেবলমাত্র 1এস-এর সাথে মেলে এই ব্যবহার করি h, তবে তা নয় wকারণ রেইজেক্স সেই স্থানটি মিলে যাওয়ার অনুমতি দেয় না। তবে আমরা .চ্ছিকটিও তৈরি করি 1, যাতে আমরা শেষে একটি অতিরিক্ত খালি ম্যাচ পাই h। এটি h+1ম্যাচ। $_এগুলির প্রত্যেকটি একটি লাইনফিডের পরে পুরো ইনপুট ( ) দ্বারা প্রতিস্থাপিত হয় ।wনিজেই অপরিচ্ছন্ন থাকে যা আমাদের h+2এনডি কপি দেয় । বলুন ইনপুটটি ছিল 11 1111, তখন আমরা এখন পেয়েছি:

11 1111
11 1111
11 1111
 1111

এটা খুবই ভাল. আমরা কিছু অতিরিক্ত জিনিস পেয়েছি, তবে এর h+2অনুলিপিগুলি wএখানে রয়েছে।

1* 

নোট করুন যে প্রথম লাইনের শেষে একটি স্থান রয়েছে। এটি লাইনগুলি থেকে এই উপসর্গগুলি সরিয়ে দেয় যাতে আমাদের কেবল wপরে থাকে।



আহ ভাল, এটি সত্যিই এসই এর ফর্ম্যাটিংয়ের সাথে কাজ করে না ... প্রথম লাইনটি খালি এবং দ্বিতীয় লাইনে একটি একক স্থান থাকার কথা। এটি স্পেসগুলি প্রতিটি সম্ভাব্য অবস্থানে সন্নিবেশ করায়, যেমন প্রতিটি লাইনের শুরু এবং শেষে এবং প্রতিটি জোড়ের মধ্যে 1:

 1 1 1 1 
 1 1 1 1 
 1 1 1 1 
 1 1 1 1 

আমরা oপরে এগুলিতে পরিণত করব

.+
|$&|

এটি কেবল প্রতিটি লাইনে একটি জোড়া জুড়ে দেয় |:

| 1 1 1 1 |
| 1 1 1 1 |
| 1 1 1 1 |
| 1 1 1 1 |

এখন আমরা উপরে এবং নীচে যত্ন নিই:

\G.
_

\Gআবার জ্বলানোর সময় Time এটি প্রথম লাইনের প্রতিটি অক্ষরের সাথে মেলে এবং এটিকে রূপান্তরিত করে _

r`.\G
-

একই জিনিস, তবে rপরিবর্তকের (ডান থেকে বাম মোড) কারণে, এটি শেষ লাইনের অক্ষরগুলির সাথে মেলে এবং এগুলিকে রূপান্তরিত করে -। সুতরাং এখন আমরা পেয়েছি:

___________
| 1 1 1 1 |
| 1 1 1 1 |
-----------

এখনই দুটি কাজ বাকি আছে: 1সেগুলিকে oএসগুলিতে পরিণত করুন এবং যদি ইনপুটটি 1 1তখন পুরো জিনিসটিকে oপরিবর্তে পরিবর্তিত করে। আমরা উভয়কেই একক মঞ্চে পরিচালনা করতে পারি:

s`^.{17}$|1
o

sএটি নিয়মিত সিঙ্গললাইন মোড (যেমন এটি .ম্যাচের লাইনফিডগুলি তৈরি করে)। যদি ইনপুটটি হয় 1 1তবে ফলাফলটির সর্বনিম্ন আকার 17 টি অক্ষর থাকবে তাই আমরা এটির সাথে মেলে ^.{17}$এবং এটির সাথে প্রতিস্থাপন করতে পারি o। অন্যথায়, যদি এটি ব্যর্থ হয়, আমরা কেবল সমস্ত সংযুক্ত করব 1এবং এর পরিবর্তে সেগুলি প্রতিস্থাপন করব o


7

জल्फ, 36 বাইট

?w*jJρΡ,a+3ώj+2J'-"-+"d*'_lH"  ' o'o
?w*jJ                             'o   return "o" if j * J - 1
       ,a                              make a box
         +3ώj                           of width +3ώj = 3+2*j
             +2J                        of height +2J = 2+J
                '-                      specifying corners as "-"
      Ρ           "-+"                 replacing the first run of "-"s
                      d*'_lH            with a run of "_"s of equal length
     ρ                      "  '       replacing all "  "
                               ' o      with " o"

জল্ফ, 24 বাইট, নন-কেপটিং

ঠিক আছে, আমি একটি ভাল বক্স বিল্টিন তৈরি করেছি।

?w*jJ,AhώjJ"_-'_-'|' o'o

জल्फ, 38 37 বাইট

?w*jJΆ+*'_γ+3ώjS*JΆ'|*j" o' |
"*'-γ'o

সাধারণ জিনিস, সত্যিই। উভয় যুক্তি 1 হয় এবং অন্যথায় (আমাদের ক্ষেত্রে) মিথ্যা হয় তা লক্ষ্য করে একটি বাইট সংরক্ষণ করা হয়েছে (গণিত জিতা, বা স্ট্যান্ড ডিভ্যান্স) কেবল 0।


6

05 এ বি 1 ই , 33 বাইট

কোড:

*i'oë¹·3+©'_×¶²F'|„ o¹×„ |¶}®'-×J

ব্যাখ্যা:

*i'o                               # If both input equal 1, push "o"
    ë                              # Else, do...
     ¹·3+                          # Push input_1 × 2 + 3
         ©                         # Copy this number to the register
          '_×                      # Multiply by "_"
             ¶                     # Push a newline character
              ²F           }       # Do the following input_2 times:
                '|                 # Push "|"
                  „ o              # Push " o"
                     ¹×            # Multiply this by input_1
                       „ |         # Push " |"
                          ¶        # Push a newline character
                            ®      # Retrieve the value from the register
                             '-×   # Multiply by "-"
                                J  # Join everything and implicitly print.

সিপি -1222 এনকোডিং ব্যবহার করে । এটি অনলাইন চেষ্টা করুন!


6

জাভাস্ক্রিপ্ট (ES6), 89 86 বাইট

(x,y,g=c=>c[r=`repeat`](x*2+3))=>x*y-1?g(`_`)+`
`+`| ${`o `[r](x)}|
`[r](y)+g(`-`):`o`

সম্পাদনা: @ শেগি ধন্যবাদ 3 বাইট সংরক্ষণ করা।


আলিয়াজ করে 3 বাইট সংরক্ষণ করুন repeat
শেগি

5

পাইথন 2, 71 বাইট

lambda x,y:('o',x*'__'+'___\n'+'| %s|\n'%('o '*x)*y+'-'*(x*2+3))[x+y>2]

1
পিপিসিজিতে আপনাকে স্বাগতম! প্রথম প্রথম পোস্ট!
Rɪᴋᴇʀ

5

বেফুঞ্জ, 144 বাইট

আমি এই পোস্টে মন্তব্য করতে পছন্দ করতাম, তবে আমার সুনাম এখনও নেই, তাই আমি আমার নিজের একটি উত্তর দিচ্ছি, যা একইভাবে কাজ করে তবে কিছুটা কমপ্যাক্ট

&::&*:1`v
v3*2:\/\_"o",@
>+:  v   >52*," |",, v
>,1-:vLEG O MAKERv::\<
^"_" _$\:|<v "o "_v
v52:+3*2$<,>,,1-:^$
>*,v <    ^"|":-1\<
v-1_@,
>:"-"^

আপনি এখানে কোড পরীক্ষা করতে পারেন


4

রেং v.4, 82 বাইট, নন-কেপটিং

আমি একটি বাগ ফিক্স চাপলাম যা ফাংশনগুলি নিজেরাই ওভাররাইট করা হচ্ছে সংশোধন করে (দয়া করে জিজ্ঞাসা করবেন না; আমার জিনিস ভুগছে)

i#wi#hhw+2e1+ø ~*x}o:{"-"ö<
"_"{:o}w2*3+#xx*2ø
"o"o~
ö"|"o"o"{Wo:o}w*"| "ooh1-?^#h

স্থান হিসাবে যুক্ত সংখ্যা হিসাবে ইনপুট নেয় 4 2এখানে চেষ্টা করুন!


8
I pushed a bug fix that fixes functions being overwritten by themselves... ঠিক আছে, এটি একটি আকর্ষণীয় বাগ রয়েছে
এমকেআইআই

4

পাওয়ারশেল ভি 2 +, 76 বাইট

param($x,$y)if($x+$y-2){"_"*($z=$x*2+3);"|$(" o"*$x) |`n"*$y+'-'*$z;exit}"o"

ইনপুট নেয়, তারপরে একটি ifবিবৃতি পরীক্ষা করে । যেহেতু নন-জিরো মান truthy PowerShell, তাই দীর্ঘ অন্তত এক হিসাবে $xএবং $yসমান নয় করছে 1, ifসত্য হতে হবে।

এর অভ্যন্তরে if, স্ট্রিং গুণগুলি একটি সিরিজ আছে। প্রথমত, আমরা আমাদের স্ট্রিংটি আন্ডারস্কোরগুলি তৈরি করি, $zপরে সংরক্ষণ করে । যে পাইপলাইনে স্থাপন করা হয়। এরপরে আমরা আমাদের পাশ এবং পেগের স্ট্রিংগুলি তৈরি করি (পেগগুলি দ্বারা বহুগুণে $x) তৈরি হয়েছি , $yবার হয়েছি এবং আমাদের ড্যাশ $zবারের সাথে এটি যুক্ত করে তুলি । সেই স্ট্রিংটি পরে পাইপলাইনে রাখা হয় এবং আমরা exit। পাইপলাইন ফ্লাশ করা হয়েছে এবং মুদ্রণ জড়িত। নোট করুন যে আমরা আন্ডারস্কোর এবং বিনামূল্যে প্রথম পেগের প্রথম সারিটির মধ্যে নতুন লাইন পেয়েছি, যেহেতু .ToString()অ্যারে আউটপুটটির জন্য ডিফল্ট বিভাজক `n(এবং আমরা স্ট্রিংগুলির একটি অ্যারের আউটপুট করছি)।

যদি এটি ifমিথ্যা হয়, আমরা বিশেষ 1 1ক্ষেত্রে থাকি, তাই আমরা কেবল "o"পাইপলাইনে নিজেই প্রস্থান করি এবং প্রিন্টিংয়ের সাথে আবার প্রেরণ করি।

উদাহরণ

PS C:\Tools\Scripts\golfing> .\print-a-lego-piece.ps1 1 1
o

PS C:\Tools\Scripts\golfing> .\print-a-lego-piece.ps1 5 3
_____________
| o o o o o |
| o o o o o |
| o o o o o |
-------------

4

বাশ, 186 , 163 , 156 , 148 , 131 , 130 বাইট

 ## Arg1 - Lego width
 ## Arg2 - Lego height 
function print_lego() { 
(($1+$2>2))&&{
printf _%.0s `seq -1 $1`
echo
for((i=$2;i--;)){ 
 printf \|
 for((j=$1;j--;)){
  printf o
 }
 echo \| 
}
printf =%.0s `seq -1 $1`
echo 
}||echo o
}

দ্রষ্টব্য: আপনার যদি শেষ লাইনের হাইফেন থাকার জন্য লেগোটির সত্যই দরকার হয়, তবে শেষ প্রিন্টফ এ পরিবর্তন করুন

printf -- -%.0s `seq -1 $1`

এবং দুটি বাইট যোগ করুন।


2
এটি যদি কোনও ফাংশনে আবৃত না হয় তবে এটি কি খানিকটা খাটো হবে না? এছাড়াও, আমি বাশে কোনও বিশেষজ্ঞ নই তবে দেখে মনে হচ্ছে এটি কিছু অতিরিক্ত সাদা জায়গা পেয়েছে।
ডিজেএমসিএমহেম

ওয়ান-লাইনার হিসাবে এটি 170 (($x+$y==2))&&echo o||{ printf _%.0s $(seq -1 $x);echo;for((i=0;i<$y;i++));do printf \|;for((j=0;j<$x;j++));do printf o;done;echo \|;done;printf =%.0s $(seq -1 $x);echo;}

1
আপনি যদি ব্যবহার করেন ()তবে functionকোনও ক্রিয়াকলাপটি ঘোষণার জন্য আপনার কীওয়ার্ডের দরকার নেই । সেখানে একটি বিকল্প হয় forসিনট্যাক্স ধনুর্বন্ধনী ব্যবহার করে, যেমন: for((j=$1;j--;));{ printf o;}। পূর্ববর্তী উদাহরণ হিসাবে দেখানো হয়েছে, আপনি forএর দ্বিতীয় প্রকাশে হ্রাস এবং পরীক্ষা করে কিছু অক্ষর সংরক্ষণ করতে পারেন । আপনি এর পরিবর্তে ব্যাকটিক ব্যবহার করতে পারেন $(cmd)
নিনজালজ

@ নিনজালজ ধন্যবাদ, আমি কোড গল্ফে নতুন - এটি আরও 17 (($x+$y==2))&&echo o||{ printf _%.0s `seq -1 $x`;echo;for((i=$y;i--;)){ printf \|;for((j=$x;j--;)){ printf o;};echo \|;};printf =%.0s `seq -1 $x`;echo;}

তাই আপনি পরিবর্তন করে আরো কয়েকটি বাইট শেভ করতে ডলার চিহ্ন, গাণিতিক প্রেক্ষাপটে ঐচ্ছিক (($something))করার ((something))সর্বত্র। ( $1এটি আক্ষরিক থেকে বিচ্ছিন্ন করার জন্য এখনও ডলারের সাইন দরকার 1))
ট্রিপলই

4

পার্ল 5 - 84 77 বাইট

84 বাইট

sub l{($x,$y)=@_;$w=3+2*$x;warn$x*$y<2?"o":'_'x$w.$/.('| '.'o 'x$x."|\n")x$y.'-'x$w}

77 বাইট। ডোম হেস্টিংসের কিছু সহায়তায়

sub l{($x,$y)=@_;$x*$y<2?o:'_'x($w=3+2*$x).('
| '.'o 'x$x."|")x$y.$/.'-'x$w}

প্রথমে আমি কেন বিভ্রান্ত হয়ে পড়েছিলাম যে কেউ কেন warnগল্ফ প্রোগ্রামে ব্যবহারের প্রয়াসে যাবে , তবে আমি বুঝতে পেরেছিলাম যে আপনি এটি ব্যবহার করছেন কারণ এটি তার চেয়ে ছোট print। নিস!
পাইপ

হ্যাঁ, আমি পার্ল 6-তে মনে করি আপনি
সতর্কতার

1
আপনি পার্ল 5 এ এটিও করতে পারেন, কেবল এটি ডিফল্টরূপে সক্ষম হয় নি। আমি মনে করি যে আপনি সমস্ত এক্সটেনশানগুলি সক্ষম করে -Eপরিবর্তে কমান্ড লাইন থেকে আপনার স্ক্রিপ্টটি কল করে কোড-গল্ফের মধ্যে পেতে পারেন -e। আমি এই জায়গায় নতুন তাই আমি কোথায় স্কোরগুলি গণনা করতে হবে তা নির্দিষ্টভাবে কোথায় জানি তা আমি জানি না।
পাইপ

ওহ, আমি জানি না। আমি এখানেও নতুন তাই আমিও নিশ্চিত নই
কাউন্ডুর

আমি মনে করি আপনি এটি 76 বাইটে সংক্ষিপ্ত করতে পারবেন ... আপনি যদি কোনও ফাংশন ব্যবহার করেন তবে আমি বিশ্বাস করি যে স্ট্রিংটি ফিরিয়ে দেওয়া গ্রহণযোগ্য হবে (জেএস উত্তর দেখুন, আপনাকে 4 বাইটের জন্য সংরক্ষণ করছেন warn), আপনার চারপাশে উদ্ধৃতিগুলির প্রয়োজন নেই "o"(আপনি পারেন অন্য -২ এর জন্য একটি খালি শব্দ ব্যবহার করুন, আপনি যদি হিসাবটি ইনলাইন করেন তবে আপনার $wঅন্য একটি বাইট ( '_'x($w=3+2*$x)বনাম $w=3+2*$x;... '_'x$w) সংরক্ষণ করা উচিত এবং শেষ অবধি, আপনি \nএকটি আক্ষরিক নতুন লাইনের জন্য পরিবর্তন করতে পারেন । আশা করি এইটি কাজ করবে!
ডম হেস্টিংস

3

সি, 202 191 বাইট

#define p printf
i,w,h;t(char*c){for(i=0;p(c),++i<w*2+3;);p("\n");}f(){t("_");for(i=0;i<w*h;)i%w<1?p("| o "):p("o "),i++%w>w-2&&p("|\n");t("-");}main(){scanf("%d %d",&w,&h);w*h<2?p("o"):f();}

11 বাইট সংরক্ষণের জন্য @ লিন্ড এসাসিনোকে ধন্যবাদ !

Ungolfed:

#include <stdio.h>
#define p printf

int i, w, h;

void t(char *c)
{
    for(i=0; p(c), ++i<w*2+3;);
    p("\n");
}

void f()
{
    t("_");
    for(i=0; i<w*h;)
    {
        i%w<1 ? p("| o ") : p("o ");
        i++%w>w-2 && p("|\n");
    }
    t("-");
}

int main()
{
    scanf("%d %d", &w, &h);
    w*h<2 ? p("o") : f();
}

1
আপনি আপনার প্রথম লাইনটি পরিবর্তন করতে পারেনp(char*A){printf(A);}
লিন্ড অ্যাসাসিনো

1
সত্যিই আপনাকে ধন্যবাদ! তবে এর মাধ্যমে সংক্ষিপ্ত করা সম্ভব#define p printf
মার্কো

3

দারুচিনি গাম, 32 বাইট

0000000: 6c07 d5f5 7a5d 9cdf 5ae6 52ae 4050 0c35  l...z]..Z.R.@P.5
0000010: 18d9 052f 0082 9b42 e7c8 e422 5fe4 7d9f  .../...B..."_.}.

অ প্রতিদ্বন্দ্বী। এটি অনলাইনে চেষ্টা করুন। [width,height]কমা এবং উচ্চতার মধ্যে ফাঁকা স্থান ছাড়াই ইনপুট অবশ্যই ফর্মের মধ্যে থাকতে হবে ।

ব্যাখ্যা

স্ট্রিং এটিকে সংক্রামিত করে:

l[1,1]&o;?&`p___~__~
%| ~o ~|
%---~--~

প্রথম lপর্যায় মানচিত্র [1,1]থেকে o(বিশেষ ক্ষেত্রে) এবং স্ট্রিং অন্য সব কিছুর

`p___~__~
%| ~o ~|
%---~--~

ব্যাকটিকটি দ্বিতীয় স্তরের সূচনার ইঙ্গিত দেয়; সেই স্ট্রিংটিকে আউটপুট দেওয়ার পরিবর্তে, সিজি ব্যাকটিকটি ছড়িয়ে দেয় এবং স্ট্রিংটি কার্যকর করে। pমোড তারপর টিলড চিহ্ন প্রথম প্যারামিটার (প্রস্থ) বার ভিতরে সমস্ত অক্ষর পুনরাবৃত্তি এবং তারপর পরে শতাংশ চিহ্ন দ্বিতীয় প্যারামিটারটি (উচ্চতা) বার ভিতরে অক্ষর পুনরাবৃত্তি। সুতরাং [4,2]এটি এটিতে পরিণত হয়:

___________
%| o o o o |
%-----------

এবং তারপরে:

___________
| o o o o |
| o o o o |
-----------

3

ব্যাচ, 172 170 বাইট

@echo off
if "%*"=="1 1" echo o&exit/b
set o=
for /l %%i in (1,1,%1)do call set o=%%o%% o
echo ---%o: o=--%
for /l %%i in (1,1,%2)do echo ^|%o% ^|
echo ---%o: o=--%

সম্পাদনা করুন: @ কোওবি @ ইজিজি- তে 2 বাইট সংরক্ষণ করা হয়েছে ᴏʟғᴇʀ

আমি যদি ধরে নিতে পারি যে বিলম্বিত সম্প্রসারণটি সক্ষম করা আছে তবে আমি 7 বাইট সঞ্চয় করতে পারি।


%%o%%এর বদলে %o%?
এরিক আউটগল্ফার

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ প্রতিবারের %o%মূল মানের সাথে প্রতিস্থাপন করা হবে o, যাতে এটি oকেবল সর্বদা সমান হয় " o"%%o%%মাধ্যমে একটি আর্গুমেন্ট হিসাবে যায় callএর %o%, যা বর্তমান মূল্য ব্যবহার o
নিল

তুমি কেন ... শুধু do set o=%o% o?
এরিক আউটগল্ফার

লুপটি বিশ্লেষণের %o%আগে @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ প্রসারিত হবে for, সুতরাং লুপটি পড়বে for /l %i in (1,1,8) do call set o= oযা স্পষ্টত অর্থহীন।
নিল

do set o=%%o%% oতাহলে আপনি কেন (-5) করবেন না ?
এরিক আউটগল্ফার

3

ভিম, 56 কীস্ট্রোক

এটি কোনও পাঠ্য সম্পাদনা টাস্কের মতো বলে মনে হচ্ছে, সুতরাং ভিমটি হ'ল স্পষ্ট পছন্দ! আমি দুটি স্থান পৃথক পূর্ণসংখ্যার একটি পাঠ্য ফাইল হিসাবে ইনপুট নিই এবং একই ফাইলটিতে উত্তর আউটপুট করি। এছাড়াও, 1x1 বিশেষ ক্ষেত্রে থাকার জন্য আমি আপনাকে ঘৃণা করি ... যাইহোক:

"adt l"bDro:if@a*@b==1|wq|en<cr>Di| |<esc>@aio <esc>yy@bPVr_GpVr-ZZ

এবং যদি বিশেষ ক্ষেত্রে না হয়, তবে 35 টি কীস্ট্রোক ro

"adt x"bDi| |<esc>@aio <esc>yy@bPVr_GpVr-ZZ

বুদ্ধিমান লোকের জন্য একটি ব্রেকডাউন:

"adt l"bD

বাফার থেকে @a এবং @ বি তে নম্বর মুছুন (স্পেস চর রাখা হয়েছে)

         ro:if@a*@b==1|wq|en<cr>

"ও" দিয়ে স্থানটি প্রতিস্থাপন করুন এবং যদি বিশেষ ক্ষেত্রে থাকে তবে সংরক্ষণ করুন এবং প্রস্থান করুন

                                Di| |<esc>

লাইনটি সাফ করুন এবং লেগো ব্লকের প্রান্তটি লিখুন

                                          @aio <esc>

সমাপ্ত মাঝারি অংশটি পেতে @ প্রচুর "ও" sertোকান

                                                    yy@bP

ইয়াঙ্ক লাইন এবং অতিরিক্ত অতিরিক্ত কপিগুলি তৈরি করুন (একটি খুব বেশি)

                                                         Vr_

আমরা বাফারের শীর্ষে আন্ডারস্কোর সহ অতিরিক্ত লাইনটি প্রতিস্থাপন করব

                                                            Gp

বাফারের নীচে যান, ল্যানটি টানুন যা আমরা ইতিপূর্বে হাঁকিয়েছি

                                                              Vr-ZZ

ড্যাশগুলির সাহায্যে লাইনটি প্রতিস্থাপন করুন, সংরক্ষণ করুন এবং প্রস্থান করুন



2

হাস্কেল, 76 বাইট

1#1="o"
w#h|f<-w*2+3=f!"_"++'\n':h!('|':w!" o"++" |\n")++f!"-"
n!s=[1..n]>>s

ব্যবহারের উদাহরণ: 3 # 2আপনাকে 3-বাই -2 ইটের জন্য একটি বহুমাত্রিক স্ট্রিং দেয়।

Ungolfed:

(#) :: Int -> Int -> String
1     #   1    = "o"
width # height = let longWidth = 2 * width + 3 in -- golfed as 'f'
                      (        longWidth `times` "_"  ++   "\n" )
  ++ height   `times` ( "|" ++     width `times` " o" ++ " |\n" )
  ++                  (        longWidth `times` "-"            )

-- | golfed as (!)
times :: Int -> [a] -> [a]
times n s = concat $ replicate n s

প্রথম নজরে দেখে মনে হ'ল এটি আরও কম হওয়া উচিত unlines, তবে তা নয়।
বলস্টে 25

2

গ্রোভি, 107 , 98 , 70 , 64

{x,y->t=x*2+3;x<2&&y<2?"o":'_'*t+"\n"+"|${' o'*x} |\n"*y+'-'*t}

পরীক্ষামূলক:

(2,2)
(1,1)
(8,2)
(1,4)
_______
| o o |
| o o |
-------
o
___________________
| o o o o o o o o |
| o o o o o o o o |
-------------------
_____
| o |
| o |
| o |
| o |
-----

2

বেফুঞ্জ, 114 113 108 101 বাইট

আমি জানি ইতিমধ্যে বেশ কয়েকটি বেফঞ্জ সমাধান রয়েছে, তবে আমি মোটামুটি নিশ্চিত ছিলাম যে কোডের বিন্যাসে আলাদা পদ্ধতির মাধ্যমে তারা উন্নত হতে পারে। আমি সন্দেহ করি যে এই উত্তরটি আরও গল্ফ করা যেতে পারে তবে এটি ইতিমধ্যে পূর্ববর্তী এন্ট্রিগুলির চেয়ে মোটামুটি ছোট।

&::&+:2`^|,+55_"_",^
-4:,,"| "<\_|#:+1\,,"|"+55$_2#$-#$" o",#!,#:<
  ,"-"_@#:-1<
 :*2+2\-_"o",@v!:-1<

এটি অনলাইন চেষ্টা করুন!


স্ট্রিংয়ের :<|প্রয়োজনীয়তা কেন আপনি ব্যাখ্যা করতে পারেন ?
জাকারি

@ জ্যাচারý প্রথম লাইনে উল্লম্ব শাখাটি কখনই প্রকৃতপক্ষে শাখা করে না। স্ট্যাকের শীর্ষটি সর্বদা সেই সময়ে শূন্য থাকে, সুতরাং এটি স্ট্যাকের শীর্ষস্থানীয় স্থানটি একই সাথে নীচে নামিয়ে ফেলার জন্য একটি শর্টকাট - মূলত এই টিপ
জেমস হোল্ডারেন্স

1

এপিএল, 46 বাইট

{⍵≡1 1:'o'⋄'-'⍪⍨'_'⍪'|',' ','|',⍨'o '⍴⍨1 2×⌽⍵}

গার্ড: ⍵≡1 1:'o'বিশেষ ক্ষেত্রে। অন্যথায় 'o '⍴⍨1 2×⌽⍵সামগ্রী তৈরি করে build আর বাকী রয়েছে শুধু বক্সিং।


1

সি #, 198 বাইট

void f(int x,int y){int l=x*2+3;Console.Write(y==x&&x==1?"o":s("_",l)+"\n"+s("|"+s(" o",x)+" |\n",y)+s("-",l));}string s(string m,int u){return string.Join("",new string[u].Select(n=>m).ToArray());}

দ্রুত এবং ময়লা

আমাকে একটি ফাংশন লিখতে হয়েছিল যা স্ট্রিংকে বহুগুণ করে

অবারিত (পরামর্শের জন্য)

public static void f(int x,int y)
{
    int l=x*2+3;
    Console.Write(y == x && x == 1 ? "o" : s("_",l)+"\n"+ s("|" + s(" o", x) + " |\n", y) + s("-",l));

}
public static string s(string m,int u)
{
    return string.Join("", new string[u].Select(n => m).ToArray());
}

আমি লক্ষ্য করেছি যে আপনার string s(string m,int u){return string.Join("",new int[u].Select(n => m));}কার্যটি অপ্টিমাইজ করা যেতে পারে - .ToArray () অপ্রয়োজনীয় এবং স্ট্রিং [] পাশাপাশি একটি অন্তর্মুখী হতে পারে []। তবে স্ট্রিংয়ের পরিবর্তে আপনি যোগাড় করতে পারেন:string s(string m, int u){return new int[u].Aggregate("",(t,i)=>t+m);}
অলিভার

1
আপনি এর মতো কয়েকটি বাইট শেভ করতে পারেন ... (191)void f(int x,int y){Func<char,int,string>s=(c,i)=>new string(c,i);int l=x*2+3;Console.Write((y&x)==1?"o":s('_',l)+"\n"+s('y',y).Replace("y","| "+s('x', x)+"|\n").Replace("x","o ")+s('-',l));}
ম্যাথু হোয়াইট

1

অক্টাভা, 97 95 86 বাইট

@(w,h){[a=~(1:w*2+3)+95;repmat(['| ' repmat('o ',1,w) '|'],h,1);~a+45],'o'}{(w*h<2)+1}

আমি পরীক্ষার জন্য পাইথনে @ অ্যাতলজোলজিস্টের পদ্ধতিটি ব্যবহার করেছি (1, 1):(...,'o')[x<2>y]

ধন্যবাদ @Luis Mendo : 7 বাইট সংরক্ষণের জন্য a=ones(1,w*2+3)*'_'থেকে a=~(1:w*2+3)+95এবং a./a*'-'থেকে~a+45

2 বাট বাঁচানোর জন্য @ পাজোনকে ধন্যবাদ :f=


1
এটি বৈধ মতলব কোড নয়। আপনার কেবল "অষ্টাভ" হিসাবে লেবেল করা উচিত। এছাড়াও, পরিবর্তে a./a*'-'আপনি ব্যবহার করতে পারেন ~~a*'-'? নাকি ~a+45?
লুইস মেন্ডো

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