এই সংখ্যাটি কি 2048 টি কম্বো তৈরি করবে?


12

দ্বারা অনুপ্রাণিত xkcd

আপনার চ্যালেঞ্জটি কোনও সংখ্যা 2048 গেমটিতে একটি ভাল সংমিশ্রণ তৈরি করবে কিনা তা নির্ধারণ করা । আপনার ইনপুট একটি নম্বর হবে, যেমন:

8224

এবং আউটপুটটি হবে যে এই সংখ্যাটি একটি ভাল 2048 কম্বো তৈরি করবে কিনা, যা এই ইনপুটটির জন্য trueবা yesবা 1বা কোনও ইতিবাচক ফলাফলের ইঙ্গিত করার অন্য কোনও উপায়।

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

"একটি ভাল 2048 সংমিশ্রণ" এর অর্থ কী? এর অর্থ কোনও সংখ্যার অর্থ এটি যদি "2048" গেমটিতে থাকে তবে এটি একটি সংখ্যায় একত্রিত হতে পারে। (শূন্যের অর্থ একটি শূন্য স্থান , এবং প্রয়োজনে তা উপেক্ষা করা যেতে পারে that) নোটটি সম্ভবত একাধিক অঙ্ক হতে পারে! তবে, চলনগুলির মধ্যে সংখ্যাগুলি অবশ্যই পরিবর্তন করতে হবে না । এখানে কয়েকটি উদাহরণ / পরীক্ষার মামলা রয়েছে ("ভাল" একটি ভাল সংমিশ্রণের ইঙ্গিত দেয় এবং "খারাপ" অর্থ ভাল নয়):

  • ভাল: 8224 (8224 -> 844 -> 88 -> 16)
  • ভাল: 2222 (2222 -> 44 -> 8)
  • ভাল: 22048 (22048 -> 448 -> 88 -> 16)
  • খারাপ: 20482 (বাইরের 2 টি একত্রিত করতে পারে না, আপনি একটি 2048 এবং একটিও একত্রিত করতে পারবেন না)
  • ভাল: 20482048 (20482048 -> 4096)
  • খারাপ: 210241024 (210241024 -> 22048, তবে এটি এখন [2] [2048] এবং একত্রিত হতে পারে না কারণ সংখ্যা চলনের মধ্যে পরিবর্তন করতে পারে না)
  • ভাল: 2048 (এটি ইতিমধ্যে একটি সংখ্যা)
  • খারাপ: 2047 (এটি 2 এর শক্তি নয়)
  • খারাপ: 11 (গেমটিতে 1 টি নেই)
  • ভাল: 000040000000 (শূন্যস্থান খালি জায়গা)

বিবিধ বিধি:

  • ইনপুটটি যে কোনও জায়গা থেকে যুক্তিসঙ্গত, যেমন এসটিডিআইএন, ফাংশন আর্গুমেন্ট, ফাইল ইত্যাদি হতে পারে can
  • আউটপুট যে কোনও জায়গায় যুক্তিসঙ্গত হতে পারে, যেমন STDOUT, ফাংশন রিটার্ন মান, ফাইল, ইত্যাদি be
  • গ্রিডের আকার উপেক্ষা করুন - 22222222এখনও সঠিক ফলাফল করা উচিত।
  • দুটি সংখ্যার শক্তি হিসাবে, সংখ্যাটি কী হতে পারে তার সর্বাধিক নয়। সুতরাং সম্ভাব্য সংখ্যাগুলি হ'ল 0 এর চেয়ে বড় দুটি শক্তির।
  • জিরোদের সম্পর্কে দ্বিধাগ্রস্থ হওয়ার বিষয়ে উদ্বিগ্ন যারা, তাদের ক্ষেত্রে এটি নয়। উদাহরণস্বরূপ, 22048হয় [2] [2048]বা হিসাবে পার্স করা যায় [2] [2] [0] [4] [8]। প্রথমটি কাজ করে না, তবে দ্বিতীয়টি কাজ করে, সুতরাং এটির সত্য হওয়া উচিত।
  • এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জিতবে!

2
আমার কি কোনও সরবরাহকারী উত্তর সরবরাহ করতে পারে এবং এটি থেকে ইনপুট ডাউনলোডের উত্তরটি আপলোড করতে পারি? মোট ডাউনলোড বাইট হবে1
ব্রায়ান চেন

