রোমান আর্মি শিল্ডস


26

স্যান্ডবক্স পোস্ট (মুছে ফেলা)

পুরানো রোমান আর্মি ফর্মেশনগুলি বিশ্বজুড়ে খুব বিখ্যাত। এই গঠনগুলিতে রোমান লেজিওনারিগুলি জ্যামিতিক আকারে ভাগ করা হয় (সাধারণত একটি আয়তক্ষেত্র) ফ্ল্যাঙ্কগুলি এবং তাদের usingালগুলি ব্যবহার করে এর উচ্চতর অংশকে সুরক্ষিত করে। অভ্যন্তরীণ অবস্থানের লিওনারিগুলি তাদের aboveালগুলি তাদের মাথার উপরে রেখে উচ্চতর অংশটি coveredেকে রাখে, ফ্ল্যাঙ্কগুলিতে লিওনিয়ানারিগুলি 2 বা ততোধিক carriedাল বহন করে: উচ্চতর অংশটি সুরক্ষার জন্য একটি, এবং ফ্ল্যাঙ্কগুলি সুরক্ষার জন্য এক বা একাধিক shাল (যদি কেউ কোণে থাকত তার কাছে 3 টি sাল ছিল, যদি কেউ কোনও গঠনে একা থাকতেন তবে তার 5 টি sাল ছিল হ্যাঁ, আমি জানি 5 টি ieldাল বহন করা মানুষের পক্ষে অসম্ভব, তবে কোনওভাবে তারা এটি করেছিল ) did এই গঠনটি ব্যবহার করে সমস্ত রোমান সৈন্যদল নিজেরাই সুরক্ষিত ছিল এবং সে সময়ের সবচেয়ে শক্ত প্রতিপক্ষ ছিল।

ইতিহাস বলেছে যে একজন রোমান জেনারেল ছিলেন যিনি বলেছিলেন যে সর্বোত্তম গঠনের আকারটি বর্গ (সারি এবং কলামে বহু সংখ্যক সেনানী) ছিল। সমস্যাটি নির্ধারণ করছিল যে তার বাহিনীকে কতগুলি গঠন (এবং আকার) ভাগ করতে হবে যাতে:

  • কোনও গঠনতন্ত্রের বাইরে কোনও লেজোনারি রেখে যাবেন না (যদিও তিনি একক সৈন্যবাহিনী গঠনের বিষয়টি স্বীকার করেছেন)
  • প্রয়োজনীয় ঝালগুলির পরিমাণ হ্রাস করুন

জেনারেল, কিছু গণিত এবং গণনা করার পরে, তিনি বুঝতে পেরেছিলেন যে এই 2 শর্তটি সম্পাদনের সর্বোত্তম উপায় হ'ল সম্ভাব্য বৃহত্তম বর্গ দিয়ে শুরু করা এবং তারপরে কোনও বাহিনী না রেখে পুনরাবৃত্তি করুন


উদাহরণ:

যদি তার সেনাবাহিনীতে 35 টি সেনা সদস্য থাকে তবে গঠনটি অন্তর্ভুক্ত ছিল

  • একটি 5x5 টি চৌকো স্কোয়ার (এটি সবচেয়ে বড় বর্গ)।

অবশিষ্ট সৈন্যদল সহ (10)

  • একটি 3x3 বর্গক্ষেত্র

অবশিষ্ট সৈন্যদল সহ (1)

  • একটি 1x1 বর্গক্ষেত্র।

শেষে এটি দেখতে এরকম কিছু দেখাবে:

   5x5      
* * * * *        3x3            
* * * * *       * * *      1x1  
* * * * *       * * *       *
* * * * *       * * *       
* * * * *               

অভ্যন্তরীণ অবস্থানের লিওনারিগুলি তাদের aboveাল তাদের মাথার উপরে রেখে উচ্চতর অংশটি coveredেকে রাখে । তাদের কেবল 1 ঝাল প্রয়োজন।

* * * * *                   
* 1 1 1 *       * * *       
* 1 1 1 *       * 1 *       *
* 1 1 1 *       * * *       
* * * * *               

