একটি এন × এন চেসবোর্ডে কয়টি ওয়াজির স্থাপন করা যায়?


30

ধরা যাক উজির নামে একটি নতুন পরী দাবা টুকরা দাবাতে পরিচয় হয়েছে। ওয়াজিরগুলি একটি অবস্থান ( x , y ) থেকে স্থানান্তর করতে পারে:
 ( x +1, y )
 ( x , y +1)
 ( x -1, y )
 ( x , y -1)

এটি হ'ল, তারা গণ্ডগোলের মতো orthogonally স্থানান্তরিত করে তবে রাজার মতো এক সময়ে কেবল একটি পদক্ষেপ। এই জাতীয় কয়টি ওয়াজির একটি এন × এন দাবাবোর্ডে স্থাপন করা যেতে পারে যাতে কোনও দুটি ওয়াজির একে অপরকে আক্রমণ করতে না পারে?

 একটি 1 × 1 বোর্ডে, কেবল 1 টির মতো টুকরো থাকতে পারে।
 একটি 2 × 2 বোর্ডে, এই জাতীয় 2 টি টুকরা থাকতে পারে।
 একটি 3 × 3 বোর্ডে 5 টি এর মতো টুকরো থাকতে পারে।

এন দেওয়া হয়েছে, একটি এন × এন দাবাবোর্ডে রাখা যেতে পারে এমন উজিরের সংখ্যাটি ফিরিয়ে দিন।

এই OEIS ক্রম A000982

আরও পরীক্ষার কেস

725

832

1005000


4
সুতরাং উট রুকের কাছে যা আছে রাজা রানির কাছে কি? অর্থাৎ কেবলমাত্র orthogonally, এবং একবারে কেবলমাত্র এক পদক্ষেপে স্থানান্তর করতে পারে।
অ্যাডম

2
@ শাশার আমি কি আপনার প্রশ্নকে একটি সঠিক কোড গল্ফ চ্যালেঞ্জ হিসাবে আবার লিখতে পারি?
Adám

2
নিশ্চিত! এইভাবে আমি ভবিষ্যতে কোডিং সম্পর্কিত প্রশ্নগুলি কীভাবে
সাশা আর

15
এই সাইটের একজন নতুন ব্যবহারকারী হিসাবে আপনি এবার খুব ভাগ্যবান হয়েছেন । এই সাইটে প্রচুর (অফ-টপিক) প্রোগ্রামিং প্রশ্ন স্থায়ীভাবে বন্ধ এবং ডাউনভোট করা হয়েছে, এটি একটি চ্যালেঞ্জ হিসাবে সম্পাদনা করা হয়নি এবং এটির মতো উর্ধ্বে দেওয়া হয়েছে। যেমন অন্যান্য ব্যক্তি ইতিমধ্যে ব্যাখ্যা করেছেন, এই সাইটটি কেবল প্রোগ্রামিং প্রতিযোগিতার জন্য, হোমওয়ার্ক জিজ্ঞাসা করার জন্য নয়। পরের বারের সাধারণ ভুল এড়াতে চ্যালেঞ্জ পোস্ট করার আগে আপনি স্যান্ডবক্সটি ব্যবহার করতে পারেন ( কোডগল্ফ.মেটা.স্ট্যাকেক্সেঞ্জার / কোয়েশনস /2140/… ) এবং নোট করুন যে এই সাইটের বেশিরভাগ ব্যবহারকারী, যেমন আপনি দেখেছেন, "অপঠনযোগ্য" ভাষা ব্যবহার করেন।
ব্যবহারকারী 202729

16
এই প্রশ্নটি বেশ বিভ্রান্তিকর যে উটটি ইতিমধ্যে একটি নাইটের মতো টুকরোটির জন্য স্ট্যান্ডার্ড পরী দাবার নাম যা দীর্ঘ লাফিয়ে তোলে এবং আপনি যে টুকরোটি বর্ণনা করেছেন ইতিমধ্যে একটি পরীর দাবার নাম রয়েছে: উজির
মার্ক এস।

উত্তর:


33

হোয়াইটস্পেস , 45 বাইট

   
	
		   
			 
 	  
   	
	      	 
	 	 	
 	

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

