একটি চেকার বোর্ডে টুকরো সংখ্যা


14

ভূমিকা

একটি সাধারণ চেকার বোর্ডে 8 x 8 = 64 স্কোয়ার থাকে:

এখানে চিত্র বর্ণনা লিখুন

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

এই চ্যালেঞ্জের জন্য সবচেয়ে ছোট বোর্ডটি 3 x 3 :

এখানে চিত্র বর্ণনা লিখুন

আপনি দেখতে পাচ্ছেন যে টুকরো সর্বাধিক পরিমাণ 2 এর সমান । সুতরাং, যখন এন = 3 দেওয়া হয় তখন আপনার আউটপুট 2 করতে হবে । যদি ইনপুটটি N = 4 হয় তবে আমরা নিম্নলিখিতটি পাই:

এখানে চিত্র বর্ণনা লিখুন

আপনি দেখতে পাচ্ছেন যে সর্বাধিক পরিমাণটিও 2। সুতরাং এন = 4 এর জন্য আউটপুট 2 হওয়া উচিত । জন্য এন = 5 আউটপুট সমান হওয়া উচিত 5 :

এখানে চিত্র বর্ণনা লিখুন

উদাহরণ

STDIN:  3
STDOUT: 2

STDIN:  4
STDOUT: 2

STDIN:  5
STDOUT: 5

STDIN:  6
STDOUT: 6

STDIN:  8
STDOUT: 12

বিধি

  • আপনার জমাটি অবশ্যই একটি প্রোগ্রাম বা ফাংশন ইত্যাদি হতে পারে যা একটি পূর্ণসংখ্যার গ্রহণ করে এবং বোর্ডে টুকরো টুকরো করে দেয়
  • আপনি নিরাপদে ধরে নিতে পারেন যে ইনপুটটি একটি অ-নেতিবাচক পূর্ণসংখ্যা> 2 2
  • এটি , তাই কমপক্ষে বাইটের সাথে প্রোগ্রামটি জয়ী!
  • নোট করুন বোর্ডের নীচে বাম দিকের বর্গক্ষেত্রটি সর্বদা অন্ধকার থাকে। টুকরো কেবল অন্ধকার স্কোয়ারে স্থাপন করা হয়
  • আপনি টুকরা সহ একটি সম্পূর্ণ সারি দখল করতে হবে

3
কেন পুরো প্রোগ্রাম এবং এসটিডিএন / এসটিডিআউটে সীমাবদ্ধতা? আইএমও যে ভাষার জন্য প্রয়োজনীয় প্রোগ্রাম এবং / অথবা ইনপুট ওভারহেড কেবলমাত্র অন্যায়।
lirtosiast

@ থমাসকওয়া, আপনি ঠিক বলেছেন ফাংশন ইত্যাদি এখন অনুমোদিত
আদনান

উত্তর:


5

পার , 8 বাইট

✶″½↓┐*½┐

একটি বাইট অক্ষর প্রতি ব্যবহৃত হয়।

ব্যাখ্যা

               ## [implicit: read line]      Example
✶              ## Convert to number           7
″              ## Duplicate                   7 7
½              ## Divide by two               7 3.5    half the board
↓              ## Minus one                   7 2.5    leave one row empty
┐              ## Ceiling                     7 3      a whole number of rows
*              ## Multiply                    21       total number of spaces
½              ## Divide by two               10.5     only the blue squares
┐              ## Ceiling                     11       starts with blue, so round up

12

হেক্সাগনি , 19 বাইট

