স্থানান্তর বিন্দু


16

আপনার প্রোগ্রামটি বিন্দু এবং একটি নতুন লাইন পরে অনেকগুলি স্থান মুদ্রণ করতে হবে। শূন্যস্থানের সংখ্যাটি 0 <x <30 দিয়ে সংজ্ঞায়িত আপনার বিন্দুর x অবস্থান

প্রতিটি নতুন লাইন একটি পালা। আপনার প্রোগ্রামটি 30 টার্নের জন্য চলে। আপনার প্রোগ্রামটি এলোমেলো এক্স অবস্থানের সাথে শুরু হয় এবং প্রতিটি পালা নির্ধারিত অঞ্চলে থাকাকালীন এই অবস্থানটি 1 থেকে বাম বা ডানদিকে এলোমেলোভাবে স্থানান্তর করে। আপনার প্রতিটি বিন্দুতে 1 টি দ্বারা তার অবস্থান পরিবর্তন করতে হবে।

আপনার স্কোর হ'ল অক্ষরের সংখ্যা। প্রতিটি মুদ্রিত লাইনে 30 টি অক্ষর (এবং নিউলাইন) সমন্বিত থাকলে আপনি 10 বোনাস পয়েন্ট পাবেন। আপনি 50 বোনাস পয়েন্ট পাবেন, যদি, এলোমেলোভাবে থাকে তবে আপনার প্রোগ্রামটি নির্ধারিত অঞ্চলের মাঝখানে থাকে।

সম্পাদনা করুন: 50 টি বোনাস পয়েন্টগুলি আপনার বিন্দুটিকে মাঝখানে টানানোর উদ্দেশ্যে। উদাহরণস্বরূপ, যদি আপনার বিন্দুটি x = 20 এ থাকে এবং বাম দিকে 66 66% এবং ডানদিকে যাওয়ার জন্য %৩% এর সুযোগ থাকে তবে এটি প্রয়োগ হয়। এটি প্রারম্ভিক বিন্দু থেকে স্বতন্ত্র থাকতে হবে এবং কেবলমাত্র ডানদিকে / বামের শতাংশের মান পরিবর্তন করেই ঘটতে হবে।

কোনও ধরণের কোনও ইনপুট অনুমোদিত নয়, নির্বাহী কনসোলের আউটপুট থাকতে হবে!

আরও ভাল বোঝার জন্য, এখানে জাভাতে একটি পঠনযোগ্য উদাহরণ, এটি আপনাকে 723 স্কোর দেবে:

public class DotJumper{
    public static void main(String[] args){
        int i = (int)(Math.random()*30);
        int max = 29;
        int step = 1;
        int count = 30;
        while(count>0){
            if(i<=1){
                i+=step;
            }else if(i>=max){
                i-=step;
            }else{
                if(Math.random() > 0.5){
                    i+=step;
                }else{
                    i-=step;
                }
            }
            print(i);
            count--;
        }
    }
    public static void print(int i){
        while(i>0){
            System.out.print(' ');
            i--;
        }
        System.out.println('.');
    }
}

আপনার উদাহরণে, আমি মনে করি পরিবর্তে int i = (int)(Math.random()*30);হওয়া উচিত int i = 1 + (int)(Math.random()*29);। যেমনটি এটি 0 >= x > 30পরিবর্তে একটি সংখ্যা উত্পন্ন করে 0 > x > 30
ভিক্টর স্টাফুসা

আমি মনে করি মূল কোডটি সঠিক।
ব্যবহারকারী 2846289

এটি সঠিক, কারণ আমি প্রথমে এবং মুদ্রণটি স্থানান্তর করি। সুতরাং এলোমেলো মান সীমানা ছাড়িয়ে গেলেও, যদি প্রথমে সঠিক হয় এবং তারপরে মুদ্রণ করা হয়।
রেগেমেমফিন

@ কোস্টরনর তবে এটি সূচিত করে যে শুরুর বিন্দু অবস্থানটি অভিন্ন বিতরণ অনুসরণ করে না, প্রথম অবস্থানটি অন্য অবস্থানগুলির চেয়ে দ্বিগুণ। OTOH, অভিন্ন বিতরণ করাও প্রয়োজন ছিল না।
ভিক্টর স্টাফুসা 21

দেখে মনে হচ্ছে এমন একটি প্রোগ্রাম তৈরি করা আরও শক্ত হবে যেখানে ডট আরও প্রায় লাফ দেয়। তাহলে এর চলন সীমাবদ্ধ করার জন্য কেন বোনাস রয়েছে?
ক্রিস ল্যাপ্লেন্ট

উত্তর:


18

এপিএল, 39 - 10 - 50 = 21২

0/{⎕←30↑'.',⍨⍵↑''⋄⍵+¯1*⍵>.5+?28}/31/?29

ডায়ালগের সাথে পরীক্ষিত ⎕IO←1এবং ⎕ML←3তবে এটি বেশ পোর্টেবল হতে হবে।

ব্যাখ্যা

                   ?29  take a random natural from 1 to 29
                31/     repeat it 31 times
              }/        reduce (right-fold) the list using the given function:
          ⍵↑''          . make a string of ⍵ (the function argument) spaces
     '.',⍨              . append a dot to its right
⎕←30↑                   . right-pad it with spaces up to length 30 and output
                ◇       . then
             ?28        . take a random natural from 1 to 28
          .5+           . add 0.5, giving a number ∊ (1.5 2.5 ... 27.5 28.5)
        ⍵>              . check whether the result is <⍵ (see explanation below)
     ¯1*                . raise -1 to the boolean result (0 1 become resp. 1 -1)
   ⍵+                   . add it to ⍵ and return it as the new accumulator value
0/{                     finally ignore the numeric result of the reduction

প্রতিটি পদক্ষেপে, এই কোডটি সিদ্ধান্ত নেয় যে বিন্দুটি বামে বা ডানদিকে নিয়ে যেতে হবে তার সম্ভাবনার উপর নির্ভর করে যে এলোমেলো সংখ্যাটি বেছে নেওয়া হয়েছে (1.5% ... 27.5 28.5) বর্তমান বিন্দুর অবস্থানের চেয়ে কম।

সুতরাং, যখন বর্তমান ডট অবস্থান (বামে ফাঁকের সংখ্যা) 1 হয় তখন বর্ধন সবসময় +1 হয় (এই সংখ্যাগুলির 1.5 টি ... 28.5 হয়> 1), যখন এটি 29 হয় সর্বদা -1 (সমস্ত সংখ্যার সবগুলিই) <29) হয়; অন্যথায় এটি +1 এবং -1 এর মধ্যে এলোমেলোভাবে বেছে নেওয়া হয়, সেই সম্ভাবনার সাথে সেই চূড়ান্তগুলির মধ্যে একটি লিনিয়ার বিভাজন থাকে। সুতরাং বিন্দুটি সর্বদা চলমান থাকে এবং সর্বদা পাশের দিকের চেয়ে কেন্দ্রের দিকে যাওয়ার সম্ভাবনা বেশি। যদি এটি একেবারে মাঝখানে থাকে তবে এর উভয় পাশে যাওয়ার 50% সুযোগ রয়েছে।

প্রতিলিপিযুক্ত মান হ্রাস (ডান ভাঁজ) {...}/a/bহ'ল একটি কৌশল যা আমি একটি ফাংশন পুনরাবৃত্তি করতে এসেছিa-1 বারের , মান দিয়ে শুরু করে bএবং প্রতিটি পুনরুক্তির ফলাফল পরবর্তী সংকেতের জন্য সঞ্চালক ( ) যুক্তি হতে পারি। দ্বিতীয় এবং পরবর্তী ইনপুট আর্গুমেন্টগুলি ( ) পাশাপাশি চূড়ান্ত ফলাফল উপেক্ষা করা হয়। এটি গার্ডের সাথে নিয়মিত পুনরাবৃত্তির কলের চেয়ে ছোট আকারে পরিণত হয়েছে।

উদাহরণ রান

