সেভেনসের খেলা! কে বলল কি?


14

সেভেনসের খেলাটি নিম্নরূপে খেলা হয়: nখেলোয়াড়রা একটি বৃত্তে বসে এবং বাম দিকে (বা প্লেয়ার Aথেকে খেলোয়াড়ের দিকে B) যেতে শুরু করে 1 থেকে গণনা শুরু করে ।

একটি সংখ্যা যখন pএকটি আছে 7এটা অথবা দিয়ে বিভাজ্য 7উপনিত, তারপর প্লেয়ার যারা সংখ্যা স্পোক p-1পর পরবর্তী প্লেয়ার বলেছেন p, বলা উচিত p+1এবং কথা বলার উল্টিয়ে মানুষের অর্ডার। উদাহরণস্বরূপ, প্লেয়ার যদি Bকথা বলেন 6, প্লেয়ার Cবলে 7, Bবলে 8, এবং প্লেয়ার Aবলে 9

দ্রষ্টব্য: যারা বাস্তব জীবনে খেলতে চান তাদের জন্য, যদি কোনও ব্যক্তি কোনও সংখ্যা ভুলে যায় (বা যে সংস্করণে sevensবলা হয় নি, দুর্ঘটনাক্রমে একটি বলে seven), তারা চেনাশোনা থেকে বাদ দেওয়া হয়েছে, তবে আমরা এই চ্যালেঞ্জ থেকে এই বিবরণটি বাদ দেব।

চ্যালেঞ্জটি হ'ল mএকটি ইনপুট nপ্লেয়ারদের জন্য একটি ইনপুট পর্যন্ত সেভেনসের নিখুঁত খেলায় প্রতিটি খেলোয়াড়কে কোন নম্বরটি বলা উচিত তা মুদ্রণ করা ।

একটি উদাহরণ, যেখানে পাঁচ জনের হিসেবে A, B, C, D, এবং E, যে পর্যন্ত না তারা পৌঁছানোর খেলতে হয় 30। তারা এইভাবে খেলে

A: 1 6 8 13    15 19       23    30
B: 2 7*  12    16 18       24
C: 3     11    17*         25
D: 4     10          21*   26 28*
E: 5      9 14*      20 22 27*29

যেখানে sevensচিহ্নিত করা হয়েছে *। নোট যে 27এবং 28, আমরা দুইবার reversing করছি, এবং Play থেকে "স্বাভাবিক হিসাবে" চলতে Dকরার E

অনুগ্রহ করে নোট করুন আউটপুট উপরের ফর্ম্যাটে থাকতে হবে না। কিছুটা স্পষ্টতার জন্য আমি সেভাবে প্রিন্ট করেছি।

বিধি

  • ইনপুটটি কোনও ক্রমে দুটি পূর্ণসংখ্যা, m যা বলার জন্য শেষ সংখ্যাটি nপ্রতিনিধিত্ব করে, খেলোয়াড়ের সংখ্যার প্রতিনিধিত্ব করে।

  • আউটপুট একাধিক অ্যারে বা বিভিন্ন স্ট্রিং হতে পারে, প্রতিটি খেলোয়াড়ের জন্য একটি। আপনি যদি স্ট্রিং ব্যবহার করেন তবে আপনাকে পৃথককারী ব্যবহার করতে হবে না (যদিও আপনি যদি আপনার কোড পরীক্ষায় কিছু যোগ করতে পারেন তবে আমরা পাঠ্যতার প্রশংসা করব)। আপনি যদি এগুলিকে কোনওভাবে কোনও বৃত্তে মুদ্রণ করতে পারেন তবে তা গ্রহণযোগ্যও বটে এবং এটি খুব সুন্দরও হবে।

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

  • এটি কোড গল্ফ, তাই বাইটের ক্ষুদ্রতম সংখ্যাটি জয় করে।

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

উদাহরণ

>>> sevens_string(30, 5, " ")
'1 6 8 13 15 19 23 30'
'2 7 12 16 18 24'
'3 11 17 25'
'4 10 21 26 28'
'5 9 14 20 22 27 29'
>>> sevens_string(42, 5)
'16813151923303539'
'27121618243140'
'31117253241'
'410212628333742'
'591420222729343638'
>>> sevens_array(20, 3)
[1, 4, 7, 10, 13, 15, 19]
[2, 5, 9, 12, 16, 18]
[3, 6, 8, 11, 14, 17, 20]
>>> sevens_array(18, 10)
[1, 13, 15]
[2, 12, 16, 18]
[3, 11, 17]
[4, 10]
[5, 9]
[6, 8]
[7]
[]
[]
[14]

