আমার হট হুইলস গাড়িটি কত গতিযুক্ত?


23

বেশ কয়েক বছর আগে হট হুইলস "ফর্মুলা ফুয়েলার্স রেসারস" * নামে একটি সাধারণ ফ্ল্যাশ গেম তৈরি করেছিল । গেমটি খেলতে, আপনি নিজের গাড়ীতে রাখার জন্য একটি ফ্রিজ থেকে তিনটি উপাদান নির্বাচন করেন, যা কম্পিউটারের এলোমেলোভাবে উত্পন্ন গাড়ির বিরুদ্ধে প্রস্তুত হয়। দেখা যাচ্ছে এই গেমটির মেকানিক্সটি বেশ সহজ। প্রথমত, আপনার গাড়িটির আসল রেস "সময়" এলোমেলোভাবে উত্পন্ন হয়েছে এবং আপনি এই ঘোড়দৌড়টি জিতেছেন কিনা তা নিয়ে কোনও প্রভাব নেই। দ্বিতীয়ত, দৌড়ের বিজয়ী একটি স্কোর দ্বারা নির্ধারিত হয় যা নির্বাচিত উপাদানগুলি থেকে গণনা করা হয় (সদৃশ উপাদানগুলি অনুমোদিত, এবং আদেশের বিষয়গুলি)। নিম্নলিখিত উপাদানটিতে প্রতিটি উপাদানটির একটি সম্পর্কিত "মান" এবং সম্পর্কিত "অপারেশন" রয়েছে:

#   ingredient     val  op
1   Hot Salsa       2   +
2   Root Beer       1   +
3   Milk            1   +
4   Pickle Juice    2   +
5   Mystery Lunch   -3  *
6   BBQ Sauce       2   +
7   Egg             1   +
8   Ketchup         2   +
9   Mustard         -1  *
10  Melon           1   +
11  Chocolate Milk  1   +
12  Mayonnaise      -2  *
13  Baby Food       0   +
14  Pepper          1   +
15  Salt            2   +
16  Syrup           -1  *
17  Salad Dressing  2   +
18  Orange Juice    1   +
19  Soy Sauce       2   +

সুবিধার্থে, এই চ্যালেঞ্জটি তাদের নাম অনুসারে উপাদানগুলির উল্লেখ করবে এবং তাদের নাম নয়। স্কোর গণনা করার পদক্ষেপগুলি এখানে:

  1. প্রথমে প্রথম উপাদানটির মান দিয়ে স্কোরটি সূচনা করুন।
  2. তারপরে, বর্তমান স্কোর এবং দ্বিতীয় উপাদানটির মান একটি আপডেট স্কোর পেতে একত্রিত করতে দ্বিতীয় উপাদানটির ক্রিয়া ব্যবহার করুন use
  3. শেষ অবধি, বর্তমান স্কোর এবং তৃতীয় উপাদানের মান চূড়ান্ত স্কোরটি একত্রিত করতে তৃতীয় উপাদানটির ক্রিয়াকলাপটি ব্যবহার করুন।

উচ্চতর স্কোরগুলি আরও ভাল এবং সর্বদা কম স্কোরকে পরাজিত করে।

উদাহরণস্বরূপ, উপাদানগুলির 1 2 3স্কোর থাকে (2+1)+1 = 4। উপাদানগুলির 7 5 6স্কোর রয়েছে (1*-3)+2 = -1। অতএব, 1 2 3প্রহার 7 5 6

চ্যালেঞ্জ

এই চ্যালেঞ্জে, আপনি এমন একটি প্রোগ্রাম লিখবেন যা 3 টি সংখ্যার অর্ডারের তালিকা গ্রহণ করে এবং সংশ্লিষ্ট স্কোরকে আউটপুট করে।

ইনপুট

আপনার প্রোগ্রামটি সবচেয়ে সুবিধাজনক বিন্যাসে তিনটি পূর্ণসংখ্যার একটি তালিকা গ্রহণ করতে পারে। আপনাকে উপাদানগুলির নামগুলির জন্য (উপরে হিসাবে) বা 0-সূচক (উপরের প্রতিটি সূচক থেকে 1 বিয়োগ) এর জন্য 1-সূচক ব্যবহার করার অনুমতি দেওয়া হচ্ছে।