0/{⎕←30↑'.',⍨⍵↑''⋄⍵+¯1*⍵>.5+?28}/31/?29
                   .          
                    .         
                   .          
                  .           
                 .            
                .             
               .              
                .             
               .              
                .             
               .              
              .               
             .                
              .               
             .                
              .               
               .              
              .               
               .              
                .             
                 .            
                  .           
                 .            
                  .           
                 .            
                  .           
                 .            
                .             
               .              
                .             

এপিএল গল্ফের জন্য দুর্দান্ত ভাষা (যদিও আমার পক্ষে পড়া খুব কঠিন); ইউপি!
blabla999

@ blabla999 এপিএলে অনেকগুলি প্রচলিত চিহ্ন এবং কিছু বিস্ময়কর চিহ্ন রয়েছে তবে আপনি যখন তাদের ফাংশনটি শিখেন তখন ভাষা পড়া এবং লেখা সহজ। 'গল্ফিং' ভাষাগুলির ASCII গোলমাল অবশ্যই অবশ্যই সহজ, তবে আমি এটি নিয়মিত ভাষার চেয়ে আরও সহজ বলার উদ্যোগ নিয়েছিলাম। বাক্য গঠনটি খুব নিয়মিত, আপনার কেবল একটি নিয়ম রয়েছে: এক্সপ্রেশনগুলি ডান থেকে বামে কার্যকর করা হয়, যাতে সেগুলি বাম থেকে ডানে পড়তে পারে: +/2×⍳9"সমষ্টি: দুইবার: 9 অবধি প্রাকৃতিক" পড়লেও হয় বিপরীতভাবে মৃত্যুদন্ড কার্যকর করা।
টোবিয়া

এটি কি আমি বা এখানে প্রতি লাইনে 31 টি অক্ষর রয়েছে?
গাসডোর

আমি ৩০ টি পেয়েছি, উদাহরণস্বরূপ একটি লাইন অনুলিপি-সম্পাদনা করে একটি সম্পাদক হিসাবে চালানো, এবং আবার কোডটি চেক করে both ⎕←30↑...30 টি অক্ষরের প্লাস একটি newline কোন ব্যাপার কি, স্ট্রিং হয় প্রিন্ট হবে...
Tobia

12

গণিত 138 - 10 - 50 = 78

আমি এটি পোস্ট করছি না কারণ আমি মনে করি এটি বিশেষত ভাল গল্ফড, তবে অন্যান্য কারণে। এটি একটি মার্কভ প্রক্রিয়া ব্যবহার করে বল "কেন্দ্রিক" পাওয়ার জন্য ডিজাইন করা ট্রানজিশন ম্যাট্রিক্স সহ সংজ্ঞা ।

গাণিতিকায় একটি মার্কভ প্রক্রিয়া ব্যবহার আমাদের কিছু দরকারী পরিসংখ্যান গণনা করতে দেয় , আপনি নীচে দেখবেন।

প্রথম কোড (ফাঁকা স্থানগুলির প্রয়োজন নেই):

r = Range@28/28;
s = DiagonalMatrix;
ListPlot[RandomFunction[DiscreteMarkovProcess[RandomInteger@#, r~ s ~ -1 + s[29/28- r, 1]], 
                                              #], PlotRange -> #] &@{1, 29}

কিছু ফলাফল:

গণিত গ্রাফিক্স

আমি ব্যবহৃত ট্রানজিশন ম্যাট্রিক্স হ'ল:

MatrixPlot[s[r, -1] + s[29/28 - r, 1]]

গণিত গ্রাফিক্স

তবে আমি যেমন বলেছি, মজার অংশটি হ'ল ব্যবহার করা DiscreteMarkovProcess[] ব্যবহারটি আমাদের যা ঘটছে তার একটি ভাল ছবি দখল করতে সহায়তা করে।

আসুন দেখে নেওয়া যাক যে 15কোনও সময়ে t কোনও নির্দিষ্ট এলোমেলো অবস্থা থেকে শুরু হওয়ার সম্ভাবনাটি :

d = DiscreteMarkovProcess[RandomInteger@29, s[r, -1] + s[29/28 - r, 1]];
k[t_] := Probability[x[t] == 15, x \[Distributed] d]
ListLinePlot[Table[k[t], {t, 0, 50}], PlotRange -> All]

গণিত গ্রাফিক্স

আপনি এটি 0 থেকে 0 এবং মানের মান 0 এর মাঝে ওঠানামা করতে দেখতে পান, কারণ এটি প্রারম্ভিক অবস্থার উপর নির্ভর করে আপনি কেবল একটি বিজোড় বা এমনকি সংখ্যক পদক্ষেপে 15 এ পৌঁছাতে পারেন :)

এখন আমরা একই জিনিসটি করতে পারি, তবে ম্যাথামেটিকাকে সমস্ত সম্ভাব্য প্রাথমিক রাজ্য থেকে শুরু হওয়া পরিসংখ্যান বিবেচনা করতে বলছি। হচ্ছে সম্ভাব্যতা কি 15দীর্ঘকাল পর t:

d = DiscreteMarkovProcess[Array[1 &, 29]/29, s[r, -1] + s[29/28 - r, 1]];
k[t_] := Probability[x[t] == 15, x \[Distributed] d]
ListLinePlot[Table[k[t], {t, 0, 100}], PlotRange -> All]

গণিত গ্রাফিক্স

আপনি দেখতে পাচ্ছেন এটিও দোলায় ... কেন? উত্তরটি সহজ: বিরতিতে [1, 29]এমনকি সংখ্যার চেয়েও বেশি বিজোড় রয়েছে :)

বলটি থাকার সম্ভাবনা যদি আমরা জিজ্ঞাসা করি তবে দোলন প্রায় শেষ হয়ে গেছে 14 OR 15:

গণিত গ্রাফিক্স

এবং আপনি রাষ্ট্রের সম্ভাবনার সীমা (সিজারো অর্থে) জানতে চাইতে পারেন:

ListLinePlot@First@MarkovProcessProperties[d, "LimitTransitionMatrix"]

গণিত গ্রাফিক্স

ওহ, ভাল, সম্ভবত আমি এই জাতীয় একটি অফ টপিক উত্তরের জন্য কিছু ডাউনভোটের প্রাপ্য। মুক্ত মনে.


2
এই সংক্ষিপ্ত নয় তবে এর সত্যিই ঠান্ডা।
কসরা রাহজারদী

উত্সাহিত, এবং এখন আপনার স্কোর আর 2,222 নয় ...
করমুলিয়ন

ধন্যবাদ! আপনি কঠোরভাবে আওতায় গিয়ে তা পূর্বাবস্থায় ফেলাতে পারেন :)
ডঃ বেলিসারিয়াস

7

বাশ, স্কোর 21 (81 বাইট - 50 বোনাস - 10 বোনাস)

o=$[RANDOM%28];for i in {D..a};{ printf " %$[o+=1-2*(RANDOM%29<o)]s.%$[28-o]s
";}

এই উত্তরে, বিন্দুটি মাঝখানে ফিরে "টানা" হয়। 0 বা 30 এ প্রারম্ভিক পয়েন্টটিকে হার্ডকড করে পরীক্ষা করা যায় can


ভাল সমাধান! তবে দয়া করে শুরুর পয়েন্টটি হার্ডকোড করবেন না;)
রেগেমেমফিন

1
@ কোস্টরনর - ওফ - আমি এটি মিস করেছি এবং এখন এটি ঠিক করে ফেলেছি।
ডিজিটাল ট্রমা

2
প্রতিস্থাপন করে গৃহস্থালির কাজ সংরক্ষণ {1..30}দ্বারা{P..m}
জিওফ মধ্যে Reedy

যদি oহয় 1এবং RANDOM%30ফিরে আসে 0? এবং পরবর্তী পুনরাবৃত্তি উপর, খুব?
ব্যবহারকারী 2846289

@ ভাদিমআর - আমার মনে হয় সীমানা শর্তগুলি এখন ঠিক হয়ে গেছে।
ডিজিটাল ট্রমা

5

রুবি 69 66 64-60 = 4

i=rand(30);30.times{a=' '*30;a[i]=?.;puts a;i+=rand>i/29.0?1:-1}

নমুনা:

            .             
           .              
            .             
           .              
          .               
           .              
            .             
             .            
              .           
             .            
              .           
               .          
              .           
               .          
              .           
             .            
            .             
             .            
              .           
             .            
              .           
             .            
            .             
             .            
            .             
             .            
            .             
           .              
          .               
           .              