যাইহোক, এখানে একটি প্রমাণ যে ²n² / 2⌉ সূত্রটি সঠিক।

  • আমরা সর্বদা সর্বদা কমপক্ষে ²n² / 2⌉ উজির রাখতে পারি: কেবল এগুলিকে একটি চেকবোর্ড প্যাটার্নে রেখে দিন! উপরের-বাম টাইলগুলি সাদা বলে ধরে নেওয়া, এন board n বোর্ডে ⌈n² / 2⌉ সাদা টাইলস এবং ⌊n² / 2⌋ কালো টাইল রয়েছে । এবং যদি আমরা সাদা টাইলসে ওয়াজির রাখি তবে তাদের মধ্যে দু'জনই একে অপরকে আক্রমণ করছে না, যেহেতু প্রতিটি উজির কেবল কালো টাইলগুলি "দেখায়"।

    এখানে আমরা কীভাবে 5 × 5 বোর্ডে 13 ওয়াজির রাখি (প্রতিটি ডাব্লু একটি ওয়াজির)।

              5 × 5 বোর্ডে 13 ওয়াজির

  • আমরা এর চেয়ে আরও ভাল কিছু করতে পারি না : আসুন নির্বিচারে একটি বিজোড় দৈর্ঘ্যের দাবাটির চূড়ান্ত কোণার জন্য 1 × 1 টুকরা ব্যবহার করে 2 × 1 ডোমিনো টুকরা দিয়ে চেকবোর্ডটি নির্বিচারে টাইল করি:

              5 board 5 বোর্ডের ডোমিনো কভার

    দাবাবোর্ডটি coverাকতে আমাদের ⌈n² / 2⌉ ডোমিনোস দরকার। স্পষ্টতই, একটি ডোমিনোয় দুটি উজির রাখার ফলে এটি একে অপরকে আক্রমণ করতে পারে! তাই প্রতিটি ডমিনো শুধুমাত্র সর্বাধিক একটি উজির এ ধারণ করতে পারে, যার অর্থ আমরা পারব না সম্ভবত বোর্ডে ⌈n² চেয়ে বেশি / 2⌉ wazirs রাখুন।


শেষ অংশের জন্য আপনাকে পায়রাঘোল নীতিটির দরকার নেই: আপনার কাছে ঠিক টান প্রতি / 2⌉ টাইলস এবং সর্বাধিক উট উট টাইলস রয়েছে, সুতরাং আপনার সর্বাধিক ²n² / 2⌉ উট রয়েছে।
শ্রীভাতসারআর

8
@ শ্রীভাতসার কি আপনাকে নিশ্চিত করে যে আপনি x> ²n² / 2⌉ উটটি ?n² / 2⌉ টাইলসে রাখতে পারবেন না? এটি
পায়রাঘোল

2
আমি ভেবেছিলাম প্রথমে কোডটি লোড হয়নি, তাই আমি পৃষ্ঠাটি রিফ্রেশ করেছি, এবং এটি এখনও হয়নি। তারপরে আমি বুঝতে পারি যে শীর্ষে কী ভাষার নাম লেখা হয়েছিল।
আর্থার

7
আমি কৃতজ্ঞ যে আপনি গিয়ে পরিবর্তিত আপনার C'র কাছে Wতোমাদের প্রমাণ চিত্রণ' s।
জিউসেপ

4
আমি আরও প্রশংসা করি যে ডাব্লু এর সবকটি হোয়াইট স্পেসে একটি উত্তর সহ সাদা অংশে রয়েছে।
corsiKa


10

প্রোলোগ (এসডাব্লুআই) , 22 19 বাইট

কেভিন ক্রুইজসেনকে 3 বাইট সংরক্ষণ করা হয়েছে

X*Y:-Y is(X*X+1)/2.

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



2
@ কেভিন ক্রুজসেন: দোহ! আমি অন্য ব্যবহারকারীর কাছে একই পরিবর্তনের পরামর্শ দিয়েছি, তবে কোনওভাবে আমি আমার নিজের পরামর্শ গ্রহণ করি নি। আপনাকে ধন্যবাদ :)
এমিগানা

9

এপিএল (ডায়ালগ) , 9 7 6 বাইট

এখন মিঃ এক্সকোডার সূত্রটি ব্যবহার করুন

