কিছু বরফ করুন!


18

আপনার কাজ: নবম গভীরতায় কোচ স্নোফ্লেক তৈরি করুন। আরম্ভের ত্রিভুজটির কেবল একদিকে আপনাকে একটি সম্পূর্ণ কোচ স্নোফ্লেক তৈরি করতে হবে না। কোচ ফ্লেক্সে উইকিপিডিয়া: https://en.wikedia.org/wiki/Koch_snowflake

নিয়মাবলী:

  • প্রোগ্রামটি অবশ্যই কোচ স্নোফ্লেকের একপাশে নবম গভীরতায় উত্পন্ন করবে।
  • আউটপুট অবশ্যই ASCII হতে হবে।
  • আপনি পুরো স্নোফ্লেক তৈরি করতে পারেন ; এটি প্রয়োজন হয় না।
  • ইনপুট / আউটপুট এবং লুফোলস এবং স্টাফের জন্য মানক বিধিগুলি প্রযোজ্য।
  • হোয়াইটস্পেস কোনও বিষয় নয়, যতক্ষণ না এটি সমস্ত চরিত্র একে অপরের সাথে সম্পর্কিত সঠিক জায়গায় থাকে।
  • সবচেয়ে কম কোড জয়!

পরীক্ষার কেস:

এন = 0:

__

এন = 1:

__/\__

এন = 2:

      __/\__
      \    /
__/\__/    \__/\__

এন = 3:

                        __/\__
                        \    /
                  __/\__/    \__/\__
                  \                /
                  /_              _\
                    \            /
      __/\__      __/            \__      __/\__
      \    /      \                /      \    /
__/\__/    \__/\__/                \__/\__/    \__/\__

আশা করি এটা বোধ গম্য। লক্ষ্য করুন যে প্রতিটি পরীক্ষার ক্ষেত্রে ফ্র্যাক্টালকে দৈর্ঘ্যে সমান তিন ভাগে ভাগ করা যায়। এছাড়াও লক্ষ করুন যে প্রতিটি স্নোফ্লেকের প্রস্থ স্নোফ্লেকের আগের প্রজন্মের প্রস্থের তিনগুণ বেশি।


অবগতির জন্য, এটা সিদ্ধান্ত নেওয়া হয় যে এই একটি প্রতারিত নয় এই
কমরেড স্পার্কলপনি

আমি মনে করি না যে আপনি নবম কোচ বক্ররেখার যথাযথ ASCII উপস্থাপনাটি যথাযথভাবে সংজ্ঞায়িত করেছেন।
orlp

আমি অনুপাতে অনুপাত অনুপযুক্ত যে। __/\__দু'টি আন্ডারলাইন সহ ব্যবহৃত নন-ডুপ , যা প্রতিটি পুনরাবৃত্তিকে আগেরটির তুলনায় ধারাবাহিকভাবে 3 গুণ বড় করে তোলে। কেবল একটি আন্ডারলাইন ব্যবহার করা এমন বৈপরীত্য বলে মনে হচ্ছে যা এন = 3 এ সত্যই বিশ্রী হতে শুরু করে। উদাহরণস্বরূপ বাইরের অংশগুলির প্রস্থ 12 হয় এবং মাঝের অংশটির প্রস্থ 10 হয়, ফলস্বরূপ /_এবং _\ এটি খুব সঙ্কুচিত। এমনকি যে আগে আপনি আছে _দ্বিগুণ প্রস্থ বিস্তৃত /এবং \
janrjan জোহানসেন

আমি মনে করি /_এবং _\ শুধুমাত্র সত্যিই মারাত্মক অংশ - কারণ তারা একই অবস্থানে থাকতে হবে আন্ডারস্কোর, যেতে হবে /এবং \ । এটি শেষ হয়ে গেলে, জিনিসগুলি n = 1 থেকে 3 গুণ বাড়তে পারে (তবে এন = 0 ফিট করে না))
আরজান জোহানসেন

