আপনার রুটিন বিন মেশিন নয়


42

একটি প্রক্রিয়া একটি অনুরূপ এই হওয়া ASCII সংস্করণ বিবেচনা করুন শিম মেশিন বা plinko / পাচিনকো গেম:

    O

    ^
   \ ^
  ^ ^ \
 \ ^ / ^
U U U U U
1 2 3 4 5

Oএকটি বল যে নিচে পড়ে যায়।

  • এটি যখন হিট হয় ^, সেখানে একটি 50-50 সুযোগ থাকে এটি বাম বা ডান দিকে যাবে।
  • এটি যখন হিট হয় /, এটি সর্বদা বামে যায়।
  • যখন এটি আঘাত করে \, এটি সর্বদা ডানদিকে যায়।

বলটি অবশেষে Uনীচে অবস্থিত সংখ্যক খালের মধ্যে পড়ে । প্রশ্নটি হচ্ছে, প্রতিটি গর্তে এটি শেষ হওয়ার সম্ভাবনা কী?

এই বিশেষ ক্ষেত্রে জন্য সম্ভাব্যতা হয় 0.0, 0.1875, 0.5625, 0.125, এবং 0.125যথাক্রমে 5 মাধ্যমে পাত্র 1।

এখানে 5. সম্ভাব্যতা হয় পরিবর্তে 3 পাত্র সাথে অন্য উদাহরণ 0.5, 0.5এবং 0.0:

  O

  /
 ^ ^
U U U
1 2 3

এই চ্যালেঞ্জের মধ্যে আমরা কোনও পদ্ধতিতে কোনও ফ্যাশন সেটআপ করে এমন সংখ্যক স্তরগুলিকে এমন একটি ব্যবস্থায় এই সমস্যাটিকে সাধারণীকরণ করব।

চ্যালেঞ্জ

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা প্রক্রিয়াটির পিরামিড কাঠামোর ASCII প্রতিনিধিত্ব করে। (স্টিডিন / কমান্ড লাইন / ফাংশন আর্গ মাধ্যমে ইনপুট)

আপনি হয় ধরে নিতে পারেন যে এটি ফাঁকা স্থানগুলির সাথে এটি যথাযথ আকারে স্থাপন করেছে, যেমন

   ^
  \ ^
 ^ ^ \
\ ^ / ^

অথবা আপনি ধরে নিতে পারেন এটি কোনও ফাঁকা জায়গাতেই আসে না, যেমন

^
\^
^^\
\^/^

(যদি ইচ্ছা হয় তবে আপনি ধরে নিতে পারেন যে সেখানে একটি অনুবর্তনযোগ্য নতুন লাইন এবং / অথবা স্থানের পিছনে কিছু নিয়মিত প্যাটার্ন রয়েছে))

ইনপুট পিরামিড কাঠামোতে শূন্য সহ কয়েকটি স্তরের (ওরফে লাইন) থাকতে পারে। প্রত্যেক স্তরের প্রথমে এক আরো আছে ^, /অথবা \শেষ চেয়ে, এবং আছে levels + 1নীচে পাত্র (যার ইনপুট অংশ নয়)।

আপনার প্রোগ্রাম / ফাংশনটি অবশ্যই প্রতিটি কূপের বলের অবতরণগুলির সম্ভাব্যতার তালিকা মুদ্রণ / ফিরিয়ে দিতে হবে (বাম দিকের খাতকে ডানদিকের গর্তের ক্রমে)। এই ভাসমান হবে পয়েন্ট মান যে, যখন মুদ্রিত, অন্তত 3 দশমিক স্থান আছে (অতিরিক্ত শূন্য বা দশমিক পয়েন্টের প্রয়োজন নেই; 1জন্য ভালো 1.000, .5জন্য জরিমানা 0.500, ইত্যাদি)। যদি আপনি কোনও ফাংশন লিখে থাকেন তবে আপনি মানগুলি মুদ্রণ করতে পারবেন বা ভাসমানগুলির একটি তালিকা / অ্যারে ফিরিয়ে দিতে পারেন।