Ouput

আপনার প্রোগ্রামটি অবশ্যই একক পূর্ণসংখ্যাকে স্কোর নির্দেশ করে output

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

4 5 5  =>  18 // max score
5 5 5  =>  -27 // min score
13 13 13  =>  0
1 2 3  =>  4
7 5 6  =>  -1
16 2 19  =>  2
19 7 12  =>  -6

* এই পৃষ্ঠাটি বেশ পুরানো এবং কিছু ব্রাউজারে কাজ করে না, তবে এই চ্যালেঞ্জের জন্য আপনার গেমটি খেলতে হবে না।


1
তাহলে মূলত সালসা + লাঞ্চ + মায়ো = অজেয়?
ম্যাথু রোহ

3
@ সিআইজিএসইজিভি সদৃশ উপাদানগুলি অনুমোদিত। সালসা, মধ্যাহ্নভোজন, মধ্যাহ্নভোজনে 18 টি স্কোরের জন্য অনুমতি দেওয়া হয়েছে যা আপনার 12 টিকে
লেভেল রিভার সেন্ট


4
ফ্রিজে নুন রাখে কে? :)
Wossname

3
1. আমি জানি না লব কেন একটি ফ্রিজে থাকবে। ২. হ্যাঁ, আপনি একবার 18-পয়েন্টের কম্বোটি আবিষ্কার করলে আপনি আক্ষরিক অর্থে অজেয় হয়ে যান এবং গেমটি অর্থহীন হয়ে যায়।
PhiNotPi

উত্তর:


13

জেলি , 24 বাইট

“zẈ€$ụ¤’b6’ị@µỊị⁾+׿CFḊV

0-সূচকযুক্ত উপাদানগুলির একটি তালিকা নেয়।

এটি অনলাইন চেষ্টা করুন! অথবা একটি পরীক্ষা স্যুট দেখুন

কিভাবে?

একটি বেস -6 নম্বর হিসাবে মানগুলি সংকুচিত করার জন্য একটি সামান্য সংশ্লেষিত ফর্ম এবং গুণক এন্ট্রিগুলি নেতিবাচক হ'ল ব্যবহার করে। বেস -6 ডিজিটগুলি পেতে কেবল 3 দ্বারা সরানোর পরিবর্তে পরিপূরক মানগুলি ব্যবহার করা হয় - এটি অ্যাটমকে পরিপূরক পদক্ষেপের পূর্বে নেতিবাচক এন্ট্রিগুলি বাছাইয়ের সাথে সাথে বেস-250 এ বাইট সংরক্ষণ করার মাধ্যমে বাইটগুলি সংরক্ষণ করে সঙ্কোচন.

“zẈ€$ụ¤’b6’ị@µỊị⁾+׿CFḊV - Main link: 0-based ingredient list  e.g. [6,4,5]
“zẈ€$ụ¤’                 - base 250 compressed number: 120851767994004
        b6               - convert to base 6: [1,1,0,5,0,1,0,3,1,1,4,2,1,0,3,0,1,0,0]
          ’              - decrement: [0,0,-1,4,-1,0,-1,2,0,0,3,1,0,-1,2,-1,0,-1,-1]
           ị@            - index into [reversed @rguments]          [0,4,-1]
             µ           - monadic chain separation (call that x)
              Ị          - insignificant(x)? (abs(x)<=1)            [1,0,1]
                ⁾+×      - ['+','×']
               ị         - index into                               ['+','×','+']
                    C    - complement(x) (1-x)                      [1,-3,2]
                   ż     - zip                                      [['+',1],['×',-3],['+',2]]
                     F   - flatten                                  ['+',1,'×',-3,'+',2]
                      Ḋ  - dequeue                                  [1,'×',-3,'+',2]
                       V - evaluate as Jelly code                   -1