হায়, না, মাঝের অংশটির প্রস্থ এখনও বাহ্যিক অংশের সাথে মেলে না, যেমন এন = 3 দ্বারা প্রমাণিত হয়েছে 54 = 2 * 3 ^ 3 এর চেয়ে 52 প্রস্থ রয়েছে। এর মধ্যে একটি ব্যবহার করে দেখুন । আমি উল্লিখিত সংস্করণগুলি কেবলমাত্র এন = 4 বা এন = 5 থেকে দেখানো অংশগুলির সাথে অন্তর্ভুক্ত করেছি - যেখানে আন্ডারস্কোরগুলি বাদ পড়েছে সেগুলি উপরের দিকের থেকে পৃথক।
janrjan জোহানসেন

উত্তর:


10

হাস্কেল , 308 300 299 বাইট

সম্পাদনা:

  • -4 বাইট: পরিবর্তন zipWith(+)করতে zipWith(-)এবং সামঞ্জস্য এনকোডিং এবং অফসেট প্রত্যেক অস্বীকৃতি চিহ্ন পরিত্রাণ পেয়েছিলাম।
  • -1 বাইট: আরও এনকোডিং টুইট #করে r=reverseসরাসরি প্যাটার্ন মিলের পরিবর্তে বেশ কয়েকটি চলক নাম বাদ দেওয়া যায় ।
  • -2 বাইট: আলফানামের পরিবর্তে অপারেটর ব্যবহার করে zipWith(-)
  • -1 বাইট: o=[0,0]তালিকার ধ্রুবককে সংক্ষিপ্ত করতে সংজ্ঞায়িত ।
  • -1 বাইট: এর দুটি শাখা মার্জ করা ?
import Data.List
k n=0?sort(o#(f=<<scanl1(+)(iterate(>>=(:[1,4,1]))[6]!!n)))
x?l@(([_,w],c):r)|x>w='\n':0?l|0<1=([2..w-x]>>" ")++[c|w>x]++w?r
_?_=""
w#((c,l):m)=(l&w,c):r l&(l&w)#m
_#_=[]
f x=zip"_/\\_/\\"([id,r]<*>[0:1:o,[0,1,0,1],o++[1,1]])!!mod x 6<$[1,3..gcd 3x]
(&)=zipWith(-)
r=reverse
o=[0,0]

এটি অনলাইন চেষ্টা করুন! (দুঃখের বিষয়, n = 3 এর চেয়ে বড় কিছু ভয়াবহভাবে মোড়ানো এবং অপঠনযোগ্য হয়ে যায় তবে এটি দেখার জন্য আপনি এটি অন্য প্রোগ্রামে অনুলিপি করতে পারেন))

প্রকারভেদ

