যতটা সম্ভব স্কোয়ারের কাছাকাছি একটি গ্রিড তৈরি করুন


10

একটি ফাংশন বা প্রোগ্রাম তৈরি করুন যা গ্রিডটিকে যতটা সম্ভব স্কোয়ারের কাছাকাছি করে তোলে

  • আপনাকে ইনপুট হিসাবে পুরো পূর্ণসংখ্যা এন দেওয়া হবে , পুরো সংখ্যা (1,2,3,25, ইত্যাদি)
  • আউটপুটটি অবশ্যই যথাসময়ে একটি বর্গক্ষেত্রের কাছাকাছি N অক্ষরের একটি সঠিক আয়তক্ষেত্রাকার গ্রিড হতে হবে be
  • (ওয়ানাব) স্কোয়ারটিতে অবশ্যই ব্যবহারকারী বা বর্ণিত অক্ষরগুলির মধ্যে একটিতে ও বা এক্স থাকা উচিত

পয়েন্ট :

  • হার্ডকোডযুক্ত কেবল ও বা এক্স: +1
  • আউটপুট ঘোরানোর জন্য একটি পরম (0/1, সত্য / মিথ্যা, অনুরূপ কিছু) (5 বা 8 এর মতো): -10
  • স্কোয়ারটি ডিজাইন করুন (কোনও ধরণের প্যাটার্নে ও এবং এক্স উভয়ই ব্যবহার করুন): -5

কোনও প্যাটার্নটিকে বৈধ হিসাবে বিবেচনা করা হয় যদি এতে উভয় ধরণের অক্ষর থাকে (যেখানে x / y-axis> = 3) এবং অনুভূমিকভাবে বা উল্লম্বভাবে উল্টানো অবস্থায় প্যাটার্নটি একই থাকে (ওসের সাথে এক্স এর বিনিময় অনুমোদিত)

উদাহরণ

INPUT: 4         INPUT: 5       INPUT: 8              INPUT: 9
OO               OOOOO          XXXX                  XOX
OO                              XXXX                  OXO  
                                or rotated 90deg      XOX

অনুমোদিত নয় এমন উদাহরণ (একই দৈর্ঘ্যের সারি বা কলাম নয়)

BAD RESULT: 5a        BAD RESULT: 5b      BAD RESULT: 8
OOO                   OO                  OOO
OO                    OO                  OOO
                      O                   OO

যদি সম্ভব হয় তবে একটি অনলাইন উদাহরণ সরবরাহ করুন।


একটি ফাংশন যথেষ্ট, না আপনি একটি সম্পূর্ণ প্রোগ্রাম চান?
জন ডিভোরাক

"স্কয়ারটি ডিজাইন করুন ... 9 ক্ষেত্রে কেন্দ্র পরিবর্তন করুন" - কোন সঠিক পরিস্থিতিতে প্যাটার্নটি চেকবোর্ড নয়? আপনি একটি উদাহরণ প্রদান করতে পারেন?
জন ডিভোরাক

পুনরায় সম্পাদনা: আমি কি সঠিকভাবে পড়েছি যে "xo"[i]পরিবর্তে করার জন্য আমি তিনটি পয়েন্ট পেয়েছি i? এটি মূল্যবান বলে মনে হচ্ছে না। সাধারণভাবে, আপনার সমস্ত পুরষ্কার কম দেখায়।
জন ডিভোরাক

"কিছু ধরণের প্যাটার্ন" थोলা অস্পষ্ট। আমি যদি প্রথম 'x' কে 'ও' দিয়ে প্রতিস্থাপন করি তবে এটি গণনা করে?
জন ডিভোরাক

দুর্দান্ত প্রশ্ন। একমাত্র আকর্ষণীয় বোনাস / পেনাল্টি হ'ল ঘূর্ণন। ব্যক্তিগতভাবে আমি একটি, হার্ডকোডযুক্ত চরিত্রের সাথে আটকে থাকি (অর্থাত্ পেনাল্টিটিকে পূর্বনির্ধারিত করা) এবং ঘূর্ণনটি বাদ দিয়ে সমস্ত বোনাস / পেনালিটগুলি মুছে ফেলতাম। খুব বেশি বোনাস বা জরিমানা রাখা ভাল ধারণা নয়। গুরুত্বপূর্ণ বিষয়টি হ'ল মূল সমস্যাটি স্পষ্টভাবে নির্দিষ্ট করা।
স্তর নদী সেন্ট