যে কোনও যুক্তিসঙ্গত মুদ্রিত তালিকার বিন্যাস ভাল। যেমন 0.5 0.5 0.0, [0.5 0.5 0.0], [0.5, 0.5, 0.0], {0.5, 0.5, 0.0}, অথবা 0.5\n0.5\n0.0সব ঠিক হয়ে যাবে।

উদাহরণ

0 স্তর: (এক তুচ্ছ থেকে ফোটা U)

ইনপুট: [no input/empty string given]
আউটপুট:1.0

1 স্তর:

ইনপুট: ^
আউটপুট:0.5 0.5

ইনপুট: /
আউটপুট:1.0 0.0

ইনপুট: \
আউটপুট:0.0 1.0

২ স্তর: (উপরে দ্বিতীয় উদাহরণ)

ইনপুট:

 /
^ ^

আউটপুট: 0.5 0.5 0.0

3 স্তর:

ইনপুট:

  ^
 ^ ^
^ ^ ^

আউটপুট: 0.125 0.375 0.375 0.125

ইনপুট:

  \
 / \
/ / \

আউটপুট: 0.0 0.0 0.0 1.0

4 স্তর: (উপরে প্রথম উদাহরণ)

ইনপুট:

   ^
  \ ^
 ^ ^ \
\ ^ / ^

আউটপুট: 0.0 0.1875 0.5625 0.125 0.125

7 স্তর:

ইনপুট:

      ^
     / ^
    ^ ^ /
   / \ / \
  ^ ^ / ^ \
 ^ \ ^ \ / ^
\ ^ ^ ^ \ ^ /

আউটপুট: 0.0 0.09375 0.28125 0.4375 0.1875 0.0 0.0 0.0

স্কোরিং

বাইটস মধ্যে সংক্ষিপ্ত উত্তর। টাইব্রেকার আগের পোস্ট।



"চলমান জায়গাগুলির কিছু ধারাবাহিক প্যাটার্ন" - আমি কি ধরে নিতে পারি যে এনথ লাইনের পিছনের স্থানগুলি বলটিকে এনথ বালতিতে নামার সম্ভাবনাটি এনকোড করেছে?
র্যান্ডম 832

4
@ র্যান্ডম 832 নং (আপনি কি সত্যিই ভাবেন যে উড়ে যাবে?)
ক্যালভিনের

আমি উত্তরের পরিবর্তে মন্তব্য হিসাবে পোস্ট করার কারণ রয়েছে। আমি কেবল ভেবেছিলাম এটি আকর্ষণীয় যে এই ধাঁধাটি ইনপুট সম্পর্কে কতটা অনুমোদনযোগ্য ছিল - বেশিরভাগ ক্ষেত্রে আমি দেখেছি ইনপুট এবং / অথবা আউটপুটটির বিন্যাস আরও কঠোরভাবে নির্ধারণ করা।
র্যান্ডম 832

@ র্যান্ডম 832: ইনপুট এবং আউটপুটটি খুব স্পষ্ট নয়। স্ট্যান্ডার্ড লুফোলগুলি (ইনপুটটিতে উত্তরটি এনকোড করার মতো) প্রতিটি চ্যালেঞ্জের দিকে মনোযোগ দেওয়ার দরকার নেই।
অ্যালেক্স এ।

উত্তর:


10

সিজেম, 50 48 45 44 42 40 বাইট

1]q{iD%"(+0 0+( (\Y/::+ (d2/_a+"S/=~+}/p

এটি প্রত্যাশা করে যে ইনপুটটি স্থান ব্যতীত হবে এবং এর পেছনের নতুন লাইন থাকবে। উদাহরণ স্বরূপ:

^
\^
^^\
\^/^

