এএসসিআইআই আইসক্রিম


15

একটি প্রোগ্রাম বা ফাংশন যা এন পূর্ণসংখ্যা একটি ইতিবাচক লাগে লিখুন, এবং কপি করে প্রিন্ট বা আয় একটি এন × এন হওয়া ASCII শিল্প স্ট্রিং যার চূড়া অর্ধ অর্ধবৃত্ত তৈরি হয় (এর যার নীচে অর্ধ নিম্নগামী-নির্দেশিত তৈরি ত্রিভুজ হয় Vএর সঙ্গে প্যাডিং হিসাবে ব্যবহৃত স্পেস।

অন্য কথায়, একটি এএসসিআইআই আইসক্রিম শঙ্কু তৈরি করুন: (এন = 17 এর জন্য আউটপুট)

      (((((      
    (((((((((    
  (((((((((((((  
  (((((((((((((  
 ((((((((((((((( 
 ((((((((((((((( 
(((((((((((((((((
(((((((((((((((((
VVVVVVVVVVVVVVVVV
 VVVVVVVVVVVVVVV 
  VVVVVVVVVVVVV  
   VVVVVVVVVVV   
    VVVVVVVVV    
     VVVVVVV     
      VVVVV      
       VVV       
        V        

উদাহরণ

এখানে এন = 1 থেকে 5 এর আউটপুট রয়েছে Note নোট করুন যে বিজোড় এন এর জন্য ত্রিভুজটি সর্বদা বৃহত্তর অর্ধেক হতে হবে।

V

((
VV

(((
VVV
 V 

 (( 
((((
VVVV
 VV 

 ((( 
(((((
VVVVV
 VVV 
  V  

এখানে একটি এন = 101 পেস্টবিন রয়েছে।

এবং এখানে একটি অবারিত পাইথন 3 রেফারেন্স বাস্তবায়ন:

N = int(input())
ic = [[' '] * N for _ in range(N)]
for y in range(N//2):
    for x in range(N):
        if (x - (N - 1) / 2)**2 + (y - (N - 1) / 2)**2 < (N / 2)**2:
            ic[y][x] = '('
for y in range(N//2, N):
    for x in range(y - N//2, N - (y - N//2)):
        ic[y][x] = 'V'
for line in ic:
    print(''.join(line))

বিস্তারিত

  • স্টিডিন, কমান্ড লাইন বা ফাংশন আর্গুমেন্ট হিসাবে ইনপুট নিন। Stdout বা অনুরূপ আউটপুট, বা আপনি একটি ফাংশন লিখলে আপনি স্ট্রিং ফিরে আসতে পারে।
  • শঙ্কু অংশটি অবশ্যই সমস্ত এন এর জন্য রেফারেন্স বাস্তবায়নের সাথে মেলে should
  • আইসক্রিম অংশটি রেফারেন্স বাস্তবায়নের সাথে হুবহু মিলে যাওয়ার দরকার নেই যতক্ষণ না এটি সমস্ত এন এর অর্ধবৃত্ত আকারে পরিষ্কারভাবে থাকে (এটি তাই রাউন্ডঅফ ত্রুটির কারণে আপনাকে অর্ধবৃত্তের সামান্য পার্থক্য সম্পর্কে চিন্তা করতে হবে না ।)
  • কোনও অপ্রয়োজনীয় নেতৃস্থানীয় স্থান থাকা উচিত নয় তবে অতিরিক্ত অতিরিক্ত স্থানের স্থান থাকতে পারে।
  • আউটপুটে optionচ্ছিকভাবে একটি পিছনের নিউলাইন থাকতে পারে।
  • আপনি আপনার ইচ্ছামতো যেকোনো 3 অন্যান্য স্বতন্ত্র ব্যবহার করতে পারেন মুদ্রণযোগ্য হওয়া ASCII স্থানে অক্ষর (, Vএবং স্থান।

স্কোরিং

বাইটস মধ্যে সংক্ষিপ্ততম জমা জয়। টাইব্রেকার পুরানো জমাতে যায়।


6
আমি যখন শিরোনামটি পড়ি তখনই কেবল আমিই "আইসসিআইআই এএসক্রিম" ভেবেছিলাম?
Sp3000

15
@ এসপি 3000 জীজ, আমিও তাই আশা করি ...
ক্যালভিনের শখ

উত্তর:


7

সিজেম, 46 বাইট

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

{:Z{Z{Z(2./:R-zYR<):P#YR-zP#+Z2./P#>SP?}/N}fY}

আমি বিশ্বাস করি এটি বর্তমানে মূল স্পেসিফিকেশনটির হুবহু নকল করে, যা আমি যখন এই উত্তরটি উত্পাদন করা শুরু করি তখন প্রয়োজনীয় ছিল। মূল স্পেসিফিকেশনের তুলনায় গণিতটি কম নির্ভুল করে কয়েকটি বাইট সংরক্ষণের সম্ভাবনা থাকতে পারে, তবে যতক্ষণ না আমি এক বা দুটি বাইটের বেশি করে এটি সংরক্ষণ করার উপায় না দেখি, ততক্ষণ আমি এটিকে রেখে দেব।

ব্যাখ্যা

{               "Begin block";
  :Z{             "For each y from 0 to input-1";
    Z{              "For each x from 0 to input-1";
      Z(2./:R         "Calculate the radius as (input-1)/2.0";
      -z              "Calculate the horizontal distance from the center";
      YR<):P          "Calculate the power to raise distances to: (y<radius)+1
                       (This results in Euclidean distance being calculated for
                        the ice cream and Manhattan distance being calculated
                        for the cone)";
      #               "Raise the horizontal distance to the determined power";
      YR-zP#          "Calculate the vertical distance from the center and
                       raise it to the determined power";
      +               "Add the horizontal and vertical distances";
      Z2./P#          "Calculate the solid distance threshold and raise it to
                       the determined power";
      >SP?            "If the solid threshold is exceeded, produce a space;
                       otherwise, produce the determined power digit
                       (This results in ice cream being represented by the
                        digit '2' and the cone by the digit '1')";
    }/              "End x loop";
    N               "Produce a new line";
  }fY             "End y loop";
}               "End block";

এটি 2's এবং 1' এর পরিবর্তে ('গুলি এবং V' গুলি ব্যবহার করে?
মার্ক রিড

পছন্দ করেছেন বিশদ বিভাগের শেষ লাইন।
জাকুবে

3

inca2 129 123 121 111 107

এটি বেশিরভাগ অজগর উদাহরণ থেকে সূত্রগুলি ব্যবহার করে তবে ডাবল-লুপিংয়ের পরিবর্তে জট-ডটস এবং আইওটাস ব্যবহার করে। iকর্ম সঞ্চালিত জন্য বিজ্ঞপ্তি পরীক্ষা jফাংশন যা পূজা লেশ-বিন্দু এটি উপর। এবং kফাংশন ফাংশনটির জন্য ত্রিভুজ পরীক্ষা lকরে। cফাংশনের ফলাফল catenates jএবং lএবং N × এন তা reshapes।

সম্পাদনা: -6 2 টি মানচিত্রকে 1 এর সাথে সংযুক্ত
করুন: সম্পাদনা: -2 অকেজো অভ্যাস সরান।
সম্পাদনা করুন: ভাল ধরণের।
সম্পাদনা: -10 পুনরাবৃত্তি অভিব্যক্তি অ্যারে- ভিত্তিতে প্রয়োগ করুন।
সম্পাদনা: -4 ফাংশন হিসাবে ফাংশন পুনরাবৃত্তি প্রকাশ।
সম্পাদনা: লাইন বাই লাইন মন্তব্য।

q:y-(n-1)%2
i:[((n%2)^2)>+/(qx y)^2
j:(~[y%2)i.(~y)
k:2*[x>[|qy
l:(@1+~]y%2)k.(~y)
c:y y#((jn<y),ly){' (V' 

আরো বিস্তারিত, এন্ট্রি পয়েন্ট cফাংশন যা এক যুক্তি পরোক্ষভাবে নামে লাগে y

c:y y#((jn<y),ly){' (V' 
         n<y            } assign y to 'n'
        jn<y            } call j(y)
              ly        } call l(y)
      ((    ),  )       } catenate the results
      (         ){' (V' } map 0 1 2 to ' ' '(' 'V'
  y y#                  } reshape to NxN

jফাংশন তার মতো একই ইনপুট মান গ্রহণ করে yপ্যারামিটার।

j:(~[y%2)i.(~y)
     y%2         } y divided by 2
    [            } floor
   ~             } iota. this generates the row indices 0..y/2
            ~y   } iota y. this generates the column indices 0..y
  (     )i.(  )  } jot-dot with the function i

এখানে জট-ডট ডাবল লুপ করে। এটি iবাম এবং ডান অ্যারে (0..n / 2 এবং 0..n) থেকে প্রতিটি উপাদানের সংমিশ্রণের সাথে ফাংশনটিকে কল করে। সুতরাং iফাংশন হিসাবে গ্রহণ করে Y টেবিলের সূচক, এবং এটি হিসাবে গ্রহণ করে এক্স সূচক। নামগুলি এখানে একটু পিছনে পেয়েছে :)।xy

i:[((n%2)^2)>+/(qx y)^2
     n%2                 } n divided by 2
    (n%2)^2              } squared
                 x y     } make a 2-element array (x,y)
                qx y     } call q on this array

কোথায় qনা

q:y-(n-1)%2
     n-1    } n minus 1
         %2 } divided by 2
  y-        } y minus that

আবার i

i:[((n%2)^2)>+/(qx y)^2
               (    )^2  } square the result from q(x,y)
             +/          } sum the two numbers
            >            } compare the left side (above) with the right (=> 0/1)
  [                      } floor

মেঝে প্রয়োজন হবে না। তবে স্পষ্টতই দোভাষীটিতে একটি বাগ রয়েছে।

lফাংশন একভাবে কাজ jফাংশন, একটি লেশ-ডট ব্যবহার করে।

l:(@1+~]y%2)k.(~y)
        y%2         } y divided by 2
       ]            } ceiling
      ~             } iota 0..ceil(y/2)-1
    1+              } add 1 => 1..ceil(y/2)
   @                } reverse => ceil(y/2)..1
               ~y   } iota y  0..y-1
  (        )k.(  )  } jot-dot using k

kফাংশন একটি বুলিয়ান 2 দ্বারা গুন করা উৎপাদ তাই মান পরে আইসক্রীম মান থেকে আলাদা করা যায় ম্যাপিং।

k:2*[x>[|qy
     x       } k's left arg
         qy  } y-(n-1)%2
        |    } abs
       [     } floor
     x       } left-hand-side again
      >      } compare 
    [        } floor (should be unnecessary)
  2*         } scale by 2

ক্রিয়াকলাপে ( trট্যাব অক্ষরগুলি সরানোর জন্য পাইপ দেওয়া যা REPL এর প্রম্পট)

josh@Z1 ~/inca
$ ./inca2 <icecream | tr -d '\t'

c1
V

c2
((
VV

c3
(((
VVV
 V 

c4
 (( 
((((
VVVV
 VV 

c5
 ((( 
(((((
VVVVV
 VVV 
  V  

josh@Z1 ~/inca
$ 

2

পাইথন 2, 193 192

স্ট্রিং ব্যবহার করে না, শুধুমাত্র গণিত

N=input()
R=(N+1)/2;r=range(R)
s=lambda L,U:(10**U-10**L)/9
f=lambda N,m:s(0,N)+s(m,N-m)
g=lambda N,m:s(0,N)+s(m,N-m)*6
for i in r[1:]:print f(N,int(R-(2*R*i-i*i)**.5))
for i in r:print g(N,i)

s(L,U)" Uডানদিকের শূন্যগুলির সাথে ডিজিটগুলি এবং বাকীগুলি " ফর্মের একটি সংখ্যা ফেরত Lদেয় "
f(N,m)এর অভ্যন্তরের বিভাগের সাথে একটি এন-ডিজিট নম্বর দেয় এবং প্রতিটি পাশের 2এম-প্রশস্ত সীমানা একই কাজ করে তবে রঙের জন্য ব্যবহার করে " অভ্যন্তরীণ বিভাগটি যেহেতু এটি শঙ্কুর টেক্সচারটির সাথে আরও ঘনিষ্ঠভাবে মেলে1
g(N,m)7

আউটপুট

N=8         N=9
11122111    112222211
12222221    122222221
22222222    222222222
22222222    222222222
77777777    777777777
17777771    177777771
11777711    117777711
11177111    111777111
            111171111

এটি করার খুব অনন্য উপায় :)
ক্যালভিনের

কেবলমাত্র যদি আমরা আইসক্রিমটিও দেখতে পাই: পি
অপ্টিমাইজার 14

2

পার্ল 6, 175

অনেক গল্ফিং ছাড়াই বেশ সোজা বাস্তবায়ন, কেবল বহিরাগত সাদা স্থান / বিরামচিহ্ন নির্মূল:

sub MAIN($d){my$r=($d/2).Int;for 1..$r ->$n
{my$y=$n-$r;my$h=sqrt($r*$r-$y*$y).Int;my$w=2*$h+$d%2;say
' 'x($r-$h)~'('x$w};for 1..($d-$r) ->$y {say ' 'x($y-1)~'V'x($d-2*$y+2)}}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.