?({{&2'2':{):!/)'*/

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

ব্যাখ্যা

এটি এখনও আমার সিজে্যাম এবং ল্যাবরেথ উত্তরগুলিতে যেমন ব্যবহার করা হয়েছে ঠিক তেমনই গননা, তবে হেক্সাগনির ... বিশেষ ... স্মৃতি মডেলের কারণে, এটি 19 বাইটে গননাটি একটু জটিল করে তোলে (যাতে এটি কোনও একটির ভিতরে ফিট করে) পার্শ্ব দৈর্ঘ্য 3 ষড়ভুজ)।

আমার ল্যাবরেথ উত্তরের মতো, এটি বিভাজন দ্বারা 0 টি ত্রুটির সাথে শেষ হয়।

প্রকাশিত কোডটি এখানে:

এখানে চিত্র বর্ণনা লিখুন

আমি যেমন বলেছি কোডটি সম্পূর্ণ রৈখিক। ধূসর-বেগুনি-সবুজ-লাল-নীল ক্রমে আপনি মৃত্যুদন্ডপ্রাপ্ত পথ একসাথে টুকরো টুকরো করতে পারেন। :বামদিকে হিট না হওয়া পর্যন্ত পথটি খানিকটা এগিয়ে যায়। /(যা কেবলমাত্র নিয়ন্ত্রণ প্রবাহকে পুনর্নির্দেশ করে) সরানো হচ্ছে , সম্পূর্ণ প্রোগ্রামটি রৈখিকভাবে তালিকাভুক্ত নয়:

?({2':{)'*){&2':!:&?':

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

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

এখানে চিত্র বর্ণনা লিখুন

সুতরাং এখানে এটি কিভাবে কাজ করে:

?  Read an integer N from STDIN into edge A.
(  Decrement to get N-1.
{  Move the MP forwards onto edge B.
2  Set the edge to 2.
'  Move the MP backwards onto edge C.
:  Divide edge A by edge B (rounding down) to compute (N-1)/2.
{  Move the MP forwards onto edge A.
)  Increment to restore value of N.
'  Move the MP backwards onto edge B.
*  Multiply edges A and C to compute N*(N-1)/2.
)  Increment to compute N*(N-1)/2 + 1.
{  Move the MP forwards onto edge C.
&  This actually a copy operation, but we use it to reset the edge to zero.
2  Set the edge to 2.
'  Move the MP backwards onto edge A.
:  Divide edge B by edge C to compute (N*(N-1)/2 + 1)/2.
!  Output the result as an integer. We're basically done now.
:  no-op (we already have this value)
&  Copy either B or C into A (doesn't matter).
?  Read a zero (EOF) into A.
'  Move the MP backwards onto an unused cell.
:  Divide some unused cell by A (which is zero), terminating with an error.

twice twice স্মৃতি প্রান্তটি দু'বার সরিয়ে নিয়েছে তাই এবং দ্বিতীয় সারিতে মনে হয় কিছুই করছে না? উভয়
নেগ্রবার্সের

@ ইমেল এটি সেই আদেশ নয় যাতে কোডটি কার্যকর করা হয়। প্রথমটির পরে {, আইপিটি 2বাম কোণে লাফ দেয় । পরে )ডান দিকের কোণায় অবস্থিত, আইপি থেকে উঁচুতে লাফাতে 'নীচে বাঁদিকের কোণায়। তারপরে আইপিটি ট্র্যাভার্স লাইনের 2 এবং 4 টি একটি অদ্ভুতভাবে চক্রাকারে মোড়ানো পথে।
মার্টিন এন্ডার

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

ইমেল এটি করে ঠিক কীভাবে কোডের কিনারাটি হেক্সাগনিতে মোড়ানো।
মার্টিন এেন্ডার


8

সিজেম, 10 বাইট

ri_(2/*)2/

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

ri   e# Read input and convert to integer N.
_    e# Duplicate N.
(2/  e# Decrement, integer divide by two, to determine the number of rows that can be used.
*    e# Multiply by the input to determine the number of cells that can be used.
)2/  e# Increment, integer divide by two, which essentially ceil()s the result of the
     e# division.

8

ল্যাবরেথ , 11 বাইট

উহু, সিজেমের পিছনে কেবল একটি বাইট ।

?:(#/*)_2/!

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

এটি মূলত একই জিনিস:

? reads an integer value.
: duplicates the result.
( decrements it.
# pushes the stack depth which happens to be 2.
/ is integer division.
* is multiplication.
) increments the result.
_ pushes a 0.
2 turns it into a 2.
/ is once again integer division.
! prints the result as an integer.

যাইহোক, এই মুহুর্তে প্রোগ্রামটি এখনও শেষ হয় না। পরিবর্তে, নির্দেশ পয়েন্টারটি একটি শেষ প্রান্তে এসে আঘাত করেছে around তবে এখন /গণনা করার চেষ্টা করে 0/0যা কোন ত্রুটি দিয়ে শেষ হয়


5

সিরিয়াসলি , 8 বাইট

,;D½L*½K

গুরুতরভাবে হ্যান্ডি ½(2 দ্বারা ভাসা বিভক্ত) এবং K(সিলিং) রয়েছে, সুতরাং বিভাজনের আগে আমাদের কোনও যোগ করার দরকার নেই।

ব্যাখ্যা সহ এখানে চেষ্টা করুন ।


5

পাইথন 2, 22 21 বাইট

lambda n:~-n/2*n+1>>1

আমি প্রথমে বিজোড় এন এবং এমনকি এন দুটি ক্ষেত্রে পৃথক হয়েছি

বিজোড় এন দিয়ে আমরা গড় এন / 2 টুকরো সমেত (এন - 1) / 2 সারি পূরণ করতে পারি। যেহেতু প্রথম সারিতে সর্বদা আরও টুকরো থাকে আমাদের এই ফলাফলটি সিল করা উচিত। সুতরাং যখন এন বিজোড় হয় তখন আমাদের সিল ((এন -1) / 2 * এন / 2) টুকরা থাকে।

এমনকি এন এর সাহায্যে আমরা এন / 2 - 1, বা মেঝে ((এন - 1) / 2) সারিগুলি পূরণ করতে পারি, প্রতিটি সারিটিতে এন / 2 টুকরা রয়েছে।

আমরা এই দুটি এক্সপ্রেশন সিল (ফ্লোর ((এন -1) / 2) * এন / 2) দ্বারা একত্রিত করতে পারি। : ছাদের নিচের পিঠ নির্মাণ (এক্স / 2) = মেঝে ((X + 1 টি) / 2) আমরা মেঝে বিভাজন ব্যবহার করতে পারেন যেহেতু ((N - 1) // 2 * N + 1) // 2


3

জাভাস্ক্রিপ্ট, 37 35 বাইট

alert(((n=prompt()/2)-.5|0)*n+.5|0)

ব্যাখ্যা

বাকি উত্তরের জন্য একই কৌশল ব্যবহার করে। এটি হ'ল অলগরিদম:

var n = parseInt(prompt());
var result = Math.ceil(Math.floor((n - 1) / 2) * n / 2);
alert(result);


3

পাইথ, 9 বাইট

/h*/tQ2Q2

আমার পাইথন 2 উত্তর হিসাবে একই অ্যালগরিদম।


3

জাপট , 16 14 বাইট

U-1>>1 *U+1>>1

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

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

বেশ সহজ:

         // Implicit: U = input number
U-1>>1   // Subtract 1 from U and integer divide by 2.
*U+1>>1  // Multiply the result by U, add 1, and integer divide by 2.
         // Implicit: output last expression

আমি ইচ্ছা করি আমলে নেওয়ার কোনও উপায় থাকত যে কোডের দুটি অংশ দুটি একই রকম। পরামর্শ স্বাগত!

পুরানো সংস্করণ (16 বাইট):

U*½-½|0 *U*½+½|0

3

জাভা, 230 155 52

Golfed:

int f(int s){return(int)Math.ceil(s*((s-1)/2)/2.0);}

Ungolfed:

public class NumberOfPiecesOnACheckersBoard {

  public static void main(String[] args) {
    // @formatter:off
    int[][] testData = new int[][] {
      {3, 2},
      {4, 2},
      {5, 5},
      {6, 6},
      {8, 12}
    };
    // @formatter:on

    for (int[] data : testData) {
      System.out.println("Input: " + data[0]);
      System.out.println("Expected: " + data[1]);
      System.out.print("Actual:   ");
      System.out.println(new NumberOfPiecesOnACheckersBoard().f(data[0]));
      System.out.println();
    }
  }

  // Begin golf
  int f(int s) {
    return (int) Math.ceil(s * ((s - 1) / 2) / 2.0);
  }
  // End golf

}

প্রোগ্রাম আউটপুট:

Input: 3
Expected: 2
Actual:   2

Input: 4
Expected: 2
Actual:   2

Input: 5
Expected: 5
Actual:   5

Input: 6
Expected: 6
Actual:   6

Input: 8
Expected: 12
Actual:   12

throws Exceptionঅনুমোদিত।
নীল

1
ওপি অনুমোদিত ফাংশন।
lirtosiast

আপনি Scannerইনপুট জন্য ক্লাস ব্যবহার করতে পারে । আমার মনে হয় এটি আপনার একগুচ্ছ বাইট সংরক্ষণ করবে। ( BufferedReader/ InputStreamReaderকম্বো সাধারণ ব্যবহার ভালো হতে পারে, কিন্তু এই কোড গলফ, এবং Scannerসহজ ইনপুট জন্য মাত্র কাজ করে জরিমানা।)
Darrel হফম্যান

একা একা ফাংশনে রূপান্তর করা এবং স্ট্যান্ডার্ড ইনপুট / আউটপুটের পরিবর্তে পরামিতি / রিটার্ন মানগুলি ব্যবহার করে একটি বিশাল পার্থক্য।

2

জিলোগ ইজ 80 মেশিন কোড, 9 বাইট

হেক্সে:

6C 2D CB3D ED6C 2C CB3D

সমাবেশে:

ld l,h
dec l
srl l
mlt hl
inc l
srl l

ইনপুট নিবন্ধভুক্ত h, এবং আউটপুট ইন আছেl

জিলগ ইজ 80 একটি 8-বিট প্রসেসর যার সাথে 8 বিট সংগ্রহকারী এবং 24-বিট রেজিস্টার রয়েছে। জেড 80 এর বিপরীতে, এটিতে একটি mlt(8-বিট মাল্টিপল) নির্দেশনা রয়েছে, যা 16-বিট মোডে, একটি রেজিস্টার জুটির উচ্চ এবং নিম্ন বাইটগুলি এখানে hl, এবং পুনরায় সঞ্চয় করে hl

এটি কেবলমাত্র সেই মানগুলির জন্যই কাজ করে যার ফলস্বরূপ দ্বিগুণ ফল 8 টি বিটের সাথে খাপ খায়; যে, n≤23।


2

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

⁻int(⁻.5Ansint(Ans/2-.5

টিআই-বেসিকের অন্তর্নিহিত গুণটি সাহায্য করে, তবে এর পূর্ণসংখ্যা বিভাজন নেই। ⁻int(⁻Xসিলের একটি সংক্ষিপ্ত রূপ (এক্স)।


2

ভিবিএ, 46

Function f(x)
f=(((x-1)\2)*x+1)\2
End Function

একটি সূত্রে? F (x), বা = f (A1) এর সাথে কল করুন


2

Pyth, 17 14 13 বাইট

-3 বাইট ধন্যবাদ Ypnypn ! 1 বাইট সংরক্ষণ করতে * অপারেটরের নম্বরগুলি পুনরায় সাজানো হয়েছে।

/+*Q-/Q2-1%Q2 1 2 (original)
/h*Q-/Q2!%Q2 2
/h*-/Q2!%Q2Q2

ব্যাখ্যা:

যখন এন সমান হয়, আমরা n / 2 টুকরো দিয়ে n / 2-1 সারি দখল করতে পারি, মোট এন * (এন / 2-1) / 2 টুকরা করে। এই অভিব্যক্তিটি (n * (n / 2-1) +1) / 2 এর সমান

যখন এন বিজোড় হয়, আমরা দেখতে পাই যে টুকরো সংখ্যার দ্বিগুণ কী হবে, দ্বিগুণ সংখ্যার টুকরো এন -1 সারিগুলিকে স্প্যান করবে এবং আমি যদি একটি টুকরোটি কেড়ে নিই, আমরা এন -1 সারিগুলিকে (এন-) বিভক্ত করতে পারি 1) / 2 টি সারিগুলির 2 টি গ্রুপ যেমন প্রতিটি গ্রুপের n টুকরা থাকে, সুতরাং এই ক্ষেত্রে অভিব্যক্তিটি হ'ল (এন * (এন / 2) +1) / 2

এখন যেহেতু উভয় এক্সপ্রেশন একইরকম, আমরা কোডটি লিখতে পারি।

/h*-/Q2!%Q2Q2
        %Q2   Check if the number is odd
       !      Logical not to make 1 if even and 0 if odd
    /Q2       n/2
   -          n/2-1 if even, and n/2 if odd
  *        Q  n*(n/2-1) if even, n*(n/2) if odd
 h            Add one
/           2 Divide the result by two.

একটি গল্ফিং ভাষা ব্যবহার করে আমার প্রথমবার।


2

জাভাস্ক্রিপ্ট, 33 বাইট

a=prompt();alert(a*(a-1>>1)+1>>1)

যদি কোনও ES6 ফাংশন অনুমোদিত হয় তবে 18 বাইট:

a=>a*(a-1>>1)+1>>1

2

ম্যাটল্যাব, 37 25 বাইট

@(a)ceil(fix(a/2-.5)*a/2)

আমি বিশ্বাস করি এটি কাজ করা উচিত, সমস্ত পরীক্ষার ক্ষেত্রে এটি করে।

এটি অষ্টাভেও কাজ করে । আপনি এখানে অনলাইনে চেষ্টা করতে পারেন ।


পুরানো কোডের জন্য আমি এই ফাইলটিকে কর্মক্ষেত্রে একটি ফাইল যুক্ত করেছি checkerboard.m। আপনি কেবল checkerboardপ্রম্পটে প্রবেশ করে এটি চালাতে পারেন , তারপরে এটি শুরু হওয়ার সাথে সাথে প্রম্পটে প্রয়োজনীয় আকারটি প্রবেশ করুন। ফলাফল মুদ্রণ করা হবে।

নতুন কোডের জন্য, এখানে প্রম্পটে কেবল পোস্ট করা কোডটি প্রবেশ করুন, তারপরে বেনামে ফাংশনটি কল করুন ans(n)


আপ ভোটের জন্য ধন্যবাদ, অবশেষে 1000 টি রেপ পৌঁছেছে :) ওওফ।
টম কার্পেন্টার

@ থমাসকওয়া এটি নির্দেশ করার জন্য ধন্যবাদ। 12 বাইট সংরক্ষণ করা হয়েছে :)।
টম কার্পেন্টার

2

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

11(..?$)?
$_
11?
1

ইনপুট এবং আউটপুট অবিচ্ছিন্ন

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

রেটিনার সর্বশেষ সংস্করণ (এই চ্যালেঞ্জের চেয়ে নতুন) দশমিক আই / ওকে চারটি অতিরিক্ত বাইটের জন্য পরিচালনা করতে পারে:

.+
$*
11(..?$)?
$_
11?

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

অ্যানারি ইনপুট এবং দশমিক আউটপুট সহ, আমরা 16 বাইট করতে পারি, তবে এটি কিছুটা প্রসারিত বলে মনে হয়:

11(..?$)?
$_
11?

ব্যাখ্যা

এখনও যে কেউ এলিসের মতো একই পন্থা, তবে সংখ্যার অবিচ্ছিন্ন উপস্থাপনায় রেজেক্স রিপ্লেসমেন্ট ব্যবহার করে।

11(..?$)?
$_

এই গণনা n*((n-1)/2)। আমরা একসাথে দুটি অক্ষরের সাথে মিল রেখে (দুটি দ্বারা বিভাজন) এবং পুরো স্ট্রিংয়ের মাধ্যমে প্রতিস্থাপিত (দ্বারা গুণ n) দ্বারা এটি করি । এর মাত্রা হ্রাস nস্ট্রিংয়ের বাকী অংশটি এড়িয়ে গিয়ে করা হয়, যদি কেবল একটি বা দুটি অক্ষর থাকে।

11?
1

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


আপনার 1000 তম জবাবের জন্য অভিনন্দন: পি
আদনান


1

Prolog, 39 38 বাইট

কোড:

p(N):-X is ((N-1)//2*N+1)//2,write(X).

ব্যাখ্যা:

Subtract 1 from input and integer divide by 2 to get number of rows available.
Multiply that number by input to get number of squares available. 
Add one and integer divide by 2 to round up, since at at least half the rows 
will have a checker at the first square.
Print.

উদাহরণ:

p(8).
12

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

সম্পাদনা করুন: সিল / 2 প্রতিস্থাপন করে 1 বাইট সংরক্ষণ করা হয়েছে + 1 // 2 দিয়ে


1

মাম্পস, 17 বাইট

R I W I-1\2*I+1\2

ধন্যবাদ এমিগানাকেসাধারণ অ্যালগরিদম ব্যাখ্যার জন্য । এটি মাম্পসের গণিতের "ঘাটতি" কে কাজে লাগায় যে অপারেশনগুলি কঠোরভাবে বাম-থেকে-ডানদিকে চালিত করা হয় (পিইএমডিএএস নয়) সুতরাং প্রথম বন্ধনী প্রয়োজন হয় না। :-)

আউটপুটটি একেবারে অদ্ভুত বলে মনে হচ্ছে, যেমন ক্যাশের এনসেম্বল (যে ম্যাম্পস পরিবেশটি আমার কাছে অ্যাক্সেস রয়েছে) ইনপুট চাপলে এমনকি আউটপুট গাড়ি বহন করে না। আপনি যদি এটি সুন্দর চান তবে প্রাক / পোস্ট ক্যারেজ রিটার্নের জন্য 4 টি অক্ষর যুক্ত করুন:

R I W !,I-1\2*I+1\2,!

ধন্যবাদ!




1

ব্যাচ, 30 বাইট

@cmd/cset/a(%1*((%1-1)/2)+1)/2

স্টিডিনে ইনপুট প্রয়োজন হলে 38 বাইট:

@set/pa=
@cmd/cset/a(a*((a-1)/2)+1)/2
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.