4
@ জিওবিটস 2048 ইতিমধ্যে একটি সংখ্যা বা চার হিসাবে অস্পষ্ট।
জন ডিভোরাক

3
শূন্যের অর্থ একটি খালি স্থান নয়; 1024 একটি আইনী সংখ্যা বা না? খালি জায়গাগুলি দ্ব্যর্থহীন হওয়া উচিত ... এবং তাই এগুলি মোটেও আমার মতে প্রশ্নটিতে অবদান রাখে না।
তালুর

7
আপনার তৃতীয় উদাহরণ শো 22048আউটপুট করা উচিত goodতবে এটি সত্য নয়। আপনি একত্রিত নাকিসুরে 2সঙ্গে 2048এবং গ্রিড হয় 4x4যদি সব সংখ্যার পৃথক আপনি 5 কোষ পাবেন হওয়া উচিত। তাই সম্ভবত আপনি অপসারণ করা উচিত 0? এছাড়াও আপনার 5 তম উদাহরণটি অবৈধ বলে মনে হচ্ছে যেহেতু খেলাটি বন্ধ হয়ে গেছে 2048:)
টিউন প্রোঙ্ক

2
@underlandmonorail আমি নিশ্চিত করতে পারি যে গেমটিতে একটি 4096 টাইল রয়েছে।
কেনডাল ফ্রে 12

উত্তর:


0

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

[0`]1$,4*,{2\)?`}%+:W;[]\]][]\{{:A;W{A 1=\?!},{[.A~@,>\@~+\].~!{0-.,/@+\0}*;}%~}%.}do+.{~}%,{{.-1%}%.&{[{.2$={+)}*}*]{1|(}%}%}*{,1=},!!

এসটিডিআইএন-এ অবশ্যই ইনপুট দিতে হবে। আউটপুট 0/ 1খারাপ / ভাল সংখ্যার জন্য। সম্ভাব্য ইনপুটগুলি বিশ্লেষণের জন্য বেশিরভাগ কোড প্রয়োজনীয়।

এই সংক্ষিপ্ত সংস্করণ (১১৩ টি অক্ষর) একটি সরল শিফট পরীক্ষা সঞ্চালন করে যা ইনপুট পছন্দ মতো সঠিকভাবে কাজ করবে না 224422

[0`]1$,4*,{2\)?`}%+:W;[]\]][]\{{:A;W{A 1=\?!},{[.A~@,>\@~+\].~!{0-.,/@+\0}*;}%~}%.}do+{W{~[.:S]/[S.+]*}/,1=},!!

সমস্ত পরীক্ষার কেস অনলাইনে চেক করা যায়


3

পাইথন: 457 422 টি অক্ষর

z=range
def c(n):
 for x in z(1,12): 
  if int(n)==2**x:return 1
 return 0
def p(s):
 if s=='':return[]
 for i in z(len(s),0,-1):
  if c(s[:i])>0and p(s[i:])!=1:return [int(s[:i])]+p(s[i:])
 return 1
def r(a):
 if len(a)==1:return 1
 i,t=1,a[:1]
 while i<len(a):
  if a[i]==t[-1]:t[-1]*=2
  else:t+=[a[i]]
  i+=1
 if len(t)==len(a):return 0
 return r(t) 
def f(s):
 if p(s)==1or r(p(s))==0:print('bad')
 else:print('good')

ফ (ফ) ফাংশনটি অঙ্কগুলির একটি স্ট্রিং পায় এবং সেই অনুযায়ী 'ভাল' বা 'খারাপ' আউটপুট দেয়। আমি 0 টি ফাঁকা হিসাবে ব্যবহার না করা বেছে নিয়েছি কারণ গেমগুলিতে স্পেস অর্থহীন এবং তারা স্ট্রিংগুলি পার্স করার সময় অস্পষ্টতা তৈরি করে (22048 ভাল বা খারাপ?) এটি কেবল 2048 পর্যন্ত সংখ্যা ব্যবহার করে তবে অক্ষর যুক্ত না করে এটি পরিবর্তন করা যায়। 10 টি অক্ষরের ব্যয় বা তাই আমি সংখ্যার সংমিশ্রনের সমস্ত পদক্ষেপও মুদ্রণ করতে পারি। এবং আমি বুঝতে পারি যে এই কোডটি এখনও যথেষ্ট গল্ফ হয়নি; চিন্তা করবেন না, সম্পাদনাগুলি আসছে।