এর i=rand 30;পরিবর্তে আপনি একটি বাইট সংরক্ষণ করতে পারেন i=rand(30);
জর্ডান

5

স্মার্টটাক , 161 159 145-60 = 85

সমস্ত কলাম 30chars দীর্ঘ (পরিবর্তনীয় স্ট্রিং খ মধ্যে অপারেটিং);

এলোমেলো মুভমেন্টের সুযোগটি পি (আরএনডি (0..29) -পি) এর সাথে রাইন্ড ভ্যালু দ্বারা সামঞ্জস্য করা হয়, সাইনটি (-1/0/1) গ্রহণ করে এবং তারপরে (-1 / + 1) এর সাথে সামঞ্জস্য করে (-1 | 1), যা সরানো বদ্বীপ হিসাবে নেওয়া হয় (কার্যকরভাবে গণনা: x চিহ্ন <= 0 ifTrue: -1 ifFalse: 1)। যেহেতু এসটি 1-ভিত্তিক সূচক ব্যবহার করে, আমাকে সমস্ত স্ট্রিং রেফগুলি +1 দ্বারা সামঞ্জস্য করতে হবে (plz -1 | 1 বিট ফিডলিং হ্যাক ;-)- এর প্রশংসা করুন)।

p:=((r:=Random)next*29)rounded.(b:=String new:30)at:p+1put:$..0to:29do:[:i|b at:p+1put:$ .p:=(p+(((r next*29)-p)sign-1|1))min:29max:0.b at:p+1put:$..b printCR]

রুবি সংস্করণ (থানেক্স এবং আপ @ ফিপগ্রার) থেকে একটি ধারণা চুরি করা, আমি ন্যূনতম / সর্বোচ্চ পরীক্ষা থেকে মুক্তি পেতে পারি:

p:=((r:=Random)next*29)rounded.(b:=String new:30)at:p+1put:$..1to:30 do:[:i|b at:p+1put:$ .p:=p+((r next-(p/29))sign-1|1).b at:p+1put:$.;printCR]

আউটপুট: (পরে আমি নিজেই কল-সংখ্যা এবং উল্লম্ব বার যুক্ত করেছি; উপরের কোডগুলি সেগুলি উত্পন্ন করে না)

 012345678901234567890123456789
|                     .        |
|                    .         |
|                   .          |
|                  .           |
|                 .            |
|                  .           |
|                 .            |
|                  .           |
|                 .            |
|                .             |
|                 .            |
|                .             |
|               .              |
|                .             |
|                 .            |
|                  .           |
|                 .            |
|                  .           |
|                 .            |
|                  .           |
|                 .            |
|                .             |
|               .              |
|                .             |
|               .              |
|                .             |
|               .              |
|              .               |
|               .              |
|              .               |
 012345678901234567890123456789

4

সি, 86

ধরে নিই যে rand()ফাংশনটি বপনের প্রয়োজন নেই।

k=30;main(i){i=rand()%k;while(k--){printf("%*c\n",i+=i==30?-1:i==1||rand()%2?1:-1,46);}}

ব্যাখ্যা:

সি, এ উপায়ে যে আউটপুট দৈর্ঘ্য কমপক্ষে দৈর্ঘ্য হবে, এবং এই সর্বনিম্ন দৈর্ঘ্য ফাংশন কল (এই ক্ষেত্রে আর্গুমেন্ট দ্বারা নির্ধারিত হয়, এটা । মানে পরবর্তী যুক্তি ( ) একটি চরিত্র ( বিন্দু)।"%*c"*i+=i==30?-1:i==1||rand()%2?1:-1c46

সীমানা যাচাইয়ের জন্য, আমি দুঃখিত যে আমি এটি সম্পর্কে ভুলে গেছি। আমি এখন 15 অক্ষরের ব্যয়ে উত্তরে এটি যুক্ত করেছি। তিন অপারেটর নিম্নরূপ কাজ করে: boolean_condition?value_if_true:value_if_false। নোট করুন যে সি তে সত্য 1 এবং মিথ্যা 0 হয়।


আপনার কোডটিতে যা চলছে তা আপনি প্রসারিত করতে পারেন? printf("%*c\n",i+=rand()%2?1:-1,46)ফাঁকা স্থানগুলি কীভাবে মুদ্রণ করা যায় তা বুঝতে সমস্যা হচ্ছি , পাশাপাশি এটি কীভাবে সম্ভবত 29 টি অতীতকে অগ্রসর হতে আটকে রাখে। ধন্যবাদ আগাম ধন্যবাদ। (দুঃখিত, আমি কোনও সি প্রোগ্রামার নই))
ডিসেন্ট ড্যাবলার

@ ফ্রিয়েডবয় সম্পন্ন হয়েছে, আশা করি আপনি বুঝতে পেরেছেন :)
ব্যবহারকারীর 12205

