গাছের রিংয়ের বয়স দেখান


24

ভূমিকা

গতকাল আমি একটি জন্মদিনের ধাঁধা দেখেছি । অভিনন্দন!!

এছাড়াও এই সপ্তাহে আমি টিভি শো বোনের একটি পর্ব দেখেছি যেখানে গাছের নীচে একটি মৃতদেহ পাওয়া গেছে। মৃত্যুর সময় গণনা করার জন্য, তারা গাছের আংটিগুলি গণনা করেছিল।

গাছের আংটিগুলি তৈরি হয় কারণ শীতকালে গাছগুলি ধীরে ধীরে এবং গ্রীষ্মের সময় আরও দ্রুত বৃদ্ধি পায়। এইভাবে আপনি রিংগুলি গণনা করে গাছের বয়স গণনা করতে পারেন। এছাড়াও আপনি প্রাকৃতিক ইভেন্টগুলি বৃষ্টি বা শুকনো মরসুমের মতো দেখতে পারেন।

এখানে চিত্র বর্ণনা লিখুন

চ্যালেঞ্জ

n >= 1ইনপুট হিসাবে একটি পূর্ণসংখ্যা দেওয়া , গাছ বয়স রিং আউটপুট একটি সম্পূর্ণ প্রোগ্রাম লিখুন।

কারণ রিংগুলি আকার পরিবর্তন করতে পারে জলবায়ু চক্রটি দেখানোর জন্য তিনটি বিভক্ত অক্ষর ('0', '*', '+') ব্যবহার করে।

বয়স ১

0

বয়স 2

***
*0*
***

বয়স 3

+++++
+***+
+*0*+
+***+
+++++

বয়স 4

0000000
0+++++0
0+***+0
0+*0*+0
0+***+0
0+++++0
0000000

গাছের আকার চারপাশে একটি বর্গক্ষেত্র 2*n - 1

জয়লাভ

বাইটস মধ্যে সংক্ষিপ্ত কোড।


বয়স = ৫ হলে কী হবে?
নীল

3
রিংগুলির তিনটি ধাপের চক্র রয়েছে। ('0', '*', '+')5 বছর তাই*
হুয়ান কার্লোস অরোপেজা

@ভিহান প্রশ্নটি বুঝতে পারছেন না
হুয়ান কার্লোস ওরোপিজা

@ভিহান দুঃখিত, দু'জনে ভাগ হয়ে কীভাবে সমস্যার সমাধান হয় তা এখনও বুঝতে পারছেন না। এটির সমাধানের জন্য যদি আপনার কাছে একটি হ্যাক থাকে তবে আমি সম্ভবত এটি সম্পর্কে জানতে চাই না
হুয়ান কার্লোস অরোপেজা

আকার, ক্ষেত্রের পরিধি বা প্রতিটি পাশের দৈর্ঘ্য কি?
বিটা ক্ষয়

উত্তর:


6

কে 5, 27 30 26 25 22 বাইট

"0"{4(|+y,)/x}/"0*+"3!1_!

এই পদ্ধতির পুনরাবৃত্তভাবে "0"অন্য কয়েকটি চরিত্র ( {4(|+y,)/x}) ব্যবহার করে চার দিকের একটি কোর (শুরু দিয়ে ) "মোড়ানো" হয় । Seasonতু মোড়কের 3!ক্রমটি একটি মডুলো 3 ( ) ক্রম দ্বারা নির্ধারিত হয় । বেস কেসটি ঠিক ডানদিকে লাইন করা কিছুটা মজাদারভাবে।

সম্পাদনা:

"0*+"3!u|\:u:t,1_|t:|!

এই বিকল্পটি সরবরাহ করা একচেটিয়া পরিসর ( !) বিপরীত হয়ে একবারে পুরো আয়তক্ষেত্রাকার অ্যারে তৈরি করে এবং কোনও আইটেম ( t,1_|t:|) ফেলে দেওয়ার পরে নিজের সাথে যোগ দেয় । তারপরে আমরা কার্টেসিয়ান পণ্য সর্বাধিক ( u|\:u:) গ্রহণ করি, পুরো ম্যাট্রিক্স মডুলো 3 ( 3!) এবং সূচকগুলিকে অক্ষরের অ্যারেতে নিয়ে যাই।