ইনডেন্টেশনে কিছু অক্ষর সংরক্ষণ করতে আপনি স্থান এবং ট্যাব ট্রিকটি ব্যবহার করতে পারেন। এসও মার্কডাউন যদিও এটি ভেঙে দেবে।
gcq

আমি মনে করি এটি পাইথন 3.x এ কাজ করে না। আমি অনেক কিছু করতে পারি, তবে নিশ্চিত না যে আমি সেই হাস্কেল জবাবের সাথে প্রতিযোগিতা করতে পারব :)
তাল

হ্যাঁ, আমি সে সম্পর্কে ভুলে গেছি।
gcq

2

হাস্কেল: 285 254 253 237 230 227

ব্যবহার - কেবল এটি ghci এ লোড করুন, এবং স্ট্রিংটি h এ দিন।

*Main> h "210241024"
False
*Main> h (replicate 1024 '2') -- very long string
True
*Main> h (replicate 1023 '2') -- odd one out
False

কোড:

t=i 0
i n=mod n 2<1&&(n<3||i(div n 2))
a%[]|i a=[[a]]|t=[];a%(b:c)=[a:d|d<-b%c,i a]++(a*10+b)%c
c(0:a)=c a;c(a:b:d)|a==b=(a+a):c d|t=a:c(b:d);c a=a
l a=c a/=a&&(g.c)a
g[a]=t;g a=l a||(l.reverse)a
h b=any g$0%(map(read.(:[]))b)

ভাষ্য: iএকটি সংখ্যা 2 এর শক্তি কিনা তা যাচাই করা হয়, এটি বিট টুইডলিংয়ের সাহায্যে ভাষাগুলি দ্বারা প্রদর্শিত হবে। %পুনরাবৃত্তভাবে সমস্ত পার্স উত্পন্ন করে যা 2 বা 0 পাওয়ার ক্ষমতার cতালিকান। lটাইলস সংযোগযোগ্য বাম বা ভাল হলে পুনরাবৃত্তভাবে পরীক্ষা করে tests gটাইলগুলি বাম বা ডান সংযোগযোগ্য কিনা তা পরীক্ষা করে। টাইলসে সংখ্যার সীমা নেই - উদাহরণস্বরূপ h ((show (2^200))++(show (2^200)))"1606938044258990275541962092341162602522202993782792835301376" চিহ্নিত 2 টাইলগুলির জন্য সত্য প্রত্যাবর্তন।

একটি বাগ ঠিক করার জন্য সম্পাদনা করা হয়েছে যে এটি "88222288888" ডানদিকে সঠিকভাবে ভেঙে পড়ে না, তবে আরও গল্ফিংয়ের সুযোগও পেয়েছে।


2

পার্ল, 175-336 বাইট