"বেস 250 সংকুচিত সংখ্যা" অংশটি কীভাবে কাজ করে?
ckjbgames

@ckjbgames zẈ€$ụ¤তাদের জেলি কোড পৃষ্ঠাতে তাদের (1-ইনডেক্সড) সূচক হিসাবে পাঠ করা হয় [123,188,13,37,226,4], এবং এটি বেস-250 সংখ্যা হিসাবে ব্যাখ্যা করা হয়: 123*250**5+188*250**4+13*250**3+37*250**2+226*250**1+4*250**0=120851767994004( টিউটোরিয়ালের স্ট্রিং-আক্ষরিক অংশ দেখুন ।)
জনাথন অ্যালান

ওহ, একটি স্ট্রিং আক্ষরিক।
ckjbgames

05AB1E কোড হিসাবে মূল্যায়ন করার সময় আমি "-3" এর অর্থ "-3" বোঝা যায় না হওয়া পর্যন্ত এটি আমার পদ্ধতির ছিল।
ম্যাজিক অক্টোপাস আরন

11

জাভাস্ক্রিপ্ট (ES6), 89 84 82 78 73 বাইট

0-সূচক ব্যবহার করে 3 সংখ্যার অ্যারে হিসাবে ইনপুট নেয়।

a=>(o=a=>F()<0?a*n:a+n)(o((F=_=>n='5445054524413452545'[a.shift()]-3)()))

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

পূর্ববর্তী সংস্করণ, 78 বাইট

(a)(b)(c)0-ইনডেক্সিং ব্যবহার করে বাক্য গঠন বাক্যটিতে 3 টি পূর্ণসংখ্যার ব্যবস্থা নেয়

a=>b=>(o=a=>b=>(n=F(b))<0?a*n:a+n)(o((F=n=>'5445054524413452545'[n]-3)(a))(b))

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

এই কোড সম্পর্কে একটি সামান্য অস্বাভাবিক জিনিস হ'ল এটি 'সাধারণ' কারিরিং সিনট্যাক্সে কেবল 2 টি আর্গুমেন্ট নেয় a => b =>এবং শেষ পর্যন্ত 3 য়টি লাগে এমন একটি ফাংশন দেয়।

ভাঙ্গন

F = n => '5445054524413452545'[n] - 3
o = a => b => (n = F(b)) < 0 ? a * n : a + n
f = a => b => o(o(F(a))(b))
f(a)(b)(c)
  |  |  |
  |  |  +-- 'b' argument of the function returned by the outer call to 'o'
  |  +----- 'b' argument of the function returned by 'f'
  +-------- 'a' argument of 'f'

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


1
কড়া কথা বলতে গেলে, আপনি 1 টি যুক্তি নিচ্ছেন এবং একটি ফাংশন যা 1 টি আর্গুমেন্ট গ্রহণ করে তা ফিরিয়ে দিচ্ছেন, একটি ফাংশনটি আহ্বানের জন্য একটি মান গণনা করছেন যা 1 টি আর্গুমেন্ট নেয় এবং একটি ফাংশন দেয় যা 1 টি আর্গুমেন্ট গ্রহণ করে এবং সেই চূড়ান্ত ফাংশনটি ফিরিয়ে দেয় ...
নীল

6

বেফুঞ্জ, 74 73 বাইট

>&:0`!#^_1g68*-^:0`!#v_+
^2112-212/11.012/212 >*
^   @.$<       >">"35*0p

এখানে চেষ্টা করুন! এটি অদ্ভুত যে আমার কোডটি কেবল এই একজন অনুবাদকের উপরে কাজ করে।

দ্বিতীয় সারিতে মূলত সারণি থেকে সমস্ত মান রয়েছে। অ-সংখ্যাসূচক মানগুলি ASCII টেবিলে অঙ্কগুলির আগে আসার সাথে সাথে প্রকৃতপক্ষে নেতিবাচক মান values সেখানে কিছুটা যুক্তি রয়েছে যা নির্ধারণ করে যে সংখ্যাটি নেতিবাচক কিনা এবং যদি তা হয় তবে এই সংখ্যাটি ফলাফল দ্বারা গুণিত হয়।