কিভাবে এটা কাজ করে

  • kএটি মূল ফাংশন, এটি গ্রহণ করে Int nএবং একটি প্রদান করে String
  • iterate(>>=(:[1,4,1]))[6]প্রতিটি এন এর জন্য একটি অসীম তালিকা তৈরি করে, যে বক্ররেখার ক্রমাগত রেখার মধ্যে ক্রমাগত রেখার মধ্যে পালা , টার্টল গ্রাফিক্স স্টাইল, নামমাত্র 0এবং এর মধ্যে নাম্বার হিসাবে 5। প্রতিটি পুনরাবৃত্তি 1,4,1ইন্টারলিভড টার্নগুলির সাথে পূর্ববর্তী এক । 6পরিবর্তে সাবলিস্টগুলি শুরু করার একমাত্র কারণ হ'ল এড়িয়ে চলার কৌশলটি 0তৈরি করা ।gcdff 0
  • scanl1(+)মোড়গুলিকে to অবধি টার্নগুলি "পরম" দিকগুলিতে রূপান্তর করে A এর 0মানে ডানদিকে, তারপরে প্রতিটি উচ্চতর সংখ্যা পূর্বের থেকে ঘড়ির কাঁটার বিপরীতে 60০ ডিগ্রি হয় is (আচ্ছা, এটি যদি ASCII এর চেয়ে সঠিক অঙ্কন হত তবে এটি 60 ডিগ্রি হতে পারে))
  • f (অক্ষর, অফসেট এনকোডিং) জোড়গুলির তালিকায় একটি নিখুঁত দিককে রূপান্তর করে যা বক্ররেখাতে কোন অক্ষরগুলি এনকোড করে (অনুভূমিক দিকগুলির জন্য এটি দুটি জোড়া উত্পন্ন করে, অন্যথায় একটি) এবং কীভাবে আপেক্ষিক অবস্থান পরিবর্তন হয়।
  • #(চরিত্র, অফসেট এনকোডিং) জোড়া, প্রকৃত (তুল্য, চরিত্র) জোড়া উৎপাদিত পূর্ববর্তী তালিকা মাধ্যমে অপারেটর iterates।
  • এনকোডিং নীতিগুলি:
    • _/\নামমাত্র থেকে একটি অক্ষর একটি আয়তক্ষেত্রাকার ঘরের মধ্য দিয়ে একটি কোণার থেকে আঁকানো একটি রেখাকে অন্য শেষ কোণে উপস্থাপন করে।
    • কক্ষ স্থানাঙ্কগুলি ফর্মের [y,x], উপরে থেকে নীচে, বাম থেকে ডানদিকে থাকে যাতে তারা যাতে প্রিন্ট করতে চান সেটিকে তারা সাজায় sort কলামগুলি 1-ভিত্তিক। সংক্ষিপ্ত ভেক্টর গাণিতিকের জন্য তালিকার পরিবর্তে তালিকাগুলি ব্যবহার করা হয় (&)=zipWith(-)
    • একটি কোণে [y,x]তার উপরের বাম দিকে ঘরের সমান স্থানাঙ্কগুলি সহ বোঝানো হয় । এটি নিশ্চিত করে যে কোনও কোণ থেকে তার প্রতিবেশী কক্ষগুলিতে সমস্ত অফসেটগুলি নেতিবাচক নয়, নেতিবাচক ধ্রুবকগুলি এড়িয়ে চলে।
    • যাইহোক, সমস্ত ভেক্টর ক্রিয়াকলাপগুলি সংযোজনের পরিবর্তে বিয়োগ করতে দেওয়া যায়, যা অন্য সমস্ত স্পষ্ট লক্ষণগুলি এড়িয়ে চলে corner
    • একটি অফসেট এনকোডিং তালিকাটি [y1,x1,x2,y2]যেখানে [y1,x1]সূচনা কোণ থেকে অক্ষর ঘর [y2,x2]পর্যন্ত অফসেট থাকে এবং শেষ কোণ থেকে অক্ষর ঘরের অফসেট। এর অর্থ:
      • দিকনির্দেশগুলির জন্য এনকোডিং তালিকাগুলি 3.. 5কেবলমাত্র তালিকার বিপরীতে 0.. 2, এগুলি দিয়ে উত্পন্ন হওয়ার অনুমতি দেয় [id,r]<*>
      • সমস্ত প্রয়োজনীয় ভেক্টর গাণিতিকটি (&)=zipWith(-)কোনও এনকোডিং তালিকা বা এর বিপরীতে ব্যবহার করে করা যেতে পারে ।
  • (স্থানাঙ্ক, চরিত্র) জোড়গুলির তালিকা বাছাই করার পরে, তারা তাদের কাছে চলে যায় ?, যা Stringতাদের কাছ থেকে ফাইনাল তৈরি করে।
    • ইন x?l@(([_,w],c):r) xপূর্ববর্তী অক্ষরে এই লাইনে দেখানো এক্স-তুল্য হয়, অথবা 0একটি লাইন শুরুতে যদি; lপুরো বর্তমান wতালিকাগুলি cহ'ল যোগ করার জন্য পরবর্তী অক্ষরটির এক্স-কো-অর্ডিনেট, চরিত্রটি এবং rবাকী তালিকা।
    • এই পর্যায়ে y- স্থানাঙ্কগুলির আর প্রয়োজন নেই। যেহেতু প্রতিটি লাইনে অক্ষর রয়েছে এবং প্রতিটি লাইনের প্রথম অক্ষর পূর্ববর্তী একের শেষের বামে ভাল, এক্স-স্থানাঙ্ক হ্রাস পেয়েছে কিনা তা পরীক্ষা করে নতুন লাইনগুলির সূচনা সনাক্ত করা যায়।
    • আন্ডারস্কোর আর একটি বড় হওয়া ASCII মান আছে \এবং /তাই এটি গত সাজানো পরার যদি এটি একই অবস্থান অন্য অক্ষর দিয়ে ওভারল্যাপ। সুতরাং একটি এক্স-কোঅর্ডিনেট পুনরাবৃত্তি হয়েছে তা পরীক্ষা করে একটি রিডানড্যান্ট আন্ডারস্কোর সনাক্ত করা যায়।

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