[0 0.1875 0.5625 0.125 0.125]

অ্যালগরিদম

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

এখানে চারটি অক্ষর এবং প্রতিটিটির সাথে সম্পর্কিত প্রয়োজনীয় ক্রিয়া রয়েছে:

  • ^: যখন এই চরিত্রটি দেখা দেয়, আপনি বর্তমান সম্ভাব্যতা দুটি ভাগে বিভক্ত করেন। উদাহরণস্বরূপ, যদি আমাদের প্রথম লাইনে থাকে তবে আমাদের এটিকে রূপান্তর করতে [1]হবে[0.5 0.5]
  • /: যখন এই অক্ষরগুলি দেখা দেয়, আমাদের <current probability> 0অ্যারেতে বর্তমান সম্ভাবনার জায়গাটি রাখতে হবে।
  • \: যখন এই অক্ষরগুলি দেখা দেয়, আমাদের 0 <current probability>অ্যারেতে বর্তমান সম্ভাবনার জায়গাটি রাখতে হবে।
  • \n: যখন এই চরিত্রটি ঘটে তখন আমাদের একটি নতুন লাইন থাকে। সুতরাং আমরা উপরের তিনটি অক্ষর থেকে সমস্ত জোড়া একসাথে গ্রুপ করি এবং পরবর্তী লাইনের জন্য প্রতিটি আইটেমের সম্ভাবনা পেতে তাদের যোগফল যোগ করি। প্রাক্তন জন্য। [0 0.5 0.25 0.25]রূপান্তরিত হয় [0 0.75 0.25]। মনে রাখবেন যে প্রথম এবং শেষ আইটেমগুলির আগে এবং পরে একটি অন্তর্নির্মিত জুটি (মূল্যবান 0) থাকে।

এখন আমাদের কেবলমাত্র সঠিক চরিত্রটি সনাক্ত করতে হবে এবং সঠিক ক্রিয়াটি সম্পাদন করতে হবে। এটি করতে এখানে সাধারণ গণিত ব্যবহার করতে দিন। জন্য ASCII কোড ^, \, /এবং \nহয় 94, 92, 47, এবং 10। কয়েকটি পরীক্ষার পরে, আমরা এই সংখ্যাগুলি 0, 1, 2 এবং 3 তে রূপান্তর করার জন্য এই সাধারণ সমীকরণটি পাই:

"^\/
":ied13f%ed4f%ed

দেয়:

Stack: [[94 92 47 10]]
Stack: [[3 1 8 10]]
Stack: [[3 1 0 2]]
3102

4 দৈর্ঘ্যের অ্যারেতে, শেষটি 4f%অন্তর্নিহিত হবে। সুতরাং আমরা কেবল %13অক্ষরের ASCII কোডটি করি এবং ক্রিয়াগুলির একটি অ্যারে থেকে সঠিক ক্রিয়াটি চয়ন করি।

কোড ব্যাখ্যা :

1]                                 e# Initial probability array with 1 probability
  q{                          }/   e# Read the whole input and iterate char by char
    iD%                            e# mod the ASCII code of the character with 13
"(+0 0+( (\Y/::+ (d2/_a+"S/        e# This is our actions array in order of [\ / \n ^]
                           =~      e# We pick the correct action and eval it
                             +     e# Evaling each action will leave one number out of the
                                   e# pairs out of the array. So we put it back in
                                p  e# Print the final probability array

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


1
আপনি 0 টি সারি দিয়ে এটি কীভাবে পরীক্ষা করেন?
ট্রাইকোপল্যাক্স

1
@ ট্রাইকপ্লেক্স এখন কাজ করা উচিত।
অপটিমাইজার

এটি এখন খালি ইনপুট দিয়ে কাজ করে :)
ট্রাইকপ্লেক্স

15

রুবি 140