এটি একটি বেনামে উপসর্গ tacit ফাংশন যা N কে আর্গুমেন্ট হিসাবে গ্রহণ করে।

2÷⍨×⍨

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

×⍨ বর্গক্ষেত্র এন (লিট। গুণক সেলফি, অর্থাত্ গুণ দ্বারা গুণিত)

2÷⍨ 2 দ্বারা ভাগ করুন

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


বাহ! আপনি কীভাবে এটি করেছিলেন আমার কোনও ধারণা নেই !! দীর্ঘশ্বাস
সাশা আর

ডার্ন, ইতিমধ্যে কেউ প্যাটার্নটি খুঁজে পেয়েছে।
ফেদারক্রাউনটি

1
হু, ঠিক বুঝতে পেরেছি যে সূত্রটি OEIS পৃষ্ঠায় রয়েছে। সম্ভবত এটি লিঙ্ক করা উচিত নয়।
ফেদারক্রাউনটি

7

জেএস (ইএস 6) / সি # বহুগ্লোট, 11 বাইট

n=>n*n+1>>1

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



@ শেগি লক্ষ্য করার জন্য ধন্যবাদ!
আর্নৌল্ড

1
জেএস এবং সি # বহুগ্লোট তাদের মধ্যে পার্থক্যের কারণে অত্যন্ত বিরল বলে মনে হচ্ছে। +1
এয়ারড কোয়েনেরিংহিংহ




5

সি (জিসিসি) , 23 18 17 বাইট

f(n){n=n*n+1>>1;}

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

সি (জিসিসি) , ২২ বাইট (অপরিজ্ঞাত আচরণ ব্যবহার করছেন না)

f(n){return n*n+1>>1;}

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

কিছু সংখ্যক লোক নির্দিষ্ট সংকলক পতাকা ব্যবহার করার সময় কোনও নির্দিষ্ট সংকলকের অনির্ধারিত বাহাভিয়ের শোষণ করতে পছন্দ করে না। যদিও এটি করা বাইটস সংরক্ষণ করে না।