ফ্ল্যাঙ্কগুলিতে লেজিওনারিরা বহন করেছিল ২

* 2 2 2 *                   
2 1 1 1 2       * 2 *       
2 1 1 1 2       2 1 2       *
2 1 1 1 2       * 2 *       
* 2 2 2 *               

কেউ কোণে থাকলে তার কাছে 3াল ছিল

3 2 2 2 3               
2 1 1 1 2       3 2 3       
2 1 1 1 2       2 1 2       *
2 1 1 1 2       3 2 3       
3 2 2 2 3               

কেউ যদি কোনও গঠনে একা থাকেন তবে তার কাছে 5াল ছিল

3 2 2 2 3               
2 1 1 1 2       3 2 3       
2 1 1 1 2       2 1 2       5
2 1 1 1 2       3 2 3       
3 2 2 2 3               

এই গঠনের জন্য মোট sh১ টি sাল প্রয়োজন।


চ্যালেঞ্জ

  • এক্স পরিমাণ পরিমাণ লেজিনারিগুলির জন্য প্রয়োজনীয় shালগুলির পরিমাণ গণনা করুন

ইনপুট

  • সেনাবাহিনীতে সংখ্যালঘুদের পরিমাণ

আউটপুট

  • ঝাল পরিমাণ প্রয়োজন।

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

35 => 71
20 => 44
10 => 26
32 => 72


11
ওয়েল "5 ঝাল বহন" এর গুগল ফলাফল Amazon.com : Best-selling Nipple Shield Carrying Case, Perfect...তাই আমি অনুমান করি সত্যই আমি কখনই জানতে পারব না। তারা আসলে 5 টি ieldাল বহন করেছিল - বা এটিই প্রশ্নটির কাজ করার জন্য ছিল: পি?
ম্যাজিক অক্টোপাস উরান

1
@ ম্যাজিক অ্যাক্টপাস ইউরান আমি খুব নিশ্চিত যে আপনি উত্তরটি জানেন জানেন আমি মনে করি না কারও কাছে 5 টি withাল নিয়ে লড়াইয়ে যাওয়ার সাহস আছে
লুইস ফিলিপ দে জেসুস মুনোজ

4
আমি জেনারেলের গণিত এবং গণনাগুলি ঠিক এই সিদ্ধান্তে পৌঁছাতে পারি না যে বারবার বৃহত্তম বর্গ গ্রহণ করা প্রয়োজনীয় necessaryালকে হ্রাস করে। উদাহরণস্বরূপ, ৩২ টি সৈন্যদল total২ টি মোট ieldালগুলির জন্য ৫ * ৫ + ২ * ২ + 1 * 1 + 1 * 1 + 1 * 1 এর স্কোয়ারের চেয়ে total৪ মোট shালের জন্য দুটি 4 * 4 স্কোয়ারে বিভক্ত হতে পারে।
xnor

6
@ এক্সনর হতে পারে সাধারণ ক্ষেত্রে জেনারেল সঠিক ছিল না, তবে জেনারেল হলেন জেনারেল (যদিও আমাদের জেনারেলাইজ করা উচিত হয়নি)।
pajonk

2
@ এজেফারাডে এস্টারিক্স এবং ভাড়াটে ব্যাজার ?
ক্রিস এইচ

উত্তর:


14

পাইথন 2 , 60 50 48 বাইট

def f(s):n=s**.5//1;return s and(n+4)*n+f(s-n*n)

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

কোড গল্ফ এ নতুন, কিন্তু এটি আমার সেরা দোল!

পদ্ধতি:

যোগফল n^2 + 4nযেখানে nবৃহত্তম বর্গক্ষেত্র সংখ্যার প্রতিটি ইনপুট যে পরিধি এ পর্যন্তই।

সম্পাদনা 1

@ জোনাথন ফ্রেঞ্চকে ধন্যবাদ 50 বাইটে হ্রাস!

সম্পাদনা 2

@ ওওএসকে ধন্যবাদ 2 বাইট সংরক্ষণ int(s**.5)করতে স্যুইচ করা s**.5//1হয়েছে