তৃতীয় সারির ডান দিকটি প্রথম সংখ্যাটি আরম্ভ করে। আমার যদি তা না করতে হয় তবে আমি প্রচুর বাইট সংরক্ষণ করতে পারতাম।


6

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

$i="5445054524413452545";[,$a,$b,$c]=$argv;echo(bc.($i[$c]-3<0?mul:add))((bc.($i[$b]-3<0?mul:add))($i[$a]-3,$i[$b]-3),$i[$c]-3);

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

$d=decbin(506743);$i="5445054524413452545";[,$a,$b,$c]=$argv;echo(bc.($d[$c]?add:mul))((bc.($d[$b]?add:mul))($i[$a]-3,$i[$b]-3),$i[$c]-3);

অনলাইন সংস্করণ

সম্প্রসারিত

$d=decbin(506743);
$i="5445054524413452545";
[,$a,$b,$c]=$argv;
echo(bc.($d[$c]?add:mul))((bc.($d[$b]?add:mul))($i[$a]-3,$i[$b]-3),$i[$c]-3);

6

পাইথন 2 , 123 110 107 বাইট

a,b,c=input()
s=[int(i)-3for i in'05445054524413452545']
n=s[a]
for i in s[b],s[c]:n=[n*i,n+i][n>0]
print n

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


-৩ বাইটস @ ম্যাথজুঙ্কিকে ধন্যবাদ


1
এখানে একটি উন্নত সংস্করণ, 118 বাইট রয়েছে
মিস্টার এক্সকোডার

2
5445054524413452545তারপরে 3 বিয়োগ করলে আপনাকে টন বাইট সংরক্ষণ করতে পারে ।
ম্যাজিক অক্টোপাস আরন

1
n=[n+i,n*i][i<0]লুপের ভিতরে আপনাকে 3 বাইট সংরক্ষণ করে
গণিত জাঙ্কি

5

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

•6SÚ²ÄOÕ6BS3-©¹è|v®yèD0‹i*ë+

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

•6SÚ²ÄOÕ6BS3-©               # Push [2, 1, 1, 2, -3, 2, 1, 2, -1, 1, 1, -2, 0, 1, 2, -1, 2, 1, 2] and store.
               ¹è             # Get first score.
                 |v           # Iterate through remaining scores.
                   ®yèD0‹i*ë+ # Push score list, grab relevant score.
                              # If negative, multiply, else add.

এটি আসলে আপনার পছন্দ মতো কম বা কম ইনপুটের জন্য কাজ করে, যাতে আপনার 4 বা ততোধিক বৈশিষ্ট্যযুক্ত গাড়ি বা মাত্র 2 দিয়ে গাড়ি থাকতে পারে This এটি উদ্দেশ্যমূলক ছিল না, ঠিক কীভাবে এটি শেষ হয়েছিল।


5

সিজেম , 43 38 বাইট

q~[YXXY-3YXYWXX-2TXYWYXY]f={_W>42+c~}*

তালিকাটি আরও সংকুচিত করার একটি উপায় থাকতে পারে ...

0-ভিত্তিক সূচক ব্যবহার করে।

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

ব্যাখ্যা

এই প্রোগ্রামটি এই সত্যটি ব্যবহার করে যে কোনও মান সংযোজকের পরিবর্তে গুণক হয় এবং যদি এটির নেতিবাচক হয়।

q~                     e# Get the list from input
  [...]                e# Push the list of values for each ingredient. T=0, W=-1, 
                       e#   X=1, Y=2. 
       f=              e# Get the elements at the given indices 
         {             e# Reduce over this block:
          _W>          e#  Check if the second number is > -1 (returning 0 or 1)
             42+c      e#  Add the result to 42 and cast to a char. 
                       e#    (ASCII 42 is * and 43 is +)
                 ~     e#  Eval the char (* is multiply, + is add)
                  }*   e# (end block)

দুর্দান্ত + *কৌশল!
ফল এশোলং ফল