3
একটি উত্তর আইএমও সরবরাহ করার অদ্ভুত উপায়, তবে: চ (এন) {n = n * n + 1 >> 1; by বাইট সংরক্ষণ করতে।
তাহগ

1
@ থাহাগ ধন্যবাদ; যদিও আপনি কীভাবে আমার উত্তরটি বিজোড় দেওয়ার উপায় খুঁজে পেয়েছেন?
জোনাথন ফ্রেচ 10

2
আমি মনে করি না যে ইনপুট আর্গুমেন্ট পরিবর্তন করা সি
তে

2
@ ওয়াইএসসি তবুও সংকলকের মতামতে এটি বোধগম্য এবং একটি এক্সিকিউটেবল তৈরি করে যা কাজ করে।
জোনাথন ফ্রেচ

5
@ ওয়াইএসসি আমরা এখানে পিপিসিজিতে বিশ্বাস করি যে, প্রোগ্রামটি যদি একজন দোভাষীর উপর কাজ করে তবে এটি একটি বৈধ জমা দেওয়া। এটি একটি অনলাইন দোভাষীকে নিয়ে কাজ করে, এটি কোনও মন্তব্য ছাড়াই বৈধ।
কনর ও'ব্রায়েন


4

পাইথন 3 , 19 বাইট

lambda x:-(-x*x//2)

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

lambda x:-(-x*x//2)  # Unnamed function
lambda x:            # Given input x:
            x*x      # Square
           -         # Negate
               //2   # Halve and Floor (equivalent of Ceil)
         -(       )  # Negate again (floor -> ceil)

-১ বাইট মিঃ এক্সকোডারকে ধন্যবাদ



@ মিঃ এক্সকোডার ফেসপাল ধন্যবাদ
হাইপার নিউট্রিনো

কি হবে lambda x:x*x+1>>1?
অ্যালিক্স আইজেনহার্ট

বা lambda x:x*x+1//2 অস্বীকৃতি: আমি এই ভাষার বাক্য গঠন বা পরিচালনা ক্রিয়াকলাপ জানি না, তাই আমি অনুমান করেছি; আমি আপনার আগে //2 দুবার উপেক্ষা করার পরিবর্তে
ড্যান হেন্ডারসন 15

@ ড্যানহেন্ডারসন আপনার এখনও প্যারেন্টেসিজ দরকার অন্যথায় এটি পার্স করা হয়েছে (x*x) + (1//2), এটি আসলে সংক্ষিপ্ত নয়।
স্কাইলার

4

x86_64 মেশিন ল্যাঙ্গুয়েজ (লিনাক্স), 9 8 বাইট

0:       97                      xchg   %eax,%edi
1:       f7 e8                   imul   %eax
3:       ff c0                   inc    %eax
5:       d1 f8                   sar    %eax
7:       c3                      retq

অনলাইনে চেষ্টা করার জন্য ! , নিম্নলিখিত সি প্রোগ্রামটি সংকলন এবং পরিচালনা করুন।

#include<stdio.h>
const char *f="\x97\xf7\xe8\xff\xc0\xd1\xf8\xc3";
int main() {
  for(int i=1; i<10; i++) {
    printf("%d\n", ((int(*)())f)(i));
  }
}

3

জে , 8 বাইট

বেনামে ট্যাসিট প্রিফিক্স ফাংশন।

2>.@%~*:

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

*: বর্গক্ষেত্র

>. সিলিং (রাউন্ড আপ) এর
@ পরে
2... %~ দুটি দিয়ে ভাগ করা


বিকল্প সমাধান: <.@-:@*:এবং*:<.@%2:
কনর ও'ব্রায়ান

2
@ কনরও ব্রায়েন 2>.@%~*:that আমি কোথা থেকে পেয়েছি? আমি এটি পড়তে পারি না - আমার কাছে লাইন
গোলকের

>.@-:@*:আমার ভোট পায়
জোনাহ

1
@ জোনাঃ আপনি স্কুইট করলে আপনি একটি উট দেখতে পাবেন see
Adám


3

আর , 22 21 বাইট

cat((scan()^2+1)%/%2)

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

বর্গক্ষেত্র, বৃদ্ধি, পূর্ণসংখ্যা বিভাজন। সহজ কিছু.

স্টিডিন থেকে ইনপুট; এটি স্থান বা নিউলাইন পৃথক পৃথক ইনপুট নিতে পারে এবং এটি প্রতিটি ইনপুট বোর্ডসাইডের জন্য সর্বোচ্চ ওয়াজিরগুলি গণনা করবে will Stdout যাও আউটপুট।

-1 বাইট প্ল্যানাপাসকে ধন্যবাদ


@ প্ল্যানাপাস স্থির হয়েছে, আপনাকে ধন্যবাদ
জিউসেপ



2

সি # (.নেট কোর) , 14 12 বাইট

-2 বাইট ধন্যবাদ এমিগিনার কাছে

n=>(n*n+1)/2

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




আমি জাভাস্ক্রিপ্টের উত্তরটি একই করতে দেখেছি এবং এই পরিবর্তনটি আমাদের উত্তরগুলিকে বাইট সমতুল্য করে তুলবে।
আমার সর্বনাম হ'ল মনিকেয়ারইনস্টেট



2

কিউবিক্স , 11 বাইট

Iu*:^\)2,O@

Heheh, :^\)

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

নিম্নলিখিত ঘনক্ষেত্রে প্রসারিত:

    I u
    * :
^ \ ) 2 , O @ .
. . . . . . . .
    . .
    . .

যা একই অ্যালগরিদম যা অনেকে ব্যবহার করেন।

  • ^Iu : ইনপুট হিসাবে পূর্বে এবং দিকনির্দেশ পরিবর্তন হিসাবে পড়ুন
  • :* : স্ট্যাকের ডুপ টপ, গুণ
  • \) : দিকনির্দেশ পরিবর্তন, বৃদ্ধি
  • 2, : পুশ 2, পূর্ণসংখ্যা বিভাজন
  • O@ : প্রিন্ট আউটপুট ইনট, শেষ প্রোগ্রাম হিসাবে।





1

Japt , 4 বাইট

চ্যালেঞ্জ বন্ধ হওয়ার পরে এগুলি নিয়ে বসে রয়েছেন।

²Ä z

চেষ্টা করে দেখুন

ব্যাখ্যা: স্কোয়ার, 1 যোগ করুন, 2 দ্বারা তল ভাগ করুন


বিকল্প

²ÄÁ1

