একটি সাধারণ 2048 গেম ক্লোন তৈরি করুন


53

2048 একটি অবিশ্বাস্যভাবে মজাদার এবং আসক্তিযুক্ত খেলা যেখানে লক্ষ্যটি এটিতে 2048 দিয়ে একটি টাইল তৈরি করা।

এখানে গেমটির একটি সংক্ষিপ্ত বিবরণ দেওয়া হল:


একটি তীর কী টিপলে সেই ধাপে সমস্ত ব্লক স্লাইড হয়ে যাবে। উদাহরণস্বরূপ, যদি xকোনও ব্লকের প্রতিনিধিত্ব করে এবং আপনি এই ক্ষেত্রে উপরের তীরটি টিপেছেন:

...x
.x..
..x.
xx..

তাহলে বোর্ড হয়ে যেত

xxxx
.x..
....
....

তদ্ব্যতীত, ব্লকগুলি শুরু হয়, শুরু হয় 2। যদি একই সংখ্যাযুক্ত দুটি ব্লক একসাথে সরানো হয় তবে তারা পরবর্তী সংখ্যায় মার্জ হবে। উদাহরণস্বরূপ, এই বোর্ডে "আপ" টিপুন:

.2..
..22
.2..
....

এটি তৈরি করবে:

.422
....
....
....

এবং তারপরে "ডান" টিপানোর পরে এটি হয়ে উঠবে ..44এবং অতএব ডানদিক টিপলে একটি "8" ব্লক তৈরি হবে, ইত্যাদি।

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


আপনার চ্যালেঞ্জটি হ'ল গল্ফযুক্ত এই গেমটি আবার তৈরি করা!

  • প্রান্তের ক্ষেত্রে যেমন এই বোর্ডে "ডান" টিপুন:

    ....
    .222
    ....
    ....
    

    আপনাকে চাপানো তীর কীটির প্রান্তের নিকটতম টাইলগুলি মার্জ করতে হবে। উদাহরণস্বরূপ, এটি হয়ে উঠবে ..24, কারণ দ্বিতীয় এবং তৃতীয় "2" গুলি ডান প্রান্তের নিকটতম।

  • প্লেয়ার যদি কোনও অবৈধ পদক্ষেপ টি চাপায় (যেমন বোর্ডে "আপ" 2.2. / .... / .... / ....) তবে আপনাকে অবশ্যই এই পদক্ষেপটি উপেক্ষা করতে হবে।

  • মুভিগুলি যে কোনও উপায়ে গ্রহণযোগ্য হতে পারে, যেমন ক্লিক, তীর কী ULRDইত্যাদি etc.

  • টাইলসটি অবশ্যই একই আকারের হবে — "1024" টাইলটি "2" টাইলের সমান আকারের হওয়া উচিত।

  • টাইলস অবশ্যই কোনও উপায়ে আলাদা করতে হবে। উদাহরণস্বরূপ, |1024| 2|1024|1024|এটি একটি সারিটির বৈধ উদাহরণ (ধরে নিলে টাইলগুলি বর্গক্ষেত্র হয়), যদিও 1024 210241024তা নয়।

  • খেলোয়াড় যদি 2048 টাইল তৈরি করে তবে আপনার অবশ্যই "জিতবেন" আউটপুট দিতে হবে, বা কোনও বৈধ পদক্ষেপ না থাকলে "আপনি হারাবেন"।

  • এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জিতবে!


একক অক্ষরের সারি সারি (প্রথম পাঁচটি উদাহরণ) এবং / অথবা পৃথক টাইলস (শেষ একটি) স্বীকার করার পরিবর্তে, আউটপুটকে স্বাভাবিক করার জন্য পৃথক অক্ষরের দুটিতে আরোহণের ক্ষমতা বরাদ্দ করবেন না কেন?
মিলিনন

@ মিলিনন কারণ এটি আসল ২০৪৪ গেমের সাথে যথাসম্ভব সমান বলে মনে করা হচ্ছে (এটি শিরোনামকে অর্থহীন করে তুলবে), এবং এটি কিছু চ্যালেঞ্জকে সরিয়ে ফেলবে।
ডোরকনবব

1
" যদি সেখানে কোনও সম্ভাব্য সংশ্লেষ বাকি না থাকে তবে গেমটি হারিয়ে যায় " কোথাও কোনও "থাকা উচিত নয়" এবং বোর্ডটি পূর্ণ আছে "?
পিটার টেলর

টাইল বিভাজক হিসাবে স্থান কি যথেষ্ট?
জন ডিভোরাক

5
আপনার সমস্ত ক্যোস্টন কীভাবে এক টন ভোট পান তা মজার, কিন্তু অনেক উত্তর নয়।
TheDoctor

উত্তর:


7

এপিএল (ডায়ালগ এপিএল) , 153 150 167 156 বাইট

C←⎕UCS
'you ',{2048∊⍵:'win'
(z/∊n)[?+/z0=∊n←⍵]←2
⎕←4↑¨⍕¨n
1∊(⍉2=⌿n),(2=/n),0=n:∇{⍵≡r←R⍣¯1{4↑C(C¨2/¨t)⎕R(C¨,¨2×t2*⍳11)C⍵~0}¨(R←↓⍉∘⌽⍣⎕)⍵:∇⍵⋄r}n
'lose'}4 40

পদক্ষেপের জন্য অনুরোধ; 0 = বাম, 1 = উপরে 2 = ডান, 3 = ডাউন

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

উজ্জ্বল, সাদা স্থান সহ