উত্তর:


6

সিজেম, 16 (31 - 10 - 5)

এটি দুটি পূর্ণসংখ্যা লাগে ইনপুট হয়, প্রথমটি হ'ল 0বা 1দিকনির্দেশের জন্য এবং দ্বিতীয়টি গ্রিডে Oবা তার সংখ্যা X

এটি একটি বিকল্প Oএবং মুদ্রণ করে X

:X"OX"*X<\Xmqi){(_X\%}g_X\/?/N*

l~কোডের সামনে যুক্ত করার চেষ্টা করে দেখতে এটি কেবল ফাংশন বডি,

l~:X"OX"*X<\Xmqi){(_X\%}g_X\/?/N*

এবং ইনপুট পছন্দ

0 10

মত আউটপুট পেতে

OXOXO
XOXOX

বা ইনপুট মত

1 10

জন্য

OX
OX
OX
OX
OX

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


কিভাবে এটা কাজ করে:

l~                                 "Put the two input integers to stack";
  :X                               "Assign the number of cells to X";
    "OX"*                          "Take string "OX" and repeat it X times";
         X<                        "Slice it to take only first X characters";
           \                       "Swap top two stack elements, now string is at bottom";
            Xmqi)                  "Take square root of X, ceil it and put on stack";
                 {(_X\%}g          "Keep decrementing until it is perfectly divisible by X";
                         _X\/      "Copy it, divide X by that and put it on stack";
                             ?     "Based on first input integer, take either of numbers";
                              /    "Divide the XOXO string that many times";
                               N*  "Join the string parts with a new line";

উদাহরণ রান:

l~ed:X"OX"*edX<ed\edXmqi)ed{(_X\%}ged_edXed\ed/ed?ed/edN*ed

#INPUT:
1 10

#OUTPUT:
Stack: [1 10]

Stack: [1 "OXOXOXOXOXOXOXOXOXOX"]

Stack: [1 "OXOXOXOXOX"]

Stack: ["OXOXOXOXOX" 1]

Stack: ["OXOXOXOXOX" 1 4]

Stack: ["OXOXOXOXOX" 1 2]

Stack: ["OXOXOXOXOX" 1 2 2]

Stack: ["OXOXOXOXOX" 1 2 2 10]

Stack: ["OXOXOXOXOX" 1 2 10 2]

Stack: ["OXOXOXOXOX" 1 2 5]

Stack: ["OXOXOXOXOX" 2]

Stack: [["OX" "OX" "OX" "OX" "OX"]]

Stack: ["OX
OX
OX
OX
OX"]

OX
OX
OX
OX
OX

3

এপিএল (36 - 5 - 10 = 21)

{'OX'⍴⍨⍺⌽⊃∆/⍨⍵=×/¨∆←∆[⍋|-/¨∆←,⍳2/⍵]}

বাম আর্গুমেন্টটি আবর্তন, ডান যুক্তির আকার the এটি একটি সাধারণ প্যাটার্নও ব্যবহার করে (এটি কেবল 'এক্স' এবং 'ও' এর বিকল্প করে)।

      0{'OX'⍴⍨⍺⌽⊃∆/⍨⍵=×/¨∆←∆[⍋|-/¨∆←,⍳2/⍵]}¨4 5 8 9
 OX  OXOXO  OXOX  OXO 
 OX         OXOX  XOX 
                  OXO 
      1{'OX'⍴⍨⍺⌽⊃∆/⍨⍵=×/¨∆←∆[⍋|-/¨∆←,⍳2/⍵]}¨4 5 8 9
 OX  O  OX  OXO 
 OX  X  OX  XOX 
     O  OX  OXO 
     X  OX      
     O       

ব্যাখ্যা:

  • ∆←,⍳2/⍵থেকে সংখ্যার সব সম্ভব জোড়া উৎপন্ন 1করতে এবং দোকান
  • ∆←∆[⍋|-/¨∆... ]: প্রতিটি জোড়ায় দুটি সংখ্যার নিখুঁত পার্থক্যে আরোহণকে সাজান এবং ফলাফলটি আবার জমা করুন
  • ⊃∆/⍨⍵=×/¨∆: প্রতিটি জোড়ার জন্য, সংখ্যাগুলি একসাথে গুণান। কেবলমাত্র সেই জোড়াগুলি বেছে নিন যাগুলি গুন করে , এবং প্রথমটি মিলবে যা মিলবে (যা সাজানোর কারণে 'সবচেয়ে বর্গ')।
  • ⍺⌽: দৈর্ঘ্যের তালিকাটি ঘুরিয়ে দিন (যার মধ্যে 2 টি উপাদান রয়েছে)
  • 'OX'⍴⍨: সেই আকারের একটি ম্যাট্রিক্স তৈরি করুন এবং এটি বিকল্প Oএবং দিয়ে পূরণ করুন X


2

CJam, 25 22 21 (31 - 10)

এটি একটি ফাংশন বডি। আপনি যদি একটি সম্পূর্ণ প্রোগ্রাম চান ririতবে সামনে যুক্ত করুন। আপনি যদি এটি একটি কোড ব্লক হিসাবে ব্যবহার করতে চান তবে এটি ঘিরে রাখুন {}। এটি cjam.aditsu.net এ পরীক্ষা করুন ।

এটি দুটি পূর্ণসংখ্যক আর্গুমেন্ট হিসাবে ইনপুট নেয়: আয়তক্ষেত্রটি উল্লম্ব (কোনও শূন্য নয় এমন মান) বা অনুভূমিক (শূন্য) এবং Oব্যবহারের জন্য সংখ্যাগুলির জন্য স্যুইচ ।

:Xmqi){(_X\%}g_X\/@{\}{}?'O*N+*

ব্যাখ্যা

:X "Assign the top item on the stack (the second input) to variable X";
mq "Take its square root";
i  "Convert to integer (round)";
)  "Increment it";

{  "Start code block";
  (  "Decrement";
  _X "Duplicate top item on stack; push X to the stack";
  \% "Swap top 2 items and take division remainder";
}g "Loop until top item on stack is 0; pop condition after checking it";

_X "Duplicate top item on stack; push X to the stack";
\/ "Swap top 2 items and divide";

"OMIT THIS BIT TO GET A 25-CHAR FUNCTION WITHOUT THE 10PT BONUS";
 @  "Rotate top 3 items on stack";
 {\}"Code block 1: swap top two items";
 {} "Code block 2: do nothing";
 ?  "If top item of stack is 0, run code block 1, otherwise run code block 2";

'O "Push the character O to the stack";
*  "Repeat it N times, where N is the second item from the top of the stack (O is first)";
N+ "Push a new line and concatenate it with the string on the top of the stack";
*  "Repeat the string N times";

1
বাইট গণনায় ক্ষতি ছাড়াই বড় সংখ্যাগুলির জন্য হ্রাস হ'ল দ্রুত হওয়া উচিত
edc65

1
কে হ্রাস পেয়েছে? কেন?

2
আমি কেবল এটি অনুমান করতে পারি কারণ কেউ সিজেমকে আসল ভাষা হিসাবে বিবেচনা করে না
জন ডিভোরাক

আপনার ব্যাখ্যা দন্ডিত। আপনি বর্তমানে সম্পাদনা করছেন?
জন ডিভোরাক

@ জনডভোরাক হ্যাঁ, আমি এটি সম্পাদনা করে অর্ধেক পথ পেরিয়ে এসেছি এবং ঘটনাক্রমে ট্যাব এবং এন্টার টিপলাম। এটি এখন স্থির।

2

জাভাস্ক্রিপ্ট (E6) 84 (83 + 1) বা 101 (116-10-5)

প্যাটার্ন + রোটেশন (প্যারামিটার এফ, 0 বা 1) - বোনাস 15

F=(n,f)=>{
  for(r=x=0;y=n/++x|0,x<=y;)x*y-n?0:z=f?x:y;
  for(o='';n;)o+=(n--%z?'':(r^=1,c='\n'))+'OX'[r^(c^=1)];
  alert(o)
}

কোনও প্যাটার্ন নয়, কোনও আবর্তন নেই - জরিমানা 1

F=n=>{
  for(x=0;y=n/++x|0,x<=y;)x*y-n?0:z=y;
  alert(('O'.repeat(z)+'\n').repeat(n/z));
}

টেস্ট ফায়ারফক্স / ফায়ারবাগ কনসোলটি

F(30,0)

OXOXOX
XOXOXO
OXOXOX
XOXOXO
OXOXOX

F(30,1)

OXOXO
XOXOX
OXOXO
XOXOX
OXOXO
XOXOX

2

পাইথন, 75৯ 75 (কোনও বোনাস নেই)

বোনাসগুলি কৃপণ বলে মনে হচ্ছে, সুতরাং এখানে অসাধারণ একটি পাইথন ফাংশন রয়েছে:

def f(N):c=max(x*((x*x<=N)>N%x)for x in range(1,N+1));print(N/c*'O'+'\n')*c

আগ্রহীদের জন্য অনলাইন উদাহরণ: repl.it/Zq9
মার্টিজন

1
আপনি কি পরীক্ষার পরে এটি পরিবর্তন করেছেন? আমি এটি চেষ্টা করেছিলাম এবং এটি কার্যকর হয় না, উদাহরণস্বরূপ f(8)আমাকে 8 Oটির একটি কলাম দিয়েছে , যা ভুল।
মেরিনাস

@ মারিনাস: আমি এটি পরীক্ষা করে দেখেছি তবে মনে হয় এটি একটি ভুল সংস্করণ অনুলিপি করেছে। সেখানে একটি >হওয়া উচিত ছিল <। এটি এখন স্থির। নোটের জন্য ধন্যবাদ!
এমিল

1

রুবি, 74

f=->n{w=(1..n).min_by{|z|n%z>0?n:(n/z-n/(n/z))**2};$><<("X"*w+"\n")*(n/w)}

ব্যাখ্যা

  • ইনপুটটিকে ল্যাম্বডায় আর্গুমেন্ট হিসাবে নেওয়া হয়। এটি একটি আশা করে Integer
  • n(ইনপুট) 1 থেকে প্রতিটি পূর্ণসংখ্যা দ্বারা বিভাজ্য কিনা তা পরীক্ষা করে দেখুন n
    • যদি এটি হয় তবে দৈর্ঘ্য এবং প্রস্থের মধ্যে পার্থক্য গণনা করুন।
    • যদি তা না হয় তবে একটি বৃহত সংখ্যক ( n) ফিরিয়ে দিন ।
  • বর্গক্ষেত্রের সাথে সাদৃশ্যপূর্ণ হওয়ার জন্য দৈর্ঘ্য-প্রস্থের পার্থক্যগুলির মধ্যে সবচেয়ে ছোটটি নিন।
  • String#*স্কোয়ারটি "আঁকতে" (অতিরিক্ত সংক্ষিপ্ত) পদ্ধতিটি ব্যবহার করুন ।

কেন আমাকে নিম্নচাপ দেওয়া হয়েছিল? আমার উত্তরটিতে কি বাগ রয়েছে?
ব্রিটিশিয়া

আপনার টাইপো আছে শেষ শব্দটি "বর্গক্ষেত্র" হওয়া উচিত এবং আপনার "স্কোয়ার" থাকতে হবে। (আমি ডাউনভোটার নই, আমি এই ভুলটি নির্দেশ করছি)।
ইসমাইল মিগুয়েল

1

এপিএল (ডায়ালগ ইউনিকোড) , 30 - 15 = 15 বাইট এসবিসিএস

নামবিহীন ইনফিক্স ল্যাম্বদা। এনকে ডান আর্গুমেন্ট এবং বাম আর্গুমেন্ট হিসাবে পরম নেয় । আয়তক্ষেত্রগুলিতে হয় এক্স এবং ও এর স্ট্রাইপ থাকবে বা চেক হবে।

{⍉⍣⍺⍴∘'XO'⊃∘c⌈.5×≢c←⍸⍵=∘.×⍨⍳⍵}

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

{} "ডিএফএন"; বাম আর্গুমেন্ট (পরম), ডান আর্গুমেন্ট ( এন ):

⍳⍵d ndices 1… N

∘.×⍨ এর গুণক টেবিল

⍵= মাস্ক যেখানে এন এর সমান

mas n মুখোশের সত্যিকারের মান d

c← এতে সংরক্ষণ করুন c( সি এবং ইনডেটসের জন্য)

 প্রার্থীদের ট্যালি

.5× অর্ধেক যে দ্বারা গুণিত

 সিলিং (বৃত্তাকার)

⊃∘c যে উপাদান থেকে চয়ন করুন c

⍴∘'XO' "XO "টিকে চক্রাকারে পুনরায় আকার দেওয়ার জন্য এটি ব্যবহার করুন

⍉⍣⍺ পরম যদি স্থানান্তর


1

05AB1E (উত্তরাধিকার) , স্কোর: 7 (22 বাইট - 15 বোনাস)

„OXI∍¹tï[D¹sÖ#<}äIiø}»

এটি অনলাইনে চেষ্টা করুন বা আরও কিছু পরীক্ষার কেস যাচাই করুন

Nপ্রথমে ইনপুট নেয় , তারপরে বুলিয়ান ( 0/ 1) এটি ঘোরানো উচিত কিনা।

স্ট্রিং-লিস্ট সহ জিপ, 05AB1E এর নতুন এলিক্সির পুনর্লিখন সংস্করণটির বিপরীতে, স্ট্রিং-তালিকা সহ জিপগুলি অক্ষরগুলিকে সুস্পষ্টভাবে সংযুক্ত করে এবং যোগদান করে, তাই 05AB1E এর পাইথন উত্তরাধিকার সংস্করণ ব্যবহার করে।

ব্যাখ্যা:

OX         # Push string "OX"
   I       # Extend it to a size equal to the first input
            #  i.e. 9 → "OXOXOXOXO"
            #  i.e. 10 → "OXOXOXOXOX"
¹t          # Take the first input again, and square-root it
            #  i.e. 9 → 3.0
            #  i.e. 10 → 3.1622776601683795
  ï         # Then cast it to an integer, removing any decimal digits
            #  i.e. 3.0 → 3
            #  i.e. 3.1622776601683795 → 3
   [        # Start an infinite loop:
    D       #  Duplicate the integer
     ¹sÖ    #  Check if the first input is evenly divisible by that integer
            #   i.e. 9 and 3 → 1 (truthy)
            #   i.e. 10 and 3 → 0 (falsey)
        #   #  And if it is: stop the infinite loop
    <       #  If not: decrease the integer by 1
            #   i.e. 3 → 2
   }        # After the infinite loop:
ä           # Divide the string into that amount of equal sized parts
            #  i.e. "OXOXOXOXO" and 3 → ["OXO","XOX","OXO"]
            #  i.e. "OXOXOXOXOX" and 2 → ["OXOXO","XOXOX"]
 Ii }       # If the second input is truthy:
   ø        #  Zip/transpose; swapping rows/columns of the strings
            #   i.e. ["OXOXO","XOXOX"] → ["OX","XO","OX","XO","OX"]
»           # And finally join the strings in the array by newlines
            #  i.e. ["OXO","XOX","OXO"] → "OXO\nXOX\nOXO"
            #  i.e. ["OX","XO","OX","XO","OX"] → "OX\nXO\nOX\nXO\nOX"
            # (and output the result implicitly)

0

গল্ফস্ক্রিপ্ট 26 (41 - 10 - 5)

:x),1>{x\%!},.,2/=.x\/@{\}*'X'*n+*1>'O'\+

দুটি পরামিতি স্ট্যাকের মধ্যে থাকবে বলে আশা করে:

  • 0সাধারণ জন্য বা 1স্থানান্তরিত জন্য
  • nমান

প্যাটার্নটি হ'ল বোর্ডটি পূর্ণ Xএবং উপরের বাম কোণটি একটি O। বলাই বাহুল্য, বোর্ডটি স্থানান্তরের সময় এই প্যাটার্নটি বজায় রাখা হয়।

ডেমো: নিয়মিত , স্থানান্তরিত


0

গণিত, 71 টি অক্ষর

f@n_:=#<>"\n"&/@Array["O"&,{#,n/#}&[#[[⌊Length@#/2⌋]]&@Divisors@n]]<>""

0

পেটিট কম্পিউটার বেসিক, 72 বাইট

INPUT N,S$FOR I=1TO SQR(N)IF N%I<1THEN M=I
NEXT
?(S$*M+" "*(32-M))*(N/M)


0

রেটিনা 0.8.2 , 66 বাইট + 1 বাইট পেনাল্টি = 67

.+
$*X
((^|\3)(X(?(3)\3)))+(\3)*$
$3 $3$#4$*X
X(?=X* (X+))| X+
$1¶

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

.+
$*X

ইনপুটটিকে একটি স্ট্রিংয়ে রূপান্তর করুন X

((^|\3)(X(?(3)\3)))+(\3)*$

বহিরাগত ক্যাপচারের প্রথম পাসটি স্ট্রিংয়ের শুরুতে মিলিত হয় যখন পরবর্তী পাশগুলিতে অভ্যন্তরীণ ক্যাপচারের পূর্ববর্তী মানটি মিলে যায়। অভ্যন্তরীণ ক্যাপচারটি তখন বর্ধিত এবং মিলিত হয়। এর ফলশ্রুতিটি হ'ল বাইরের ক্যাপচারের ফলে যে পরিমাণ স্ট্রিং খরচ হয় তা হ'ল অভ্যন্তরীণ ক্যাপচারের বর্গক্ষেত্র যা এই কারণে ইনপুটটির বর্গমূল ছাড়িয়ে যেতে পারে না। ইতিমধ্যে পরবর্তী পুনরাবৃত্তি নিশ্চিত করে যে অভ্যন্তরীণ ক্যাপচারটি স্ট্রিংয়ের দৈর্ঘ্যের একটি উপাদান।

$3 $3$#4$*X

আবিষ্কৃত ফ্যাক্টরটি সংরক্ষণ করুন এবং পরবর্তী পুনরাবৃত্তির সংখ্যার যোগ করে অন্যান্য বিভাজকের গণনা করুন।

X(?=X* (X+))| X+
$1¶

কারণগুলি একটি আয়তক্ষেত্রে পুনরায় সাজান।


0

কাঠকয়লা , 33 বাইট - 10 - 5 = 18

Nθ≔⌊Φ⊕θ¬∨‹×ιιθ﹪θιηE÷θη⭆η§XO⁺ιλ¿N⟲

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

Nθ

ইনপুট N

≔⌊Φ⊕θ¬∨‹×ιιθ﹪θιη

ব্যাপ্তিটি নিন 0.. N, কেবলমাত্র সেই সংখ্যাগুলি রাখুন যার স্কোয়ারগুলি কম Nএবং ভাগের চেয়ে কম নয় Nএবং সেই সংখ্যার সর্বনিম্ন নিন।

E÷θη⭆η§XO⁺ιλ

একটি চেকবোর্ড প্যাটার্ন ব্যবহার করে উপযুক্ত প্রস্থ এবং উচ্চতার একটি আয়তক্ষেত্র আউটপুট দিতে আবিষ্কারক ফ্যাক্টরটি ব্যবহার করুন। (এটি UOη÷θηXO¶OX1 বাইট সংরক্ষণের জন্য হওয়া উচিত তবে এটি এখন বগি)

¿N⟲

যদি দ্বিতীয় ইনপুটটি ননজারো হয় তবে আউটপুটটি ঘোরান। (যদি দ্বিতীয় ইনপুটটির প্রয়োজন হয় 0বা 2গ্রহণযোগ্য হয় তবে এটি ⟲N1 বাইট সংরক্ষণের জন্য হতে পারে ))

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