->s{r=[1.0]
s.lines.map{|l|n=[i=0.0]*(r.size+1)
l.scan(/\S/).map{|e|a,b=e>?/?e>?]?[0.5]*2:[0,1]:[1,0]
z=r[i]
n[i]+=z*a
n[i+=1]+=z*b}
r=n}
r}

ফাংশন যা ইনপুটটিকে স্ট্রিং হিসাবে নেয় (পিরামিড হিসাবে সুন্দরভাবে ফর্ম্যাট করা যেতে পারে) এবং ফ্লোটগুলির একটি অ্যারে প্রদান করে।

এটি অনলাইনে পরীক্ষা করুন: http://ideone.com/kmsZMe

খুব সোজা বাস্তবায়ন। এখানে এটি নিয়ন্ত্রিত:

F = -> input {
  probabilities = [1.0]

  input.lines.each { |line|

    new_probabilities = [0.0] * (probabilities.size+1)
    elements = line.scan /\S/
    elements.map.with_index{|el, i|
      deltas = el > '/' ? (el > ']' ? [0.5,0.5] : [0,1]) : [1,0]

      d1, d2 = deltas

      new_probabilities[i] += probabilities[i] * d1
      new_probabilities[i + 1] += probabilities[i] * d2
    }
    probabilities = new_probabilities
  }
  return probabilities
}

13

রুবি, 140 158 বাইট

যখন আরও ভাল রুবি সংস্করণ থাকবে তখন এটি চালিয়ে যাবেন না । আপনার জন্য আরও কৌশল এখানে রইল।

একটি যুক্তি দিয়ে বেনাম ফাংশন। কোনও স্পেস থাকতে হবে না। ট্রেলিং নিউলাইন থাকতে পারে বা নাও থাকতে পারে।

->s{Z=(s.split'
')<<[]
K=[]
F=->i,j,f{k=Z[i][j]
K[i]||=0
k==?^?2.times{|m|F[i+1,j+m,f/2]}:!k ?K[j]+=f :F[i+1,j+(k==?/?0:1),f]}
F[0,0,1.0]
K}

9 বাইট বর্জ্য হ্যান্ডেল করার জন্য 0 levels(খালি স্ট্রিং)। সমস্ত পরীক্ষার কেস সঠিকভাবে কাজ করে, আদর্শে এখানে দেখুন


4
কেবলমাত্র "আরও ভাল" রুবি উত্তরটির অর্থ আপনার (বা এই বিষয়ে কোনও অন্য রুবি উত্তর) ভোটের উপযুক্ত নয়। :)
অ্যালেক্স এ।

আমি নিজেই এটি উত্সাহিত করেছি কারণ এতে কিছু সুন্দর কৌশল রয়েছে। splitউদাহরণস্বরূপ, আমি আপনার মাল্টলাইন পছন্দ করি ।
ক্রিশ্চিয়ান লুপাস্কু

12

পাইথ, 43 42 41 বাইট

umsdc+0sm@c[ZJhkJZKcJ2K)2x"\/"ekC,GH2.z]1

এটি প্রত্যাশা করে যে ইনপুটটি ফাঁকা ছাড়াই থাকবে। এটি অনলাইনে ব্যবহার করে দেখুন: পাইথ সংকলক / নির্বাহক

পাইথ, 40 বাইট (প্রশ্নবিদ্ধ)

umsdc+0sm,K@[ZJhkcJ2)x"\/"ek-JKC,GH2.z]1

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

এটি অনলাইনে ব্যবহার করে দেখুন: পাইথ সংকলক / নির্বাহক

ব্যাখ্যা:

umsdc+0sm,K@[ZJhkcJ2)x"\/"ek-JKC,GH2.z]1   
u                                   .z]1  reduce G, starting with G = [1], for H in all_input():
                               C,GH         zip(G,H)
        m                                   map each pair k to:
            [ZJhkcJ2)                         create a list [0, k[0], k[0]/2]
                     x"\/"ek                  index of k[1] in "\/" (-1 for "^")
          K@                                  take the correspondent element of the list and store in K
         ,                  -JK               create a pair (K, k[0]-K)                                                      
     +0s                                    sum and insert 0 at the begin
    c                              2        chop into pairs
 msd                                        sum up each pair
                                            G gets updated with this new list