পদক্ষেপে:

  "0*+"3!u|\:u:t,1_|t:|!1
,,"0"

  "0*+"3!u|\:u:t,1_|t:|!3
("+++++"
 "+***+"
 "+*0*+"
 "+***+"
 "+++++")

  "0*+"3!u|\:u:t,1_|t:|!5
("*********"
 "*0000000*"
 "*0+++++0*"
 "*0+***+0*"
 "*0+*0*+0*"
 "*0+***+0*"
 "*0+++++0*"
 "*0000000*"
 "*********")

আমি কে জানি না, তবে এটি কি একটি সম্পূর্ণ প্রোগ্রাম এবং কেবল একটি ফাংশন নয়?
অ্যালেক্স এ।

এটি একটি সম্পূর্ণ প্রোগ্রাম এবং একটি ফাংশন উভয়ই। এটি একটি "সংজ্ঞা সংজ্ঞা" বলা হয় একটি উদাহরণ। পার্থক্য যাইহোক চূড়ান্ত নির্বিচারে।
জন

11

বিবিসি বেসিক, 93 বাইট

1I.r:r=r-1:F.i=-r TOr:F.j=-r TOr:p=ABS(i):q=ABS(j):IFp<q TH.p=q
2V.48-(p MOD3)*6MOD7:N.:P.:N.

সংক্ষিপ্ত কীওয়ার্ডগুলি এখানে অনেক সাহায্য করে। লাইন 2 এ, আমি প্রতিটি অক্ষর মুদ্রণের VDUজন্য কমান্ডটি (সি এর সমতুল্য putchar()) ব্যবহার করছি । এটি এর চেয়ে অনেক বেশি দক্ষ P.MID$("0*+",p MOD3+1,1)

এখানে এটি একটি ম্যাকের বিবিএম 3 এ চলছে:

এখানে চিত্র বর্ণনা লিখুন


আপনি কীভাবে এই জিআইএফ তৈরি করবেন?
হুয়ান কার্লোস ওরোপিজা

9
@ জুয়ান কার্লোস অরোপিজা খুব কার্যকরভাবে নয়। আমি স্ক্রিনটি ক্যাপচারের জন্য কুইকটাইম প্লেয়ার ব্যবহার করেছি, পিএনজি চিত্রগুলিতে ভিডিওটি রফতানি করার জন্য কুইকটাইম প্লেয়ার 7, গ্রাফিক কনভার্টরগুলিকে একটি জিআইএফ হিসাবে রূপান্তর করতে এবং ফলাফলগুলি অনুকূল করতে ezgif.com ব্যবহার করেছি
স্কিওমিশ ওসিফ্রেজ

7

সিজেম, 25 বাইট

q~,_1>W%\+_ff{e>"0*+"=}N*

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

q~,       e# Read input N, turn into range [0 1 ... N-1]
_1>       e# Duplicate and cut off the zero.
W%        e# Reverse.
\+        e# Prepend to original range to give [N-1 ... 1 0 1 ... N-1]
_         e# Duplicate
ff{       e# Nested map for each pair of elements in that array.
  e>      e# Take the maximum, i.e. chessboard distance from the centre.
  "0*+"=  e# Select the right character using cyclic indexing into this string.
}
N*        e# Join the lines with line feeds.

5

মতলব, 63 বাইট