আমি মনে করি গেম প্লেটি ভিজ্যুয়ালাইজ করার উদ্দেশ্যে আরও কার্যকর আউটপুট হ'ল খেলার ক্রম অনুসারে প্লেয়ারদের একটি তালিকা। (উদাহরণস্বরূপ 4 জন খেলোয়াড় এবং সর্বাধিক 15 সহ, যেটি হবে 1 2 3 4 1 2 3 2 1 4 3 2 1 4 1)) আমি বলছি না যে সে চ্যালেঞ্জের ক্ষেত্রে এটি আরও ভাল বা খারাপ: কেবলমাত্র এটি বাস্তব বিশ্বে আরও কার্যকর হতে চাই।
এমএস 210

আমরা ফলাফলটি মেট্রিক্স এবং জিরো সহ প্যাড হিসাবে প্রদর্শন করতে পারি?
ডেনিস

@ ডেনিস খালি অ্যারে রাখতে হবে। ফলাফলটি শূন্য প্যাডেড ম্যাট্রিক্স হতে পারে।
শার্লক

উত্তর:


2

পাইথ, 38 বাইট

Jm[)EA,01VQa@JZ=hG=+Z=W|}\7`G!%G7H_H;J

এটি অনলাইনে চেষ্টা করুন। পরীক্ষা স্যুট.

মূলত আমার পাইথনের উত্তরের একটি বন্দর; সম্ভবত একটি ভাল উপায় আছে। পৃথক লাইনে nখেলোয়াড়ের সংখ্যা গণনা করতে ইনপুট হিসাবে নেয় pএবং ফলাফলকে দ্বিমাত্রিক অ্যারে হিসাবে আউটপুট দেয়।


3

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

s n|elem '7'(show n)||mod n 7==0=(0-)|0<1=id
a=scanl1(+)$map($1)$scanl(.)id$map s[1..]
f m n=mapM_ print[[x+1|x<-[0..m-1],mod(a!!x-1)n==i]|i<-[0..n-1]]
*Main> f 30 5
[1,6,8,13,15,19,23,30]
[2,7,12,16,18,24]
[3,11,17,25]
[4,10,21,26,28]
[5,9,14,20,22,27,29]

2
mod n 7<1পরিবর্তে mod n 7==0এবং s<$>[1..]পরিবর্তে কীভাবে map s[1..]? এছাড়াও, কেন না print[]পরিবর্তে mapM_ print[]?
মাইকেল ক্লেইন

2

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

from turtle import*
def f(m,n,i=0,r=20,d=360):
 k=n
 while i<m:i+=1;fd(r);write(i);bk(r);e='7'[:i%7]in str(i);d*=1-2*e;k=~-e*(1-k)%n;r+=(k<1)*15;rt(d/n)

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

জন্য নমুনা আউটপুট f(22,6)

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


ওহ, এটি চতুর এবং সুন্দর। +1: ডি
শার্লক

1

পাইথন 2, 103 102 101 বাইট

def S(n,p):
 P=0;D=N=1;O=['']*p
 while n:O[P%p]+=`N`;D*=1-2*(N%7<1or'7'in`N`);N+=1;P+=D;n-=1
 print O

এমন একটি ফাংশন সংজ্ঞায়িত করে S(n,p)যা গণনা করতে নম্বর নেয় nএবং খেলোয়াড়ের সংখ্যা pএবং স্ট্রিংগুলির অ্যারে হিসাবে ফলাফল মুদ্রণ করে।

>>> S(42,5)
['16813151923303539', '27121618243140', '31117253241', '410212628333742','591420222729343638']

1

পাইথন 2, 91 90 87 বাইট

def f(m,n):a=d=i=0;r=[()]*n;exec"i+=1;r[a%n]+=i,;d^='7'[:i%7]in`i`;a+=1-2*d;"*m;print r

টিপলগুলির একটি তালিকা মুদ্রণ করে। আইডিয়নে এটি পরীক্ষা করুন ।


1

কেন এটি প্রতিযোগিতামূলক নয়
বুলিন্ট

কারণ চ্যালেঞ্জটি 2015 সালের ডিসেম্বর থেকে এবং জেলি তৈরির পূর্বাভাস দেয়।
ডেনিস

ওহ, স্পষ্টির জন্য ধন্যবাদ!
বিলিন্ট

এটি কি কোনও সরকারী নিয়ম? প্রোগ্রামিং ভাষার উদ্ভাবনের তারিখের বিপরীতে আমি কখনই প্রশ্নের তারিখটি যাচাই করি না।
টমাস ওয়েলার


1

ডায়ালগ এপিএল, 50 47 35 বাইট

{,⌸⍵|+\0,¯1*+\{0=7|⍵×~7∊⍎¨⍕⍵}¨⍳⍺-1}

এটি প্রতিটি খেলোয়াড়কে একটি সারণী হিসাবে বলা সংখ্যাগুলি প্রদর্শন করে, যেখানে প্রথম কলামটি খেলোয়াড়দের গণনা করে। সারিগুলি 0 টি সমান দৈর্ঘ্যে প্যাড করা হয় এবং সংখ্যা ছাড়াই সারি বাদ দেওয়া হয়।

প্রতিপাদন

      f ← {,⌸⍵|+\0,¯1*+\{0=7|⍵×~7∊⍎¨⍕⍵}¨⍳⍺-1}
      30 f 5
0 1  6  8 13 15 19 23 30
1 2  7 12 16 18 24  0  0
2 3 11 17 25  0  0  0  0
3 4 10 21 26 28  0  0  0
4 5  9 14 20 22 27 29  0
      42 f 5
0 1  6  8 13 15 19 23 30 35 39
1 2  7 12 16 18 24 31 40  0  0
2 3 11 17 25 32 41  0  0  0  0
3 4 10 21 26 28 33 37 42  0  0
4 5  9 14 20 22 27 29 34 36 38
      20 f 3
0 1 4 7 10 13 15 19
1 2 5 9 12 16 18  0
2 3 6 8 11 14 17 20
      14 f 10
0  1 13
1  2 12
2  3 11
3  4 10
4  5  9
5  6  8
6  7  0
9 14  0

উল্লেখ্য, শেষ উদাহরণে, 7 এবং 8 বাদ দেওয়া হয়েছে কারণ সেই খেলোয়াড়রা এখনও কিছু বলেনি।


1

রুবি, ৮১

->n,m{g=[""]*n
k=j=0
i=1
m.times{g[j%n]+=w="#{k+=1}"
j+=i=k%7<1||w[/7/]?-i :i}
g}

খুব সোজা বাস্তবায়ন। একটি কুৎসিত ঝকঝকে স্ট্রিং ফেরত দেয় (এটির "#{k+=1} "জন্য আপনি একটি জায়গা যুক্ত করতে পারেন ... ভাল, একটি স্পেসড স্ট্রিং)। আমি ভাবছি যে সেখানে আরও গাণিতিক অ্যালগরিদম আছে কিনা।


1

ফ্যাক্টর 172

আমি হাস্কেলের চেয়ে দীর্ঘ সময় এটি পরিচালনা করতে পেরেছি এবং এপিএলের মতো পাঠযোগ্য! আমি কি কুকি পাব?

[| l! n! | 1 0 0 :> ( p! x! z! ) n iota [ 1vector ] map <circular> n! l iota [ 1 + z! z 7 mod 0 = 55 z 10 >base in? or -1 and 1 or p * p! z x n nth push x p + x! ] each n ]

এটি একটি উদ্ধৃতি (বেনামে ফাংশন) যা ভেক্টরগুলির একটি বিজ্ঞপ্তি ক্রমকে আউটপুট করে। প্রতিটি ভেক্টর প্লেয়ারের সংখ্যা এবং তারপরে সেই প্লেয়ারের সাথে সংখ্যার সাথে শুরু হয়।

30 5 [| l! n! | 1 0 0 :> ( p! x! z! ) n iota [ 1vector ] map <circular> n! l iota [ 1 + z! z 7 mod 0 = 55 z 10 >base in? or -1 and 1 or p * p! z x n nth push x p + x! ] each n ] call

Outputs:
T{ circular
    { seq
        {
            V{ 0 1 6 8 13 15 19 23 30 }
            V{ 1 2 7 12 16 18 24 }
            V{ 2 3 11 17 25 }
            V{ 3 4 10 21 26 28 }
            V{ 4 5 9 14 20 22 27 29 }
        }      ^ Note: first val is player number starting at 0
    }
}

আমি এটি দিয়ে শুরু করেছি:

: game-of-7 ( last-num num-players -- {players:={numbers}} )
  1 1 set ! increment
  0 2 set ! current-index
  iota [ drop V{ } clone ] map <circular>
  swap iota
  [ 1 + ! iotas go 0 to n-1
    dup [ 7 mod 0 = ] [ 10 >base 55 swap in? ] bi or
    [ 1 get -1 * 1 set ] when
    over 2 get swap nth push
    2 get 1 get + 2 set
  ] each ;

যা ভাল ফ্যাক্টর কোড নয়, তবে আরও অনেক পরিষ্কার (হ্যাঁ, আমি সংখ্যাগুলি এখানে পরিবর্তনশীল নাম হিসাবে ব্যবহার করছি, আমার দিকে সেভাবে দেখবেন না!)।


"আমি কি কুকি পাই?" হ্যাঁ তুমি কর.
লিকি নুন

বাহ, অপ্রত্যাশিত ছিল! Ty, @LakakyNun: ডি
এস।

বাহ, আমি এই ভালবাসা! শনাক্ত করুন শনাক্তকারী হিসাবে নম্বর ব্যবহার করার জন্য!
বিড়াল

1
আমি @cat আসলে এটা পছন্দ একটি বিপরীত ভাবে: পি কিন্তু স্থানীয়দের সমাধান দৈর্ঘ্য ইস্যু SYMBOL:অনেক বেশি ভালো: এক চিঠি নাম এবং পরিত্রাণ setএবং get!
ফেডারেশন এস।

0

জাভাস্ক্রিপ্ট (ES6) 100

স্ট্রিং অ্যারে হিসাবে ফলস্বরূপ, কোনও বিভাজনকারী নেই

(m,n)=>(d=>{for(r=[],p=i=0;i++<m;d=i%7&&!~(i+'').search(7)?d:n-d,p=(p+d)%n)r[p]=(r[p]||'')+i})(1)||r

বা আরও পাঠযোগ্য, আরও 3 বাইটের জন্য, অ্যারের অ্যারে হিসাবে ফলাফল ফেরত

(m,n)=>(d=>{for(r=[],p=i=0;i++<m;d=i%7&&!~(i+'').search(7)?d:n-d,p=(p+d)%n)r[p]=[...r[p]||[],i]})(1)||r

পরীক্ষাস্ট্যাক স্নিপেটগুলির নতুন দুর্দান্ত কনসোল বৈশিষ্ট্যটি ব্যবহার করে

S=(m,n)=>(d=>{for(r=[],p=i=0;i++<m;d=i%7&&!~(i+'').search(7)?d:n-d,p=(p+d)%n)r[p]=(r[p]||'')+i})(1)||r

A=(m,n)=>(d=>{for(r=[],p=i=0;i++<m;d=i%7&&!~(i+'').search(7)?d:n-d,p=(p+d)%n)r[p]=[...r[p]||[],i]})(1)||r

console.log(S(42,5))
console.log(A(20,3))


0

জে, 63 60 59 58 56 বাইট

4 :'>:@I.(i.y)=/y|+/\0,_1^+/\(7 e."1 q:,.10#.inv])}.i.x'

প্রতিপাদন

   f =: 4 :'>:@I.(i.y)=/y|+/\0,_1^+/\(7 e."1 q:,.10#.inv])}.i.x'
   30 f 5
1  6  8 13 15 19 23 30
2  7 12 16 18 24  0  0
3 11 17 25  0  0  0  0
4 10 21 26 28  0  0  0
5  9 14 20 22 27 29  0
   42 f 5
1  6  8 13 15 19 23 30 35 39
2  7 12 16 18 24 31 40  0  0
3 11 17 25 32 41  0  0  0  0
4 10 21 26 28 33 37 42  0  0
5  9 14 20 22 27 29 34 36 38
   20 f 3
1 4 7 10 13 15 19
2 5 9 12 16 18  0
3 6 8 11 14 17 20
   14 f 10
 1 13
 2 12
 3 11
 4 10
 5  9
 6  8
 7  0
 0  0
 0  0
14  0
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.