ওয়ান লাইন অ্যাকোয়ারিয়াম


31

আমার শ্বশুর শ্বশুরবাড়িতে কোয়ে ভরা মাছের পুকুর আছে। আমার কোড থেকে নিম্নলিখিত সূত্রটি লক্ষ্য না করা পর্যন্ত এটি সত্যই আমার মন অতিক্রম করতে পারে নি।

',') & '_'

... আমি আমার পর্দা থেকে ফিশ-মুখগুলি আমার দিকে ফিরে তাকিয়ে ছিল ...

যা আমাকে দুর্দান্ত ধারণা দিয়েছে ...

আপনার জন্য আমার সন্ধান, আমার প্রিয় গল্ফাররা নিম্নলিখিত বিধিগুলি সহ একটি লাইন ASCII অ্যাকোয়ারিয়াম তৈরি করতে হবে:

  • ট্যাঙ্কের অপর পাশ থেকে অ্যাকোরিয়ামের আকারটি 60 টি অক্ষরের চেয়ে ছোট এবং 80 টি অক্ষরের চেয়ে বড় হওয়া উচিত নয়। ট্যাঙ্কের পাশগুলি পাইপ / বার ( |) অক্ষর ব্যবহার করে নির্দেশিত হওয়া দরকার ।
  • মাছ অবশ্যই ট্যাঙ্কের পাশের মধ্যে বাম থেকে ডান "সাঁতার" করতে সক্ষম হবে। তারা যখন ঘুরবে, তখন এক দিক থেকে অন্য দিকে রূপান্তর করার জন্য একটি সামনের দৃশ্য প্রয়োজন view
  • মাছগুলি নীচের মত দেখতে হবে:

    • }}< }} ',') ডানদিকে মাছ সাঁতার কাটছে
    • (',' {{ >{{ মাছের সাঁতার বাম
    • }}('_'){{ সামনে মুখোমুখি মাছ
  • কোনও মাছ যখন দিক পরিবর্তন করতে চায় (30% সুযোগ), এটি অবশ্যই এক দিক থেকে শুরু হবে, সামনের দিকে মুখোমুখি হবে, তারপরে অন্য দিকে মুখোমুখি হবে ... মাছটি ঘুরিয়ে নেওয়ার জন্য পর্যাপ্ত জায়গা রয়েছে তা নিশ্চিত করুন, যার আগে ছয়টি স্পেস দরকার সর্বনিম্ন ট্যাঙ্কের প্রান্ত ...

  • যতক্ষণ না কোনও মাছ বুদ্বুদ ফুঁকছে বা দিক পরিবর্তন করছে, এটি যে দিকে মুখ করে রয়েছে সেদিকেই এটি চালিয়ে যাবে, যদি এটি ট্যাঙ্কের পাশের ছয়টি জায়গার মধ্যে চলে যায় তবে এটি দিক পরিবর্তন করবে change
  • মাছটি (বাম বা ডান দিকে মুখোমুখি) উপলক্ষ্যে (10% সুযোগ) পর পর ( .oO*) এর বুদ্বুদগুলি ফুঁকতে থামাতে পারে , তাই বুদ্বুটির অস্তিত্বের জন্য মাছটির পাশে একটি স্থান থাকা দরকার, যাতে একটি মাছ পারে কেবল পাশের কাছে সাঁতার কাটুন, একটি জায়গা বাঁচান। মাছটি এগিয়ে যাওয়ার আগে বুদবুদটি অদৃশ্য হয়ে যেতে হবে ...

মাছের আচরণের কয়েকটি উদাহরণের রেখাংশ, -অক্ষরগুলির সাথে শূন্যস্থানগুলি নির্দেশ করে, কারণ এখানে কোড ডিসপ্লে বৈশিষ্ট্যটি কিছুটা কঠোর ... আমি যখন আপনি এটি কোড করবেন তখন এই ড্যাশগুলি স্থানগুলির সাথে প্রতিস্থাপন করা হবে বলে আমি আশা করব ...

এখানে প্রতিটি লাইন সময় ফাঁকিতে একটি ফ্রেম হিসাবে বিবেচিত হতে পারে।

|-}}< }} ',')----------|
|--}}< }} ',')---------|
|---}}< }} ',')--------|
|----}}< }} ',')-------|
|-----}}< }} ',')------|
|-----}}< }} ',').-----|
|-----}}< }} ',')o-----|
|-----}}< }} ',')O-----|
|-----}}< }} ',')*-----|
|---------}}('_'){{----|
|-----------(',' {{ >{{|
|----------(',' {{ >{{-|
|---------(',' {{ >{{--|
|--------.(',' {{ >{{--|
|--------o(',' {{ >{{--|
|--------O(',' {{ >{{--|
|--------*(',' {{ >{{--|
|--------(',' {{ >{{---|
|-------(',' {{ >{{----|
|------(',' {{ >{{-----|

ইত্যাদি উপরের উদাহরণটি হ'ল ছোট, তবে আপনি সাধারণ ধারণাটি পেয়ে যান ...

সংক্ষিপ্ততম কোড জয় ...

আমি একই লাইনে আউটপুট আশা করছি (সম্ভব হলে), যদি না হয়, পর পর ফ্রেমের পরে ফ্রেম প্রদর্শন করা ঠিক আছে ... আপনি যদি এক লাইন যান বা একাধিক লাইন আপনার নিজের উপর নির্ভর করে। আপনি যদি একাধিক লাইন করছেন তবে তাদের অবশ্যই একটি নতুন লাইনের দ্বারা পৃথক করা উচিত।

এছাড়াও ফ্রেমস, 2000 মিমের মধ্যে একটি টাইমার চাপানো হয়। এটি বাধ্যতামূলক

আসুন দেখুন কি পেয়েছেন!


যদি মাছ অ্যাকোরিয়ামের প্রান্তের খুব কাছে চলে যায়, তবে এটি ঘোরানো দরকার, না এটি স্ক্রিনের বাইরে চলে যেতে পারে? এই পরিস্থিতিতে কি মাছের বুদবুদ ফুঁকানো সম্ভব হবে? এছাড়াও, মাছের পর পর দুবার বুদবুদ ফুঁকানো কি সম্ভব (বা এটি নিষিদ্ধ, বা অনুমোদিত তবে অনুমোদিত নয়)?
জন ডিভোরাক

1
অপেক্ষা করুন, না, এভাবে পরিবর্তন করবেন না! আমি ইতিমধ্যে কোডিং শুরু করেছি! আপনি ফিরে ঘুরিয়ে কিছু মনে করবেন?
জন ডিভোরাক

5
পরবর্তী সময় স্যান্ডবক্স ব্যবহার করুন ।
জন ডিভোরাক

1
এটি সুস্পষ্টভাবে বলা হয়নি, তবে আমার ধারণা অ্যাকোয়ারিয়ামে অবশ্যই একটি মাছ থাকতে হবে?
জন ডিভোরাক

1
এটি কি প্রয়োজনীয় যে মাছগুলি পর পর দুবার বুদবুদ করতে পারে, না আমাদের তা হতে দেওয়া হয়? এটি আমার জন্য একটি তিন-চরিত্রের পার্থক্য তৈরি করে।
জন ডিভোরাক

উত্তর:


11

পাইথন 3 (278)

পূর্বে: 334, 332, 325, 302, 300, 299, 291, 286, 284, 281

import random,time
r=random.random
F="}}('_'){{%s","}}< }} ',')%s","%s(',' {{ >{{"
p,d=9,1
c=b=0
while 1:
 if c:p-=c+c*3*(2*d+c==1);d=c-c*d*d;c-=d
 elif b%5:b+=1
 elif.3>r()or{p*d}<{-5,53}:c=-d
 elif.1>r():b=1
 else:p+=d
 print('|%-70s|'%(' '*p+F[d])%' .oO*'[b%5]);time.sleep(2)

স্টেটমেন্টের ইনডেন্টেশন প্রয়োজনীয়তার কারণে পাইথনে গল্ফিং সবসময়ই কঠিন, তবে তা সত্ত্বেও, এটি অবিশ্বাস্যভাবে ভাল গেছে!

আমাকে আরও অনেক বেশি গল্ফটিতে সাহায্য করার জন্য ভোলাটিলিটি এবং ডিএসএমকে অনেক ধন্যবাদ।

পরিষ্কার সংস্করণ

from random import random as r
from time import sleep as s
F = { 1: "}}< }} ',')%s", 0: "}}('_'){{%s", -1: "%s(',' {{ >{{" }

# p: position (from left)
# d: direction (-1: left, +1: right)
# c: changing direction (0: not changing, +1: to right, -1: to left)
# b: bubble (0)
p, d, c, b = 9, 1, 0, 0

while 1:
    if c:
        p -= c*[1,4][2*d+c==1]
        if d:
            d = 0
        else:
            d, c = c, 0
    elif b % 5:
        b += 1
    else:
        # change direction
        if r() < .3 or p * d in (-5,53):
            c = -d
        # start bubbling
        elif r() < .1:
            b = 1
        # move forward
        else:
            p += d

    # print fish and sleep
    print('|{:<70}|'.format(' '*p+(F[d]%' .oO*'[b%5])))
    s(2)

7

রুবি, 291 289

l="(',' {{ >{{";m="    }}('_'){{    ";r="}}< }} ',')";w=?\s;s=w*6;q="|#{r+s*9}|"
f=->*s{(puts q;sleep 2)if q.sub! *s}
loop{rand>0.1||(f[") ",")."]||f[" (",".("];f[?.,?o];f[?o,?O];f[?O,?*];f[?*,w])
q[7]==?(||q[-8]==?)||rand<0.3?f[s+l,m]&&f[m,r+s]||f[r+s,m]&&f[m,s+l]:f[w+l,l+w]||f[r+w,w+r]}

মাছটি এগারো অক্ষর দীর্ঘ, অ্যাকোয়ারিয়ামটি 6 * 9 + 11 + 2 = 67 অক্ষর প্রশস্ত করে তোলে, যা প্রয়োজনীয় সহনশীলতার সাথে ঝরঝরে ফিট করে।

fল্যামডা ফাংশন সব ভারী উত্তোলন করে: এটা আর্গুমেন্ট একজোড়া, তারপর অ্যাকোয়ারিয়াম উপর প্রতিকল্পন আবেদন করতে প্রচেষ্টা হিসেবে প্রতিকল্পন গ্রহণ করে। যদি এটি সফল হয়, এটি অ্যানিমেশনের একটি ফ্রেম এঁকে দেয়। এরপরে এটি সাফল্যের মান হিসাবে 2(গৃহীত বিলম্ব) বা nil(দেরী কার্যকর করা হয়নি ) হিসাবে রিপোর্ট করে ।

মাছ পর পর দু'বার বুদবুদ ফুঁকবে না। (স্থির করুন: ...while rand>0.1- 4 জন পাঠক)

জোর করে পালা দেওয়ার আগেই মাছগুলি বুদবুদ ফুঁকতে পারে। (ফিক্স: শাখা কাঠামো পুনরায় সাজানো)

একটি ফ্রেম রয়েছে যেখানে বুদ্বুদ সম্পূর্ণরূপে চলে গেছে (সহ *) কিন্তু মাছটি ফলশ্রুতি শূন্যের দিকে যায় নি। এটি চিঠিটি অনুসরণ করে, তবে উদাহরণ নয়। (ফিক্স: প্রতিস্থাপন f[?*,w]সঙ্গে q[?*]=w- বিনামূল্যে)

কনসোল সাফ করে না। ফিক্স: অ্যাড `clear`(ইউনিক্স) অথবা system 'cls'আগে (উইন্ডোজ কনসোল) puts qফিক্স করার ( । সূত্র ) বা ব্যবহারের printপরিবর্তে putsএবং শুরুতে যোগ \rঅ্যাকোয়ারিয়াম করার জন্য ( @manatwork দ্বারা প্রস্তাবিত )।

পঠনযোগ্য সংস্করণ:

# l - left fish; m - middle fish + space; r - right fish
# w - single space character; s - six spaces; q - the aquarium
l="(',' {{ >{{"; m="    }}('_'){{    "; r="}}< }} ',')";
w=" "; s=w*6; q="|#{r+s*9}|"
f = ->k,v do
  if q.sub! k,v
    puts q
    sleep 2
    return 2
  else
    return nil
  end
end

loop do
  if rand < 0.1
    f[") ",")."] || f[" (",".("]
    f[?.,?o]; f[?o,?O]; f[?O,?*]; f[?*,' ']
  end
  if q[7] == "(" || q[-8] == ")" || rand < 0.3
    (f[s+l,m] && f[m,r+s]) || (f[r+s,m] && f[m,s+l])
  else
    f[w+l,l+w] || f[r+w,w+r]
  end
end

আমি যোগ হবে \rকুই শুরুতে: q="\r|#{r+s*9}|"। তারপরে ব্যবহার $><<qকরুন puts q। 1 অক্ষর দীর্ঘ, তবে বাহ্যিক আদেশগুলি ব্যবহার না করে আরও ভাল দেখাচ্ছে।
manatwork

\rপর্দা সাফ করে? এটা আমার ক্ষেত্রে হয় না। বা, কেন আপনি পছন্দ করেন না puts?
জন ডিভোরাক

1
না, \rগাড়ি চালানো কি ফিরে আসবে? $><<qআউটপুট ব্যবহার করে কার্সার একই লাইনে থাকবে ( আউটপুট পরে putsএকটি জোর \nকরে) সুতরাং পরবর্তী আউটপুটটি \rশুরু করে বর্তমান লাইনের শুরুতে ফিরে যাবে এবং সেখান থেকে আউটপুট শুরু করবে। সুতরাং অ্যাকোয়ারিয়াম লাইনের আগের "চিত্র" ওভাররাইট করে।
manatwork

দুর্ভাগ্যক্রমে মানচিত্রটি, এটি জে রবি ইন্টারেক্টিভ উইন্ডোটিকে পুরোপুরি বিভ্রান্ত করেছে, যা এটিকে উপেক্ষা করে \r
জন ডিভোরাক

উহু. শুনে দুঃখিত হলাম. এবং তথ্যের জন্য আপনাকে ধন্যবাদ। দু: খজনকভাবে আমি jRuby সম্পর্কে এটি প্রথম সত্য। :(
manatwork

3

আর, 451 টি অক্ষর

প্রথম প্রচেষ্টা:

f=function(j,p){cat("\r|",rep("-",j),p,rep("-",50-j),"|",sep="");Sys.sleep(2)};d=F;j=5;P=c("--}}(\'_\'){{--","-}}< }} \',\')-","-(\',\' {{ >{{-");B=c("-",".","o","O","*","-");g=Vectorize(gsub,v="replacement");b=list(g("-$",B,P[2]),g("^-",B,P[3]));repeat{if(j<5 & d){d=!d;j=j+1;f(j,P[1])};if(j>44 & !d){d=!d;f(j,P[1]);j=j-1};if(runif(1)<.1){for(i in b[[d+1]])f(j,i)}else{f(j,P[d+2])};if(runif(1)<.3){d=!d;f(j,P[1]);f(j,P[d+2])};if(d){j=j-1}else{j=j+1}}

ইন্ডেন্টযুক্ত:

f=function(j,p){ #Printing function (depends of buffer and kind of fish)
    cat("\r|",rep("-",j),p,rep("-",50-j),"|",sep="")
    Sys.sleep(2)
}
d=F   #Direction: if FALSE left to right, if TRUE right to left.
j=5   #Buffer from left side of tank
P=c("--}}(\'_\'){{--","-}}< }} \',\')-","-(\',\' {{ >{{-") #The fish
B=c("-",".","o","O","*","-") #The bubble sequence
g=Vectorize(gsub,v="replacement")
b=list(g("-$",B,P[2]),g("^-",B,P[3])) #Fish+bubble
repeat{
    if(j<5 & d){ #What happens if too close from left side
        d=!d
        j=j+1
        f(j,P[1])
        }
    if(j>44 & !d){ #What happens if too close from right side
        d=!d
        f(j,P[1])
        j=j-1}
    if(runif(1)<.1){ #If bubble sequence initiated
        for(i in b[[d+1]])f(j,i)
        }else{f(j,P[d+2])} #Otherwise
    if(runif(1)<.3){ #If fish decide to turn
        d=!d
        f(j,P[1])
        f(j,P[d+2])
    }
    if(d){j=j-1}else{j=j+1} #Increment or decrement j depending on direction
}

এটি অ্যাকোয়ারিয়ামটিকে একক লাইনে স্টাডআউট হিসাবে মুদ্রণ করে (তারপরে টি + 1 এ অ্যাকোয়ারিয়ামটি প্রিন্ট হওয়ার আগে 2 সেকেন্ডের বিরতি এবং ক্যারেজ ফিরে)।


3

পার্ল, 281

@f=("s O(',' {{ >{{","s}}('_'){{s","}}< }} ',')O s");$d=1;@o=split//," *Oo. ";{$_="|".$"x$x.$f[$d+1].$"x(44-$x).'|
';s/O/$o[$b]/;s/s/    /g;print;if($b||$t){$b--if$b;if($t){$d+=$t;$t=0if$d}}else{$x+=$d;$t=($x<1)-($x>43);if(!$t){$b=5if.9<rand;if(.7<rand){$t=-$d;$b=0}}}sleep 2;redo}

বা আরও স্পষ্টভাবে

@f = ( "s O(',' {{ >{{", "s}}('_'){{s", "}}< }} ',')O s" );
$d = 1;
@o = split //, " *Oo. ";
{
    $_ = "|" . $" x $x . $f[ $d + 1 ] . $" x ( 44 - $x ) . '|
';
    s/O/$o[$b]/;
    s/s/    /g;
    print;
    if ( $b || $t ) {
        $b-- if $b;
        if ($t) { $d += $t; $t = 0 if $d }
    }
    else {
        $x += $d;
        $t = ( $x < 1 ) - ( $x > 43 );
        if ( !$t ) {
            $b = 5 if .9 < rand;
            if ( .7 < rand ) { $t = -$d; $b = 0 }
        }
    }
    sleep 2;
    redo
}

মাছ সঠিকভাবে বাঁকছে। বুদবুদ ফুঁকছে।

285 - আপনি যদি অ্যাকোরিয়ামের অনুভূতি পছন্দ করেন এবং স্ক্রোলিং সংস্করণটি না চান:

$|=@f=("s O(',' {{ >{{","s}}('_'){{s","}}< }} ',')O s");$d=1;@o=split//," *Oo. ";{$_="\r|".$"x$x.$f[$d+1].$"x(44-$x).'|';s/O/$o[$b]/;s/s/    /g;print;if($b||$t){$b--if$b;if($t){$d+=$t;$t=0if$d}}else{$x+=$d;$t=($x<1)-($x>43);if(!$t){$b=5if.9<rand;if(.7<rand){$t=-$d;$b=0}}}sleep 2;redo}

আপনি কোথায় বাঁক না? আমি আপনাকে $d=0"প্রয়োজনীয় বাঁক" ক্ষেত্রে সেট করতে দেখছি না ।
জন ডিভোরাক

1
sleep2(স্থান ব্যতীত) আমার পক্ষে কাজ করছে না; আপনি যখন ঘুরছেন তখনও আপনি মাছের মুখটি সারিবদ্ধ রাখবেন না। এবং বুদবুদ কখনও প্রদর্শিত হবে বলে মনে হচ্ছে না।
শে

"এছাড়াও 2000 মিমি ফ্রেমের মধ্যে একটি টাইমার চাপানো হয় This এটি বাধ্যতামূলক" " - এটা আমার পক্ষে মোটেই ঘটে না। এছাড়াও, বুদবুদগুলি উপস্থিত হয় না, মাছগুলি ঠিক জায়গায় বসে থাকে। এছাড়াও, মাছটি ঘুরিয়ে দেওয়ার সময় মাথাটি স্থির থাকা উচিত, শরীরের কেন্দ্র নয় (কমপক্ষে এটি উদাহরণটি দেখায়)
জন ডিভোরাক

বিরক্তি প্রকাশ করতে ব্যবহৃত! গল্ফ খুব শক্ত। ঘুমের সাথে বাড়তি জায়গা দরকার! মাছ খুব সুন্দর বুদবুদ ছিল! স্তব্ধ থাকুন ...
কেভিনকোলিয়ার


2

সি, 400 394 373 টি অক্ষর

#define p printf
#define a(x) l[5]=r[11]=x;d();
char *l="      (',' {{ >{{",*f="    }}('_'){{    ",*r="}}< }} ',')      ",*c,s=7,i,*T;d(){p("|");for(i=0;i<s;i++)p(" ");p(c);for(i=0;i<70-s;i++)p(" ");puts("|");sleep(2);}b(){a(46)a(111)a(79)a(42)a(32)}t(){T=c;c=f;d();c=T==r?l:r;d();}m(){c==l?s--:s++;d();s>69||s<1?t():0;}main(){c=r;for(d();;)i=rand()%10,i?i>6?t():m():b();} 

সাদা স্থান সহ:

#define p printf
#define a(x) l[5]=r[11]=x;d();
char *l="      (',' {{ >{{",
     *f="    }}('_'){{    ",
     *r="}}< }} ',')      ",
     *c, 
     s=7,
     i,  
    *T; 
d(){
  p("|");
  for(i=0;i<s;i++)
    p(" ");
  p(c);
  for(i=0;i<70-s;i++)
    p(" ");
  puts("|");
  sleep(2);
}
b(){
  a(46)
  a(111)
  a(79)
  a(42)
  a(32)
}
t(){
  T=c;
  c=f;
  d();
  c=T==r?l:r;
  d();
}
m(){
  c==l?s--:s++;
  d();
  s>69||s<1?t():0;
}
main(){
  c=r;
  for(d();;)
    i=rand()%10,
    i?i>6?t():m():b();
}

1
পারি i==l?(c=r):(c=l)থেকে সংখ্যা কমিয়ে রেখেছেন c=i==l?r:l?
জন ডিভোরাক

দেখে মনে হচ্ছে এটি হতে পারে। ধন্যবাদ!
জোশ

আপনি কয়েকটি অক্ষর সংরক্ষণ করতে পারবেন#define p printf(
পেস্টবিন ডট

আমি যখন এটি করি তখন @ এক জিসিসি পছন্দ করে না।
জোশ

এটা আমার জন্য কাজ করে. oi41.tinypic.com/15fqbvb.jpg
পেস্টবিন.কম স্ল্যাশ 0mr8spkT
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.