উদাহরণস্বরূপ, যদি আমার কাছে বর্তমানে ইনপুট সম্ভাবনা থাকে G = [0.5, 0.5, 0.0]এবং সারিটি H = "^/^"নিম্নলিখিত হয়:

  • জিপ ... [(0.5,"^"), (0.5,"/"), (0.0,"^")]
  • আউটপুট সম্ভাব্যতা তৈরি করুন ... [[0.25,0.25], [0.5,0.0], [0.0, 0.0]]
  • 0 + যোগফল ... [0, 0.25, 0.25, 0.5, 0.0, 0.0, 0.0]
  • কাটা ... [0,0.25], [0.25,0.5], [0.0,0.0], [0.0]]
  • যোগফল ... [0.25, 0.75, 0.0, 0.0]

3
আমি এটি গল্ফ করার চেষ্টা করছিলাম এবং এটি আমাকে সংকলকটিতে একটি বাগে নিয়ে গেছে। গল্ফ কাজ করে, এখন আমি বাগটি ঠিক করেছি। গল্ফটি হ'ল 2-মান তালিকার তালিকাকে একটি তালিকার সাথে প্রতিস্থাপন করবে এবং তারপরে প্রথম মানটি বিয়োগ করে অন্য মানটি তৈরি করবে hk,K@[ZJhkcJ2)x"\/"ek-JK
isaacg

1
আপনি যখন কোনও বাগ ফিক্সিং করেন তখন এটি ভাষাটির একটি নতুন সংস্করণ হিসাবে গণনা করা হয় না (এবং এটি ঠিক করার আগে জিজ্ঞাসা করা প্রশ্নগুলির জন্য এখনও বৈধ)
অপটিমাইজার

1
@ অপ্টিমাইজার আপনার অধিকার। উত্তরে কিছু নোট যুক্ত হয়েছে, যা পরিস্থিতি ব্যাখ্যা করে।
জাকুব

2
@ অপ্টিমাইজার এই ক্ষেত্রে, এটি থাম্বের একটি ভাল নিয়ম বলে মনে হচ্ছে এটি সত্যিই ভাষার নতুন সংস্করণ হোক বা ভাষা বাস্তবায়নের একটি নতুন সংস্করণ যা কোনও বাগ সংশোধন করে, বাস্তবায়নটিকে অনুমানের সাথে সামঞ্জস্য করে তোলে ।
Desty

@ দেদি সে কারণেই আমি উল্লেখ করেছি যে এটি একটি সূক্ষ্ম রেখা;)
অপ্টিমাইজার 14

8

সি #, 274 247 বাইট

কোনও অভিনব, সম্পূর্ণ প্রোগ্রাম যা STDIN থেকে লাইনগুলি (স্পেসগুলি সহ বা না ছাড়াই, কেবল সেগুলি কেটে দেয়) পাঠায় এবং স্থান পৃথকীকরণের ফলাফলগুলি STDOUT এ মুদ্রণ করে।

using Q=System.Console;class P{static void Main(){decimal[]k={1},t;string L;for(int l=0,i;(L=Q.ReadLine())!=null;k=t)for(L=L.Replace(" ",""),t=new decimal[++l+1],i=0;i<l;)t[i]+=k[i]-(t[i+1]=(8-L[i]%8)/2*k[i++]/2);Q.WriteLine(string.Join(" ",k));}}

মন্তব্য সহ টিডিয়ার কোড:

using Q=System.Console;

class P
{
    // / 47
    // \ 92
    // ^ 94