8
পিপিসিজিতে আপনাকে স্বাগতম!
লুইস ফিলিপ দে জেসুস মুনোজ

2
আমি মনে করি আপনাকে দুটি বাইট সংরক্ষণ করার n*nচেয়ে কম n**2; পাইথন লিখি না বলে এর চেয়ে বেশি আমি বলতে পারি না ...
জিউসেপ


2
int(s**.5)সংক্ষিপ্ত করা যেতে পারে s**.5//1
ovs

2
@ মাইপেটলিয়ন এটি করে। //পাইথন 2 এবং 3 উভয় ক্ষেত্রে ফ্লোর বিভাগ হ'ল উভয় সংস্করণে 3**.5//1মূল্যায়ন করে 1.0
ovs

11

আর , 51 50 বাইট

f=function(x,y=x^.5%/%1)"if"(x,y^2+4*y+f(x-y^2),0)

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

পাশের দৈর্ঘ্যের বর্গক্ষেত্রের অবশ্যই ঝাল থাকতে হবে। আমরা চেয়ে কম বা তার সমান কম বর্ধন করে শূন্য না হওয়া পর্যন্ত ালগুলির সংখ্যা জমে যাচ্ছি।y 2 + 4 y x xyy2+4yxx

প্রমাণ:

পাশের দৈর্ঘ্যের এর একটি নিখুঁত বর্গক্ষেত্র দেওয়া, বর্গের প্রতিটি সদস্যের জন্য আমাদের ঠিক 1 টি ঝাল প্রয়োজন। এর পরে, প্রান্তে প্রতিটি সদস্যের জন্য আমাদের একটি অতিরিক্ত ঝাল প্রয়োজন। আছে সদস্যদের না প্রান্ত তাই আছে, প্রান্ত উপর সদস্যরা। অবশেষে, প্রতিটি কোণার জন্য, আমাদের একটি অতিরিক্ত ঝাল প্রয়োজন। এছাড়াও ক্ষেত্রে কোথা থেকে , আমরা এইভাবে 4. এই সরলীকৃত যোগ করতে পারেন যা সৌভাগ্যবশত এছাড়াও সঠিক মান উৎপাদ যখন , আমাদের সব জন্য এটি ব্যবহার করতে সক্ষম হবেন ।( y - 2 ) 2 y 2 - ( y - 2 ) 2 y = 1 y 2 + 4 y 5 y = 1 yy(y2)2y2(y2)2y=1y2+4y5y=1y


আপনি ব্যাখ্যাকে অনেক সহজ করতে পারেন: প্রতিটি ছাদের বর্গক্ষেত্রটি coveredেকে রাখা দরকার: , এবং প্রতিটি পাশের বর্গক্ষেত্র । এখন এটি সুস্পষ্ট যে এটি একক সৈনিক ক্ষেত্রেও কাজ করে। 4 yy24y
টড সেলাই 21

1
@ToddSewell নিশ্চিত, যে Arnauld এর ব্যাখ্যা , এবং এটি হল অনেক বেশী মার্জিত, কিন্তু এই পথ আমি এটা কাছে, তাই আমি এটা স্টিকিং করছি হয়! ভাগ্যক্রমে, এটি কোনও প্রমাণ-গল্ফ প্রশ্ন নয়।
জিউসেপ 21

10

জাভাস্ক্রিপ্ট (ES7), 34 বাইট

f=n=>n&&(w=n**.5|0)*w+w*4+f(n-w*w)

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

কিভাবে?

প্রতিটি পুনরাবৃত্তিতে, আমরা বৃহত্তম সম্ভাব্য স্কোয়ারের প্রস্থ গণনা করি । এই বর্গক্ষেত্রের জন্য সংখ্যা :গুলিWw=nsw

sw=w2+4w

উদাহরণস্বরূপ, :w=3

(323212323)=(s3=21)(111111111)+(3²=9)(111000000)+(001001001)+(000000111)+(100100100)(4×3=12)

সূত্রটি জন্য হিসাবে ধারণ করে ।w=1s1=5