n=input('')-1;x='0*+';t=abs(-n:n);x(mod(bsxfun(@max,t,t'),3)+1)

উদাহরণ:

>> n=input('')-1;x='0*+';t=abs(-n:n);x(mod(bsxfun(@max,t,t'),3)+1)
5
ans =
*********
*0000000*
*0+++++0*
*0+***+0*
*0+*0*+0*
*0+***+0*
*0+++++0*
*0000000*
*********

5

পাইথন 2, 83 বাইট

I=n=input()
while I+n-1:I-=1;i=abs(I);w=("O*+"*n)[i:n];print w[::-1]+w[0]*2*i+w[1:]

এক এক করে লাইনে প্রিন্ট করে। প্রতিটি লাইন তিনটি অংশে কাটা হয়:

  • প্রথম পুনরাবৃত্তি চর সহ বাম সাইক্লিং অংশ।
  • পুনরাবৃত্তি কেন্দ্র অংশ
  • ডান সাইক্লিং অংশ।

এর জন্য n=4:

0    000000    
0+    ++++    0
0+*    **    +0
0+*0        *+0
0+*    **    +0
0+    ++++    0
0    000000    

আমরা বাম অংশটি বিপরীতে হিসাবে উত্পন্ন করি w, এর শেষ চরিত্রের 2*iসময়গুলি ক্লোন করি , তারপরে প্রথম অক্ষর ছাড়াই মূল সংস্করণে যুক্ত করি।


5

পাইথন 2, 83 বাইট

n=input()
R=range(1-n,n)
for i in R:print''.join('0*+'[max(i,-i,j,-j)%3]for j in R)

আমরা যদি গাছটিকে একটি সমন্বিত গ্রিড হিসাবে ভাবি, তবে প্রতীকটি (i,j)নির্ধারিত হয় max(abs(i),abs(j))%3বা সমতুল্যভাবে max(i,-i,j,-j)%3। প্রতিটি সারির জন্য i, আমরা সেই সারিতে চিহ্নগুলিতে যোগদান করি এবং মুদ্রণ করি।


তৃতীয় লাইনে রেঞ্জ স্টেটমেন্টটি সোজা রেখে আপনি এটি সংক্ষিপ্ত করতে পারেন।
ইথান ব্রাউয়ার

@ ইথানব্রুওয়ার আমি Rদু'বার ব্যবহার করছি এবং এটি 5 টি অক্ষরের চেয়ে দীর্ঘতর, সুতরাং অ্যাসাইনমেন্টটি বিজয়ী হয়।
xnor

Touche! আমি কেবল প্রথমটি দেখেছি। আমার খারাপ। :)
ইথান ব্রাউয়ার

5

পাইথ, 23 বাইট

VK+_StQUQsm@"0*+"eS,dNK

অনলাইনে চেষ্টা করুন: বিক্ষোভ

ব্যাখ্যা:

VK+_StQUQsm@"0*+"eS,dNK   implicit: Q = input number
    StQ                   the list [1, 2, ..., Q-1]
   _                      reverse it [Q-1, ..., 2, 1]
       UQ                 the list [0, 1, ..., Q-1]
  +                       combine them [Q-1, ..., 1, 0, 1, ..., Q-1]
 K                        and store in K
VK                        for each N in K:
          m           K      map each element d in K to:
                 eS,dN          the maximum of d and N
           @"0*+"               and pick the corresponded char (modulo 3)
         s                   join the chars to a string and print

3

ম্যাটল্যাব, 80 78 73 বাইট

লুইস মেন্ডো আমাকে 5 বাইট শেভ করতে সাহায্য করার জন্য ধন্যবাদ!

A=eye(2*input('')-1);a='0*+';a(mod(bwdist(A.*rot90(A),'chessboard'),3)+1)

উদাহরণ

>> A=eye(2*input('')-1);a='0*+';a(mod(bwdist(A.*rot90(A),'chessboard'),3)+1)

5

ans =

*********
*0000000*
*0+++++0*
*0+***+0*
*0+*0*+0*
*0+***+0*
*0+++++0*
*0000000*
*********

অবহেলিত এবং কোড ব্যাখ্যা

%// Accepts an integer n from the user and creates a 2*n - 1 x 2*n - 1 identity matrix
A=eye(2*input('')-1);

%// Creates an array of three characters to print each level of the ring
a='0*+';

%// By taking the identity matrix and element-wise multiplying with its 90 degree rotated 
%// version of itself, this creates a zero matrix except for the centre most
%// value, which is 1
%// This takes the distance transform via the chessboard / Chebyshev distance
%// from the centre element
%// This mirrors what "level" each square would be at
%// 1: https://en.wikipedia.org/wiki/Distance_transform
%// 2: https://en.wikipedia.org/wiki/Chebyshev_distance
b = bwdist(A.*rot90(A),'chessboard');

%// Because each level cycles through each of the characters in the
%// character array a, we need to perform a mod operation so that
%// all of the values cycle from 1 to 3
%// This changes the distance transform output so that we range
%// from 1 to 3 instead
c = mod(b,3) + 1;

%// The values in the matrix c correspond exactly to the locations
%// we need to sample from the array a and we display our result
a(c)

গৌণ নোট

bwdistইমেজ প্রসেসিং টুলবক্সের অংশ যা একটি ফাংশন এবং এটি কেবল ম্যাটল্যাবে চালানো যেতে পারে। অক্টাভা (আইআইআরসি) bwdistএখনও কার্যকর করেনি তাই অক্টোবায় এটি চালানো যায় না।


আপনি কয়েকটি বাইট সংরক্ষণ করতে পারেন: "বীজ" ম্যাট্রিক্স উত্পন্ন করতে eyeতার rot90'এড সংস্করণ দ্বারা উপাদান অনুসারে ব্যবহার এবং I=eye(2*input('')-1);a='0*+';a(mod(bwdist(I.*rot90(I),'chessboard'),3)+1)
গুণন করুন

ওহ ঠান্ডা! ধন্যবাদ @ লুইসমেন্দো
রাইরিং - মনিকা পুনরায়

2

পাইথন 2, 134 বাইট

def l(x,c=1):
 p="\n\x1b[%d"%c;d=p+";%dH"%c
 if x:s=x*2-1;d+=(p+"G").join(["0*+"[(x+1)%3]*s]*s)+l(x-1,c+1)
 return d
print l(input())

2

পার্ল, 118 বাইট

আরও কিছু করা, তবে এখনকার জন্য একটি প্রাথমিক সংস্করণ। এখন সুস্বাদু অতিরিক্ত অনুষঙ্গ আনুগত্য সঙ্গে।

for$i(0..($-=<>-1)){substr$a[$_],$i,$}=2*($--$i)+1,(0,'*','+')[($--$i)%3]x$}for$i..$-}$,=$/;print@a,reverse@a[0..$--1]

ব্যবহার:

perl -e 'for$i(0..($-=<>-1)){substr$a[$_],$i,$}=2*($--$i)+1,(0,'*','+')[($--$i)%3]x$}for$i..$-}$,=$/;print@a,reverse@a[0..$--1]' <<< 9
+++++++++++++++++
+***************+
+*0000000000000*+
+*0+++++++++++0*+
+*0+*********+0*+
+*0+*0000000*+0*+
+*0+*0+++++0*+0*+
+*0+*0+***+0*+0*+
+*0+*0+*0*+0*+0*+
+*0+*0+***+0*+0*+
+*0+*0+++++0*+0*+
+*0+*0000000*+0*+
+*0+*********+0*+
+*0+++++++++++0*+
+*0000000000000*+
+***************+
+++++++++++++++++

1

মতলব 92

input('')-1;x=ones(2*n+1,1)*abs(-n:n);z=mod(max(x,x'),3);z(z>1)=2;z(z<1)=7;disp([z+41,''])

1

সেড, 277 252 টি অক্ষর

(251 অক্ষর কোড + 1 অক্ষর কমান্ড লাইন বিকল্প।)

ইনপুট আশা ইউনারী বিন্যাস।

:m
s/1/0/
s/1/*/
s/1/+/
tm
h
s/^/:/
:r
s/(.*):(.)/\2\1:/
tr
s/://
G
s/\n.//
h
:
/^(.)\1*$/ba
s/(.)(.)(\2*)\1/\1:\2\3:\1/
:c
s/(:_*)[^_](.*:)/\1_\2/
tc
:u
s/(.)(:\1*)_/\1\2\1/
tu
s/://g
H
b
:a
g
s/[^\n]+/:/
:f
s/(.*):(\n[^\n]+)/\2\1:/
tf
s/://
G
s/\n//

নমুনা রান:

bash-4.3$ sed -rf treering.sed <<< 1
0

bash-4.3$ sed -rf treering.sed <<< 11
***
*0*
***

bash-4.3$ sed -rf treering.sed <<< 111
+++++
+***+
+*0*+
+***+
+++++

bash-4.3$ sed -rf treering.sed <<< 1111
0000000
0+++++0
0+***+0
0+*0*+0
0+***+0
0+++++0
0000000

0

জাভাস্ক্রিপ্ট (ES6), 114

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

ফায়ারফক্সে স্নিপেট চালানোর পরীক্ষা করুন।

/* Redefine alert for testing purpose */ alert=x=>O.innerHTML=x;

[...'*+0'.repeat(n=prompt()-1)].map((c,i)=>i<n?b=[z=c.repeat(i-~i),...b,z].map(r=>c+r+c):0,b=[0]);alert(b.join`
`)
<pre id=O></pre>


আমি কোড স্নিপেট চালানোর চেষ্টা করি, তবে কিছুই হয় না। আমি ক্রোমে স্ট্যাক ওভারফ্লো খোলার কারণেই তা জানা নেই?
হুয়ান কার্লোস ওরোপিজা

@ জুয়ান কার্লোস অরোপেজা সম্ভবত এটিই হতে পারে। আমি লিখেছি: Test running the snippet in Firefoxতবে স্পষ্টতই আমি মজা করছি, ক্রোম (ক্রোমের কোনও সংস্করণ নয়) ইকমাস্ক্রিপ্ট 6 অনুবর্তী নয়, এতে =>ফাংশনগুলি অনুপস্থিত ।
edc65

@ জুয়ান কার্লোস অরোপিজা আমাকে নিজের সংশোধন করতে হবে। Chrome এর সর্বশেষতম রিলিজটিতে তীর ফাংশন রয়েছে তবে স্প্রেড অপারেটরটি বুঝতে পারে না ...। এখনও ES6 থেকে খুব দূরে
edc65

0

রুবি, 85 টি অক্ষর

puts (m=0..(n=gets.to_i-1)*2).map{|i|m.map{|j|"0*+"[[(i-n).abs,(j-n).abs].max%3]}*""}

নমুনা রান:

bash-4.3$ ruby -e 'puts (m=0..(n=gets.to_i-1)*2).map{|i|m.map{|j|"0*+"[[(i-n).abs,(j-n).abs].max%3]}*""}' <<< 4
0000000
0+++++0
0+***+0
0+*0*+0
0+***+0
0+++++0
0000000


0

সি, 138 বাইট

j,k,l;t(i){l=2*i;char*c=calloc(l,l);memset(c,10,l*(l-2));for(;k<i;++k)for(j=k;j<l-1-k;)memset(c+j++*l+k,"+0*"[(i-k)%3],l-2*k-1);puts(c);}

ক্রিয়া t গ্রহণ এক পূর্ণসংখ্যা প্যারামিটার - বয়স।

অবহেলিত ( mainসহজেই উপরেরটি চালাতে ফাংশন সহ ):

#include "stdlib.h" /* calloc - only necessary for 64-bit system */
j,k,l;t(i)
{
    l=2*i;
    char*c=calloc(l,l);
    memset(c,10,l*(l-2)); /* fill with '\n' */
    for(;k<i;++k)for(j=k;j<l-1-k;)memset(c+j++*l+k,"+0*"[(i-k)%3],l-2*k-1);
    puts(c);
}

main(int c,char**v)
{
    t(atoi(v[1]));
}

দ্য stdlib.hকিছু সিস্টেমে প্রয়োজন হতে পারে, কারণ এটি ছাড়া অঘোষিত ফাংশনের রিটার্ন টাইপ callocডিফল্ট হবে int। কারণ intএবং char*অগত্যা একই আকারের নয়, একটি অবৈধ পয়েন্টার এতে লেখা যেতে পারে c। সবচেয়ে 32 বিট সিস্টেমে উভয় char*এবং intএকই আকারের আছে, কিন্তু এই 64-বিট সিস্টেমের জন্য সত্য নয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.