while(<>){chomp;$n="nothing";$\=("."x(1+/^[2048]+$/+/^((\d+)0*\2)+$/+((sprintf"%b",
$_)!~/1.*1/)))."\n";($o=$\)=~y/.\n/oh/;print$o;$m=length;for$i(1..$m){$a=$_;$r=
qr((\d*[2468])0*\2)0*/;($b=substr$a,0,$i,"")=~s/$r/$2+$2/ge;@n=$"="$b$a";push@n,$"while$"
=~s/$r/$2+$2/ge;($"%2&&next)||($">>=1)while$">1;$n="nice";(print)for@n;last}print$n}

কেবল প্রয়োজনীয় প্রয়োজনীয়তা অক্ষুণ্ন রাখা:

$_=shift;$m=length;for$i(1..$m){$a=$_;$r=qr/((\d*[2468])0*\2)0*/;($b=substr$a,0,$i,"")=~
s/$r/$2*2/ge;$"="$b$a";1while$"=~s/$r/$2*2/ge;($"%2&&next)||($">>=1)while$">1;exit}die;

1

ওহ .. 1 .. সুন্দর ..

2

ওহো ... 2 ... সুন্দর ...

22

ওহ ... ২২ ... ৪ ... সুন্দর ...

42

ওহ .. কিছুই না ..

422

ওহ .. 422 .. 44 .. 8 .. সুন্দর ..

322

উহু. কিছুই নেই।

336

উহু. কিছুই নেই।

4224

ওহ .. কিছুই না ..

4228

ওহ .. 4228 .. 448 .. 88 .. 16 .. চমৎকার ..

16022481602248

ওহ .. 1604481602248 .. 16088160448 .. 1601616088 .. 3216016 .. 3232 .. 64 .. সুন্দর ..

[ 64 ও 256 কিছু দুর্বল সমাধানযোগ্য অস্পষ্টতা সীসা যে লোভী ম্যাচিং সঙ্গে মানিয়ে নিতে পারে না ... কিন্তু এগুলো চমৎকার বাইট সংখ্যা। ]

2048

ওহ ... 2048 ... সুন্দর ...


1

ডেলফি 572 582 টি অক্ষর

সম্পাদিত কোড, সীমা 2 ^ 30 এ সেট করা হয়েছে যাতে এটি ডেলফির ম্যাক্সেন্ট মানকে ছাড়িয়ে যায় না।

Golfed

uses SysUtils,Classes;var t,j,c:integer;s,n:string;L:TStringList;function p(x:string):boolean;var r,i:int64;begin if x='0'then exit(1>0);i:=2;r:=StrToInt(x);while i<r do i:=i*2;p:=i=r;end;begin read(s);t:=0;L:=TStringList.Create;j:=1;while j<=Length(s)do begin for c:=9downto 1do begin n:=copy(s,j,c);if p(n)then break;end;if n>'0'then L.Add(n);j:=j+Length(n);end;for j:=0to L.Count-1do t:=t+StrToInt(L[j]);j:=0;repeat if j=L.Count-1then break;if L[j]=L[j+1]then begin L[j]:=IntToStr(StrToInt(L[j])*2);L.Delete(j+1);j:=0;end else inc(j);until L.Count=1;write(strtoint(L[0])=t);end.

Ungolfed

uses
  SysUtils,
  Classes;

var
  t,j,c:integer;
  s,n:string;
  L:TStringList;
  function p(x:string):boolean;
  var
    r,i:int64;
  begin
    if x='0'then exit(1>0);
    i:=2;r:=StrToInt(x);
    while i<r do
      i:=i*2;
    p:=i=r;
  end;
begin
    read(s);
    t:=0;L:=TStringList.Create;
    j:=1;
    while j<=Length(s)do
    begin
      for c:=9downto 1do
      begin
        n:=copy(s,j,c);
        if p(n)then break;
      end;
      if n>'0'then L.Add(n);
      j:=j+Length(n);
    end;
    for j:=0to L.Count-1do
      t:=t+StrToInt(L[j]);
    j:=0;
    repeat
      if j=L.Count-1then break;
      if L[j]=L[j+1]then
      begin
        L[j]:=IntToStr(StrToInt(L[j])*2);
        L.Delete(j+1);j:=0
      end
      else
        inc(j);
    until L.Count=1;
    write(strtoint(L[0])=t);
end.

সম্পাদনা

সুতরাং আমি কৌতূহলী হয়ে উঠলাম এবং ভাবলাম যে এর মধ্যে কতগুলি সমন্বয় ধাঁধাটি ফিট করে এবং এটি একটি পরীক্ষা চালিয়েছে।

কৌতূহলযুক্ত অন্যদের জন্যও একটি পরীক্ষা করুন;)

তবে ঠিক আছে ফলাফল এখানে:
20736 combinations were tested and 1166 were great combinations

আমি অবশ্যই বলব 3 অথবা অধিক শূণ্যসমূহ সঙ্গে সমন্বয় এড়ানো হয় (তোলে ডান অনুভূতি?)
সমন্বয় প্রায় অনন্য, সমন্বয়, যার অর্থ 2248, 8224, 8422এবং 4228সমস্ত একটি মহান সমন্বয় হিসাবে গণনা করা হয়।


1

গণিত - 218 বাইট

f=MemberQ[DeleteCases[Map[FromDigits,l~Internal`PartitionRagged~#&/@Join@@Permutations/@IntegerPartitions@Length[l=IntegerDigits@#],{2}],{___,x_,___}/;!IntegerQ[2~Log~x]||x<2]//.{a___,x_,x_,b___}:>{a,2x,b},{_Integer}]&

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

f[n_] := MemberQ[
  DeleteCases[
      Map[
        FromDigits, 
        Internal`PartitionRagged[l, #] & /@ 
          Join @@ Permutations /@ IntegerPartitions[Length[l = IntegerDigits[n]]], 
        {2}
      ],
      {___, x_, ___} /; x < 2 || ! IntegerQ[2~Log~x]
    ]
  ] //. {a___, x_, x_, b___} :> {a, 2 x, b}, 
  {_Integer}
]

Internal\PartitionRagged` জাদু থেকে নেওয়া হয় এই প্রশ্নের

এই সমাধানটি স্বেচ্ছাসেবী গ্রিডের আকার এবং স্বেচ্ছাসেবীভাবে প্রচুর সংখ্যক পরিচালনা করে।

এখানে একটি 195 বাইট সংস্করণ যা 4 টি টাইল পর্যন্ত কেবল আসল গেমের মতো কাজ করে (যেমনটি f[22222222]হয় False):

f=MemberQ[(d=DeleteCases)[d[ReplaceList[IntegerDigits@#,{a__,b___,c___,d___}:>FromDigits/@{{a},{b},{c},{d}}],0,2],{___,x_,___}/;!IntegerQ[2~Log~x]||x<2]//.{a___,x_,x_,b___}:>{a,2x,b},{_Integer}]&

যেখানে আমি প্রতিস্থাপন করেছি

Map[
  FromDigits, 
  Internal`PartitionRagged[l, #] & /@ 
    Apply[
      Join, 
      Permutations /@ IntegerPartitions[Length[l = IntegerDigits@#]]
    ], 
  {2}
]

সঙ্গে

ReplaceList[
  IntegerDigits[n], 
  {a__, b___, c___, d___} :> FromDigits /@ {{a}, {b}, {c}, {d}}
]

কেবল ভাবছেন যে DeleteCasesএটিতে আমার কোডের মতো ত্রুটি রয়েছে কিনা - দেখে মনে হচ্ছে এটি বাম দিকের জোড়গুলি সরিয়ে দেয়, তাই f[88222288888]ব্যর্থ হবে?
বাজরাঘ

@ বাজবার্গ নং, DeleteCasesকেবলমাত্র শূন্য এবং সংখ্যাগুলি মুছুন যা দুটির শক্তি নয়। জোড়গুলির প্রকৃত সংযোগ বিধি দ্বারা করা হয় //. {a___, x_, x_, b___} :> {a, 2 x, b}, যা number সংখ্যা এবং এর বিপরীতে কাজ করে। আমি ম্যাথমেটিকাকে সেই প্রতিস্থাপন প্রয়োগ করার আদেশটি সম্পর্কে পুরোপুরি নিশ্চিত নই, তবে এটি কার্যকর হয়।
মার্টিন ইন্ডার

1

হাস্কেল - 260 263

import Data.Bits
p[x]=[[[x]]]
p(x:s)=do r@(h:t)<-p s;[[x]:r,(x:h):t]
q=filter(and.map(\n->(n::Integer)/=1&&n.&.(-n)==n)).map(filter(/=0)).map(map read).p
c(x:y:s)
 |x==y=2*x:c s
 |True=x:(c$y:s)
c x=x
r[x]=True
r l=c l/=l&&(r(c l)||r(c$reverse l))
f=or.map r.q

fফাংশন হয়। উদাহরণ:

> f"22228"
True
> f"20482044"
False

সামান্য ব্যাখ্যা:
pএকটি তালিকা বিভক্ত করার সমস্ত উপায়ে ফিরিয়ে দেয়।
qকেবলমাত্র 2 এর ক্ষমতা নিয়ে গঠিতগুলি ফিল্টার করে (1 বাদে 0 টি সহ)।
cএকটি স্ট্রিং ভেঙে ফেলার চেষ্টা করে
rকেবলমাত্র 1 টি উপাদান বামে না আসা পর্যন্ত স্ট্রিংটি incollapsable না হওয়া অবধি ডান এবং বাম ধসের পুনরুক্তি ঘটে।


খুশী হলাম। একটি বাগ আছেcযদিও , "222244442222" চেষ্টা করুন - এটি সত্য প্রত্যাবর্তন করে, তবে এটি খেলায় ভেঙে যায় না। সঙ্গে recurse প্রয়োজন (2*x):c s
বাজরঘ

@ বাজজার্গ স্থির হয়েছে
এমনিপ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.