4

জুলিয়া 0.6 , 36 বাইট

!n=(s=isqrt(n))*s+4s+(n>0&&!(n-s*s))

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

@ জিউসেপের আর উত্তর হিসাবে একই পদ্ধতি ব্যবহার করে , যদিও আমার সেখানে পৌঁছানোর পদ্ধতিতে কম অর্থবোধক চিন্তাভাবনা এবং আরও দর্শনীয় পরিদর্শন জড়িত: 1 এর অভ্যন্তরের বর্গক্ষেত্রটি দ্বারা , যাতে এতে ঝাল রয়েছে। এর চারদিকে, এর 4 টি দেয়াল রয়েছে জন সৈন্য, প্রতিটি 2 টি sাল সহ - যাতে ieldাল যুক্ত হয়। অবশেষে, চারটি কোণে চারটি 3 টি রয়েছে, যাতে 12 টি sাল যুক্ত হয়।n2+4n(n2)(n2)(n2)2n24(n2)2

(n2)2+4(n2)2+43=n2+44n+8n16+12=n2+4n

Ungolfed:

!n = begin       # Assign to ! operator to save bytes on function parantheses
  s = isqrt(n)   # Integer square root: the largest integer m such that m*m <= n
  s * s +
    4 * s +
      (n > 0 &&  # evaluates to false = 0 when n = 0, otherwise recurses
        !(n - s * s))
end

(এটি 35 বাইটে এটিও করা যেতে পারে n>0?(s=isqrt(n))*s+4s+f(n-s*s):0তবে আমি জুলিয়া 0.7 এর জন্য এটি লিখেছিলাম নতুন অবমূল্যায়নের সতর্কতাগুলি এড়াতে চেয়েছিলাম (ফাঁকা স্থানগুলি প্রয়োজন ?এবং :)))


ঝাল কাউন্টের জন্য আরও একটি জটিল ব্যাখ্যা, @ জিউসেপের উত্তর সম্পর্কে আমার মন্তব্য দেখুন।
টড সেলাই 21

2
@ টাডসওয়েল হ্যাঁ, অঞ্চল + ঘের এটি দেখার আরও সুপরিচিত উপায়। যদিও আমি সেভাবে এটি করি নি, এবং জিউসেপের অনুরূপ আমার উদ্দেশ্যটি সূত্রটির সর্বাধিক নিকটতম প্রমাণ দেওয়ার চেয়ে আমার পদ্ধতির বর্ণনা দেওয়া।
সূন্দর - মনিকা পুনরায় ইনস্টল করুন


3

ব্র্যাচল্যাগ , 26 বাইট

0|⟧^₂ᵐ∋N&;N-ℕ↰R∧N√ȧ×₄;N,R+

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

0           % The output is 0 if input is 0
|           % Otherwise,
⟧           % Form decreasing range from input I to 0
^₂ᵐ         % Get the squares of each of those numbers
∋N          % There is a number N in that list
&;N-ℕ       % With I - N being a natural number >= 0 i.e. N <= I
            % Since we formed a decreasing range, this will find the largest such number
↰           % Call this predicate recursively with that difference I - N as the input
R           % Let the result of that be R
∧N√ȧ        % Get the positive square root of N
×₄          % Multiply by 4
;N,R+       % Add N and R to that
            % The result is the (implicit) output

2

রেটিনা 0.8.2 , 28 বাইট

.+
$*
(\G1|11\1)+
$&11$1$1
.

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। ব্যাখ্যা:

.+
$*

দশমিক রূপান্তর।

(\G1|11\1)+

বিজোড় সংখ্যাগুলি মেলাও। গ্রুপ মাধ্যমে প্রথম পাস, \1না অস্তিত্ব এখনো, তাই শুধুমাত্র নেই \G1যা ম্যাচ 1. পরবর্তী ম্যাচ মেলে না মেলাতে পারে, \G1যেহেতু \Gম্যাচ শুরুতে শুধুমাত্র ম্যাচ, তাই এর পরিবর্তে আমরা মেলে আছে 11\1চেয়েও বেশী 2 আগের ম্যাচ আমরা যতটুকু বিজোড় সংখ্যার সাথে মেলে এবং মোট মিলটি তাই বর্গ সংখ্যা, যখন শেষ ক্যাপচারটি এর পাশের দ্বিগুণের চেয়ে কম।