3

লুয়া, 140 131 বাইট

i={2,1,1,2,-3,2,1,2,-1,1,1,-2,0,1,2,-1,2,1,2}function f(a,b,c)loadstring(("print("..i[a].."+"..i[b].."+"..i[c]..")"):gsub('%+%-','*-'))()end

i={2,1,1,2,-3,2,1,2,-1,1,1,-2,0,1,2,-1,2,1,2}function f(a,b,c)x,y,z=i[a],i[b],i[c]v=y>0 and x+y or x*y;print(z>0 and v+z or v*z)end

3

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

a=a=>eval(a.map(x=>(b="5445054524413452545"[x]-3,b<0?"*":"+")+b).join``)

[a,b,c]
ETH প্রোডাকশনগুলিতে ধন্যবাদ -13 বাইট ফর্ম্যাটে ইনপুট নেয়


আপনি x=>(b="...",b<0?"*":"+")+bএড়াতে করতে পারেন return, আমি মনে করি। (এছাড়াও, আপনার [... ]স্ট্রিংগুলিতে
সূচকগুলি

@ পাঠ্যক্রমগুলি আমি "প্রত্যাশিত 'পেয়েছি; এটি আমার ব্রাউজার হতে পারে, a=a=>eval(a.map(x=>(b="5445054524413452545"[x]-3,b<0?"*":"+")+b)).join``)আপনার জন্য কাজ করে?
বাল্ড বান্থা

আপনি )পরে একটি অতিরিক্ত পেয়েছেন +b, আমি বিশ্বাস করি
ETH প্রোডাকশনগুলি

2

আর, 125 123 বাইট

function(a,b,c){v=c(5,4,4,5,0,5,4,5,2,4,4,1,3,4,5,2,5,4,5)-3
o=rep("+",19)
o[v<0]="*"
get(o[c])(get(o[b])(v[a],v[b]),v[c])}

বেনামে ফাংশন যা ইনপুট হিসাবে তিনটি পূর্ণসংখ্যা নেয়। মান এবং ক্রিয়াকলাপগুলির একটি তালিকা নির্ধারণ করে এবং তারপরে কেবল ইনপুট দ্বারা ডাকা একটিগুলি মূল্যায়ন করে, যেমন o3(o2(v1,v2),v3)। এটি করার জন্য অবশ্যই একটি গল্ফিয়ার উপায় আছে!

আপডেট: কিছু পুনরায় কাজ করার পরে, আমার একটি বিকল্প আছে, এছাড়াও 123 বাইট । আবার, একটি বেনামি ফাংশন, তবে তিনটি মানের একক ভেক্টর হিসাবে ইনপুট নেয়। মান এবং ক্রিয়াকলাপগুলির একটি তালিকা নির্ধারণ করে এবং এটি মূল্যায়ন করে একই পন্থা ব্যবহার করে।

function(x,f=c(sum,prod)[x[-1]%in%c(5,9,12,16)+1],s=c(5,4,4,5,0,5,4,5,2,4,4,1,3,4,5,2,5,4,5)[x]-3)f[[2]](el(f)(s[-3]),s[3])

2

হাস্কেল, 186 116 112 108 বাইট

o x|x<0=(*)|0<1=(+)
v=(map((-51+).fromEnum)"95445054524413452545"!!)
w [x,y,z]=(o z)((o y)x y)z
k=w.map v

প্রধান ফাংশন হয় k। কোড গল্ফ এ নতুন তাই আমি নিশ্চিত যে $অপারেটর বনাম বন্ধনীগুলির চতুর ব্যবহারের সাথে আমি শেভ করতে পারি এমন কয়েকটি বাইট রয়েছে । উন্নতিগুলি চালিয়ে যেতে থাকায় আমি সম্ভবত উত্তরটি আপডেট করব।

