প্রাইম প্যারিটি পেরিগ্রিনেশন


44

এই প্রতিদ্বন্দ্বিতা উদ্দেশ্য গ্রাফিক্যালি সমতল, যেখানে প্রতিটি পদক্ষেপ দিকের উপর হাঁটার বর্ণা হয় এর primality দ্বারা নির্ধারিত হয় এবং তার বাইনারি সম্প্রসারণের সমতা। বিশেষ করে,kk

  • প্রাথমিক দিকটি স্থির হয়েছে, উত্তরটি বলুন।
  • সমস্ত পদক্ষেপের সমান দৈর্ঘ্য রয়েছে
  • পদক্ষেপ এর দিকনির্দেশ উত্তর, পশ্চিম, দক্ষিণ বা পূর্ব হতে পারে এবং নিম্নলিখিত হিসাবে নির্ধারিত হয়: k
    • যদি প্রধান না হয় তবে দিকটি পরিবর্তন হয় না।k
    • তাহলে মৌলিক এবং বাইনারি সম্প্রসারণ বেশী একটি এমনকি সংখ্যা আছে, ডানে ঘুরান।kk
    • তাহলে মৌলিক এবং বাইনারি সম্প্রসারণ বেশী একটি বিজোড় সংখ্যা আছে, বাম চালু করুন।kk

একটি কাজের উদাহরণ হিসাবে , ধরে নিন যে প্রাথমিক দিকটি উত্তর। প্রথম পদক্ষেপগুলি হ'ল:

  • k=1 প্রধান নয়। সুতরাং আমরা বর্তমান দিকের এক ধাপ এগিয়ে চলেছি, এটি উত্তর।
  • k=2 প্রধান, এবং এর বাইনারি সম্প্রসারণ, 10এবং এর সংখ্যাগুলি বিজোড়। সুতরাং আমরা বাম দিকে ঘুরে, এবং এখন পশ্চিমের মুখোমুখি। আমরা সেই দিকে এক ধাপ এগিয়ে যাই।
  • k=3 প্রধান, এবং এর বাইনারি সম্প্রসারণ, 11এবং এর সংখ্যাও রয়েছে। সুতরাং আমরা ডানদিকে ঘুরলাম, এবং এখন উত্তরের মুখোমুখি। আমরা সেই দিকে এক ধাপ এগিয়ে যাই।
  • k=4 প্রধান নয়। সুতরাং আমরা বর্তমান দিকের এক ধাপ এগিয়ে চলেছি, এটি উত্তর।

চ্যালেঞ্জ

ইনপুট : ধনাত্মক পূর্ণসংখ্যা ।N

আউটপুট : উপরে বর্ণিত হিসাবে স্টেপ ওয়াকের প্লট ।N

অতিরিক্ত বিধি

  • প্রাথমিক দিক অবাধে নির্বাচিত করা যেতে পারে (অগত্যা উত্তর), কিন্তু সবার জন্য একই হতে হবে ।N
  • বাঁক নিয়ম বিপরীত যে উপরে বর্ণিত, যে, ডান বিজোড় সমতা জন্য চালু এবং এমনকি বাম হতে পারে; তবে এটি সমস্ত জন্য একই হতে হবে ।N
  • আউটপুটটি হাঁটার একটি গ্রাফিকাল চিত্র হতে হবে। এই ক্ষেত্রে:
    • ওয়াকটি লাইন বিভাগগুলির সাথে আঁকা যায়।
    • পরিদর্শন করা পয়েন্টগুলি কোনও মার্কার যেমন একটি বিন্দুর সাথে দেখানো যেতে পারে; লাইন বিভাগগুলি সংযুক্ত করে বা ছাড়াই
    • একটি দ্বি বর্ণের রাস্টার চিত্র সরবরাহ করা যেতে পারে, যার মধ্যে একটি বর্ণিত পয়েন্টের সাথে সাদৃশ্যযুক্ত এবং অন্যটি দর্শনীয় নয় for
  • অনুভূমিক এবং উল্লম্ব অক্ষগুলির স্কেলগুলি একই হওয়া উচিত নয়। অক্ষের লেবেল এবং অনুরূপ উপাদানগুলি alচ্ছিক। যতক্ষণ হাঁটা পরিষ্কারভাবে দেখা যায় ততক্ষণ প্লটটি বৈধ।
  • লক্ষ্য করুন যে কয়েকটি পয়েন্ট একাধিকবার পরিদর্শন করা হয়েছে। প্লটটি এটি সম্পর্কে সংবেদনশীল নয়। উদাহরণস্বরূপ, প্লটে যদি লাইন বিভাগগুলি দেখানো হয় তবে প্রতিটি ইউনিট সেগমেন্টটি একইভাবে প্রদর্শিত হবে যতইবার এটি ট্র্যাভার করা হয়েছে।
  • কোডটি কোনও Nপ্রদত্ত সীমাহীন সংস্থার জন্য কাজ করা উচিত । এটি গ্রহণযোগ্য যদি বাস্তবে এটি Nসময়, মেমরি বা ডেটা-টাইপ সীমাবদ্ধতার কারণে বড় পরিমাণে ব্যর্থ হয় ।
  • ইনপুট এবং আউটপুট যথারীতি নমনীয়। বিশেষত, চিত্রগুলি আউটপুট দেওয়ার জন্য কোনও মানক উপায় ব্যবহার করা যেতে পারে।
  • বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।

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