চেষ্টা করে দেখুন

ব্যাখ্যা: স্কোয়ার, 1 যোগ করুন, 1 দ্বারা বিট শিফট করুন।


1

ভাষ্যকার , 19 বাইট

//{-//-}! {-#  -}<!

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

গল্ফিং ভাষার দরকার কার? আমি বিভ্রান্তিকর ভাষা পেয়েছি!

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

5//{-8}//{5-}
print(10!= 5)
x={-1,3,4} # Smiley :-}
print(5<!=10)*/ # Weird comparision.

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

এটা কিভাবে কাজ করে? আমি ইনপুট 5 দিয়ে ব্যাখ্যা করব

//                         - Take input.                           Tape: [5 0 0]
  {-//-}!                  - Square the input.                     Tape: [25 0 0]
  {-                         - Move one along the tape
    //                       - Copy the input to the tape.         Tape: [5 5 0]
      -}                     - Move one back along the tape
        !                    - Take the product of the tape.       Tape: [25 5 0]
         <space>           - Increment the tape head.              Tape: [26 5 0]
                 {-#  -}<! - Halve the tape head (floor division). Tape: [13 2 0]
                 {-          - Move one along the tape
                   #         - Set the tape head to 2.             Tape: [26 2 0]
                      -}     - Move one back along the tape
                        <!   - Reduce the tape by floor division.  Tape: [13 2 0]

1

ওক্যামেল , 19 বাইট

let f n=(n*n+1)/2;;

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

আমি এটি লিখতে পরিচালিত করার আগে নামটি "উট" থেকে "ওয়াজির" হিসাবে পরিবর্তিত হয়ে গিয়েছিলাম তবে আমি বুঝতে পেরেছিলাম যে আমি এটি পোস্ট করব।


1

টিআই-বেসিক, 7 বাইট

round(Ans²/2,0

বিকল্পভাবে (8 বাইট):

int(Ans²/2+.5

-int(-.5Ans²এছাড়াও কাজ করে
ওকি

@ ওকি এটা নিশ্চিত করে। আমি কেবল তাদের ইচ্ছা একটি ceil(ফাংশন চান।
টিমটেক

1

/// , 35 বাইট

/I///,*/+,//+/I//**,/,A//*/A//,//,I

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

প্রতীক ব্যবহার করে আনারিতে ইনপুট নেয় *এবং প্রতীক ব্যবহার করে আনারীতে আউটপুট নেয় A। /// সহ কয়েকটি নির্দিষ্ট ভাষার জন্য এটি অনুমোদিত ( মেটা )

/// ইনপুট নেওয়ার কোনও উপায় নেই বলে ইনপুটটি হার্ডকোড করা উচিত:

/I/«put input here»//,*/+,//+/I//**,/,A//*/A//,//,I

ইনপুট জন্য = 4।


ব্যাখ্যা: (পাঠের কিছু আগে, আপনাকে জানাতে চাই যে একমাত্র সিনট্যাক্স প্রয়োজন ///হয় /pattern/replacement/, যা প্রতিটি occurence প্রতিস্থাপন patternদ্বারা replacementআর\ পলায়নের জন্য; অন্যান্য অক্ষরের আউটপুট মুদ্রিত থাকে)

এর জন্য n=4:

/I/****//,*/+,//+/I//**,/,A//*/A//,//,I    Start program.
/I/****/                                   Replace all `I` in the program by the input.

/,*/+,//+/****//**,/,A//*/A//,//,****      Remaining part of the program.
/,*/+,/                                    Use the `,` as a scanner, scan through `*` after it and convert to `+`.
       /+/****//**,/,A//*/A//,//++++,      Note that only `*` in the second group is affected.
       /+/****/                            Replace all `+` (which is just created) by `n` asterisks (from the first `I` group)

/**,/,A//*/A//,//****************,         Now at the last of the program before the `,` there are `n²` asterisks.
/**,/,A/                                   Scan the `,` to the left to perform division by 2:
                                           replace each `**` by a `A` as the scanner `,` pass through.
/*/A//,//,AAAAAAAA                         Remaining program.
/*/A/                                      If there is any `*` remaining (if `n²` is odd), replace it with `A`.
     /,//                                  Remove the scanner `,`.
          AAAAAAAA                         Output the result.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.