মূলত প্রোগ্রামটি এভাবে ভেঙে যেতে পারে:

  • v হ'ল একটি ফাংশন যা 1 ভিত্তিক সূচক নেয় এবং সেই খাদ্য আইডির মান প্রদান করে।
  • ও হ'ল এমন একটি ফাংশন যা খাদ্যের মান গ্রহণ করে এবং উপযুক্ত অপারেটরকে ফেরত দেয় (উদাঃ negativeণাত্মক মানগুলি সর্বদা *যেখানে ইতিবাচক মান সর্বদা থাকে +)
  • ডাব্লু হ'ল একটি ফাংশন যা vসংখ্যার ইনপুটগুলিতে ম্যাপযুক্ত 3 টি আংশিক ফাংশনগুলির একটি তালিকা গ্রহণ করে এবং প্রতিটি থেকে উপযুক্ত ক্রিয়াকলাপ এবং মানগুলি নিয়ে আসে এবং সঠিক আউটপুট দেয়।
  • কে পয়েন্ট ফ্রি স্টাইলে মূল ফাংশন যা ইনপুটটিতে ভি ম্যাপ করে এবং ডাব্লু আউটপুট ফেরত দেওয়ার জন্য এই তালিকাটি রচনা করে।

হালনাগাদ

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

আপডেট 2

অন্যান্য পরামর্শ অনুসারে, ক্রিয়াকলাপগুলি পুনরায় অর্ডার করে কয়েকটি মুভি বাইট তৈরি করে, অন্য কোনও প্রহরী তৈরি করে যা সর্বদা সত্যের সাথে মূল্যায়ন করে এবং ডাব্লু এর সাথে একটি প্যাটার্ন মিলবে যা 3 টি উপাদানের তালিকায় মেলে। পরামর্শের জন্য ধন্যবাদ!

আপডেট 3

আমি জানি না এমন আরও কোড গল্ফ নিয়মগুলি নির্দেশ করার জন্য লাইকোনিকে আর একটি ধন্যবাদ। আংশিক প্রয়োগিত ফাংশনগুলির একটি তালিকা তৈরি করতে আমার ইনপুটটিতে ভি ম্যাপিং করা একটি অদ্ভুত ধারণা ছিল এবং আমাকে 4 টি অতিরিক্ত বাইট সংরক্ষণ করেছিল!


1
বিশেষত পিপিসিজি এবং হাস্কেল গল্ফিংয়ে আপনাকে স্বাগতম! আপনি [Int] -> Intস্টিডিন থেকে পড়া এবং স্টাডাউটে লেখার পরিবর্তে একটি ফাংশন লিখে প্রচুর বাইট সংরক্ষণ করতে পারেন । এটি করার জন্য ডিফল্টরূপে অনুমোদিত হয়, তবে এই ক্ষেত্রে এটির চ্যালেঞ্জের মধ্যেও স্পষ্টভাবে উল্লেখ করা হয়েছে যে ইনপুট হিসাবে পূর্ণসংখ্যার একটি তালিকা টেলিং গ্রহণযোগ্য।
লাইকনি

1
fromEnumপরিবর্তে ব্যবহার digitToIntকরা সংক্ষিপ্ত হওয়ার সম্ভাবনা রয়েছে কারণ এটি আপনাকে আমদানি বাদ দিতে দেয়।
লাইকনি

@ লাইকোনি আপনাকে যে বিধি সম্পর্কে অবহিত ছিল না তার কিছু উল্লেখ করার জন্য আপনাকে অনেক ধন্যবাদ! এনাম ট্রিকটিও কবজির মতো কাজ করেছিল, কেন আমি ASCII কোড থেকে কাজ করার কথা ভাবিনি তা জানেন না তবে এটি অমিত পরিমাণে বাইটগুলিও সাশ্রয় করেছে।
ম্যাপেল_শফট

1
v=(map((-51+).fromEnum)"95 ... 5"!!)দুটি বন্ধনী সংরক্ষণ করে। o x|x<0=(*)|0<1=(+)দ্বিতীয় প্রহরীতে একটি বাইট সংরক্ষণ করে।
লাইকনি