$&11$1$1

প্রতিটি ম্যাচে সাইড শিল্ডগুলি যুক্ত করুন। $&হয় এবং হয় যখন আমরা প্রয়োজন ।n2$12n1n2+4n=n2+2+2(2n1)

.

যোগফল এবং দশমিক রূপান্তর।


2

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

[Ð_#tïÐns4*+Šn-}O

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

ওয়ার্ক- এ্যুওয়ার্ডΔDtïÐns4*+Šn-}O ( 15 বাইট ) কাজ করছে বলে মনে হচ্ছে না .. আমি কী বলতে চাইছি তা দেখতে এটি ডিবাগ-মোডে অনলাইনে চেষ্টা করুন। আমি তা থেকে যেতে আশা [45,'35',25]করতে [45,10]পরে -ও পরবর্তী পুনরাবৃত্তিতে Δ, কিন্তু আপাতদৃষ্টিতে এটি সর্বশেষ মান ছাড়া স্ট্যাক মুছে ফেলা হবে এবং হয়ে [10], খুব শেষে 0 ফলে .. না নিশ্চিত যদি এই আচরণ অথবা একটি বাগ দেয়ার উদ্দেশ্যে করা হচ্ছে .. (সম্পাদনা: এটি উদ্দেশ্য, নীচে দেখুন।)

ব্যাখ্যা:

এছাড়াও ব্যবহার যেখানে অন্যান্য অধিকাংশ উত্তর মত একটি লুপ প্রস্থ হয়।w2+4ww

[        }     # Start an infinite loop:
 Ð             #  Triplicate the value at the top of the stack
  _#           #  If the top is 0: break the infinite loop
 t             #  Take the square-root of the value
               #   i.e. 35 → 5.916...
  ï            #  Remove any digits by casting it to an integer, so we have our width
               #   i.e. 5.916... → 5
   Ð           #  Triplicate that width
    n          #  Take the square of it
               #   i.e. 5 → 25
     s         #  Swap so the width is at the top again
      4*       #  Multiply the width by 4
               #   i.e. 5 → 20
        +      #  And sum them together
               #   i.e. 25 + 20 → 45
 Š             #  Triple-swap so the calculated value for the current width
               #  is now at the back of the stack
               #   i.e. [35,5,45] → [45,35,5]
  n            #  Take the square of the width again
               #   5 → 25
   -           #  Subtract the square of the width from the value for the next iteration
               #   i.e. 35 - 25 → 10
          O    # Take the sum of the stack
               #   i.e. [45,21,5,0,0] → 71

সম্পাদনা: আপাতদৃষ্টিতে যে আচরণটির জন্য আমি উপরে বর্ণিত সেটাই Δউদ্দেশ্য। এখানে দুটি 17 বাইট দ্বারা উপলব্ধ বিকল্প @ Mr.Xcoder যে ব্যবহার করবেন Δনা (এর সাথে global_array মান রেখে ^) এবং তাদের পরে আবার পুনরুদ্ধার (সঙ্গে ¯):

ΔЈtïnα}¯¥ÄDt··+O

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

ΔЈtïnα}¯¥ÄtD4+*O

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


2

ডিসি , 25 বাইট

d[dvddSa*-d0<MLa+]dsMx4*+

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

Squareালগুলি গণনা করে sum(n^2)(মূল সংখ্যা) প্লাস 4*sum(n)হিসাবে প্রতিটি বর্গাকার দৈর্ঘ্যের একটি অনুলিপি স্ট্যাক রেজিস্টারে aযায় এবং তারপরে aপুনরাবৃত্তি "আনরোলস" হিসাবে নিবন্ধ থেকে সমস্ত মান যুক্ত করে ।





1

পিএইচপি , 67 বাইট