নিম্নলিখিত প্লটগুলি উত্তরকে প্রাথমিক দিক হিসাবে ব্যবহার করে; এমনকি সমতা ডানদিকে পরিণত হয়; এবং ওয়াকটি রেখাংশগুলির সাথে চিত্রিত করা হয়েছে।

N = 7:

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

N = 3000:

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

N = 20000:

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

N = 159000:

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

N = 1200000:

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

N = 11000000:

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


1
শুধুমাত্র কোনও কারণেই [graphical-output]অনুমোদিত? ASCII আউটপুটটিকে অস্বীকার করার জন্য বিশেষত কোনও কারণ যেমন আমার এখন মুছে দেওয়া চারকোল উত্তর?
কেভিন ক্রুইজসেন

2
@ কেভিন আমাকে একবার একই চ্যালেঞ্জের সাথে উভয়কে না মেশানোর পরামর্শ দেওয়া হয়েছিল ... অন্যেরা কী মনে করেন?
লুইস মেন্ডো

1
ঠিক আছে, আমি সেই পরামর্শের পিছনে যুক্তিটি বুঝতে পারি, যেহেতু ছবি / গ্রাফ বনাম এএসসিআইআই আর্ট হিসাবে আউটপুট কিছু ভাষায় সম্পূর্ণ আলাদা। তারপরে আবার, আমি গ্রাফ আউটপুটগুলি ASCII- কলা চ্যালেঞ্জ এবং তদ্বিপরীতভাবে upvotes বোঝা পেয়েছি দেখেছি, তাই আমি অনুমান করি যে সবাই একমত নয়। ব্যক্তিগতভাবে আমি মনে করি এটি সত্যই চ্যালেঞ্জের উপর নির্ভর করে। এক্ষেত্রে আমি উভয়কে একই চ্যালেঞ্জের অনুমতি দেওয়ার ক্ষেত্রে ব্যক্তিগতভাবে কোনও ক্ষতি দেখতে পাই না, তবে আমার এখন মুছে দেওয়া উত্তরের কারণে আমি পক্ষপাতদুষ্ট থাকতে পারি। সুতরাং আমি আপনার মতো একই প্রশ্নটি জিজ্ঞাসা করব: " অন্যেরা কী মনে করেন? " @ অরনাউল্ড সম্ভবত আপনার এএসসিআইআই ট্যাক্সি ড্রাইভার পোস্ট করা উচিত;)
কেভিন ক্রুইজসেন

1
বিভিন্ন OEIS সিকোয়েন্সগুলিতে এই রানটি দেখতে আকর্ষণীয় হবে (সত্য, কেউ কেউ কেবল একটি সরলরেখায় চলতে বা চেনাশোনাগুলিতে দৌড়াতে পারে তবে কিছুটি বেশ কিছুটা হতে পারে)।
ড্রাকো 18

16
এন = 11000000 এ, এটি ইউরোপের মানচিত্রের সমান করে দেখা যাচ্ছে।
ডিজিটাল ট্রমা

উত্তর:


12

স্লেজহ্যামার 0.4 , 22 20 বাইট

⢂⡐⠥⡄⠡⢒⣩⣀⣼⡝⢄⡎⣛⠅⡉⣱⡆⢀⡠⣽

এই ওল্ফ্রাম ভাষার ফাংশনটিতে সংকোচনের বিষয়টি:

ListPlot[AnglePath[Array[If[PrimeQ@#, ArcSin[(-1)^ThueMorse@#], 0] &, #]]]

Ungolfed

প্রথমে আমরা একটি ফাংশন সংজ্ঞায়িত করি যা প্রতিটি পদক্ষেপে ঘুরার জন্য কোণটি দেয়:

If[PrimeQ[#],
    ArcSin[(-1)^ThueMorse@#],
    0
]&

ThueMorseবাইনারি অঙ্কের যোগফলের সমতা। আমরা কিছুটা জটিল কারণে ব্যবহার -1^(...)না করে ব্যবহার করি 2*...-1: ওল্ফ্রাম ল্যাঙ্গুয়েজ স্বয়ংক্রিয়ভাবে গাণিতিক এক্সপ্রেশনগুলিকে উত্স হিসাবে একটি প্রচলিত আকারে রূপান্তরিত করে, তাই এর মত প্রকাশগুলি 2/xহিসাবে সংরক্ষণ করা হয় Times[2, Power[x, -1]]। এটি ফ্রিকোয়েন্সিটি Powerখুব উচ্চ করে তোলে এবং এইভাবে এটি খুব কম সংকোচনে।

(এর দ্বারা গুণন করা Boole@PrimeQ@কিছুটা দীর্ঘ, এবং Booleচ্যালেঞ্জের সময় বুলেঁসগুলির অন্তর্নিহিত কাস্টিং কার্যকর করা হয়নি))

এখান থেকে, গাণিতিক AnglePathএবং ListPlotআমাদের যা প্রয়োজন ঠিক তা করুন:

ListPlot[AnglePath[Array[%, #]]]&

ইন্টারেক্টিভ অ্যাপ্লিকেশনটিতে, আউটপুটটি একটি পুনরুদ্ধারযোগ্য ভেক্টর গ্রাফিক্স অবজেক্ট।

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


শান্ত! আমাদের সমাধানগুলি একত্রিত করে আমি 77 বাইটে নামলাম। চিয়ার্স!
রোমান

14

এমএটিএল , 25 24 21 বাইট

Q:qJyZpbB!sEq*^YpYsXG

এটি এমএটিএল অনলাইনে চেষ্টা করে দেখুন

চ্যাটটিতে একটি দুর্দান্ত গল্ফিং সেশনের জন্য @ লুইস মেন্ডোকে ধন্যবাদ, যা শেষ পর্যন্ত এই 21 বাইট সংস্করণটির পরামর্শ দিয়েছিল Eq*^

ব্যাখ্যা

Q:q % Push 0:n
J   % Push 1i for later use.
y   % Duplicate 0:n from below
Zp  % Vector result of isprime()
b   % Bubble 0:n from bottom of stack
B!s % Sum of bits in binary representation
Eq  % Double minus one to get an odd number
*   % Multiply by isprime result to get either zero or aforementioned odd number
^   % Exponentiate 1i by an odd number or zero to get -i, 1 or i (corresponding to left turn, straight ahead, right turn).
Yp  % Cumulative product to get a vector of directions
Ys  % Cumulative sum to get vector of positions
XG  % Plot

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


8

সি (জিসিসি) , 179 বাইট

o;i;d;k;h;f(n,p)char*p;{h=2*n+1;memset(p,0,h*h);p+=h--*n+n;*p=1;for(d=k=0;k++<n;){for(i=1;k%++i%k;);for(o=k;o/2;o=o/2^o&1);i==k?d+=o*2+3:0;p+=(d%2*h+1)*((d&2)-1);*p=1;}return++h;}

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

4n2+4n+101

সি (জিসিসি) , 219 বাইট

o;i;d;k;h;f(n,p)char*p;{h=2*n+1;p+=sprintf(p,"P1 %d %d ",h,h);memset(p,48,h*h);k=h--*n+n;*(p+2*k+1)=0;p+=k;*p=49;for(d=k=0;k++<n;){for(i=1;k%++i%k;);for(o=k;o/2;o=o/2^o&1);i==k?d+=o*2+3:0;p+=(d%2*h+1)*((d&2)-1);*p=49;}}

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

4n2+4n+2×log10(2n+1)+9

20000 এর জন্য ক্রপযুক্ত আউটপুট:

20000 জন্য ক্রপ আউটপুট

উভয় সংস্করণ পশ্চিম দিয়ে শুরু হয় এবং বিজোড়, বামদিকেও ডানদিকে ঘুরবে।

20000 এর আউটপুটটি 1.5 ডলার হিসাবে এবং 150000 ~ 90 গিগাবাইট হত বলে আমি দুটিগুলির সাথেই বড় টেস্টকেসগুলি চেষ্টা করেছিলাম। প্রোগ্রামটি সঞ্চালনের সময় এগুলি সমস্ত মেমরিতে সঞ্চয় করা হয়।

উপরেরটির ব্যাখ্যা:

o;         /* Temporary variable for calculating parity */
i;         /* Temporary variable for primality test */
d;         /* d % 4 = direction */
k;         /* Step */
h;         /* height/width of image */
f(n,p)char*p;{ /* Function taking int and char pointer */
  h=2*n+1;     /* Image sidelength = 2 * N + 1, so N in each direction */
  memset(p,0,h*h); /* Reset buffer */
  p+=h--*n+n;  /* Position p at image center; decrement h */
  *p=1;        /* Put a dot at center */
  for(d=k=0;   /* Set direction and step to 0 */
    k++<n;){   /* Loop over [1..N] */
    for(i=1;k%++i%k;); /* Primality test */
    for(o=k;o/2;o=o/2^o&1); /* Parity test */
    i==k?d+=o*2+3:0; /* Change direction if necessary */
    p+=(d%2*h+1)*((d&2)-1); /* Move according to direction */
    *p=1; /* Set pixel to black */
  }
  return++h; /* Add 1 back to h and return */
}

1
আমি মনে করি না যে বরাদ্দ হিসাবে অনুমোদিত বরাদ্দকৃত বাফার সরবরাহ করা দরকার - মেটা নীতি অনুসারে , কোনও অতিরিক্ত ইনপুট অবশ্যই ফাঁকা থাকতে হবে (যার অর্থ আমি 0সি এর ক্ষেত্রে অর্থ বা নাল পয়েন্টারটি ব্যাখ্যা করব )।
ডুরকনব

3
আমি এটিকে ব্যাখ্যা করে বলছি যে আমি এটি বরাদ্দ হওয়ার আশা করতে পারি। এটি স্প্রিন্টফের মতো অনেক স্ট্যান্ডার্ড লাইব্রেরি ফাংশনে ব্যবহৃত একটি প্যাটার্নও।
wastl

আহ ঠিক আছে, আপনি ঠিক বলেছেন, তা বোঝা যায়।
ডোরকনব


8

ওল্ফ্রাম ভাষা (গণিত) , 98 96 91 77 76 63 বাইট

ListPlot@AnglePath@Array[Pi/2If[PrimeQ@#,2ThueMorse@#-1,0]&,#]&

-১৪ বাইট: আমাকে কীভাবে ব্যবহারAnglePath করবেন তা দেখানোর জন্য @ লিরিটোসিস্টকে ধন্যবাদ জানাই ...

-13 বাইট: ... এবং ThueMorse!

ব্যবহারের উদাহরণ:

%[20000]

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

ধাপে ধাপে ব্যাখ্যা:

  • If[PrimeQ@#, 2 ThueMorse@# - 1, 0] &এমন একটি ফাংশন যা পদক্ষেপ সূচক নেয় এবং অ-প্রাইমগুলির জন্য 0, সম-বাইনারি প্রাইমগুলির জন্য -1 এবং বিজোড়-বাইনারি প্রাইমগুলির জন্য +1 প্রদান করে। ThueMorse@#পূর্ববর্তী সমাধানের Total[#~IntegerDigits~2](যা একই, মডুলো 2) প্রতিস্থাপন করে ।

  • Array[Pi/2*%,#]সূচকটি 1 থেকে ফাংশন আর্গুমেন্টে (উদাহরণস্বরূপ 20000) গিয়ে এই ফাংশনটির একটি তালিকা তৈরি করে এবং প্রতিটি উপাদানকে দিকনির্দেশক কোণে (রেডিয়ানস) রূপান্তর করতে π / 2 দিয়ে গুণ করে। আমাদের কাছে এখন নন-প্রাইমগুলির জন্য 0, সম-বাইনারি প্রাইমগুলির জন্য -π / 2 এবং বিজোড়-বাইনারি প্রাইমগুলির জন্য + π / 2 রয়েছে।

  • AnglePath[%]দিশা-পরিবর্তন কোণগুলির এই তালিকাটিকে একটি পথে রূপান্তর করে। এই নির্দেশটি আগের সমাধানটির দ্বিগুণ ব্যবহারের পরিবর্তে Accumulate

  • ListPlot[%]পজিশনের তালিকাটি একটি এক্সওয়াই ডট প্লটে রূপান্তর করে। যদি কোনও লাইন পছন্দ হয় তবে ListLinePlotপরিবর্তে ব্যবহার করুন। প্লটগুলি আরও ভাল দেখানোর জন্য এই প্লট ফাংশনগুলির প্রচুর বিকল্প রয়েছে।


1
ধন্যবাদ @ লিরিটোসিস্ট! এটি একটি বিদেশী ভাষা শেখার মতো: প্রতিদিন নতুন শব্দভাণ্ডার।
রোমান

7

এমএটিএল, 31 30 28 26 বাইট

J4:^0i:Zpl_G:B!s^*hYs)YsXG

3 লুইস মেন্ডোকে ধন্যবাদ বাইটস সংরক্ষণ করেছে

2 স্যুইচাইজিসকে ধন্যবাদ বাইটস সংরক্ষণ করেছে

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

ব্যাখ্যা

এই সমাধানটি 2 ডি প্লেনের এক্স এবং ওয়াই উপাদানগুলি উপস্থাপন করতে জটিল সংখ্যা ব্যবহার করে

J      % Push the literal complex number 0 + 1j to the stack
4:     % Create the array [1, 2, 3, 4]
^      % Raise 0 + 1j to each power in the array, [1, 2, 3, 4]

এই মুহুর্তে, আমাদের চারটি পয়েন্ট ( (0, 1), (-1, 0), (0, -1), (1, 0)) রয়েছে একটি অ্যারেতে জটিল সংখ্যা দ্বারা প্রতিনিধিত্ব করা। এই চারটি মূল দিকনির্দেশনা। এখন আমরা এগুলি "হাঁটার জন্য" ব্যবহার করতে চাই।

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

কোডের এই ভাগে ঐ সব একটি অ্যারের সৃষ্টি 0, -1এবং 1মান।

0      % Push a literal 0 to the stack (the starting point)
i      % Explicitly grab the input (N)
:      % Create an array from 1...N
Zp     % Determine if each element is a prime (1) or not (0)
l_     % Push the literal -1 to the stack
G      % Explicitly grab the input again (N)
:      % Create an array from 1...N
B      % Convert to binary representation (each row is the binary representation of
       % each element in the vector)
!      % Transpose
s      % Sum down the columns to count number of 1's
^      % Raise the -1 to each element. For odd number of 1's in the
       % binary expansion this yields -1, and even yields 1

*      % Multiply this -1 or 1 by the result of the prime check (element-wise). 
       % For non-primes this yields a 0, for primes with an even number of 1's in 
       % the binary representation this is a 1, and for primes 
       % with an odd number of 1's in

h      % Horizontally concatenate with the initial 0

এখন আমাদের ধারাবাহিক পূর্ণসংখ্যার মধ্যে পার্থক্যগুলির একটি অ্যারে রয়েছে তাই সূচকগুলি পেতে আমরা সেইগুলিগুলির সংখ্যার যোগফলকে গণনা করতে পারি যা আমরা পরে মূল 4-উপাদান অ্যারের প্রতিটি ধাপে দিকটি অনুসন্ধান করতে ব্যবহার করতে পারি।

সুবিধাজনকভাবে, এমএটিএল-এর মোড়কে চারপাশে এমন সূচক 5রয়েছে যা 4-উপাদান অ্যারের শুরুতে সূচককে গুটিয়ে রাখে । আমরা এটি আমাদের সুবিধার জন্য ব্যবহার করতে পারি যাতে রেফারেন্স দিকনির্দেশের অ্যারেটি কেবল 4 টি উপাদান হিসাবে চিন্তা না করে আমরা এই পূর্ণসংখ্যাটি বৃদ্ধি বা হ্রাস করতে পারি।

Ys     % Compute the cumulative sum
)      % Use this to modularly index into the original array of four points

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

Ys     % Compute the cumulative sum
XG     % Plot as a 2D plot

5

পার্ল 6 , 213 182 বাইট

{আমার @ পি = [\ +] [\ *] ({{। ইস-প্রাইম ??। বেস (২) .কম্ব (~ 1)% 2 ?? আই !! - আই !! 1 + 0 আই} (+ + $)} ... *) [^ $ _]; {"<এসভিজি ভিউবক্স = '{। মিনিট xx 2,। সেলস এক্সএক্স 2}' >> >> &। & L" এল {.রে} {। আইএম} " fill} 'ভরাট =' কিছুই নয় 'স্ট্রোক =' কালো '/> "} (মিনিম্যাক্স | @ পি»। রিয়েলস)}

{{"<svg viewBox='{{.min,.min,+$_,+$_}(.minmax)}'><path d='{"L"X~$_}' fill='none' stroke='red'/></svg>"}(([\+] [\*]({-{.is-prime*.base(2).comb(~1)R**-1||i}(++$)i}...*)[^$_])».reals)}

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

(সত্যিই এটিকে সামলে নিতে পেরেছি!)

এসভিজি ফর্ম্যাটে এই ফাংশন আউটপুটগুলি।

  • { -{ .is-prime * .base(2).comb(~1) R** -1 || i }(++$)i } ... *জটিল সংখ্যার আকারে প্রতিটি পদক্ষেপের দিকনির্দেশের এক অসীম অনুক্রম, যেখানে 1"একই দিকে অবিরত থাকুন," এর iঅর্থ "বাম দিকে ঘুরুন" এবং এর -iঅর্থ "ডানদিকে ঘুরুন"।
  • [^$_] ফাংশনের আর্গুমেন্ট হিসাবে প্রদত্ত পদক্ষেপের সংখ্যার সাথে সেই অনুক্রমটিকে সীমাবদ্ধ করে।
  • [\*] সেই ক্রমটি (জটিল) গুণণের সাথে স্ক্যান করে, আপেক্ষিক দিকনির্দেশের তালিকাটিকে পরম দিকের তালিকায় পরিণত করে।
  • [\+]পরিদর্শন করা স্থানাঙ্কের একটি তালিকা তৈরি করে (জটিল) সংযোজন সহ সেই ক্রমটি স্ক্যান করে
  • ».reals জটিল সংখ্যাটির তালিকাটিকে তার আসল এবং কল্পিত অংশগুলির দ্বি-উপাদান তালিকায় রূপান্তর করে।

এসভিজি চিত্রটি কেবল একটি একক pathউপাদান।

এন = 20000 এর জন্য আউটপুট (পিএনজিতে রূপান্তরিত):

এন = 20000 এর জন্য পথ


4

সি, 321 বাইট

a,b,A,B,k,p,e,i,t,r;g(n,c,d,x,y,X,Y){x=y=Y=r=0;X=1;for(k=0;k++<=n;){r|=x==c&y==d;a=x<a?x:a;A=x>A?x:A;b=y<b?y:b;B=y>B?y:B;for(p=1,i=k;--i;p=p*i*i%k);for(e=1,i=k;i;e=-e)i&=i-1;if(p)t=X,X=-e*Y,Y=e*t;x+=X;y+=Y;}}f(n,x,y){A=a=B=b=0;g(n);printf("P1%d %d ",A-a+1,B-b+1);for(y=b;y<=B;++y)for(x=a;x<=A;++x)g(n,x,y),putchar(48+r);}

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

অন্যান্য সি উত্তর পোস্ট হওয়ার আগেই আমি এটি নিয়ে কাজ শুরু করেছিলাম তবে আমি বুঝতে পেরেছিলাম যেভাবেই আমার পাশাপাশি পোস্ট করতে পারে। এটি একটি অনেক দীর্ঘ, তবে এটি ফলাফলের মাত্রাগুলিতে স্বয়ংক্রিয়ভাবে আউটপুট চিত্রকেও কাটাবে।

ফাংশন হিসাবে বলা হয় f(n), এবং আউটপুট নেট পিবিএম ফর্ম্যাটে stdout হয়।

এন = 1000 এর জন্য উদাহরণ আউটপুট:

a,b,A,B,          // used to store x range [a,A] and y range [b,B]
k,p,e,i,t,        // temp variables used in g
r;g(n,c,d,        // takes n + coordinates, sets r to whether (c,d) is visited
x,y,X,Y){         // temp variables - position (x,y) and velocity (X,Y)
x=y=Y=r=0;X=1;    // initialization
for(k=0;k++<=n;){ // loops k over the step number
r|=x==c&y==d;     // set r to 1 if current coordinate is the requested one
a=x<a?x:a;A=x>A?x:A;b=y<b?y:b;B=y>B?y:B;    // update bounds
for(p=1,i=k;--i;p=p*i*i%k);                 // prime test
for(e=1,i=k;i;e=-e)i&=i-1;                  // parity test
if(p)t=X,X=-e*Y,Y=e*t;                      // if prime, turn accordingly
x+=X;y+=Y;}}      // move position in direction of velocity
f(n,x,y){         // main function; x and y are temp variables
A=a=B=b=0;g(n);   // obtain accurate bounds
printf("P1 %d %d\n",A-a+1,B-b+1);           // output netpbm header
for(y=b;y<=B;++y)for(x=a;x<=A;++x)          // loop through all coordinates
g(n,x,y),putchar(48+r);}                    // output 1 if visited, 0 otherwise

লিনের পৃথক চ্যালেঞ্জের জবাবের জন্য মূল পরীক্ষাটিই মূলত ব্যবহৃত হয় যা উইলসনের উপপাদ্যের উপর নির্ভর করে ।

প্যারিটি টেস্টে কর্নিগানের বিট-কাউন্টিং পদ্ধতির অভিযোজন ব্যবহার করা হয়েছে ।

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



4

লোগো, 177 171 বাইট

to d:c
if :c%2[rt 180
make"c:c-1]if:c<1[stop]d:c/2
end
to p
if:c>1[make"f 2
repeat:c-2[if:c%:f<1[stop]make"f:f+1]rt 90
d:c]end
to g:n
make"c 1
repeat:n[p
fw 2
make"c:c+1]end

ব্যবহার করার জন্য, ভালো কিছু করতে এই :

reset
pu
fw 100
pd
g 3000

দুঃখিত, কিন্তু আমি নমুনা আউটপুট ক্যাপচার করতে সক্ষম ছিল না। ব্যাখ্যা:

to d:c
if :c%2[rt 180
make"c:c-1]if:c<1[stop]d:c/2
end

এটি একটি পুনরাবৃত্ত প্রক্রিয়া যা তার পরামিতিটির প্রতিটি সেট বিটের জন্য 180 rot ঘোরান, যা কার্যকরভাবে এর বাইনারি সম্প্রসারণের সাম্যকে গুণায়।

to p
if:c>1[make"f 2
repeat:c-2[if:c%:f<1[stop]make"f:f+1]rt 90
d:c]end

এটি একটি খুব প্রাথমিক প্রাথমিক পরীক্ষা। বিশেষ-কেসিং 1 পরে, কোনও উপাদান খুঁজে পাওয়া গেলে প্রক্রিয়াটি প্রথম দিকে ফিরে আসে। তবে বর্তমান মানটি যদি প্রধান হিসাবে দেখা যায় তবে এটি ডানদিকে ঘুরবে এবং তারপরে যথাযথ হিসাবে বাম দিকে ঘুরতে উপরের পদ্ধতিটি ব্যবহার করে।

to g:n
make"c 1
repeat:n[p
fw 2
make"c:c+1]end

nআদিমতার জন্য সমস্ত সংখ্যা পর্যন্ত পরীক্ষা করার জন্য এবং প্রতিটিটির পরে দুটি পিক্সেল সরিয়ে নেওয়া এটি কেবল একটি সাধারণ লুপ ।


4

জেলি , 41 বাইট

B§ḂḤ’×ıµ1Ẓ?€×\ÄŻÆiZ_Ṃ$€Z‘ḞŒṬµẈḢ⁾P1,;Lṭ@FK

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

N

N=3000

এন = 3000 এর আউটপুট

N=300

0000000000000000000000111110000000000
0000000000000000000000100010000000000
0000001110000000000000100010000000000
0000001010000000000000100010000000000
0000001010000000000000100010000000000
0000001010000000000000100010000000000
0000001010000000111111111010000000000
0000001010000000100000101010000000000
0000001111111110100000101010000000000
0000000000100010100000101010000000000
0000000000111111100000101010001111111
0000000000000010000000101010001000001
0000000000000011100010101010001000001
0000000000000000100010101010001000001
0000111111100000100011111111111111111
0100100000100000100010001010001000001
0110100000111111100011111111111000111
0010100000000000000010101010000000101
1111100000000000000010101110000000101
1010000000000000000010100000000000101
1010000000000000000011111111111011101
1010000000000000000000100000001010101
1110000000000000000000111111101111101
0000000000000000000000000000100010101
0000000000000000000000000000100010101
0000000000000000000000000000100010101
0000000000000000000000000000111111111
0000000000000000000000000000000010100
0000000000000000000000000000000010100
0000000000000000000000000000000010100
0000000000000000000000000000000011100

4

জাভাস্ক্রিপ্ট - 675 668 660 632 556 534 বাইট

এখানে প্রথমবারের মতো কোডগল্ফ শুরুতে শুরু হয়েছিল 00 1500 বাইট কোড দিয়ে। এটি এর তৃতীয়াংশের চেয়ে প্রায় অর্ধেকেরও বেশি গল্ফ করেছে। গল্ফ চালিয়ে যেতে নির্দ্বিধায় বাইটস এর সাথে পাল্টা: এই সরঞ্জামটি

মূল নীতি:
ইনপুট হিসাবে এন এবং ভেরিয়েবল স্ট্রোক দৈর্ঘ্যের সাথে স্থির আকারের ক্যানভাসে টান।

সম্পাদনা:

-07 বাইট - মিস করা থাকলে -08 বাইটগুলি অপসারণ
- যদি অন্য / 28-বাইটে স্যুইচ করুন
- টেনারিটিতে পরিবর্তন করুন / অন্যথায়
-76-বাইট - সংক্ষিপ্ত প্রাইম টেস্ট (রানটাইম / 3)
-22 বাইট - এই প্রধান কার্যটি ব্যবহার করুন (রানটাইম * 4)

গল্ফ কোড:

function f(e,r){for(var t=0,n=0,i=950,f=450,o=document.getElementById("d").getContext("2d"),a=1;a<=e;a++){n=iP(a)?iO(a)?1:2:0;var u=i,c=f;t==0?(t=0==n?(c=f-r,0):1==n?(u=i-r,1):(u=i+r,3)):t==1?(t=0==n?(u=i-r,1):1==n?(c=f+r,2):(c=f-r,0)):t==2?(t=0==n?(c=f+r,2):1==n?(u=i+r,3):(u=i-r,1)):(t=0==n?(u=i+r,3):1==n?(c=f-r,0):(c=f+r,2));o.beginPath(),o.moveTo(i,f),o.lineTo(u,c),o.stroke(),i=u,f=c}}function iP(h){for(i=n=h;n%--i;);return(1==i)}function iO(e){for(var r=(e>>>0).toString(2),t=0,n=0;n<r.length;n++)"1"==r[n]&&t++;return t%2!=0}

হোয়াইটস্পেসের সাথে অলোভিত কোড:

function f(e,r){
    for(var t=0,n=0,i=950,f=450,o=document.getElementById("d").getContext("2d"),a=1;a<=e;a++){

        // prime and odd/even check
        n=iP(a)?iO(a)?1:2:0;

        var u=i,c=f;

        t==0?(t=0==n?(c=f-r,0):1==n?(u=i-r,1):(u=i+r,3)):t==1?(t=0==n?(u=i-r,1):1==n?(c=f+r,2):(c=f-r,0)):t==2?(t=0==n?(c=f+r,2):1==n?(u=i+r,3):(u=i-r,1)):(t=0==n?(u=i+r,3):1==n?(c=f-r,0):(c=f+r,2));

        o.beginPath(),o.moveTo(i,f),o.lineTo(u,c),o.stroke(),
        i=u,f=c // renew old cords
    }
}

// check prime
function iP(h){
    for(i=n=h;n%--i;);
    return(1==i)
}

// check binary expression even/odd
function iO(e){
    for(var r=(e>>>0).toString(2),t=0,n=0;n<r.length;n++)
        "1"==r[n]&&t++;
    return t%2!=0
}

উদাহরণ:

এন = 7 - দৈর্ঘ্য = 60

f(7, 60);
function f(e,r){for(var t=0,n=0,i=950,f=450,o=document.getElementById("d").getContext("2d"),a=1;a<=e;a++){n=iP(a)?iO(a)?1:2:0;var u=i,c=f;t==0?(t=0==n?(c=f-r,0):1==n?(u=i-r,1):(u=i+r,3)):t==1?(t=0==n?(u=i-r,1):1==n?(c=f+r,2):(c=f-r,0)):t==2?(t=0==n?(c=f+r,2):1==n?(u=i+r,3):(u=i-r,1)):(t=0==n?(u=i+r,3):1==n?(c=f-r,0):(c=f+r,2));o.beginPath(),o.moveTo(i,f),o.lineTo(u,c),o.stroke(),i=u,f=c}}function iP(h){for(i=n=h;n%--i;);return(1==i)}function iO(e){for(var r=(e>>>0).toString(2),t=0,n=0;n<r.length;n++)"1"==r[n]&&t++;return t%2!=0}
<canvas id="d" width="1900" height="900"/> 

এন = 3000 - দৈর্ঘ্য = 4

f(3000, 4);
function f(e,r){for(var t=0,n=0,i=950,f=450,o=document.getElementById("d").getContext("2d"),a=1;a<=e;a++){n=iP(a)?iO(a)?1:2:0;var u=i,c=f;t==0?(t=0==n?(c=f-r,0):1==n?(u=i-r,1):(u=i+r,3)):t==1?(t=0==n?(u=i-r,1):1==n?(c=f+r,2):(c=f-r,0)):t==2?(t=0==n?(c=f+r,2):1==n?(u=i+r,3):(u=i-r,1)):(t=0==n?(u=i+r,3):1==n?(c=f-r,0):(c=f+r,2));o.beginPath(),o.moveTo(i,f),o.lineTo(u,c),o.stroke(),i=u,f=c}}function iP(h){for(i=n=h;n%--i;);return(1==i)}function iO(e){for(var r=(e>>>0).toString(2),t=0,n=0;n<r.length;n++)"1"==r[n]&&t++;return t%2!=0}
<canvas id="d" width="1900" height="900"/> 

এন = 20000 - দৈর্ঘ্য = 2

f(20000, 2);
function f(e,r){for(var t=0,n=0,i=950,f=450,o=document.getElementById("d").getContext("2d"),a=1;a<=e;a++){n=iP(a)?iO(a)?1:2:0;var u=i,c=f;t==0?(t=0==n?(c=f-r,0):1==n?(u=i-r,1):(u=i+r,3)):t==1?(t=0==n?(u=i-r,1):1==n?(c=f+r,2):(c=f-r,0)):t==2?(t=0==n?(c=f+r,2):1==n?(u=i+r,3):(u=i-r,1)):(t=0==n?(u=i+r,3):1==n?(c=f-r,0):(c=f+r,2));o.beginPath(),o.moveTo(i,f),o.lineTo(u,c),o.stroke(),i=u,f=c}}function iP(h){for(i=n=h;n%--i;);return(1==i)}function iO(e){for(var r=(e>>>0).toString(2),t=0,n=0;n<r.length;n++)"1"==r[n]&&t++;return t%2!=0}
<canvas id="d" width="1900" height="900"/> 

এন = 159000 - দৈর্ঘ্য = 1

f(159000, 1);
function f(e,r){for(var t=0,n=0,i=950,f=450,o=document.getElementById("d").getContext("2d"),a=1;a<=e;a++){n=iP(a)?iO(a)?1:2:0;var u=i,c=f;t==0?(t=0==n?(c=f-r,0):1==n?(u=i-r,1):(u=i+r,3)):t==1?(t=0==n?(u=i-r,1):1==n?(c=f+r,2):(c=f-r,0)):t==2?(t=0==n?(c=f+r,2):1==n?(u=i+r,3):(u=i-r,1)):(t=0==n?(u=i+r,3):1==n?(c=f-r,0):(c=f+r,2));o.beginPath(),o.moveTo(i,f),o.lineTo(u,c),o.stroke(),i=u,f=c}}function iP(h){for(i=n=h;n%--i;);return(1==i)}function iO(e){for(var r=(e>>>0).toString(2),t=0,n=0;n<r.length;n++)"1"==r[n]&&t++;return t%2!=0}
<canvas id="d" width="1900" height="900"/> 


ওভারল্যাপিং লাইনের পরিমাণের উপর রঙ নির্ভর করে? শান্ত!
Val

আমি স্ট্রোক শৈলী পরিবর্তন করি নি, এটি কোনও বিন্যাস বা রূপান্তর ছাড়াই ডিফল্ট কালো হওয়া উচিত। এখানে পাওয়া গেছে । কেন কোনও রঙ পরিবর্তন হতে পারে আমার দ্বিতীয় প্যারামিটারে আমার ফাংশনটি @ ওয়াল অবধি গ্রহণ করা স্ট্রোক প্রস্থের সাথে সম্পর্কিত হতে পারে। আপনাকে হতাশ করার জন্য দুঃখিত।
pixma140

3

লাল , 515 480 471 বাইট

-1 বাইট কেভিন ক্রুইজসেনকে ধন্যবাদ!

func[n][a: 270 x: t: u: v: w: 0 y: 1
b: copy[line 0x0 0x1]repeat i n - 1[p: on
j: i + 1 repeat k i / 2[if j%(k + 1)= 0[p: off]]if p[s: 0
until[if j% 2 = 1[s: s + 1](j: j / 2)< 1]a: a + pick[-90 90]s% 2 + 1]append b 'line 
append b as-pair x y x: x + cosine a y: y - sine a append b as-pair x y t: min x t
u: max x u v: min y v w: max y w]c: 500 /(max u - t w - v)view[base white 502x500
draw collect[foreach k b[keep either pair? k[as-pair k/1 - t * c k/2 - v * c][k]]]]]

কোডের একটি উল্লেখযোগ্য অংশ (160 ডলার বাইট) স্থানাঙ্কগুলি স্বাভাবিক করার সাথে সম্পর্কিত হয় যাতে ইনপুটটির আকার নির্বিশেষে গ্রাফিকগুলি পুরো ক্যানভাসে ফিট করে।

প্রাথমিক দিক: দক্ষিণ।

ফলাফল এখানে n = 3000

3000 পুনরাবৃত্তি

n = 20000

20000


1
কৌতূহল আউট, কেন কোনো সময়ে modulos জন্য প্রয়োজন বোধ করা শূণ্যস্থান নয় if j%(k + 1)এবং if j% 2 = 1, কিন্তু অন্যান্য অপারেটরদের (অধিকাংশ জন্য প্রয়োজন বোধ করা শূণ্যস্থান আছে +, /ইত্যাদি)। এর স্থানগুলি কি মডুলোতে সরানো যেতে পারে pick[-90 90]s% 2? বাস্তবিক, কেন সেখানে না কোনো শূণ্যস্থান এ প্রয়োজন হয় as-pair k/1 - t * c k/2 - v * cজন্য /?
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুজসেন হ্যাঁ, স্থানটির জন্য স্থানটি সরানো যেতে পারে s% 2, ধন্যবাদ! কেন জানি না, তবে মডুলো %হ'ল একমাত্র অপারেটর যার জন্য কোনও শব্দ (ভেরিয়েবল) এর পূর্বে যদি এর সামনে স্থানটি বাদ দেওয়া যায়। ইন as-pair k/1 - t * c k/2 - v * cস্ল্যাশ /সম্পূর্ণ ভিন্ন উদ্দেশ্য পরিবেশন - তারা pathগুলি। kএটি একটি pairএবং k/1এটি প্রথম উপাদান (এটি দ্বারা k/xবা এটিও নির্বাচন করা যেতে পারে pick k 1)। প্রায় সব জায়গাতেই স্পেসের প্রয়োজন হয়, ব্যতিক্রমগুলি চারপাশে ()[]{}, বিচ্যুতির কোনও অস্পষ্টতা নেই।
গ্যালেন ইভানভ

@ কেভিন ক্রুজসেন বেশিরভাগ চিহ্নগুলিতে wordনাম ব্যবহার করা যেতে পারে ( Redনা থাকে variables, সমস্ত কিছুই হয় হয় একটি wordবা মান (বা কিছু সিনট্যাক্স ব্লক [...]বা এর মতো (...)) So সুতরাং: a*4: 45-> একটি শব্দ a*445 এর মান নির্ধারিত %হয় file!dat ডেটাটাইপের জন্য চিহ্নিতকারী হিসাবে ব্যবহৃত হয় এবং হয়ত যে কেন এটা ব্যবহার করা যাবে না wordনাম কিন্তু অন্যান্য গাণিতিক অপারেটরদের জন্য নিয়ম ভঙ্গ করতে পারেন।
গ্যালেন ইভানভ

1
আহ ঠিক আছে, এটি উপলব্ধি করে যে /সেখানে একটি পৃথক উদ্দেশ্য আছে এবং চিহ্নগুলি ভেরিয়েবলগুলির ফাঁকা স্থান ছাড়াই ব্যবহার করা যেতে পারে (বা wordsতারা দৃশ্যত লাল রঙের জন্য ডাকা হয়)। ব্যাখ্যা করার জন্য ধন্যবাদ. :) এবং খুশি আমি (বেশিরভাগ দুর্ঘটনাক্রমে) এর জন্য একটি বাইট সংরক্ষণ করতে পারতাম s% 2। :)
কেভিন ক্রুইজসেন

1

প্রসেসিং, 140+ বাইট

void f(int N){for(int x,y,i,l,d,k=d=y=x=0;k++<N;d+=i<l?0:Integer.bitCount(k)%2*2-1,d&=3,point(x-=~-d%2,y+=(d-2)%2))for(i=1,l=k;0<l%++i%l;);}

পরিপূর্ণভাবে পরিষ্কার দেখা যায় না

পদব্রজে ভ্রমণ

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