1
ইন wএকটি অতিরিক্ত স্থান ছেড়ে দেওয়া হয়। এছাড়াও, আপনাকে কেবল 3 দৈর্ঘ্যের তালিকাগুলি পরিচালনা করতে হবে, আপনি w[x,y,z]=প্যাটার্ন ম্যাচিং হিসাবে ব্যবহার করতে পারেন ।
লাইকনি

0

হাস্কেল, 92 87 বাইট

x#y|x<0=(y*)|0<1=(y+)
k[x,y,z]=z#z$y#x$y
k.map([read[q]-3|q<-"95445054524413452545"]!!)

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

@ ম্যাপেল_শ্যাফটের উত্তরের ভিত্তিতে আমি এটিকে কিছুটা ফ্যাক্টর করেছি।

@ লাইকনিকে 5 বাইটের জন্য ধন্যবাদ!



@ লাইকনি আমি নতুন লাইনের গণনা সম্পর্কে বেশ নিশ্চিত
ব্ল্যাকক্যাপ

আমি দুটি বাইটের জন্য গণনা করি নি f=কারণ বেনামি ফাংশনগুলি জমা দেওয়ার জন্য অনুমোদিত। তাদের শুধুমাত্র টিও উদাহরণ কাজ করার প্রয়োজন হয়।
লাইকনি


0

8086 মেশিন কোড, 62 বাইট

00000000  be 3b 01 31 c0 86 c4 ac  e8 0a 00 81 fe 3e 01 72  |.;.1.........>.r|
00000010  f4 b4 4c cd 21 bb 32 01  d0 e8 d7 73 03 c0 e0 04  |..L.!.2....s....|
00000020  c0 f8 04 e3 05 31 c9 c3  86 c4 78 03 00 e0 c3 f6  |.....1....x.....|
00000030  ec c3 21 12 d2 12 f1 1e  01 2f 12 00 00 00        |..!....../....|
0000003e

শেষ তিনটি বাইটে (শূন্য-সূচকযুক্ত) ইনপুট থাকে। আরে, আপনি আমাকে বলেছিলেন আমি সবচেয়ে সুবিধাজনক ইনপুট ফর্ম্যাটটি ব্যবহার করতে পারি। এই ক্ষেত্রে, এটি হার্ডকোডিং!
আউটপুট শেলটিতে ফিরে আসা ত্রুটি কোড to

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

            |   org 0x100
            |   use16
be 3b 01    |       mov si, input   ; source = input
31 c0       |       xor ax, ax      ; clear ax
86 c4       |   @@: xchg al, ah     ; swap al/ah (ah = total value)
ac          |       lodsb           ; al = *si++
e8 0a 00    |       call fn
81 fe 3e 01 |       cmp si, input+3 ; end of input?
72 f4       |       jb @b           ; repeat if not
b4 4c       |       mov ah, 0x4c    ; dos function: exit with al=error code
cd 21       |       int 0x21        ; syscall
            |
bb 32 01    |   fn: mov bx, table   ; pointer to lookup table
d0 e8       |       shr al, 1       ; divide input by 2
d7          |       xlatb           ; al = *(bx + al)
73 03       |       jnc @f          ; skip next instruction if input was odd
c0 e0 04    |       shl al, 4       ; shift low nibble to high nibble
c0 f8 04    |   @@: sar al, 4       ; shift high nibble to low nibble with sign-extension
e3 05       |       jcxz @f         ; return if cx is non-zero (only happens for the first input)
31 c9       |       xor cx, cx      ; clear cx
c3          |       ret
86 c4       |       xchg al, ah     ; swap al/ah (al = total value)
78 03       |   @@: js @f           ; multiply if negative, add if positive
00 e0       |       add al, ah      ; al = al+ah
c3          |       ret
f6 ec       |   @@: imul ah         ; ax = al*ah
c3          |       ret
21 12 d2 12 |   table db 0x21, 0x12, 0xd2, 0x12, 0xf1, 0x1e, 0x01, 0x2f, 0x12
f1 1e 01 2f |                       ; each value is stored in a 4-bit nibble
12          |
00 00 00    |   input db 3 dup(0)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.