C  UCS
'you ', {
    2048  ⍵: 'win'
    n  
    z  0 = n
    (z / n)[? +/z]  2
      4 ↑¨ ⍕¨n
    1  (⍉ 2 =⌿ n) , (2 =/ n) , 0 = n:  {
        R←↓⍉∘⌽⍣⎕
        r  R⍣¯1 {
            t  2 * 11
            4  C (C¨ 2 t)⎕R(C¨  2 × t) C  ~ 0
         R 
          r:  
        r
    } n
    'lose'
} 4 40

ব্যাখ্যা

ফাঁকা রেখাগুলি একটি নতুন লাইন নির্দেশ করে, অন্যদিকে রেখার ব্লকগুলি একটি লাইনের অন্তর্গত

C ← ⎕UCSইউসিএস পয়েন্টে / থেকে রূপান্তর সি নাম ( সি ওডিপয়েন্টের জন্য) এ রূপান্তর করুন

'you ',"আপনি" ফাংশনটির ফলাফলের জন্য প্রস্তুত {...

2048 ∊ ⍵: 'win' যদি আর্গুমেন্টে (বোর্ড) 2048 থাকে, তবে "জয়" ফিরিয়ে দিন

n ← ⍵সঠিক আর্গুমেন্টটি এন-তে নির্ধারণ করুন (যাতে এটি স্থানে পরিবর্তিত হতে পারে)

z ← 0 = ∊n জেড বুলিয়ান তালিকা পান যেখানে সমতল জেড 0

(z / ∊n) জে ফ্ল্যাটেড এন ফিল্টার করে (কেবল জিরোগুলি পেতে)
[? +/z]1 এবং শূন্যের গণনা (বুলিয়ান জেড এর যোগফল ) এর মধ্যে
← 2একটি শূন্য -যুক্ত অবস্থানটি 2 পায় তা নির্ধারণের জন্য একটি এলোমেলো সংখ্যা ব্যবহার করুন

⎕ ←প্রতিটি সংখ্যার স্ট্রিং প্রতিনিধিত্ব করে
4 ↑¨প্রতিটি প্রসারিত থেকে দৈর্ঘ্য -4 (স্পেস সহ) আউটপুট করুন
⍕¨n

1 ∊নিম্নলিখিতগুলির মধ্যে যদি কোনওটি পাওয়া যায়;
(⍉2=⌿n)জোড়াযুক্ত উল্লম্ব সমতা (সংক্ষিপ্ত রূপান্তরিত হওয়া)
,বা (
(2=/n)সংশ্লেষিত ) জোড়ের দিকের অনুভূমিক সমতা
,বা ( জড়িত )
0=nশূন্যগুলি
::
ফাংশনের ফলাফলের জন্য এই ফাংশনটি কল করুন {...

R ← আর (জন্য আর এর OWS আর otated) হল
বিভক্ত-মধ্যে-সারি
⍉∘⌽⍣⎕ সাংখ্যিক ইনপুট জন্য প্রম্পট, তারপর ঘোরাতে (আক্ষরিক অনুভূমিকভাবে মিরর, তারপর জায়গা বদল করুন) যুক্তি (বোর্ড) -90 ° বার ইনপুট সংখ্যা

r ← r ( আর এসল্টের জন্য) আর
R⍣¯1 এর বিপরীত পায় (ফিরে ঘোরান, তারপরে সারিগুলিকে ম্যাট্রিক্সে মার্জ করুন) ফাংশনের ফলাফলের জন্য প্রয়োগ করা হবে ...{

t ← 2 * ⍳11 টি 2¹, 2², 2³, ... 2¹¹ পায় ¹¹

4↑যতক্ষণ না দৈর্ঘ্য 4 ডান দিকে শূন্য সঙ্গে প্যাড
Cধর্মান্তরিত কোড পয়েন্ট নিম্নলিখিত UCS অক্ষর
(C¨2/¨t)⎕R(C¨,¨2×t)Regex প্রতিটি জোড়া প্রতিস্থাপন টি 2 বার সাথে টন সংশ্লিষ্ট UCS অক্ষর, কিন্তু প্রথম রূপান্তর সংখ্যা এতো Regex কাজ করবে
C ⍵~0ছাড়া যুক্তি (বোর্ড) জিরোস (বামে সংক্রামিত), তারপরে ইউসিএস কোড পয়েন্টগুলিতে রূপান্তরিত

[ফাংশন শেষে] প্রতিটি প্রয়োগ
U↓সারির (কিন্তু তাদের পরে একত্রিত) এর
R ⍵ আর যুক্তি (বোর্ড) প্রয়োগ

⍵ ≡ r:যদি আর্গুমেন্টটি (পুরাতন বোর্ডের রাজ্যটি) আর (নতুন বোর্ডের স্টেট) এর সাথে সমান হয় , তবে:
∇⍵অশোধিত যুক্তিতে এই ফাংশনটি কল করুন (কারণ ব্যবহারকারী একটি অবৈধ পদক্ষেপ নিয়েছে), অন্যথায়

rরিটার্ন আর (নতুন বোর্ড রাষ্ট্র)

} n[ফাংশনের সমাপ্তি] n এ প্রয়োগ করা হয়েছে (নতুন বোর্ডের রাজ্য), অন্যথায়

'lose' "হারান" ফিরে

} 4 4 ⍴ 0 [ফাংশনের সমাপ্তি] জিরোসের একটি 4-বাই-4 টেবিলটিতে প্রারম্ভিক (প্রাথমিক অবস্থা)


20

গল্ফস্ক্রিপ্ট, 323 টি অক্ষর

1,16*{16,{1$=!},.,rand=)/()2++\[]*+4/{.['-----']4*'+'*'++'1/*n+:^\{'|''     ':X'|'+4*n++:Y.@{X\`+-5>'|'\+}%'|'+n+Y+Y+^+}%+puts}:P~"wasd":Q{1$.@{Q\?[{zip}{}{-1%zip-1%}{{-1%}%}]=\1$~{0-[{.2$={+)}*}*0...]4<{1|(}%}%\~}:^~=!},:F{0{;'"#{'9.?rand';STDIN.getc()}"'++~.F\?0<}do^[]*.2048?0<.!{'you win'@@}*}{'you lose'@@*0}if}do 4/P;

আপনার যে কীগুলি ব্যবহার wasdকরতে হবে তা হ'ল তবে আপনি কোডের ধ্রুবকটিকে আপনার পছন্দমতো কীগুলিতে পরিবর্তন করতে পারেন। এটি করুণভাবে কোনও অজানা কী বা অবৈধ পদক্ষেপ উপেক্ষা করে। দুর্ভাগ্যক্রমে আপনাকে প্রতিটি কীটির পরে এন্টার টিপতে হবে।

উদাহরণ 2048ascii

256 অক্ষর সমাধান

1,16*{16,{1$=!},.,rand=)/())+\[]*+4/{.{{.9>7*+48+}%n+}%puts}:P~"wasd":Q{1$.@{Q\?[{zip}{}{-1%zip-1%}{{-1%}%}]=\1$~{0-[{.2$={;21+}*}*0...]4<{20%}%}%\~}:^~=!},:F{0{;'"#{'9.?rand';STDIN.getc()}"'++~.F\?0<}do^[]*.10?0<.!{'you win'@@}*}{'you lose'@@*0}if}do 4/P;

এখানে আউটপুট হেক্সাডেসিমেল লগারিদমিক হয় অর্থাত 0ঘোরা ., 1জন্য 2, 2জন্য 4, 3জন্য 8... Bজন্য 2048। যেহেতু আমরা সকলেই হেক্সাডেসিমালস এবং দুটিটির শক্তি জানি তা মোটেই সীমাবদ্ধতা হওয়া উচিত নয়।

উদাহরণ রান (প্রথম চাল):

0000
0000
0010
0000
w
0011
0000
0000
0000
a
2000
0000
0001
0000
s
0000
0000
0100
2001
d
0000
0000
1001
0021
w
1022
0000
0001
0000
a
1301
0000
1000
0000
s
0000
1000
0000
2301
d
0000
1001
0000
0231

টাইলস পৃথক করা উচিত, তবে দুর্দান্ত কাজ।
টিউন প্রোঙ্ক

@ টিউনপ্রংক আমি এতে কাজ করছি working দুর্ভাগ্যক্রমে এটি দুটি স্কোরের দুর্দান্ত শক্তি ভেঙে দেয়।
হাওয়ার্ড

7
+ হ'ল 256 অক্ষর হওয়ার জন্য সীমাহীন
সজ্টআপ ওয়াই

হ্যাঁ ... 2 ^ 7 অক্ষর !!
মুকুল কুমার

1
নিস! গল্ফস্ক্রিপ্টে কীভাবে ইনপুট করবেন তা জানতেন না। ব্যক্তিগতভাবে আমি 256 চর সমাধানটি আরও বেশি সহজে পড়তে পছন্দ করি। এবং আমি বলতে হবে টাইলস হয় পৃথকীকৃত কারণ প্রতিটি টালি শুধুমাত্র 1 টি অক্ষর দীর্ঘ। কোনও দ্বিধা নেই।
ক্লাউদিউ

12

জে - 240 230 216 চর

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

'you ',>lose`win{~$:@".@('o b=:2 t}^:(1-b-:])s ',' b',~1!:1@1:)`w@.((w=:2048 e.,)+(s d-:s u=:l d=:r(&.|:))*s r-:(s=:[:p(2(=/(0,+/^:)@{.,}.),)/@p=:\:=&0)l=:&.|.r=:"1)(o=:[2:1!:2~4<@":"0])b=:2(t=:(?&#{])[:I.0=,)}4 4$0

পঠনযোগ্য সংস্করণ এবং ব্যাখ্যাটি পোস্টে স্বাচ্ছন্দ্যের সাথে ফিট করার জন্য কিছুটা বড়: আপনি এই লিঙ্কটিতে একটি লেখার সন্ধান করতে পারেন ।

ব্যবহার:

   'you ',>lose`win{~$:@".@('o b=:2 t}^:(1-b-:])s ',' b',~1!:1@1:)`w@.((w=:2048 e.,)+(s d-:s u=:l d=:r(&.|:))*s r-:(s=:[:p(2(=/(0,+/^:)@{.,}.),)/@p=:\:=&0)l=:&.|.r=:"1)(o=:[2:1!:2~4<@":"0])b=:2(t=:(?&#{])[:I.0=,)}4 4$0
+----+----+----+----+
|   0|   0|   0|   0|
+----+----+----+----+
|   2|   0|   0|   0|
+----+----+----+----+
|   0|   0|   0|   0|
+----+----+----+----+
|   0|   0|   0|   0|
+----+----+----+----+
r
+----+----+----+----+
|   0|   0|   0|   0|
+----+----+----+----+
|   0|   0|   0|   2|
+----+----+----+----+
|   0|   0|   0|   0|
+----+----+----+----+
|   0|   2|   0|   0|
+----+----+----+----+
u
+----+----+----+----+
|   0|   2|   0|   2|
+----+----+----+----+
|   0|   0|   0|   0|
+----+----+----+----+
|   0|   0|   0|   0|
+----+----+----+----+
|   0|   0|   0|   2|
+----+----+----+----+
d
+----+----+----+----+
|   0|   0|   0|   0|
+----+----+----+----+
|   2|   0|   0|   0|
+----+----+----+----+
|   0|   0|   0|   0|
+----+----+----+----+
|   0|   2|   0|   4|
+----+----+----+----+
l
+----+----+----+----+
|   0|   0|   0|   0|
+----+----+----+----+
|   2|   0|   0|   0|
+----+----+----+----+
|   0|   0|   2|   0|
+----+----+----+----+
|   2|   4|   0|   0|
+----+----+----+----+
d
+----+----+----+----+
|   0|   0|   0|   0|
+----+----+----+----+
|   0|   0|   0|   0|
+----+----+----+----+
|   0|   2|   0|   0|
+----+----+----+----+
|   4|   4|   2|   0|
+----+----+----+----+
r
+----+----+----+----+
|   0|   0|   0|   0|
+----+----+----+----+
|   0|   0|   0|   2|
+----+----+----+----+
|   0|   0|   0|   2|
+----+----+----+----+
|   0|   0|   8|   2|
+----+----+----+----+
d
+----+----+----+----+
|   0|   0|   0|   0|
+----+----+----+----+
|   0|   0|   0|   0|
+----+----+----+----+
|   0|   2|   0|   2|
+----+----+----+----+
|   0|   0|   8|   4|
+----+----+----+----+

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

@ আমি এই দৃ I'm় বিশ্বাসের মধ্যে রয়েছি যে টাইলগুলি কঠোরভাবে বর্গক্ষেত্রের মতো করে দেওয়া অনেকটা খারাপ হতে দেয় তবে এটি ঠিক আছে fixed
অ্যালগরিদমশর্ক

9

গণিত, 484 অক্ষর

খুব কুৎসিত.

m@l=#//.{{x___,0,a_/;a>0,y___}:>{x,a,0,y},{x___,a_/;a>0,a_,y___}:>{x,2 h@a,0,y}}/.h@a_:>a&;{m@u,m@d,m@r}=Composition[#,m@#2,#]&@@@{{Thread,l},{Reverse,u},{Thread,d}};a=ReplacePart[#,RandomChoice@Position[#,0]->2]&;g=a@ConstantArray[0,{4,4}];EventHandler[Dynamic[GraphicsGrid@Map[Graphics@Text@#&,g,{2}]],(#2<>"ArrowKeyDown":>If[g!=m[#]@g,g=a[m[#]@g];Which[And@@(g==m[#]@g&/@{u,l,r,d}),Print@"you lose",!FreeQ[g,2048],Print@"you win"]])&@@@{{l,"Left"},{r,"Right"},{u,"Up"},{d,"Down"}}]

তীর কী দ্বারা নিয়ন্ত্রিত।

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


Ungolfed:

move[Left] = # //. {{x___, 1, a_ /; a > 1, y___} :> {x, a, 1, y},
      {x___, a_ /; a > 1, a_, y___} :> {x, 2 Hold@a, 1, y}} /. 
    Hold@a_ :> a &;
move[Up] = Composition[Transpose, move[Left], Transpose];
move[Down] = Composition[Reverse, move[Up], Reverse];
move[Right] = Composition[Transpose, move[Down], Transpose];
addTile = ReplacePart[#, RandomChoice@Position[#, 1] -> 2] &;
keyDown = If[grid != move[#][grid], grid = addTile[move[#][grid]];
    Which[And @@ (grid == move[#][grid] & /@ {Left, Right, Up, Down}),
      status = "Can't move...",
     ! FreeQ[grid, 2048], status = "2048!"]] &;
grid = addTile@ConstantArray[1, {4, 4}];
status = "";
EventHandler[Dynamic[ArrayPlot[Log2@grid/11,
   ColorFunction -> "StarryNightColors",
   ColorFunctionScaling -> False,
   Mesh -> All,
   Epilog -> {MapIndexed[
      Text[Style[#1, "Section"] //. 1 -> "", #2 - {0.5, 0.5}] &, 
      Transpose@Reverse@grid, {2}],
     Text[Style[status, "Section"], {2, 2}]}]],
 {"LeftArrowKeyDown" :> keyDown[Left],
  "RightArrowKeyDown" :> keyDown[Right],
  "UpArrowKeyDown" :> keyDown[Up],
  "DownArrowKeyDown" :> keyDown[Down]}]

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


2
আমি অবিনাশীদের চেহারা পছন্দ!
টমসডিং

7

ডেলফি এক্সই 3 (ওয়াহা অনেকের কাছে {হুইস্পারগুলিতে 9 2.979 বাইট -> অবরুদ্ধ 4.560 বাইট)

আমি এই "2048 কোডটি উপন্যাসটি
বলতে চাই " আমার চেয়ে বেশি বাইট ব্যবহার করা হয়েছে তবে এটি কাজ করে এবং মজাদার হয়েছিল।

আমি পরে এটিকে আরও খাটো করার চেষ্টা করছি।

খেলা চলছে

খেলাাটি

Golfed

uses System.SysUtils,Windows;type TDir=(dUp,dDown,dLeft,dRight,dInv);const t='_____________________________';er='|      |      |      |      |';nr='| %s | %s | %s | %s |';br='|______|______|______|______|';fn='%d';procedure mycls;var S:String;H:DWORD;CO:_COORD;begin H:=GetStdHandle(STD_OUTPUT_HANDLE);CO.X:=0;CO.Y:=0;SetConsoleCursorPosition(H,CO);S:=StringOfChar(Chr(32),2000);Writeln(S);SetConsoleCursorPosition(H,CO);end;var a:array[1..4,1..4]of integer;c,rx,ry,i,j:int8;m:string;GameOver,gs:boolean;function hz:boolean;var b,q:int8;begin for b:=1to 4do for q:=1to 4do if a[b,q]=0 then exit(true);end;function HM:boolean;var b,q:int8;begin if hz then exit(true);for b:=1to 4do for q:=1to 4do begin c:=a[b,q];if c in [a[b-1,q],a[b+1,q],a[b,q-1],a[b,q+1]] then result:=true;end;end;procedure rn(out n,m:int8);var z:int8;begin z:=0;repeat n:=Random(4)+1;m:=Random(4)+1;z:=z+1;until(a[n,m]=0)and(z>=3);end;function gn(n:integer):string;begin if n=0 then exit('    ');Result:=IntToStr(n).PadLeft(4,' ');end;procedure pm(d:TDir;score:boolean);var b,q,z:int8;begin case d of dUp:for z:=1to 3do for b:=1to 4do for q:=1to 3do begin if score then begin if a[q,b]=a[q+1,b] then begin a[q,b]:=a[q,b]+a[q+1,b];a[q+1,b]:=0;end;end else if a[q,b]=0 then begin a[q,b]:=a[q+1,b];a[q+1,b]:=0;end;end;dDown:for z:=1to 3do for b:=1to 4do for q:=2to 4do begin if score then begin if a[q,b]=a[q-1,b] then begin a[q,b]:=a[q,b]+a[q-1,b];a[q-1,b]:=0;end;end else if a[q,b]=0 then begin a[q-1,b]:=a[q,b];a[q-1,b]:=0;end;end;dLeft:for z:=1to 3do for q:=1to 4do for b:=1to 3do begin if score then begin if a[q,b]=a[q,b+1] then a[q,b]:=a[q,b]+a[q,b+1];a[q,b+1]:=0;end else if a[q,b]=0 then begin a[q,b]:=a[q,b+1];a[q,b+1]:=0;end;end;dRight:for z:=1to 3do for q:=1to 4do for b:=2to 4do begin if score then begin if a[q,b]=a[q,b-1] then begin a[q,b]:=a[q,b]+a[q,b-1];a[q,b-1]:=0;end;end else if a[q,b]=0 then begin a[q,b]:=a[q,b-1];a[q,b-1]:=0;end;end;end;end;function gd(s:string):TDir;begin s:=lowercase(s);if s='u'then exit(dUp);if s='d'then exit(dDown);if s='l'then exit(dLeft);if s='r'then exit(dRight);exit(dInv)end;procedure dg;var z:int8;begin writeln(t);for z:=1to 4do begin writeln(er);Writeln(Format(nr,[gn(a[z,1]),gn(a[z,2]),gn(a[z,3]),gn(a[z,4])]));Writeln(br);end;end;function hw:boolean;var b,q:int8; begin for b:=1to 4do for q:=1to 4do if a[b,q]=2048 then result:=true;end;function dm:boolean;var d:Tdir;begin d:=gd(m);if d=dInv then if not gs then exit(false)else exit(true);pm(d,false);pm(d,true);pm(d,false);exit(true);end;begin gs:=true;m:='';for j:=1to 4do for i:=1to 4do begin a[i,j]:=0;end;rx:=0;ry:=0;rn(rx,ry);a[rx,ry]:=2;repeat if (dm) then begin if hz then begin rn(rx,ry);a[rx,ry]:=2;end;gs:=false;end;mycls;GameOver:=true;if hw then WriteLn('You have won!')else if HM then begin GameOver:=false;dg;writeln('Direction: [U]=up, [D]=Down, [L]=Left, [R]=Right');readln(m);end else WriteLn('Game Over, no more possible moves :('#13#10'Try again next time')until GameOver;readln;end.

Ungolfed

uses
  System.SysUtils,Windows;
type
  TDir=(dUp,dDown,dLeft,dRight,dInv);
const
  t='_____________________________';
  er='|      |      |      |      |';
  nr='| %s | %s | %s | %s |';
  br='|______|______|______|______|';
  fn='%d';
procedure mycls;
var
  S:String;
  H:DWORD;
  CO:_COORD;
begin
  H:=GetStdHandle(STD_OUTPUT_HANDLE);
  CO.X:=0;
  CO.Y:=0;
  SetConsoleCursorPosition(H,CO);
  S:=StringOfChar(Chr(32),2000);
  Writeln(S);
  SetConsoleCursorPosition(H,CO);
end;
var
  a:array[1..4,1..4]of integer;
  c,rx,ry,i,j:int8;
  m:string;
  GameOver,gs:boolean;
function hz:boolean;
var b,q:int8;
begin
  for b:=1to 4do
    for q:=1to 4do
      if a[b,q]=0 then exit(true);
end;
function HM:boolean;
var b,q:int8;
begin
  if hz then exit(true);
  for b:=1to 4do
    for q:=1to 4do
    begin
      c:=a[b,q];
      if c in [a[b-1,q],a[b+1,q],a[b,q-1],a[b,q+1]] then
        result:=true;
    end;
end;
procedure rn(out n,m:int8);
var z:int8;
begin
z:=0;
  repeat
    n:=Random(4)+1;
    m:=Random(4)+1;
    z:=z+1;
  until(a[n,m]=0)and(z>=3);
end;
function gn(n:integer):string;
begin
  if n=0 then exit('    ');
  Result:=IntToStr(n).PadLeft(4,' ');
end;
procedure pm(d:TDir;score:boolean);
var
  b,q,z:int8;
begin
  case d of
    dUp:
      for z:=1to 3do
        for b:=1to 4do
          for q:=1to 3do
          begin
            if score then
            begin
              if a[q,b]=a[q+1,b] then
              begin
                a[q,b]:=a[q,b]+a[q+1,b];a[q+1,b]:=0;
              end;
            end
            else
              if a[q,b]=0 then
              begin
                a[q,b]:=a[q+1,b];a[q+1,b]:=0;
              end;
          end;
    dDown:
      for z:=1to 3do
        for b:=1to 4do
          for q:=2to 4do
          begin
            if score then
            begin
              if a[q,b]=a[q-1,b] then
              begin
                a[q,b]:=a[q,b]+a[q-1,b];a[q-1,b]:=0;
              end;
            end
            else
              if a[q,b]=0 then
              begin
                a[q-1,b]:=a[q,b];
                a[q-1,b]:=0;
              end;
          end;
    dLeft:
      for z:=1to 3do
        for q:=1to 4do
          for b:=1to 3do
          begin
            if score then
            begin
              if a[q,b]=a[q,b+1] then
                a[q,b]:=a[q,b]+a[q,b+1];a[q,b+1]:=0;
            end
            else
              if a[q,b]=0 then
              begin
                a[q,b]:=a[q,b+1];a[q,b+1]:=0;
              end;
          end;
    dRight:
      for z:=1to 3do
        for q:=1to 4do
          for b:=2to 4do
          begin
            if score then
            begin
              if a[q,b]=a[q,b-1] then
              begin
                a[q,b]:=a[q,b]+a[q,b-1];a[q,b-1]:=0;
              end;
            end
            else
              if a[q,b]=0 then
              begin
                a[q,b]:=a[q,b-1];a[q,b-1]:=0;
              end;
          end;
  end;
end;

function gd(s:string):TDir;
begin
  s:=lowercase(s);
  if s='u'then exit(dUp);
  if s='d'then exit(dDown);
  if s='l'then exit(dLeft);
  if s='r'then exit(dRight);
  exit(dInv)
end;
procedure dg;
var z:int8;
begin
  writeln(t);
  for z:=1to 4do
  begin
    writeln(er);
    Writeln(Format(nr,[gn(a[z,1]),gn(a[z,2]),gn(a[z,3]),gn(a[z,4])]));
    Writeln(br);
  end;
end;
function hw:boolean;
var b,q:int8;
begin
  for b:=1to 4do
    for q:=1to 4do
      if a[b,q]=2048 then
        result:=true;
end;
function dm:boolean;
var
  d:Tdir;
begin
  d:=gd(m);
  if d=dInv then if not gs then exit(false)else exit(true);
  pm(d,false);
  pm(d,true);
  pm(d,false);
  exit(true);
end;
begin
    gs:=true;m:='';
    for j:=1to 4do
      for i:=1to 4do
      begin
        a[i,j]:=0;
      end;
   rx:=0;ry:=0;
   rn(rx,ry);
   a[rx,ry]:=2;
  repeat
    if (dm) then
    begin
      if hz then
      begin
        rn(rx,ry);
        a[rx,ry]:=2;
      end;
      gs:=false;
    end;
    mycls;
    GameOver:=true;
    if hw then
      WriteLn('You have won!')
    else if HM then
    begin
      GameOver:=false;
      dg;
      writeln('Direction: [U]=up, [D]=Down, [L]=Left, [R]=Right');
      readln(m);
    end
    else
      WriteLn('Game Over, no more possible moves :('#13#10'Try again next time')
  until GameOver;
  readln;
end.

2
2.979 বাইট ? এটি কি কিলোবাইট হওয়ার কথা?
হোশেচ 250

9
বিশ্বের কিছু জায়গাগুলি আমরা পিরিয়ডগুলি যেভাবে ব্যবহার করি সংখ্যায় কমা ব্যবহার করে, যদি বিপরীতটি সত্য হয় তবে আমি অবাক হওয়ার মতোও না।
ভূগর্ভস্থমোরাইল

1
@undergroundmonorail সত্য, ইউরোপ সংখ্যা এক হাজার বারো কমা ছয় প্রায়ই আমেরিকান 1,012.6 :) পরিবর্তে 1.012,6 যেমন লেখা আছে
tomsmeding

কোডগল্ফ আমাকে শিখিয়েছে যে আপনি বিনিময় করতে পারেন ,এবং .সংখ্যায়ও!
তেজস কালে

1
ভাল এই প্রশ্নটির একটি লিডারবোর্ড নেই ...
প্যাট্রিক রবার্টস

7

সি (সি 89 স্ট্যান্ডার্ড), 881 বাইট

সরানোর জন্য নষ্ট কীগুলি ব্যবহার করুন। G99 এ সংকলন করুন এবং ডিফল্টরূপে ঝনঝন হয়ে থাকুন, যদি না C99 স্ট্যান্ডার্ড (আমার ধারণা) তে সেট না থাকে। Termios.h ব্যবহার করে, লিনাক্স এবং ম্যাকস এক্সে কাজ করে। উইন্ডোজ সম্পর্কে নিশ্চিত নয়।

#include<termios.h>
#define R return
#define H while
char t[17],*Q,*W="adws",D,x,y,X;m(x,y){R!D?x+y*4:D==1?3-x+y*4:D==2?y+x*4:y+(3-x)*4;}c(){for(y=0;y<3;++y)for(x=0;x<3;++x){D=t[x+y*4];if(t[x+1+y*4]==D||t[x+4+y*4]==D)x=y=9;}R y>4;}d(){if(strlen(t)==16)R 0;H(t[x=(rand()&15)]);R t[x]=1;}r(x){putchar(x);}b(){y=0;r(10);H(y<21)r(y++%5?45:43);r(10);}f(){for(x=0;x<17;++x)if(X=(t[x]==11))x=32;R x<18;}struct termios z;main(){srand(time(tcgetattr(0,&z)));z.c_lflag&=~ICANON;tcsetattr(0,0,&z);H(f()&&(d()||c())){x=0;H(x<16){if(!(x&3)){b();r('|');}if(y=t[x++])printf("%4u|",1<<y);else printf("    |");}b();r(10);H(!(Q=strchr(W,getchar())));D=Q-W;for(y=0;y<4;++y)for(X=0,x=1;x<4;++x)if(t[m(x,y)]){if(t[m(x,y)]==t[m(X,y)]&&t[m(X,y)]++)t[m(x,y)]=0;X=x;}do{for(y=0;y<4;++y)for(x=0;x<3;++x)if(!t[m(x,y)]&&(X=t[m(x+1,y)])){t[m(x,y)]=X;t[m(x+1,y)]=0;x=y=9;}}H(y>4);}puts(X?"you win":"you lose");}

কিছু লাইনে ভাঙা:

#include<termios.h>
#define R return
#define H while
char t[17],*Q,*W="adws",D,x,y,X;m(x,y){R!D?x+y*4:D==1?3-x+y*4:D==2?y+x*4:y+(3-x)*4;}
c(){for(y=0;y<3;++y)for(x=0;x<3;++x){D=t[x+y*4];if(t[x+1+y*4]==D||t[x+4+y*4]==D)x=y=9;}R y>4;}
d(){if(strlen(t)==16)R 0;H(t[x=(rand()&15)]);R t[x]=1;}
r(x){putchar(x);}
b(){y=0;r(10);H(y<21)r(y++%5?45:43);r(10);}
f(){for(x=0;x<17;++x)if(X=(t[x]==11))x=32;R x<18;}
struct termios z;
main(){srand(time(tcgetattr(0,&z)));z.c_lflag&=~ICANON;tcsetattr(0,0,&z);
H(f()&&(d()||c())){x=0;H(x<16){if(!(x&3)){b();r('|');}if(y=t[x++])printf("%4u|",1<<y);else printf("    |");}
b();r(10);H(!(Q=strchr(W,getchar())));D=Q-W;for(y=0;y<4;++y)for(X=0,x=1;x<4;++x)
if(t[m(x,y)]){if(t[m(x,y)]==t[m(X,y)]&&t[m(X,y)]++)t[m(x,y)]=0;X=x;}
do{for(y=0;y<4;++y)for(x=0;x<3;++x)if(!t[m(x,y)]&&(X=t[m(x+1,y)]))
{t[m(x,y)]=X;t[m(x+1,y)]=0;x=y=9;}}H(y>4);}puts(X?"you win":"you lose");}

চেহারা:

+----+----+----+----+
|   8|   4|   8|   2|
+----+----+----+----+
|    |  16|    |    |
+----+----+----+----+
|    |   2|    |    |
+----+----+----+----+
|    |    |    |   2|
+----+----+----+----+

এটি নিশ্চিতভাবে উন্নত করা যেতে পারে।


5

জাভা: 1346 1269

সম্পাদনা করুন যদিও এই প্রতিযোগিতাটি সম্পন্ন হয়েছে, কখনও কখনও যখন উন্নতি করা যায় তখন আমি যেতে দিতে পারি না। এই সংস্করণটি হতাশ, মধ্যবর্তী, জায়গায় জায়গায় ভাঁজ ফাংশন, বেশিরভাগ booleanধরণের উচ্ছেদ ছাড়াও যেখানে এগুলি ছাড়া আরও ভার্বোজ হবে এবং সেখানে কয়েকটি অতিরিক্ত অক্ষর কাটাতে সামান্য ছোট কোষ (5x5 এর পরিবর্তে 4x4) নিয়ে গর্বিত।

সুতরাং এটি একটি মজা ছিল। পোস্ট করার জন্য ধন্যবাদ! অগল্ফড, এটি ছিল 2856 বাইট, গল্ফড আমি এটি সঙ্কুচিত করে 1346 বাইটে রেখেছি। জাভা হওয়ায় আমি জিততে যাচ্ছি না, তবে আমি একটি ভাল প্রদর্শন করতে চাই। টাইল যোগ দেয় এবং চালগুলি পরিচালনা করার জন্য একটি "সাধারণ" রোল-আপ ফাংশনটি সন্ধান করা মজাদার ছিল - আপনি অবশ্যই এই সমাধানের জন্য আমার গিথুব সংগ্রহস্থলের প্রতিশ্রুতিগুলি দেখে আমার "অগ্রগতি" পরীক্ষা করে দেখতে পারেন ।

Golfed:

import java.util.*;class T{public static void main(String[]a){(new T()).s();}int[][]b=new int[4][4];int d,p,i,j,x,y,v,q,r;boolean I,V;void s(){p();do{d();do{char a=(new Scanner(System.in)).nextLine().charAt(0);y=a=='u'?f(0,1):a=='d'?f(1,1):a=='l'?f(0,0):a=='r'?f(1,0):0;}while(y<1);p();}while((x=n())>0);d();c("you "+(x<0?"win":"lose"));}int h(){for(int[]y:b)for(int x:y)if(x<2)return 1;return 0;}int n(){for(y=0;y<4;y++){for(x=0;x<4;x++){i=b[y][x];if(x<3&&i==b[y][x+1]||y<3&&i==b[y+1][x])return 1;if(i>2047)return -1;}}return h();}int f(int w,int z){I=w>0;V=z>0;for(i=d=0;i<4;i++){p=I?3:0;for(j=1;j<4;){v=V?i:j;x=I?3-v:v;v=V?j:i;y=I?3-v:v;q=V?x:p;r=V?p:y;if(b[y][x]==0||p==(V?y:x))j++;else if(b[r][q]==0){d+=b[r][q]=b[y][x];b[y][x]=0;j++;}else if(b[r][q]==b[y][x]){d+=b[r][q]*=2;b[y][x]=0;p+=I?-1:1;j++;}else p+=I?-1:1;}}return d;}int v(){return(new Random()).nextInt(4);}void p(){if(h()<1)return;do{x=v();y=v();}while(b[x][y]>0);b[x][y]=2;}void c(String a){System.out.println(a);}String l(char n,char m){String s=""+n;for(i=0;i<4;i++){for(j=0;j<4;j++)s+=m;s+=n;}return s;}void d(){c(l('+','-'));String p[]=new String[5];for(int[]y:b){p[0]=p[1]=p[3]=l('|',' ');p[2]="";for(x=0;x<4;)p[2]+=String.format("|%4d",y[x++]);p[2]+="|";p[4]=l('+','-');for(String q:p)c(q);}}}

অবহেলিত: ( নতুন ভাঁজ ফাংশনগুলির জন্য একটি সূচনা-ভিত্তিক পরীক্ষা সহ একটি আপডেট সংস্করণে এই প্রকল্পের জন্য আমার গিথুব সংগ্রহস্থলটি পরীক্ষা করুন)

import java.util.*;
class Twe {
    public static void main(String[] a){
        (new Twe()).start();
    }
    int[][] board=new int[4][4];
    void start(){
        int x;
        placeTwo();
        do{
            drawBoard();
            resolve();
            placeTwo();
        }while((x=notDone())>0);
        drawBoard();
        wrapup(x);
    }
    int hasFree(){
        for(int[]y:board)
            for(int x:y)
                if(x<2)return 1;
        return 0;
    }
    int notDone(){
        int moves,x,y;
        for(moves=y=0;y<4;y++){
            for(x=0;x<4;x++){
                else if(x<3&&board[y][x]==board[y][x+1]||
                        y<3&&board[y][x]==board[y+1][x])moves++;
                if(board[y][x]>2047)return -1;
            }
        }
        return hasFree()+moves;
    }
    void wrapup(int k){
        if(k<0){
            chalk("you win",true);
        }else{
            chalk("you lose",true);
        }
    }
    void resolve(){
        do{
            switch((new Scanner(System.in)).nextLine().charAt(0)){
                case 'u':
                    if (fold(false,true)>0)return;
                    break;
                case 'd':
                    if (fold(true, true)>0)return;
                    break;
                case 'l':
                    if (fold(false,false)>0)return;
                    break;
                case 'r':
                    if (fold(true,false)>0)return;
                    break;
                case 'z':
                    board[0][0]=2048; // instant win;
                    return;
            }
        } while(true);
    }
    // false,true  = up
    // true, true  = down
    // false,false = left
    // true, false = right
    int fold(boolean inv, boolean vert){
        int didMove=0;
        int nextSpot,x,y,v,q,r;
        int[][] nb = new int[4][4];
        for(int i=0;i<4;i++){
            nextSpot=inv?3:0;
            for(int j=0;j<4;j++){
                v=vert?i:j;
                x=inv?3-v:v;
                v=vert?j:i;
                y=inv?3-v:v;
                q=vert?x:nextSpot;
                r=vert?nextSpot:y;
                if(board[y][x]>0){
                    if(nb[r][q]<1){
                        nb[r][q]=board[y][x];
                        didMove+=(inv?-1:1)*(vert?y-r:x-q);
                    }else if(nb[r][q]==board[y][x]){
                        nb[r][q]*=2;
                        nextSpot+=inv?-1:1;
                        didMove++;
                    }else{
                        nextSpot+=inv?-1:1;//suckage
                        q=vert?x:nextSpot;
                        r=vert?nextSpot:y;
                        nb[r][q]=board[y][x];
                        didMove+=(inv?-1:1)*(vert?y-r:x-q);
                    }
                }
            }
        }
        board=nb;
        return didMove;
    }
    int vec(){
        return (new Random()).nextInt(4);
    }
    void placeTwo(){
        if (hasFree()<1) return;
        int x,y;
        do{
            x=vec();y=vec();
        }while(board[x][y]>0);
        board[x][y]=2;
    }
    void chalk(String a, boolean nl){
        System.out.print(a+(nl?"\n":""));
    }
    String fill(char node, char mid){
        String str = ""+node;
        for(int i=0;i<4;i++){
            for(int j=0;j<5;j++)
                str+=mid;
            str+=node;
        }
        return str;
    }
    void drawBoard(){
        chalk(fill('+','-'),true);
        String p[] = new String[6];
        for(int[]y:board){
            p[0]=p[1]=p[3]=p[4]=fill('|',' ');
            p[2]="";
            for(int x=0;x<4;){
                p[2]+=adjust(y[x++]);
            }
            p[2]+="|";
            p[5]=fill('+','-');
            for (String q:p){
                chalk(q,true);
            }
        }
    }
    String adjust(int a){
        return String.format("|%5d",a);
    }
}

প্রোগ্রাম ব্যবহার করা সহজ। নির্মাণ এবং চালানোর জন্য:

javac T.java
java T

uভাঁজ করতে, rডানদিকে dভাঁজ করতে, নীচে ভাঁজ করতে, lবাম দিকে ভাঁজতে টিপুন । অন্য কোনও কী উপেক্ষা করা হবে, অবৈধ (কোনও ফলাফল নয়) পদক্ষেপগুলি উপেক্ষা করা হবে। জাভা enterহওয়ায় লাইন বাফারটি ফ্লাশ করতে প্রতিটি কী-এর পরে টিপুন । নিয়ম অনুসারে প্রয়োজনীয় হিসাবে, আপনি যদি প্রোগ্রামের আউটপুটগুলি জিতেন you win, যদি আপনি প্রোগ্রামের আউটপুটগুলি হারিয়ে ফেলেন you lose। নিউ 2এর খোলা টাইল এলোমেলোভাবে স্থাপিত হয়। মার্জগুলি বর্ণিত বিধিগুলি অনুসরণ করে। ঘরগুলি 4x4 অক্ষর, প্রতিটি কক্ষের চারপাশে সীমানা সহ। অবশ্যই, যদি আমি কিছু গণ্ডগোলিত হয়ে থাকি তবে আমি একটি মন্তব্য করুন এবং আমি এটিকে ঠিক করে নেব।

উদাহরণ আউটপুট:

$ java T
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   2|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
u
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   2|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   2|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
l
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   2|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   2|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   2|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
u
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   4|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   2|   2|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
l
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   4|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   4|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   2|
|    |    |    |    |
+----+----+----+----+
u
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   8|   2|   0|   2|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
l
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   8|   4|   2|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
l
u
d
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   2|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   8|   4|   2|   0|
|    |    |    |    |
+----+----+----+----+
d
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   2|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   8|   4|   4|   0|
|    |    |    |    |
+----+----+----+----+
l
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   2|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   2|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   8|   8|   0|   0|
|    |    |    |    |
+----+----+----+----+
l
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   2|   2|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   2|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|  16|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
d
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   2|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   4|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|  16|   2|   0|   0|
|    |    |    |    |
+----+----+----+----+
d
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   0|   0|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|   4|   2|   0|   0|
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
|    |    |    |    |
|  16|   4|   0|   0|
|    |    |    |    |
+----+----+----+----+

2

লুয়া, 622 616 615 612 592 590 575 বাইট

বাম, নীচে, ডান, উপরে (নামপ্যাড ইনপুট জন্য তৈরি) সাথে 1,2,3,4 সম্পর্কিত সম্পর্কিত জন্য ক্যারিগুলি জিজ্ঞাসা; খারাপ ইনপুট দিলে ক্র্যাশ হয়।

ফাঁকা স্কোয়ারগুলি '0 এর হিসাবে মুদ্রিত হয়।

b={('\0'):rep(16):byte(1,16)}c=1 a=print h=unpack while{}do if c then c=z
e={}for i=1,16 do e[#e+1]=0==b[i]and i or z end _=#e==0 and
a'you lose'b[e[math.random(#e)]]=2 l=('+----'):rep(4)..'+\n'm=l:gsub('-',' ')for
i=1,13,4 do a(l..m..m..m..('+%4d+%4d+%4d+%4d+'):format(h(b,i)))end a(l)end c=z
u,v,w=h({4,1,-4,1,-4,16,4,-1,1,1,4,-4},3*io.read()-2)for i=1,4 do o=-1 for j=2,4
do if 0~=b[u*i+v*j+w]then for k=1-j,o do p=u*i-v*k+w q=p+v r=b[p]if r==0 then
b[p]=b[q]b[q]=r c=1 o=k elseif r==b[q]then _=r==1024 and a'you win'b[p]=r*2
b[q]=0 c=1 o=k-1 break end end end end end end 

উদাহরণ আউটপুট:

+----+----+----+----+
+    +    +    +    +
+    +    +    +    +
+    +    +    +    +
+   2+   0+   0+   0+
+----+----+----+----+
+    +    +    +    +
+    +    +    +    +
+    +    +    +    +
+   0+   0+   0+   0+
+----+----+----+----+
+    +    +    +    +
+    +    +    +    +
+    +    +    +    +
+   0+   0+   0+   0+
+----+----+----+----+
+    +    +    +    +
+    +    +    +    +
+    +    +    +    +
+   0+   0+   0+   0+
+----+----+----+----+

2
+----+----+----+----+
+    +    +    +    +
+    +    +    +    +
+    +    +    +    +
+   0+   2+   0+   0+
+----+----+----+----+
+    +    +    +    +
+    +    +    +    +
+    +    +    +    +
+   0+   0+   0+   0+
+----+----+----+----+
+    +    +    +    +
+    +    +    +    +
+    +    +    +    +
+   0+   0+   0+   0+
+----+----+----+----+
+    +    +    +    +
+    +    +    +    +
+    +    +    +    +
+   2+   0+   0+   0+
+----+----+----+----+

0

ক্লোজার: 599

একটি REPL এ এটি চালান

golfed

(defn i[b](let[f(into[](flatten b))z(seq(keep-indexed #(when(zero? %2)%1)f))]
(cond(some #{2048}f)(pr "you win")(empty? z)(pr "game over"):e(partition 4
(assoc f(rand-nth z)2)))))(def r #(remove zero? %))(loop[b(i (partition 4
(repeat 16 0)))](when((fn[v](doseq[l(for[a v](apply str(map #(format "%5d " %)a)))]
(println l "\n"))v)b)(-> b((apply comp(assoc(into[](repeat 5(fn[v]
(map(fn[n](map #(nth % n)v))[3 2 1 0]))))({"h"4 "k"3 "l"2 "j"1}(read-line))
(partial map(comp #(take 4(concat % [0 0 0 0]))(fn[v]
(r(reduce #(let[l(last %1)](if(= %2 l)(conj(pop %1)(+ l %2) 0)
(conj %1 %2)))[]v)))r)))))i recur)))

ungolfed

(defn insert-2 [board]
  (let [flat (into [] (flatten board))
        zero-indices (seq (keep-indexed
                       #(when (zero? %2) %1)
                       flat))]
    (cond
      (some #{2048} flat) (pr "you win")
      (empty? zero-indices) (pr "game over")
      :else (partition 4 (assoc flat (rand-nth zero-indices) 2)))))

(defn rotate [board]
  (map
    (fn [n]
        (map #(nth % n)
             board))
    [3 2 1 0]))

(defn remove-zeros [row]
 (remove zero? row))

(defn fill [row]
 (take 4 (concat row [0 0 0 0])))

(defn sum-up [acc x]
  (let [l (last acc)]
    (if (= x l)
      (conj (pop acc) (+ l x) 0)
      (conj acc x))))

(defn sum-pairs [v]
  (remove-zeros (reduce sum-up [] v)))

(defn render [v]
  (doseq [line (for [row v]
                 (apply str (map #(format "%5d " %) row)))]
    (println line "\n")) v)

(defn slide [board]
 (map (comp
        fill
        sum-pairs
        remove-zeros
        ) board))

(loop [board (insert-2 (partition 4 (repeat 16 0)))]
  (when (render board)
    (let [input ({"h" 4 "k" 3 "l" 2 "j" 1} (read-line))
          command (apply comp
                         (assoc (into [] (repeat 5 rotate))
                                input slide))] ;; (comp rotate rotate slide rotate rotate)
      (-> board command insert-2 recur))))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.