<?for($n=$argv[1];$w=(int)sqrt($n);$n-=$w**2)$a+=$w**2+$w*4;echo$a;

এটি চালানোর জন্য:

php -n <filename> <n>

উদাহরণ:

php -n roman_army_shields.php 35

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


-Rবিকল্প ব্যবহার করে , এই সংস্করণটি 60 বাইট :

for(;$w=(int)sqrt($argn);$argn-=$w**2)$a+=$w**2+$w*4;echo$a;

উদাহরণ:

echo 35 | php -nR "for(;$w=(int)sqrt($argn);$argn-=$w**2)$a+=$w**2+$w*4;echo$a;"

(লিনাক্সের উপর, প্রতিস্থাপন "সঙ্গে ')


দ্রষ্টব্য: এটি আরনাউল্ডের উত্তরের দুর্দান্ত সূত্রটি ব্যবহার করছে , আমি এর চেয়ে ছোট কিছু খুঁজে পাচ্ছি না।


1

পাইথ , 19 বাইট

একটি পুনরাবৃত্ত ফাংশন, যা ব্যবহার করে কল করা উচিত y(লিঙ্কটি দেখুন)।

L&b+*Ks@b2+4Ky-b^K2

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

পাইথ , 21 বাইট

পুনর্বিবেচনার ইতিহাসটি বেশ মজার, তবে আপনি যদি আরও দ্রুত সংস্করণ চান তবে এটি অবশ্যই নিশ্চিত করুন :)

sm*d+4deeDsI#I#@RL2./

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

ব্যাখ্যা

sm*d+4deeDsI#I#@RL2./ সম্পূর্ণ প্রোগ্রাম, আসুন ইনপুট কল করুন।
                   । / Q. ইন্টিজার পার্টিশন ধনাত্মক সমস্ত সংমিশ্রণ দেয়
                          পূর্ণসংখ্যাগুলি যা Q পর্যন্ত যুক্ত হয়
               @ আরএল 2 প্রতিটি পার্টিশনের সমস্ত পূর্ণসংখ্যার বর্গমূল নিন।
             আমি # কেবলমাত্র সেই পার্টিশনগুলিকে রাখি যা নীচে আক্রমণ করা হয়:
          এসআই # সমস্ত অ-পূর্ণসংখ্যা বাতিল করা হচ্ছে। এটি মূলত কেবল রাখে
                          পার্টিশনগুলি পুরোপুরি নিখুঁত স্কোয়ারে গঠিত হয়, তবে
                          স্কোয়ারগুলি নিজের পরিবর্তে রাখার পরিবর্তে আমাদের শিকড় রয়েছে।
       eeD সর্বাধিক সর্বোচ্চ দিয়ে পার্টিশনটি পান (পি বলুন)।
 মি প্রতিটি পি জন্য ...
  * ডি + 4 ডি ... ফলন ডি * (ডি + 4) = ডি ^ 2 + 4 ডি, সমস্ত উত্তরে ব্যবহৃত সূত্র।
s এই ম্যাপিংয়ের ফলাফলগুলি এবং সংক্ষিপ্তভাবে আউটপুট যোগ করুন।

1

সুইফট 4 , 111 99 84 78 বাইট

func f(_ x:Int)->Int{var y=x;while y*y>x{y-=1};return x>0 ?(y+4)*y+f(x-y*y):0}

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

মনে হয় পূর্ণসংখ্যার স্কোয়ার রুটটি ম্যানুয়ালি প্রয়োগ করার সময় অন্তর্নির্মিতের চেয়ে অনেক কম ...

অবহেলিত এবং ব্যাখ্যা

// Define a function f that takes an integer, x, and returns another integer
// "_" is used here to make the parameter anonymous (f(x:...) -> f(...))
func f(_ x: Int) -> Int {

    // Assign a variable y to the value of x

    var y = x

    // While y squared is higher than x, decrement y.

    while y * y > x {
        y -= 1
    }

    // If x > 0, return (y + 4) * y + f(x - y * y), else 0.

    return x > 0 ? (y + 4) * y + f(x - y * y) : 0
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.