language-agnostic - وجود - علاقة العناكب بالسحر



قانون الجولف: شبكات العنكبوت (10)

C ، 573 حرفًا

من الواضح أنها ليست حتى في الجري مع مراعاة عدد الأحرف. رقم 573 هو مجرد حجم الملف على جهاز windows الخاص بي ، لذلك ربما يكون هناك عدد قليل من ctrl-M. من ناحية أخرى ، ربما يكون هناك 573 حسابًا ضعيفًا ، بما أنني أثارت غضب المترجم من خلال التخلص من كل العناصر "تضمين" لتوفير المساحة ، فالتحذيرات ملعون!

لكن مهلا ، هذه هي المرة الأولى التي أحاول فيها واحدة من هذه ، وسيكون من الجيد بلا شك محاولة إعادة التعبير عنها في شيء أكثر إحكاما.

#define B puts("");
#define K '\\'+'/'
#define F '_'+' '
#define P(s) putchar(s);
#define I int
c(I s,I f){if(s){P(f)c(s-1,f);P(f)}else P('|')} 
w(I lw,I s,I k,I f){if(s){P(' ')P(k)w(lw,s-1,k,f);P(K-k)P(' ')}else{P(K-k)c(1+lw,f);P(k)}}
h(I g,I s,I k,I f){I i;for(i=-1;i<g;++i)P(' ')w(g,s,k,f);} 
t(I g,I s){if(s)t(g+1,s-1);h(g,s,'/','_');B}
b(I g,I s){h(g,s,'\\',s?'_':' ');B;if(s)b(g+1,s-1);}
m(I s,I k,I f){if(s){P(f)P(k)m(s-1,k,f);P(K-k)P(f)}else{P(F-f)P(F-f)P(F-f)}}
main(I ac,char*av[]){I s;s=atoi(av[1]);t(0,s);m(1+s,'/','_');B;m(1+s,'\\',' ');B;b(0,s);}

التحدي

أقصر رمز حسب عدد الأحرف لإخراج شبكة العنكبوت مع حلقات مساوية لإدخال المستخدم.

يتم تشغيل شبكة العنكبوت عن طريق إعادة بناء حلقة الوسط:

   \_|_/
  _/   \_
   \___/
   / | \

ثم إضافة حلقات مساوية للمبلغ الذي أدخله المستخدم. الحلقة هي مستوى آخر من "دوائر العنكبوت" المصنوعة من \ / | و _ ، ويلف دائرة المركز.

يضمن الإدخال دائمًا أن يكون عددًا صحيحًا واحدًا موجبًا.

حالات تجريبية

Input
    1
Output
      \__|__/
      /\_|_/\
    _/_/   \_\_
     \ \___/ /
      \/_|_\/
      /  |  \
Input
    4
Output
         \_____|_____/
         /\____|____/\
        / /\___|___/\ \
       / / /\__|__/\ \ \
      / / / /\_|_/\ \ \ \
    _/_/_/_/_/   \_\_\_\_\_
     \ \ \ \ \___/ / / / / 
      \ \ \ \/_|_\/ / / /
       \ \ \/__|__\/ / /
        \ \/___|___\/ /
         \/____|____\/
         /     |     \
Input:
    7
Output:
            \________|________/
            /\_______|_______/\
           / /\______|______/\ \
          / / /\_____|_____/\ \ \
         / / / /\____|____/\ \ \ \
        / / / / /\___|___/\ \ \ \ \
       / / / / / /\__|__/\ \ \ \ \ \
      / / / / / / /\_|_/\ \ \ \ \ \ \
    _/_/_/_/_/_/_/_/   \_\_\_\_\_\_\_\_
     \ \ \ \ \ \ \ \___/ / / / / / / /
      \ \ \ \ \ \ \/_|_\/ / / / / / /
       \ \ \ \ \ \/__|__\/ / / / / /
        \ \ \ \ \/___|___\/ / / / /
         \ \ \ \/____|____\/ / / /
          \ \ \/_____|_____\/ / /
           \ \/______|______\/ /
            \/_______|_______\/
            /        |        \