    static void Main()
    {
        decimal[]k={1},t; // k is old array, t is new array

        string L; // L is the current line, R is the current result (1 if no rows)
        for(int l=0,i; // l is length of old array, i is index in old array
            (L=Q.ReadLine())!=null; // for each line of input
            k=t) // swap array over
            for(L=L.Replace(" ",""), // remove spaces
                t=new decimal[++l+1], // create a new array
                i=0;

                i<l;) // for each position

                t[i]+=k[i]-( // add to left position (for last time)
                        t[i+1]=(8-L[i]%8)/2*k[i++]/2 // assign right position (k is decimal)
                    );

        Q.WriteLine(string.Join(" ",k)); // print result
    }
}

7

পাইথন 3, 113

P=[1]
for C in input().split():
 l,*Q=0,
 for p,c in zip(P,C):r=p*"\^/".find(c)/2;Q+=l+r,;l=p-r
 P=Q+[l]
print(P)

Pপ্রতিটি লাইনের প্রতিক্রিয়া হিসাবে বার বার সম্ভাবনা ভেক্টর আপডেট করে । এই নতুন সম্ভাবনার ভেক্টরটি Qএকবারে একটি করে প্রবেশ তৈরি করা হয়েছে। নতুন স্লটগুলির মাধ্যমে পরিবেশন করা হয় এবং খাঁটি থেকে অবদানটিকে তার ডানদিকে rগণনা করে, পাশাপাশি আসন্ন স্লটে অবশিষ্ট অবদানের গণনা করার সময় p-r

লাইনগুলি ব্যাকস্ল্যাশে শেষ হওয়া কোনও সমস্যা এড়াতে প্রতিটি লাইন কমপক্ষে একটি জায়গায় শেষ হবে বলে আশা করে।


ইনপুটটিতে একাধিক লাইন থাকবে তাই আমি মনে করি না যে কোনও একক input()এটি পরিচালনা করতে পারে।
এলোমেলো

ইনপুটটির প্রতিটি লাইনের জন্য একটি অনুসরণযোগ্য নিউলাইন প্রয়োজন হয় না।
ব্রায়ান মিন্টন

@ আরন্দোমরা আমি এডলে লিখেছিলাম এবং এটি শেল প্রম্পটে মাল্টি-লাইন ইনপুটগুলিতে ভাল কাজ করে।
xnor

6

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

def f(s):
 r=[1];p=t=0
 for e in s:
  if'!'<e:b=p==t*-~t/2;r+=[0]*b;t+=b;v=ord(e)%7+1;a=r[p]/2;r[-1]+=v//3*a;r+=v%3*a,;p+=1
 return r[~t:]

যে কোনও শ্বেতস্পেসের সাথে কাজ করে কারণ এগুলি সমস্ত ফিল্টার আউট হয় (বাই if'!'<e)।

পদ্ধতি:

  • আমরা যে rকোনও প্রতিবন্ধকতা এবং তাদের নীচে অন্তর্ভুক্ত কূপগুলি পৌঁছানোর সম্ভাবনার একটি বর্ধনশীল তালিকা রাখি। আমরা তালিকা থেকে শুরু [1]
  • আমরা যদি সারিবদ্ধভাবে প্রথম প্রতিবন্ধক হয়ে থাকি 0তবে নেতৃস্থানীয় খালের জন্য আমাদের তালিকায় একটি অতিরিক্ত যুক্ত করতে হবে। pপরবর্তী ত্রিভুজাকার সংখ্যার সাথে এর সূচকটি তুলনা করে আমরা সিদ্ধান্ত নিই যে এটি প্রথম বাধা কিনা t*-~t/2
  • প্রতিটি প্রতিবন্ধকতার জন্য আমরা এর তালিকা-মানটি আংশিকভাবে শেষ উপাদানটিতে এবং আংশিকভাবে একটি নতুন পিছনের উপাদানকে যুক্ত করি। আমরা বাধা অক্ষর ( ^:0.5 0.5; /:1 0; \:0 1) এর উপর ভিত্তি করে তালিকা-মানকে ভাগ করে দেই । আমরা নিম্নলিখিত পদ্ধতিটি ব্যবহার করি:
    • v = ord(char) mod 7 + 1ফলন নিন^:4 /:6 \:2
    • v div 3 / 2প্রথম ভগ্নাংশ দেয় ( ^:0.5 /:1 \:0)
    • v mod 3 / 2দ্বিতীয় ভগ্নাংশ দেয় ( ^:0.5 /:0 \:1)
  • ফলাফলটি t + 1চূড়ান্ত তালিকার শেষ উপাদান r