আআআআআআআআআআআআআআআআআআআআ। ;-) তবে বাকিগুলি এখন স্পষ্ট। ধন্যবাদ! এবং দুর্দান্ত সমাধান! rand()%2এটি কি খুব অনুমানযোগ্য (বিজোড় / এমনকি বাঁক) এর সাথেও সি এর অদ্ভুত আচরণ রয়েছে ? আমি rand()%2আমার পিএইচপি সমাধানে আপনার চেষ্টা করেছি, এবং এটি এই খুব অনুমানযোগ্য আচরণটি প্রদর্শন করেছে (এর বিপরীতে rand(0,1)। পিএইচপি যেহেতু সি লাইব্রেরিগুলির প্রচুর ব্যবহার করে (আমি সঠিক হলে) আমি ভাবছিলাম যে আপনার সি প্রোগ্রামের একই 'ত্রুটি' আছে কিনা? ।
ডিসেন্ট অপটু কর্মী

@fireeyedboy আমি বীজ করা হয়নি rand()ফাংশন। সিতে যদি rand()স্পষ্টভাবে বীজ না দেওয়া হয় তবে এটি সর্বদা প্রতিবার একই বীজ ব্যবহার করে। এ কারণেই এটি অনুমানযোগ্য। যদি আমার এটি বীজ করতে হয় তবে আমি করতে পারি srand(time());যার জন্য 14 টি অক্ষর
ব্যবহারকারী 12205

তবে এটি কি এতটা অনুমানযোগ্য যে এটি পরবর্তী প্রতিটি কলটিতেও বিজোড় থেকে এমনকি স্যুইচ করে? পিএইচপি দাবীগুলির rand() সাথে srand()আর বীজ লাগানোর দরকার নেই, তবে এখনও এই অদ্ভুত আচরণটি দেখায় ।
ডিসেন্ট ড্যাবলার

4

জাভা: 204 183 182 176 175 অক্ষর - 10 - 50 = 115

class K{public static void main(String[]y){int k,j=0,i=(int)(29*Math.random());for(;j++<30;i+=Math.random()*28<i?-1:1)for(k=0;k<31;k++)System.out.print(k>29?10:k==i?'.':32);}}

প্রথমত, বিন্দুর অবস্থান অবশ্যই হতে হবে 0 < x < 30, [[1-29]]। এটি 0 থেকে 28 এর মধ্যে একটি সংখ্যা বিতরণ করে যা সমানভাবে বিতরণ করা হয় এবং এই প্রোগ্রামের উদ্দেশ্যে [0-28] একই প্রভাব ফেলেছে [1-2-2]:

i=(int)(29*Math.random());

আমি ব্যক্তিগতভাবে পছন্দ করি যদি এটি প্রায় 14 এর কাছাকাছি বিতরণ করা হয় তবে আমার উত্তরটি দীর্ঘতর হবে:

i=0;for(;j<29;j++)i+=(int)(2*Math.random());

দ্বিতীয়ত, এই কোডটি নিশ্চিত করে যে এটি মাঝের দিকে থাকে:

i+=Math.random()*28<i?-1:1

+1 পাওয়ার সম্ভাবনাটি ছোট হিসাবে এর চেয়ে বড় iএবং আমাদের -1 এর বিপরীতে রয়েছে। যদি i0 হয় তবে +1 পাওয়ার সম্ভাবনা 100% এবং -1 পাওয়ার সম্ভাবনা 0%। যদি i28 হয় তবে এর বিপরীতটি ঘটবে।

তৃতীয়ত, আউটপুটটি আরও সহজে দেখতে 32শেষে প্রান্তটি প্রতিস্থাপন করে '_'আমরা দেখতে পাই যে প্রতিটি লাইনে 30 টি অক্ষর এবং একটি নতুন রেখা রয়েছে:

__________.___________________
_________.____________________
________._____________________
_________.____________________
__________.___________________
___________.__________________
__________.___________________
_________.____________________
________._____________________
_________.____________________
________._____________________
_________.____________________
__________.___________________
_________.____________________
__________.___________________
___________.__________________
__________.___________________
_________.____________________
__________.___________________
___________.__________________
____________._________________
_____________.________________
____________._________________
_____________.________________
______________._______________
_____________.________________
______________._______________
_______________.______________
______________._______________
_____________.________________

পূর্ববর্তী সংস্করণে ভুল বোঝাবুঝির নির্দেশ করার জন্য @ ভাদিমআর (এখন ব্যবহারকারী 2846289) কে ধন্যবাদ।

এই উত্তরটি প্রাথমিকভাবে পোস্ট করার পরে আড়াই বছর পরেও after টি চরিত্রের শেভ করার জন্য @ কেভিন ক্রুজসেনকে ধন্যবাদ জানাই।


কিন্তু iচাওয়ার 0অবৈধ, তাই না?
ব্যবহারকারী 2846289

@ ভাদিমআর, আমার iজন্য [0-29] এর মধ্যে রয়েছে। এটি [1-30] বা [288-317] এর সমতুল্য, আউটপুট একই হবে। কী গুরুত্বপূর্ণ তা হল ব্যবধানে 30 টি পূর্ণসংখ্যার সংখ্যা [0-29]।
ভিক্টর স্টাফুসা

"স্পেসের সংখ্যা হ'ল 0 <x <30 দ্বারা সংজ্ঞায়িত আপনার বিন্দুর এক্স অবস্থান হ'ল স্পেসের সংখ্যা (বা 0-ভিত্তিক ডট অবস্থান) ১.২৯। iহতে পারে না 0। আমি বুঝলাম এটি মজা করা সম্পর্কে সমস্ত কিছু তবে তবুও এটি দুঃখজনক।
ব্যবহারকারী 2846289

@ ভাদিমআর, ওহ, ধন্যবাদ সংশোধন করা হয়েছে। এর অর্থ এই যে বিন্দুটি কখনই সঠিক পজিশনে থাকবে না তবে যাইহোক, এটিই নির্দিষ্ট করা হয়েছিল।
ভিক্টর স্টাফুসা

আমি দুঃখিত, তবে এটি কিছুই ঠিক করেনি। কল্পনা করুন iপায় 1প্রাথমিকভাবে, এবং প্রথম পুনরাবৃত্তির Math.random()হয় 0, তারপর iপায় 0। দয়া করে আমাকে ভুল করবেন না, এটি আপনার উত্তর সম্পর্কে নয় । বরং সি-লাইক বাদে বেশিরভাগ ভাষা পড়তে আমার অক্ষমতা সম্পর্কে। তারপরে ত্রুটি সম্পর্কে কোনও প্রতিক্রিয়া ছাড়াই (আপভোটগুলি বাদ দিয়ে) আমি কীভাবে জানতে পারি যে সেগুলি সঠিক কিনা?
ব্যবহারকারী 2846289

3

গণিত 157-10-50 = 97

1-30 থেকে একটি এলোমেলো সংখ্যা শুরু করার জন্য ব্যবহৃত হয়। বিন্দু থেকে সমস্ত কলাম নম্বরগুলি এর মাধ্যমে বাছাই করা হয়েছে RandomChoice[If[c > 15, {2, 1}, {1, 2}] -> {-1, 1}] + c, যা অনুবাদ করে: "যদি পূর্ববর্তী কলাম সংখ্যাটি 15 এর চেয়ে বেশি ছিল, তবে সেট -1 -1,1 from থেকে একটি সংখ্যা নির্বাচন করুন, -1 ওয়েট 2: 1 সহ 1; অন্যথায়, ওজনগুলি ফ্লিপ করুন এবং একই সেট থেকে চয়ন করুন।

ReplacePart আগ্রহের কলামের সাথে মিলে যায় এমন 30 টি ফাঁকা জায়গার তালিকায় উপাদানটিকে প্রতিস্থাপন করে।

f@c_ := Switch[d = RandomChoice[If[c > 15, {2, 1}, {1, 2}] -> {-1, 1}] + c, 1, 2, 30, 29, d, d]
Row@ReplacePart[Array["_" &, 29], # -> "."] & /@ NestList[f, RandomInteger@29+1, 30] // TableForm

ডট


এর দুর্দান্ত ব্যবহারRandomChoice[]
ডাঃ বেলিসারিয়াস

3

> <>, 358 - 10 = 348

এটি কোডগল্ফে জিতবে না, তবে এটি কার্যকর। (উইন্ডোজ On এ এই দোভাষীর সাহায্যে , যা "পি" নির্দেশিকাটি এসোলাং পৃষ্ঠার সংজ্ঞায়নের চেয়ে আলাদাভাবে প্রয়োগ করে)

1v        >a"                              "v
v<      0<} vooooooooooooooooooooooooooooooo<
&  _>   v : >$" "@p1+:2f*(?v;
  |x1>  v^}!               <
  |xx2> v p
  |xxx3>v  
  |xxxx4v $
>!|xxx< v }
  |xxxx6v }
  |xxx7>v @
  |xx8> v :
  |x9v  < @>  5)?v$:67*)?vv
   _>>&?v!@^     >$:b(?v v
  v }"."< :        v+ 1<  <
  >a+b+00}^0}}${"."< <- 1<

এই ভাষার নাম গুগল করা যায় না, সুতরাং আগ্রহী জন্য এটি এর esolang নিবন্ধ এখানে ।


আপনি কি 50-এর কম অক্ষরে -50 এর জন্য প্রয়োজনীয় কোডটি কোড করতে পারেন?
ভিক্টর স্টাফুসা

1
@ ভিক্টর সম্ভবত, তবে> <> কোড করার একটি বিশাল ব্যথা (একটি মজাদার দৈত্য ব্যথা), সুতরাং আমার এটি থেকে বিরতি নেওয়া দরকার।
স্যারসিক্সিরটিक्स

পছন্দ করেছেন ভাল গল্ফড স্যার।
গুসডোর

3

পিএইচপি, 118 113 112 111 (, -10 বোনাস পয়েন্ট = 101)

(মারাত্মকভাবে অনুমানযোগ্য rand()আচরণ এবং আরও কিছুটা দক্ষতার সাথে দ্বিতীয় চেষ্টা )

for($n=30,$i=rand(1,29),$t=$s=pack("A$n",'');$n--;$i+=$i<2|rand()%2&$i<28?1:-1,$t=$s){$t[$i-1]='.';echo"$t\n";}

সম্ভাব্য ফলাফল:

______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________

পিএইচপি, 130 (, -10 বোনাস পয়েন্ট = 120)

(প্রথম চেষ্টা)

এটি সম্ভবত এখনও আরও কার্যকর হতে পারে:

for($n=30,$i=rand(1,29),$t=$s=str_repeat(' ',$n)."\n";$n--;$i=$i<2?2:($i>28?28:(rand(0,1)?$i+1:$i-1)),$t=$s){$t[$i-1]='.';echo$t;}

আমি যদি স্থানটি আন্ডারস্কোর (প্রদর্শনের উদ্দেশ্যে) দিয়ে প্রতিস্থাপন করি তবে এটি একটি সম্ভাব্য ফলাফল:

________._____________________
_______.______________________
______._______________________
_______.______________________
________._____________________
_______.______________________
______._______________________
_______.______________________
______._______________________
_______.______________________
________._____________________
_______.______________________
________._____________________
_________.____________________
__________.___________________
___________.__________________
__________.___________________
___________.__________________
__________.___________________
_________.____________________
________._____________________
_________.____________________
________._____________________
_______.______________________
______._______________________
_____.________________________
____._________________________
_____.________________________
____._________________________
___.__________________________

আশ্চর্যের ব্যাপার, আমি যদি প্রতিস্থাপন rand(0,1)সঙ্গে rand()%2(পিএইচপি 5.4, উইন্ডোস XP তে), র্যান্ডম ফলাফলের সবসময় বিজোড় থেকে পরিবর্তন করা, এবং তদ্বিপরীত, প্রতিটি পরবর্তী পুনরাবৃত্তিতে, তৈরীর rand()যে অর্থে, একটি সব আকস্মিক worryingly আন্দাজের। এই 'বাগ' 2004 এর পর থেকে জানা হয়ে গেছে বলে মনে হচ্ছে । যদিও এটি ঠিক একই 'বাগ' কিনা তা সম্পূর্ণরূপে নিশ্চিত নয়।


3

জে 42 টি অক্ষর - 50 -10 = -18

'_.'{~(|.~((I.%<:@#)*@-?@0:))^:(<@#)1=?~30

ডান দিক থেকে শুরু করে ব্যাখ্যা ( ট্রেন সম্পর্কে কিছু জ্ঞান কাজে আসে):

init=: 0=?~30          NB. where is the 0 in the random permutation of [0,29]
rep =: ^:(<@#)         NB. repeat as many times as the array is long, showing each step

rnd =: ?@0:            NB. discards input, generates a random number between 0 and 1

signdiff =: *@-        NB. sign of the difference (because this works nicely with
                       NB. the shift later on).

left_prob =: (I.%<:@#) NB. probability of shifting left. The position of the one (I.) divided by the length -1.

shift =: |.~           NB. x shift y , shifts x by y positions to the left.

output =: {&'_.'       NB. for selecting the dots and bars.

NB. Piecing things together:
output (shift (left_prob signdiff rnd))rep init

কেন্দ্রের প্রবণতা, -50 উদাহরণস্বরূপ 1000 রানের বেশি:

NB. Amounts of ones in each column (sum)
   ]a=:+/ (|.~((I.%<:@#)*@-?@0:))^:(<1000)0=?30
0 0 0 0 0 0 2 6 10 12 25 60 95 121 145 161 148 99 49 27 19 13 6 1 1 0 0 0 0 0
   +/a NB. check the number of ones in total
1000
   |. |:(<.a%10) #"0 1] '*' NB. plot of those values
           *              
           *              
          ***             
          ***             
         ****             
         ****             
         ****             
        ******            
        ******            
        ******            
       *******            
       *******            
       ********           
       ********           
      **********          
    **************        

উদাহরণ রান, প্রতিটি লাইন ঠিক 30 বাইট আউটপুট

_______________.______________
________________._____________
_______________.______________
________________._____________
_______________.______________
________________._____________
_______________.______________
________________._____________
_______________.______________
________________._____________
_______________.______________
______________._______________
_______________.______________
________________._____________
_________________.____________
________________._____________
_______________.______________
______________._______________
_____________.________________
____________._________________
___________.__________________
__________.___________________
___________.__________________
__________.___________________
___________.__________________
__________.___________________
___________.__________________
____________._________________
_____________.________________
______________._______________

খুব ভাল সমাধান!
রেগেমেমফিন

একটি খুব ভাল চ্যালেঞ্জ!
jpjacobs

3

পাইথন 2.7: 126 109 -10-50 = 49

হার্ড-কোডেড শুরুর পয়েন্টটি থেকে মুক্তি পেয়েছে - এখন এলোমেলো পয়েন্ট থেকে শুরু হয়। এ কারণে, আমার রেন্ডিন্টের দরকার ছিল, তাই আমি অফসেটের জন্য পছন্দ না করে সেটি ব্যবহার করার সিদ্ধান্ত নিয়েছি। এর জন্য (-1) ** বুল ট্রিক ব্যবহার করুন।

from random import randint as r;p=r(0,29)
for i in range(30):
 print' '*p+'.'+' '*(29-p);p+=(-1)**(r(0,29)<p)

কিছু দুর্দান্ত উত্তর এখানে। উন্নয়নের কথা চিন্তা করে পাইথনে প্রথম প্রচেষ্টা। কোনও আমদানির প্রয়োজনে সহায়তা করে না।

-10 - হ্যাঁ প্রতিটি লাইনে 30 টি অক্ষর \ n

-50 - কেন্দ্র থেকে আরও দূরে, সম্ভবত অন্যভাবে সরানো (+ / i অফসেটের একটি পৃথক সংখ্যার সাথে একটি তালিকা তৈরি করে সম্পন্ন)

পূর্ববর্তী প্রচেষ্টা:

from random import choice;p,l=15,[]
for i in range(30):
 q=29-p;l+=[' '*p+'.'+' '*q];p+=choice([1]*q+[-1]*p)
print'\n'.join(l)

আপনার forলুপটি সমস্ত এক লাইনে থাকতে পারে তবে এটি আরও ভাল for i in[0]*30:এবং আরও ভাল eval"..."*30
mbomb007

2

জাভা - 198 183 টি অক্ষর

এটি আপনি যে উদাহরণে প্রশ্নে দিয়েছিলেন তার উদাহরণটি কেবল একটি সরল, সরল, প্রত্যক্ষ এবং অবাস্তব গল্ফ।

class A{public static void main(String[]y){int c,j,i=(int)(Math.random()*30);for(c=30;c>0;c--)for(j=i+=i<2?1:i>28?-1:Math.random()>0.5?1:-1;j>=0;j--)System.out.print(j>0?" ":".\n");}}

2

ব্যাচ - (288 বাইট - 10) 278

@echo off&setlocal enabledelayedexpansion&set/ap=%random%*30/32768+1&for /l %%b in (1,1,30)do (set/ar=!random!%%2&if !r!==1 (if !p! GTR 1 (set/ap-=1)else set/ap+=1)else if !p! LSS 30 (set/ap+=1)else set/ap-=1
for /l %%c in (1,1,30)do if %%c==!p! (set/p"=."<nul)else set/p"=_"<nul
echo.)

আন golfed:

@echo off
setlocal enabledelayedexpansion
set /a p=%random%*30/32768+1
for /l %%b in (1,1,30) do (
    set /a r=!random!%%2
    if !r!==1 (
        if !p! GTR 1 (set /a p-=1) else set /a p+=1
    ) else if !p! LSS 30 (set /a p+=1) else set /a p-=1
    for /l %%c in (1,1,30) do if %%c==!p! (set /p "=."<nul) else set /p "=_"<nul
    echo.
)

আন্ডারস্কোরের পরিবর্তে স্পেস আউটপুট - 372 বাইট -

@echo off&setlocal enabledelayedexpansion&for /f %%A in ('"prompt $H &echo on&for %%B in (1)do rem"')do set B=%%A
set/ap=%random%*30/32768+1&for /l %%b in (1,1,30)do (set/ar=!random!*2/32768+1&if !r!==1 (if !p! GTR 1 (set/ap-=1)else set/ap+=1)else if !p! LSS 30 (set/ap+=1)else set/ap-=1
for /l %%c in (1,1,30)do if %%c==!p! (set/p"=."<nul)else set/p"=.%B% "<nul
echo.)

নিম্নলিখিত যুক্তি সহ কিছু সাহায্যের সন্ধান করছেন, অবশ্যই এটি সর্বাধিক স্থান দক্ষ পদ্ধতি নয় (! R! এক বা 2 এর মধ্যে প্রসারিত হবে) -

if !r!==1 (
    if !p! GTR 1 (set /a p-=1) else set /a p+=1
) else if !p! LSS 30 (set /a p+=1) else set /a p-=1

এটি নীচে নেমে যায়: if !r!==1 (if !p! GTR 1 (set/ap-=1)else set/ap+=1)else if !r! LSS 30 (set/ap+=1)else set/ap-=1


2

জে, 42 টি অক্ষর, কোনও বোনাস নেই

' .'{~(i.30)=/~29<.0>.+/\(-0&=)?(,2#~<:)30

উদাহরণ রান:

          ' .'{~(i.30)=/~29<.0>.+/\(-0&=)?(,2#~<:)30
                       .
                      .
                     .
                      .
                     .
                      .
                     .
                      .
                       .
                      .
                     .
                    .
                     .
                    .
                     .
                    .
                     .
                      .
                       .
                        .
                       .
                        .
                       .
                      .
                     .
                      .
                       .
                      .
                     .
                    .

2

পাইথন 2.7 (126 - 10 (স্থির দৈর্ঘ্য) - 50 (কেন্দ্রের প্রবণতা) = 66)

নিম্নলিখিত প্রোগ্রামটিতে একটি বৃহত্তর নমুনার চেয়ে কেন্দ্রের প্রবণতা রয়েছে

s=id(9)%30
for e in ([[0,2][s>15]]*abs(s-15)+map(lambda e:ord(e)%2*2,os.urandom(30)))[:30]:
    s+=1-e;print" "*s+"."+" "*(28-s)

ডেমো

         .           
        .            
       .             
      .              
     .               
      .              
       .             
        .            
         .           
          .          
           .         
          .          
           .         
          .          
         .           
        .            
       .             
        .            
       .             
      .              
     .               
      .              
       .             
      .              
     .               
    .                
   .                 
    .                
   .                 
    .              

বীজের জন্য s = আইডি (9)% 30 টি পছন্দ করুন। ওস আমদানি করা প্রয়োজন, যদিও? এবং এটি কি পুরো 1-30 ব্যাপ্তিটি কভার করে? ওহ অপেক্ষা করুন ... * পৃষ্ঠার শীর্ষে বৈষম্য পুনরায় পড়ুন *
psion5mx

2

জাভাস্ক্রিপ্ট 125 73 72 60 (120 - 50 - 10)

i=0;r=Math.random;s=r()*30|0;do{a=Array(30);a[s=s>28?28:s?r()<s/30?s-1:s+1:1]='.';console.log(a.join(' '))}while(++i<30)

সম্পাদনা: 50 পয়েন্ট বোনাস এবং 10 পয়েন্ট বোনাসের জন্য ঠিক করুন

সম্পাদনা 2: এমনকি খাটো!


আপনি 50 পয়েন্ট বোনাস পাবেন যেখানে ব্যাখ্যা করতে পারেন? আমি এই মুহুর্তে এটি পাচ্ছি না ...
রেগেমুফিন

@ Kostronor আমি কেবল প্রয়োজনটির জন্য সম্পাদনাটি দেখেছি। দেখে মনে হচ্ছে আমি এখনও 50 পয়েন্ট পাইনি।
aebabis

@ অ্যাকবাবিস, ভাল হয়েছে! আপনি (116) কিছু বাইট সংরক্ষণ করতে পারেন:r=Math.random;s=r()*30|0;for(i=0;i++<30;a=Array(30)){a[s=s>28?28:s?r()<s/30?s-1:s+1:1]='.';console.log(a.join(' '))}
মাইকেল এম

@ মিশেল টিপস জন্য ধন্যবাদ। forকাজের ভিতরে অ্যারে init পেতে পারেনি , যদিও; কিছু সময় ব্যবহার করতে হয়েছিল।
aebabis

2

ডি - 167, 162, 144 (154 - 10)

গল্ফড :

import std.stdio,std.random;void main(){int i=uniform(1,30),j,k;for(;k<30;++k){char[30]c;c[i]='.';c.writeln;j=uniform(0,2);i+=i==29?-1:i==0?1:j==1?1:-1;}}

আন-গল্ফড :

import std.stdio, std.random;

void main()
{
    int i = uniform( 1, 30 ), j, k;

    for(; k < 30; ++k )
    {
        char[30] c;
        c[i] = '.';
        c.writeln;
        j = uniform( 0, 2 );
        i += i == 29 ? -1 : i == 0 ? 1 : j == 1 ? 1 : -1;
    }
}

সম্পাদনা 1 - আমার কোড -50 বোনাসের জন্য যোগ্যতা অর্জন করেছে কিনা তা আমি নিশ্চিত নই। iসবসময় মাঝখানে শুরু হয় না, কিন্তু সময় forলুপ, বিন্দু কখনোই 3 জায়গা উভয় দিক মত চেয়ে বেশি চলে আসে, তাই যখন i নেই মাঝামাঝি শুরু, সমগ্র জিনিস আছে হিসাবে ভাল থাকার থাকে।

সম্পাদনা 2 - কোড এখন -10 বোনাসের জন্য যোগ্যতা অর্জন করে, কারণ এটি 29 টি অক্ষরের একটি অ্যারে ছাপায় যার পরে এলএফের পরে প্রতি লাইনে মোট 30 টি অক্ষর থাকে F


এটি এলএফ -এর পরে ২৯ টি অক্ষরের অ্যারে ছাপায় - এটি এলএফের পরে 30 টি অক্ষর হওয়া উচিত।
ভিক্টর স্টাফুসা

@ ভিক্টর আহ, সংশোধন করার জন্য আপনাকে ধন্যবাদ, আমি মূল পোস্টটির ভুল ব্যাখ্যা দিয়েছি।
টনি এলিস

2

পাওয়ারশেল, 77 - 10 - 50 = 17

$x=random 30
1..30|%{$x+=random(@(-1)*$x+@(1)*(29-$x))
'_'*$x+'.'+'_'*(29-$x)}

আউটপুট

_.____________________________
__.___________________________
___.__________________________
____._________________________
___.__________________________
____._________________________
_____.________________________
______._______________________
_______.______________________
______._______________________
_____.________________________
______._______________________
_______.______________________
________._____________________
_________.____________________
__________.___________________
___________.__________________
__________.___________________
___________.__________________
____________._________________
___________.__________________
__________.___________________
_________.____________________
__________.___________________
_________.____________________
________._____________________
_________.____________________
________._____________________
_________.____________________
__________.___________________

স্মার্ট এলোমেলো। আপনি একটি গল্ফ সংস্করণ ব্যবহার করতে পারে $x=random 30;1..30|%{' '*($x+=,-1*$x+,1*(29-$x)|random)+'.'|% *ht 30}। 66 বাইট - 10 - 50 = 6 স্কোর পয়েন্ট
mazzy

2

আর, 107 টি অক্ষর - 60 পয়েন্ট বোনাস = 47

s=sample;i=s(29,1);for(j in 1:30){a=rep(' ',30);i=i+s(c(-1,1),1,p=c(i-1,29-i));a[i]='.';cat(a,'\n',sep='')}

iডট সূচক হয়। a30 স্পেসের অ্যারে। শুরুর পয়েন্টটি এলোমেলো (1 থেকে 29 পর্যন্ত সমান)। প্রতিটি পুনরাবৃত্তির আমরা এলোমেলোভাবে +1 যোগ -1 বা iভরযুক্ত সম্ভাব্যতা সঙ্গে i-1জন্য -1এবং 29-i জন্য +1(সম্ভাব্যতা যেমন খাওয়ানো মান এক সমষ্টি প্রয়োজন হবে না), যার অর্থ, এটির কেন্দ্রের দিকে ডট অভিযোজনের থাকে যখন এটি নীচের থেকে প্রতিরোধ 1 বা 29 এর উপরে (যেহেতু উভয় ক্ষেত্রেই তাদের সম্ভাবনা 0 এ নেমেছে)।

উদাহরণ _স্বরূপ শূন্যতার পরিবর্তে চালানো :

> s=sample;i=s(1:30,1);for(j in 1:30){a=rep('_',30);i=i+s(c(-1,1),1,p=c(i-1,29-i));a[i]='.';cat(a,'\n',sep='')}
_______________________.______
______________________._______
_____________________.________
______________________._______
_____________________.________
______________________._______
_____________________.________
______________________._______
_____________________.________
____________________._________
_____________________.________
______________________._______
_____________________.________
______________________._______
_____________________.________
____________________._________
___________________.__________
____________________._________
___________________.__________
__________________.___________
_________________.____________
________________._____________
_______________.______________
______________._______________
_______________.______________
________________._____________
_________________.____________
________________._____________
_______________.______________
______________._______________

আমি যদি আপনার কোডটি ভুল করে না পড়ি তবে তা হয়ে i যেতে পারে 0বা হয়30 , তাই না?
ব্যবহারকারী 2846289

হ্যাঁ আপনি ঠিক বলেছেন এটি 30 (যদিও বেশি নয়) হতে পারে, আমি এটি পরিবর্তন করব।
প্ল্যানাপাস

1
এটি এখন স্থির। 1 থেকে 0 বা 29 থেকে 30 এ যাওয়ার সম্ভাবনা এখন 0 হয়। এলোমেলো শুরুর পয়েন্টটি এখন 1 এবং 29 এর মধ্যে
plannapus

ইঙ্গিত: আপনি প্রতিস্থাপন 2 আরো অক্ষর সংরক্ষণ করতে পারবেন s(1:29,1)সঙ্গে s(29,1)
সোভেন হোহেনস্টেইন

@ সোভেনহোহেনস্টেইন আপনি ঠিক বলেছেন আমি সর্বদা সেইটির কথা ভুলে যাই
প্ল্যানাপাস

2

সি # 184 - 10 - 50 = 123

using System;namespace d{class P{static void Main(){var r=new Random();int p=r.Next(30);for(int i=0;i<30;i++){Console.WriteLine(".".PadLeft(p+1).PadRight(29));p+=r.Next(30)<p?-1:1;}}}}

আউটপুট

space_সুগমতার জন্য প্রতিস্থাপন ।

____________.________________
___________._________________
__________.__________________
___________._________________
____________.________________
_____________._______________
______________.______________
_____________._______________
______________.______________
_______________._____________
______________.______________
_______________._____________
______________.______________
_______________._____________
______________.______________
_____________._______________
____________.________________
___________._________________
____________.________________
_____________._______________
______________.______________
_____________._______________
____________.________________
___________._________________
____________.________________
___________._________________
____________.________________
___________._________________
__________.__________________
___________._________________

আমি নিশ্চিত যে if...else if...elseআপনার কোডের শেষে একটি ছোট কোড পাওয়া সম্ভব হবে pretty আরও, আপনার আউটপুট আমাকে কিছুটা সন্দেহ করতে বাধ্য করেছে যে এটি মাঝের দিকে থাকে তবে আপনার কোডটি সঠিক বলে মনে হয়।
ভিক্টর স্টাফুসা

কোডটি সম্পাদনা করার পরে আউটপুট আপডেট করতে ভুলে গেছি। r.Next(30)<p?-1:1;এটা ঘটতে করে তোলে। নিশ্চিত নয় যে আপনি ifবিবৃতি দিয়ে আরও ছোট যেতে পারবেন । switchবাধ্যতামূলক কারণে বড় break/ returnএবং চূড়ান্ত ক্ষেত্রে elseএকটি default:{}কেস প্রয়োজন এবং এটিও দীর্ঘ is
গসডোর

@ ভিক্টর ইনপুট জন্য ধন্যবাদ। আমি কিছু সম্পাদনা করেছি।
গুসডোর

যদি pশূন্য হয়, p+=r.Next(30)<p?-1:1;সর্বদা 1 পাবে, সুতরাং এর দরকার নেই if(p==0)। Ditto for p==29pকখনই 30 হবে না, তাই আপনি এটিকে থেকে মুক্তি পেতে পারেন else if
ভিক্টর স্টাফুসা

@ উইক্টর গ্র্যান্ড অসুস্থ এই পরিবর্তন করতে। তোমাকে ধন্যবাদ।
গুডডর

1

পিএইচপি

কেন্দ্রীভূত বোনাস সহ: 82 - 50 = 32

$i=rand(0,29);for($c=0;$c++<30;rand(0,28)<$i?$i--:$i++)echo pack("A$i",'').".\n";

এই সংস্করণটির জন্য (নীচের পুরানো সংস্করণগুলি), কেন্দ্রিং কোডটিতে যেহেতু যত্ন নেওয়া হয়েছে তা ন্যূনতম / সর্বাধিক চেকিং সরিয়ে ফেলেছে। rand(1,28)এটি এখানে গুরুত্বপূর্ণ হয়ে ওঠে কারণ এটি $i++নিজেকে 29 টি (প্রকৃত সর্বাধিক) পর্যন্ত চাপতে দেয়।

সম্পাদনা: অপ্রয়োজনীয় প্রথম বন্ধনী, সরানো শিফটিং কোড


কেন্দ্রীকরণের জন্য সাধারণ অ্যালগরিদম: 0 এবং 29 এর মধ্যে একটি নতুন সংখ্যা উত্পন্ন করে এবং এটি বর্তমানের সাথে তুলনা করে। কেন্দ্রের দিকে টানতে বড় দিকে একটি নম্বর পাওয়ার "সম্ভাবনা" এর সুবিধা নেয়।

আসল ফলাফল: (পরে লাইন নম্বর যোগ করা হয়েছে)

01|        .
02|       .
03|        .
04|         .
05|          .
06|           .
07|            .
08|           .
09|            .
10|             .
11|              .
12|             .
13|            .
14|             .
15|            .
16|             .
17|            .
18|             .
19|              .
20|               .
21|              .
22|             .
23|              .
24|               .
25|                .
26|               .
27|                .
28|                 .
29|                .
30|               .

আর্কাইভ করা:

$i=rand(0,29);for($c=0;$c++<30;){($i<1?$j=1:($i>28?$j=28:$j=rand(0,29)));($j<$i?$i--:$i++);echo pack("A$i",'').".\n";} ১১৯ টি অক্ষর

$i=rand(0,29);for($c=0;$c++<30;){($i<1?$i++:($i>28?$i--:(rand(0,29)<$i?$i--:$i++)));echo pack("A$i",'').".\n";} 112 টি অক্ষর


আমি কিছুটা মুগ্ধ হয়েছি যে আমি আমার প্রথম সংস্করণ থেকে 49 টি চরিত্রের
ছাঁটাই করেছি

এখন 44 অক্ষর চাঁচা যার অর্থ অবশ্যই শেষ বার 39 ছিল।
Yoda

1

জাভাস্ক্রিপ্ট ES6 125 - 10 (30 অক্ষরের রেখা) - 50 (মাঝারি দিকে স্থানান্তর) = 65

আমার ইউনিটটিতে লিফটটি উপরে যাওয়ার জন্য আমার একটি এপিফানি ছিল, সুতরাং এটি আমার স্মৃতি ছেড়ে যাওয়ার আগে আমাকে নামিয়ে ফেলতে হয়েছিল ...

z=(j=Array(t=29).join`_`)+"."+j;x=(r=Math.random)()*t;for(i=30;i--;)console.log(z.substr(x=(x+=r()<x/t?-1:1)>t?t:x<0?0:x,30))

নির্দেশিত শিফট সম্ভাবনা গণনা করার জন্য একটি সামান্য পরিবর্তনশীল অবস্থানগত পরিবর্তন এবং সামান্য সৃজনশীলতা x/t ... (এটি নির্দেশ করার জন্য ধন্যবাদ কোস্ট্রোনার!) আমি এখন মাঝখানে স্থানান্তরিত করার জন্য -50 বোনাস অর্জন করেছি এবং আমিও এর মধ্যে শুরুতে অবস্থান তৈরি করেছি লাইনের পুরো পরিসীমা, যা আমাকে দুটি বাইট শেভ করতে দিয়েছে!

....5....0....5....0....5....0 <-- Ruler
_.____________________________
__.___________________________
___.__________________________
__.___________________________
___.__________________________
__.___________________________
_.____________________________
__.___________________________
___.__________________________
__.___________________________
___.__________________________
____._________________________
_____.________________________
______._______________________
_______.______________________
________._____________________
_______.______________________
______._______________________
_______.______________________
________._____________________
_______.______________________
________._____________________
_________.____________________
__________.___________________
_________.____________________
__________.___________________
___________.__________________
____________._________________
_____________.________________
______________._______________

এটি কি এখানে প্রাথমিক বিন্দু অবস্থানের এলোমেলোতা 2 বা 3 সম্ভাবনার মধ্যে সীমাবদ্ধ নয়? এবং এটি মাঝখানে বিন্দু রাখছেন যা (খুব কম সংখ্যক রান = 30 এর কারণে) এবং তাই -50 এর মূল্য?
ব্যবহারকারী 2846289

ও.পি. এর পাঠ্যটি উদ্ধৃত করে : "আপনার প্রোগ্রামটি এলোমেলো এক্স অবস্থানের সাথে শুরু হয় এবং প্রতিটি পালা এই অবস্থানটি এলোমেলোভাবে 1 দ্বারা বাম বা ডানে15+r()*2 স্থানান্তরিত করে " আমার কোডটি প্রাথমিকভাবে সংজ্ঞায়িত করা হয় যা 15 থেকে 16.9999999998 বা কিছু হতে পারে যা গোল হতে পারে x+=r()<.5?-1:1১ 17 থেকে 18 পর্যন্ত বাড়তি কিছু এলোমেলো করে দেয় যা 14 থেকে 18 এর পরিসরে নিয়ে আসে, তাই প্রযুক্তিগতভাবে একটি এলোমেলো সংখ্যা যা জিজ্ঞাসা করা হয় তার সংজ্ঞার মধ্যে থাকে ... এই নিয়মটি বাঁকিয়ে রেখে, +1, -1) বেশিরভাগ ক্ষেত্রে এটিকে আবার মাঝের দিকে ফিরিয়ে আনবে ...;)
ওয়েল ওয়েস্ট

ঠিক আছে, এলোমেলো জিনিসটিতে, আপনি আমাকে পেয়েছেন ... এটি 'সমস্ত সম্ভাব্য অবস্থানের থেকে এলোমেলো অবস্থান' বোঝানো হয়েছিল তবে 50 পয়েন্ট পরিষ্কারভাবে প্রয়োগ না হওয়ায় এটি আপনাকে খুব বেশি সুবিধা দেয় না! দয়া করে এই বোনাসের ব্যাখ্যাটি পুনরায় পড়ুন, একটি নির্দিষ্ট 0,5 শতাংশ এটি পান না!
রেগেমেমফিন

বৈধ পয়েন্ট, আমি সেই অনুযায়ী আমার স্কোরটি আবার করব ...
ওয়েল ওয়েস্ট

@ কোস্টনোর কোড সঠিক সমাধান সহ আপডেট হয়েছে, সেই অনুযায়ী স্কোর আপডেট করুন!
ওয়েলওয়েস্ট

1

কে, 53 - 10 - 50 = -7

সমাধান ঘ

{{a:30#" ";a[x]:".";a}'{x+$[*x<1?!30;1;-1]}\[x;*1?x]}

ব্যবহার

{{a:30#" ";a[x]:".";a}'{x+$[*x<1?!30;1;-1]}\[x;*1?x]}30

"      .                       "
"       .                      "
"      .                       "
"       .                      "
"      .                       "
"       .                      "
"        .                     "
"         .                    "
"        .                     "
"         .                    "
"        .                     "
"         .                    "
"          .                   "
"           .                  "
"            .                 "
"             .                "
"              .               "
"               .              "
"              .               "
"             .                "
"            .                 "
"           .                  "
"          .                   "
"         .                    "
"        .                     "
"       .                      "
"        .                     "
"         .                    "
"          .                   "
"         .                    "
"          .                   "

সমাধান 2

{r::x;{a:r#" ";a[x]:".";a}'{a:r#0b;a[x?r]:1b;x+$[a@*1?r;-1;1]}\[x;*1?x]}[30]

1

স্কালা, 95 - 10 = 85 বাইট

def r=math.random
Seq.iterate(r*30,30){n=>println(("#"*30)updated(n.toInt,'.'))
(r*2-1+n)round}

আমি এখনও 50 বাইট বোনাস সম্পর্কে চিন্তা করছি।

ব্যাখ্যা:

def r=math.random //define a shortcut for math.random, which returns a number 0 <= n < 1
Seq.iterate(      //build a sequence,
  r*30,             //starting with a random number bewteen 0 and 29
  30                //and containing 30 elements.
){n=>             //Calculate each element by applying this function to the previous element
  println(        //print...
    (" "*30)             //30 spaces
    updated(n.toInt,'.') //with the n-th char replaced with a dot
  )               //and a newline.
                  //The next element is
  (r*2-1+n)       //an random number between -1 and 1 plus n
  round           //rounded to the nearest integer.
}

1

জাভাস্ক্রিপ্ট, 125 (135 - 10)

q=Math.random,p=~~(q()*31)+1;for(i=0;i++<30;){s='',d=j=1;for(;j++<31;)s+=j==p?'.':" ";p+=q()<.5?1:-1;p-=p>28?2:p<2?-2:0;console.log(s)}

মন্তব্য এবং পরামর্শ স্বাগত।


দুঃখের বিষয়, আপনার সমাধানটি যোগ্যতা অর্জন করে না, আপনার আউটপুটটিকে অন্যান্য সমাধানগুলির আউটপুটের সাথে তুলনা করে। বিন্দুটিকে একটি চরিত্র অনুসারে স্থানান্তরিত করুন।
রেজগেমুফিন

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

@ কোস্টরনর প্রোগ্রাম সম্পাদিত।
গৌরাঙ্গ ট্যান্ডন

1

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

114 অক্ষর - 10 (30 চর রেখা) - 50 (মাঝের দিকে বিন্দু টান) = 54

for(f=Math.random,a=[],i=30,j=k=f()*i|0;i--;a[j]='.',a[j+=29-k]='\n',j+=k+=f()>k/29?1:-1);console.log(a.join('-'))

যাইহোক, আমি লক্ষ্য করেছি যে 30 টি বর্ণের জন্য লাইনগুলি পূরণ করার জন্য 10 টি চরিত্রের পুরষ্কার একটি খারাপ চুক্তি হতে পারে; তাই:

102 অক্ষর - 50 (মাঝের দিকে বিন্দু টান) = 52

for(f=Math.random,a=[],i=30,j=k=f()*i|0;i;i--,a[j]='.\n',j+=k+=f()>k/29?1:-1);console.log(a.join('-'))

সরলীকৃত টানার দিকের শর্তসাপেক্ষে ক্রেডসকে @ ওয়েলওয়েস্টে f()>k/29?1:-1আমার প্রথম খসড়াটিতে দুটি নেস্টেড শর্তসই ব্যবহার করা হয়েছে ।


1

র‌্যাকেট 227 বাইট (30 অক্ষরের জন্য -10, মধ্যরেখায় স্থানান্তরিত করার জন্য -50 = 167)

প্রতিটি পদক্ষেপে, বিন্দুটি এর থেকে দূরে থাকায় মিডলাইনের দিকে যাওয়ার সম্ভাবনা দ্বিগুণ হয়:

(let lp((r(random 1 31))(c 0)(g(λ(n)(make-string n #\space))))(set! r
(cond[(< r 1)1][(> r 30)30][else r]))(printf"~a~a~a~n"(g r)"*"(g(- 29 r)))
(when(< c 30)(lp(+ r(first(shuffle(if(> r 15)'(-1 -1 1)'(1 1 -1)))))(add1 c)g)))

Ungolfed:

(define (f)
    (let loop ((r (random 1 31))
               (c 0)
               (g (λ (n) (make-string n #\space))))
      (set! r (cond
                [(< r 1) 1]
                [(> r 30) 30]
                [else r] ))
      (printf "~a~a~a~n" (g r) "*" (g (- 29 r)))
      (when (< c 30)
        (loop (+ r
                 (first
                  (shuffle
                   (if (> r 15)
                       '(-1 -1 1)
                       '(1 1 -1)))))
              (add1 c)
              g))))

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

(println "012345678901234567890123456789")
(f)

আউটপুট:

"012345678901234567890123456789"
                       *       
                      *        
                       *       
                        *      
                         *     
                        *      
                       *       
                      *        
                     *         
                      *        
                     *         
                    *          
                     *         
                      *        
                     *         
                    *          
                   *           
                  *            
                 *             
                *              
               *               
                *              
                 *             
                *              
                 *             
                *              
                 *             
                *              
                 *             
                *              
               *               

চমৎকার সমাধান! র‌্যাকেটটি সত্যিই আকর্ষণীয়। আপনি নিজেকে 50 টি বোনাস পয়েন্ট দিতে পারেন এবং অতিরিক্ত 10 :
রেগগেমফিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.