يشمل عدد الشفرات المدخلات / المخرجات (أي البرنامج الكامل).


Answer #1

Golfscript - 124 حرفًا

كل مساحة بيضاء مهمة! إذا قمت بإضافة خط جديد بطريق الخطأ إلى النهاية ، فستكون هناك كلمة مرور إضافية _ في نهاية الإخراج

~):@,{@\:&-:0' ': *& '/':/+*'\\':~'_':
0*.'|':|\/~ +&*n}%
/[email protected]*   ~
[email protected]*n [email protected]*


@/ +*[email protected],{):& *@&-:( ~+*/[
 ](!=&*.|\~/ +(*n}%

Golfscript - 129 حرفًا

~):@,{@\:&-:0' ': *&' /'*'\\':~'_':
0*.'|'\'/'~ +&*n}%'_/'@*   '\_'@*n [email protected]*


@'/ '*[email protected],{):& *@&-:( ~+*'/'[
 ](!=&*.'|'\~'/ '(*n}%

Golfscript - 133 حرفًا

~):@,{@\:&-:0' ': *&' /'*'\\':~'_':
0*.'|'\'/'~ +&*n}%'_/'@*3 *'\_'@*n' \\'@*3
*@'/ '*[email protected],{):& *@&-:( ~+*'/''_ '1/(!=&*.'|'\~'/ '(*n}%

Answer #2

بيثون: 240 حرفًا

لا شيء صعب للغاية هنا ؛ فقط طباعة سطرا سطرا - 298 280 271 266 265 261 260 254 240 حرفا (تجاهل فواصل الأسطر الأخيرة 2)

u,b,f,s,a='_\/ |'
m=input()+1
print'\n'.join([(m-x)*s+x*' /'+b+(m-x)*u+a+(m-x)*u+f+x*'\ 'for x in
  range(0,m)]+['_/'*m+s*3+'\_'*m+'\n'+(s+b)*m+u*3+'/ '*m]+[x*s+(m-x)*
  ' \\'+f+x*u+a+x*u+b+(m-x)*'/ 'for x in range(1,m)] + [s*m+f+s*m+a+s*m+b])

Answer #3

بيرل 264 حرف

تقصير في بطانة الروتين الفرعي.

perl -E'$"="";($i=<>)++;@r=map{$p=$i-$_;@d=(" "x$_,(" ","\\")x$p,"/","_"x$_);($d="@d")=~y:\\/:/\\:;@[email protected];$d.="|@d"}1..$i;say for [email protected];$_=$r[0];y: _|:_  :;s:.(.*)\\.*/(.*).:$1_/   \\_$2:;say;y: _\\/:_ /\\:;say;$r[-1]=~y:_: :;say for grep{y:\\/:/\\:}@r;'

وسعت لتحسين قابلية القراءة.

perl -E'
  $"="";
  ($i=<>)++;
  @r=map{
    $p=$i-$_;
    @d=(
      " "x$_,
      (" ","\\")x$p,
      "/",
      "_"x$_
    );
    ($d="@d")=~y:\\/:/\\:;
    @[email protected];
    $d.="|@d"
  }1..$i;
  say for [email protected];
  $_=$r[0];
  y: _|:_  :;
  s:.(.*)\\.*/(.*).:$1_/   \\_$2:;
  say;
  y: _\\/:_ /\\:;
  say;
  $r[-1]=~y:_: :;
  say for grep{y:\\/:/\\:}@r;
'

هذا هو الكود قبل تصغيره:

#! /opt/perl/bin/perl
use 5.10.1;

($i=<>)++;
$"=""; #" # This is to remove the extra spaces for "@d"

sub d(){
  $p=$i-$_;
  " "x$_,(" ","\\")x$p,"/","_"x$_
}

sub D(){
 @d=d;
 ($d="@d")=~y:\\/:/\\:; # swap '\' for '/'
 @[email protected];
 $d.="|@d"
}

@r = map{D}1..$i;

say for [email protected]; # print preceding lines

# this section prints the middle two lines
$_=$r[0];
y: _|:_  :;
s:.(.*)\\.*/(.*).:$1_/   \\_$2:;
say;
y: _\\/:_ /\\:;
say;

$r[-1]=~y:_: :; # remove '_' from last line
say for grep{y:\\/:/\\:}@r; # print following lines

Answer #4

العاصمة - 262

حل "مباشر" في dc (OpenBSD). ليس منافسًا ، لكنه دائمًا ممتع. فواصل الأسطر لـ "قابلية القراءة"

[lcP1-d0<A]sA?sN[lK32sclAxRlNlK-l1scd0!=ARl3PlKl0sclAxRl9PlKlAxRl4PlNlK-
l2scd0!=AAPR]sW95s0124s9[ /]s1[\\ ]s292s347s4lN[dsKlWx1-d0<L]dsLx
[\\_][   ][_/][lN[rdPr1-d0<L]dsLxRRPlNlLxRR]dsBxAP[/ ][_ _][ \\]lBxAP[ \\]s1
[/ ]s247s392s41[dsKlWx1+dlN>L]dsLx32s032s9lNsKlWx

إخراج العينة

$ dc web.dc  
3
   \___|___/
   /\__|__/\ 
  / /\_|_/\ \ 
_/_/_/   \_\_\_
 \ \ \_ _/ / / 
  \ \/_|_\/ / 
   \/__|__\/ 
   /       \

Answer #5

بايثون ، 340 - 309 - 269 - 250 حرفًا

لا يزال هناك مجال للتحسين على ما أعتقد.

s=input()+1
f,b="/ ","\\"
r=range(s)
for i in r:w="_"*(s-i);print" "*(s+(i>=1)-i)+(f*i)[:-1]+b+w+"|"+w+"/"+"\ "*i
print"_/"*s+" "*3+"\_"*s+"\n"+" \\"*s+"_"*3+f*s
for i in r[::-1]:u="_ "[i<1]*(s-i);print" "*(s-i+(i>=1))+("\ "*i)[:-1]+"/"+u+"|"+u+b+f*i

-

بايثون (نسخة بديلة) ، 250 - 246 حرفًا

s=input()+1;r=range(s);c="/","\\";y="/ ","\\ "
def o(i,r):u="_ "[i<1 and r]*(s-i);print" "*(s+(i>=1)-i)+(y[r]*i)[:-1]+c[r<1]+u+"|"+u+c[r]+(y[r<1]*i)[:-1]
for i in r:o(i,0)
print"_/"*s+" "*3+"\_"*s+"\n"+" \\"*s+"_"*3+"/ "*s
for i in r[::-1]:o(i,1)

Answer #6

بيرل ، 164 شخص

195 184 171 167 164

[email protected]=((map{$z=_ x($x=1+$N-$_);$"x$x." /"x$_."\\$z|$z/".'\ 'x$_.$/}0..($N=<>)),
"_/"x++$N."   ".'\_'x$N.$/);
y'/\\'\/',@o||y#_# #,$t++||y#_ # _#,print [email protected]

يطبع البيان الأول النصف العلوي من شبكة العنكبوت. يستخدم البيان الثاني عمليات نقل الحروف لإنشاء انعكاس للنصف العلوي.

يزن هذا المقطع التالي أقرب من 314 حرفًا (من الشفرة الإنتاجية) ، ولكنه أكثر في روح الموسم.

           ;               "
         Tr                 Ic
        K|                   |t
       Re                     aT
       ",                     "H
       av                     e
        A:                    -
     )H AL                   LO  W
    ee  N"                   ,"  En
   jo    y_                 Yo    ur
   _      C&&             y";     ##
   &I      ();           $N=      1+
   <>;      $,=  $/;@O  =((     map 
    $" x($   X=$N-$_). ${   f}x$_.$
        B.${U}x$X.$P.${U}x$X.$
    F.${b}x$_,0..$N-1),${g}x$N.(${S}
   x3).${c}x$N);sub I{($F,$B,$U, $P)
  =qw         (/ \\ _ |);;         ${
 S}=        " ";$f=$S.$F;$g=$       U.
 $F     ;$b=$B.$S;$c=$B.${U};}@{    P}=
@{     O};  while([email protected]{P}  ){     @{
 P}    ||   y:_: :;$spooky++  ||    0|
  0    ||   [email protected]_ @ [email protected];y:/:8:;   ;    ;
   ;   ;;   y:\\:/:;y:8:\\:;  @O   =
    (  @O    ,$_);}[email protected];   q{
       Do     !Discuss:Rel    ig
       io       n,Politi      cs
        ,&                   &T
        heG                 rea
          tP              ump
            ki           n}

قبعة غيض إلى http://www.ascii-art.de/ascii/s/spider.txt

لقد قمت بإنشاء رمز العنكبوت على شكل يد ، لكن انظر وحدة Acme::AsciiArtinator على CPAN للمساعدة في أتمتة المهمة (أو على الأقل شبه آلية).


Answer #7

بيرل: 161 حرفًا

لاحظ أن هذا الرمز يتضمن بداية الويب في المصدر. (رد الفعل العكسي المضاعف في النهاية هو عار. النسخة السابقة لم يكن لديها ذلك.)

$_='
 \_|_/
_/   \_
 \___/ 
 /_|_\\';
for$x(1..<>){
s|(.\S).*([/\\].)|$1$&$2|g;
s|\\(.*)/| \\_$1_/$` /$&\\ |;
s|(\s+)\K/(.*).$| \\$&/$1 /_$2_\\|
}
s|_(?=.*$)| |g;
print

المسافة البيضاء ضمن $_ مهمة (بالطبع) ، لكن لا يوجد أي شيء آخر. إذا كان لديك اقتراح بسيط يحسن ذلك ، فالرجاء عدم التردد في تعديل الشفرة الخاصة بي. على سبيل المثال ، حلق Kinopiko بشكل جيد 6 أحرف!

اعتمادًا على كيفية حساب رموز تبديل سطر الأوامر ، قد يكون هذا أقصر (154 وفقًا لقواعد Perl golf المعتادة إذا كان بإمكاني الاعتماد بشكل صحيح):

#!perl -ap
$_='
 \_|_/
_/   \_
 \___/ 
 /_|_\\';
s|(.\S).*([/\\].)|$1$&$2|g,
s|\S(.*).| \\_$1_/$` /$&\\ |,
s|(\s+)\K/(.*).$| \\$&/$1 /_$2_\\|while$F[0]--;
s|_(?=.*$)| |g

Answer #8

لوا ، 290

n=...s=string r=s.reverse g=s.gsub a="\\|/"j=(" /"):rep(n+1)..a..("\\ "):rep(n+1) k=j o=k
l=n*4+7 for i=1,n+1 do k=g(k,"^(.- )/(.-)|(.*)\\(.-)$","%1%2_|_%3%4")o=k..o end
o=o..r(o)print((g(g(g(g(r(g(o:sub(1,l),"_"," ")..o:sub(l+1)),j,g(j," ","_")),("."):rep(l),"%1\n"),a,"   "),r(a),"___")))

Answer #9

بيثون وروبي فقط حتى *

أفضل متابعة سلسلة التعليقات أعلاه التي ذكرت بايثون مقابل روبي لفترة وجيزة ، لكنني بحاجة إلى التنسيق للقيام بذلك. Smashery أنيق بالتأكيد ولكن لا داعي للقلق: اتضح أن بيثون وروبي يخوضان سباقًا وثيقًا للغاية بمقياس واحد. عدت وشبهت بيثون بروبي في لعبة الغولف الثمانية التي دخلت فيها.

    Challenge       Best Python             Best Ruby

    The Wave          161                    99
    PEMDAS          no python entry       (default victory?)
    Seven Segs        160                   175
    Banknotes          83 (beat Perl!)       87  
    Beehive           144                   164
    RPN (no eval)     111 (157)              80 (107)
    Cubes             249                   233
    Webs              212                   181

    Victories           3                     4 (5?)

وبالتالي ، فالمسألة بالتأكيد لم يتم حلها وأصبحت أكثر إثارة للاهتمام مؤخرًا عندما بدأ gnibbler في الدخول على كلا الجانبين. :-)

* أنا أحسب فقط إدخالات وظيفية بالكامل.





rosetta-stone