@ স্প3000 এর চ্যাট পরামর্শের জন্য 2 বাইট ধন্যবাদ।


4

পার্ল, 78

#!perl -p0a
@r=($/=1);$^=.5;@r=map$r-$l+($l=$$_*($r=shift@r)),/./g,$r=$l=0for@F;$_="@r"

ফাঁকা জায়গা ছাড়াই ইনপুট নেয়।

আমাকে চেষ্টা করুন


1

টিআই-বেসিক, 73 76

একসাথে একটি লাইন ইনপুট নেয় এবং কোনও স্থান নিজের দ্বারা প্রবেশ করা হয়ে গেলে শেষ হয়, কারণ টিআই-বেসিকের স্ট্রিংগুলিতে লাইন ব্রেক না খালি স্ট্রিং দুটিই বৈধ নয়।

{1→X
Input Str1
While Str1≠"  //one space
.5seq(inString("^/",sub(Str1,I,1)),I,1,dim(Ans
augment(Ans∟X,{0})+augment({0},∟X-∟XAns→X
Input Str1
End
∟X

আমি পুরোপুরি নিশ্চিত হয়েছি যে আমি আকারটি সঠিকভাবে পেয়েছি (টিআই-বেসিকটি টোকানাইজড, সুতরাং প্রতিটি কমান্ডের মধ্যে একটি বা দুটি বাইট লাগে — সেক () একটি নেয়, ইনস্ট্রিং () দুটি নেয়, ম্লান () লাগে এবং এই জাতীয় I মাপ নিজেই গণনা।)

যদিও ব্যাকস্ল্যাশ অক্ষরটি একটি স্ট্রিংয়ে বৈধ, তবে মনে রাখবেন যে আপনি আপনার ক্যালকুলেটরটি সংশোধন না করে প্রোগ্রামের ভিতরে থেকে কোনওটিকে ইনপুট করার কোনও উপায় নেই।


0

জাভাস্ক্রিপ্ট - 117

পুনরাবৃত্তি ব্যবহার করার চেষ্টা করা হয়েছিল, কিন্তু এটি খুব দীর্ঘ ছিল ...

বিয়োগফলের ধারণাটির জন্য xnor এ টুপি , যা এক ডজন বা তার বেশি অক্ষরকে শেভ করে।

w=s=>{a=[1];s.split('\n').map(m=>{for(b=[i=0];z=a[i],f=m[i];b[i++]+=z-b[i])b[i+1]=f>']'?z/2:f<':'?0:z;a=b})
return a}

Ungolfed:

// s must not have spaces
w=s=>{
  // a is the current probability array
  a=[1];
  s.split('\n').map(
    // for each row of input...
    m=>{
      b=[0];  // b is the next row's probability array
      for(i=0; i<m.length;){
        z=a[i]; // z = probability
        f=m[i]; // f = letter
                                  // let's assume i == 0
        b[i+1] = (f>']') ? z/2 :  // if f == '^', b[1] = z/2
          (f<':' ? 0 :            // else if f == '/', b[1] = 0 
            z);                   // else b[1] = z
        b[i++]+=z-b[i];           // then add (z-b[1]) to b[0]
      }
      a=z-b    // increment current probability array
    }
  )
  return a;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.