কোচ স্নোফ্লেক - কোডগল্ফ


21

কচ তুষারকণা (এছাড়াও কচ স্টার ও কচ দ্বীপ নামেও পরিচিত) একটি গাণিতিক বক্ররেখা এবং নিকটতম ফ্র্যাক্টাল রেখাচিত্র এক বর্ণিত হয়েছে হয়। এটি কোচ বক্ররেখার উপর ভিত্তি করে তৈরি হয়েছিল, যা ১৯০৪ সালের একটি গবেষণাপত্রে প্রকাশিত হয়েছিল, "প্রাথমিক জ্যামিতি থেকে গঠনযোগ্য স্পর্শকাতর অবিচ্ছিন্ন বক্ররেখায়" (মূল ফরাসি শিরোনাম: "সুর উনু কোরব চালিয়েছে সান টানজেন্টে, অবটেনু পার আন কনস্ট্রাকশন গ্লোমেন্ট্রিয়ার")। সুইডিশ গণিতবিদ হেলজ ফন কোচ।

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

এখানে বিভিন্ন পুনরাবৃত্তির কিছু আসকি উপস্থাপনা:

n=1
__
\/

n=2
__/\__
\    /
/_  _\
  \/

n=3
      __/\__
      \    /
__/\__/    \__/\__
\                /
/_              _\
  \            /
__/            \__
\                /
/_  __      __  _\
  \/  \    /  \/
      /_  _\
        \/ 

যেহেতু অ্যাসিআই উপস্থাপনের রেজোলিউশনের স্পষ্টতই সীমা রয়েছে তাই অতিরিক্ত বিশদ দেখানোর জন্য আমাদের প্রতিটি পুনরাবৃত্তির জন্য 3 টির একটি ফ্যাক্টর দ্বারা স্নোফ্লেকের আকারকে বড় করতে হবে।

N = 4 এর জন্য একই স্টাইলে স্নোফ্লেক আউটপুট করতে সবচেয়ে সংক্ষিপ্ত কোডটি লিখুন

আপনার প্রোগ্রামটির কোনও ইনপুট নেওয়া উচিত নয়।
আপনার প্রোগ্রামটি কনসোলে স্নোফ্লেক লিখতে হবে।


কোচ-স্নোফ্লেক .. একটি ট্যাগ .. এটি আকর্ষণীয় .. !! .. মনে হয় আপনি এই ট্যাগটিতে আরও প্রশ্ন গুলি
চালাবেন

5
উত্তরের জন্য খুব সংক্ষিপ্ত: wolframalpha.com/input/?i=koch+snowflake+4 : ডি
ডাঃ বেলিসারিয়াস

1
গ্রহণযোগ্য উত্তর পরিবর্তন করা উচিত? সংক্ষিপ্ত সমাধান এখন আছে।
টিমভি

উত্তর:


2

পাইথন, 338 বাইট

#coding:u8
print u"碜䄎쀠ࢻ﬊翀蝈⼖㗎芰悼컃뚔㓖ᅢ鄒鱖渟犎윽邃淁挢㇌ꎸ⛏偾࿵헝疇颲㬤箁鴩沬饅앎↳\ufaa4軵몳퍋韎巃๧瓠깡未늳蒤ꕴ⁵ᦸ䥝両䣚蟆鼺伍匧䄂앢哪⡈⁙ತ乸ሣ暥ฦꋟ㞨ޯ⿾庾뻛జ⻏燀䲞鷗﫿".encode("utf-16be").decode("zlib")

অন্য একটি ইউনিকোড শোষণ

চালান ideone


5
যথেষ্ট উপযুক্ত, তবে অবশ্যই এটি উত্স ফাইলটি 300 বাইটের বেশি দীর্ঘ করবে।
টিমউই

লিঙ্কটি নষ্ট হয়ে গেছে
চিয়েল টেন ব্রিনকে

10

পাইথন, 650 612 594 574 টি অক্ষর

n='\n'
S='_a/G\F I\n'
A=dict(zip(S,('III','   ','__/','  G','\  ','F__','   ','III','')))
B=dict(zip(S,('III','   ','\  ',' aF','/a ','  G','   ','III','')))
C=dict(zip(S,('___','aaa','/  ','GII','II\\','  F','   ','III','')))
def T(s):
 a=b=c=d=r=u''
 for k in s:
    a+=A[k];b+=B[k];c+=C[k]
    if k=='I':a=a[:-3]+('II\\'if'a '==d[1:3]else'GII'if' a'==d[:2]else 3*k)
    d=d[3:]
    if k==n:d=c.replace('____','__/F').replace('aaaa','aa  ').replace('/  a','/a  ').replace('a  F','  aF');r+=a+n+b+n+d+n;a=b=c=''
 return r
print T(T(T('__\n\G\n'))).translate({97:95,71:47,73:32,70:92})

এটি প্রতিবার 3 এর গুণক দ্বারা ত্রিভুজটি প্রসারিত করে কাজ করে। এটি করার জন্য, আমাদের প্রতিটি চিহ্ন একটি বাম বা ডান সীমানা কিনা তা ট্র্যাক করে রাখতে হবে (উদাহরণস্বরূপ কীভাবে /প্রসারিত করা /হয় তার ভিতরের কোন দিকে নির্ভর করে )। আমরা দুটি সম্ভাব্য ক্ষেত্রে পৃথক চিহ্ন ব্যবহার করি, নিম্নরূপ:

_: _, outside on the top
a: _, outside on the bottom
/: /, outside on the left
G: /, outside on the right
\: \, outside on the left
F: \, outside on the right
<space>: inside
I: outside

dপরিবর্তনশীল বিশেষ ক্ষেত্রে যেখানে সম্প্রসারণ পরিচালনা aচাহিদা পরবর্তী সারিতে 3x3 মধ্যে প্রসারিত করতে।


বোর্ডে প্রথম উত্তর পাওয়ার জন্য +1। আমি মনে করি আপনি লুপের জন্য একটি ট্যাব দিয়ে ডাবল স্পেস প্রতিস্থাপন করতে পারেন। কে == "এ" ইত্যাদির পরিবর্তে কে <"সি" ব্যবহার করার চেষ্টা করুন তবে এখন আমাকে আপনার অ্যালগরিদমের দিকে নজর দিতে হবে :)
gnibbler

যদি কোনও এসোসিয়েটিভ অ্যারে সহ বিবৃতিগুলি আপনি মুছে ফেলতে পারেন না? এবং সম্ভবত চেইন প্রতিস্থাপন বিবৃতিগুলি একটি অ্যারের সাথে সংক্ষিপ্ত করা যেতে পারে।
নবাব

('acEei',r'_/\\ ')=> ('aecEi','_\/\ ')আরও 1 টি সঞ্চয় করে। আপনি এটি পরীক্ষা করে দেখতেও চাইতে পারেন unicode.translate()
gnibbler

এটি স্নোফ্লেকের আগে প্রায় 18 টি নতুন লাইন প্রিন্ট করে, তবে আমি মনে করি যে ওপি স্নোফ্লেক ছাড়া অন্য কিছু মুদ্রিত হতে পারে কিনা তা নির্দিষ্ট করে দেয় না ।
রোমানস্ট

6

এমএস-ডস 16 বিট মেশিন কোড: 199 বাইট

এই সাইটটি ব্যবহার করে ডিকোড করুন , 'কোচ.কম' ফাইল হিসাবে সংরক্ষণ করুন এবং উইনএক্সপি কমান্ড প্রম্পট থেকে কার্যকর করুন।

sCAAxo7ajsKLz/OquF9fulwvvUoBM9u+BADoiQDodgDocwDogADobQDoagDodwCK8TLSs0+I98cHDQrGRwIktAnNIf7GOO5+7MNWAVwBYwFsAXoBgwGJB4DDAsOIN/7D6QQA/suIF/7P6R0A/suAPyB1AogH/suIB8OBw/8AiDfpBgD+x4gX/sM4734Ciu84z30Cis/Dg8UIg8UCgf1WAXLzg+0Mw07/dgB0GV/o9v/o5v/o8P/o3f/o2v/o5//o1//o4f9Gww==

হালনাগাদ

এখানে সহজেই পঠনযোগ্য সহজ সংঠক সংস্করণ:

  ; L-System Description
  ;
  ; Alphabet : F
  ; Constants : +, -
  ; Axiom : F++F++F
  ; Production rules: F -> F-F++F-F 
  ;
  ; Register usage:
  ;                             _        _
  ; bp = direction: 0 = ->, 1 = /|, 2 = |\, 3 = <-, 4 = |/_, 5 = _\|
  ; cl = min y, ch = max y
  ; bl = x (unsigned)
  ; bh = y (signed)
  ; si = max level

  ; clear data
  mov al,20h
  add dh,al
  mov ds,dx
  mov es,dx
  mov cx,di
  rep stosb
  mov ax,'__'
  mov dx,'/\'

  ; initialise variables
  mov bp,Direction0
  xor bx,bx
  mov si,4

  call MoveForward
  call TurnRight
  call TurnRight
  call MoveForward
  call TurnRight
  call TurnRight
  call MoveForward

  mov dh,cl
  xor dl,dl
  mov bl,79
OutputLoop:
  mov bh,dh
  mov w [bx],0a0dh
  mov b [bx+2],24h
  mov ah,9
  int 21h
  inc dh
  cmp dh,ch
  jle OutputLoop  
  ret

Direction0:
  dw MoveRight
  dw MoveUpRight
  dw MoveUpLeft
  dw MoveLeft
  dw MoveDownLeft
  dw MoveDownRight
Direction6:

MoveRight:
  mov w [bx],ax
  add bl,2
  ret

MoveUpRight:
  mov b [bx],dh
  inc bl
  jmp DecBHCheckY

MoveUpLeft:
  dec bl
  mov b [bx],dl
DecBHCheckY:  
  dec bh
  jmp CheckY

MoveLeft:
  dec bl  
  cmp b [bx],20h
  jne MoveLeftAgain
  mov [bx],al
MoveLeftAgain:
  dec bl  
  mov [bx],al
  ret

MoveDownLeft:
  add bx,255
  mov b [bx],dh
  jmp CheckY

MoveDownRight:
  inc bh
  mov b [bx],dl
  inc bl

CheckY:
  cmp bh,ch
  jle NoMaxChange
  mov ch,bh
NoMaxChange:  
  cmp bh,cl
  jge NoMinChange
  mov cl,bh
NoMinChange:  
  ret

TurnRight:
  add bp,8

TurnLeft:
  add bp,2

  cmp bp,Direction6
  jb ret
  sub bp,12
  ret

MoveForward:
  dec si
  push [bp]
  jz DontRecurse
  pop di
  call MoveForward
  call TurnLeft
  call MoveForward
  call TurnRight
  call TurnRight
  call MoveForward
  call TurnLeft
  call MoveForward
DontRecurse:
  inc si
  ret

পরম যাদু :), দয়া করে আমাকে এটি বুঝতে সহায়তা করুন (আপনি যা করেছেন তার জন্য একটি লিঙ্ক
অন্ততপক্ষে সরবরাহ করুন

@ আমান: এটি আউটপুট আঁকতে কোচ বক্ররেখার একটি এল-সিস্টেমের বিবরণ ব্যবহার করে। আকারের লাইন প্রতি 252 টি অক্ষরের মধ্যে সীমাবদ্ধ থাকলেও এসআই রেজিস্টারে বিশদের স্তরটি সেট করা হয়। Characters৯ টি অক্ষরের বেশি লাইন পেতে আপনাকে মুদ্রণ কোডটি সংশোধন করতে হবে (উদাহরণস্বরূপ যেখানে এটি '\ n $' অক্ষর লিখেছেন সেখানে পরিবর্তন করুন)।
স্কিজে

"scAA...w==".decode("base64")পাইথন 2 তে ডিকোড করতেও ব্যবহার করতে পারেন (পাইথন 3 এর জন্য কাজ করে না)
gnibbler

এটি চালানোর জন্য আমার কাছে এখন উইন্ডোজ মেশিন রয়েছে + যে কোনও সুযোগ আপনি asm সংস্করণ অন্তর্ভুক্ত করতে পারেন?
gnibbler

2
@ মেল্লামোকব: ভুল, কারণ সমস্ত সোর্স কোড সম্ভবত পাওয়া যায়?
স্কিজ

4

পার্ল, 176 175 বাইট

এটি একটি পৃথক উত্তর হিসাবে পোস্ট করা কারণ এটি একটি বাইনারি উত্স ফাইল ব্যবহার করে, যা সম্ভবত কিছুটা ঠকাই। তবে এটি এখনও পার্ল উত্স কোড হিসাবে বিবেচনা করে, আমি মনে করি এটি উল্লেখযোগ্য যে এটি এমএস-ডস মেশিন কোড সলিউশনটিকে মারধর করে !

বেস 64-এনকোড হিসাবে উত্স

JF89IsLApwag0dhnMmAmMEcGIAcGQNHYwsDRFLsQ0djCwKcGoNHYwsDRFDdbECYwcRUxe1DCwNEUuxDR2
CI7c14uXiR4PW9yZCQmOyQieCgkeD4+MykucXcoXCAvXyBfXy8gXC8gX18gX1wgLyBfXy9cX18pWyR4Jj
ddXmVnO3NeLnsyN31eJF89cmV2ZXJzZSQmO3l+L1xcflxcL347cHJpbnQkJi4kXy4kL15lZw==

কিছুটা বেশি পঠনযোগ্য

/<[0-9a-f]+>/প্রাসঙ্গিক বাইনারি ডেটা দিয়ে সমস্ত দৃষ্টান্ত প্রতিস্থাপন করুন:

# Raw data!
$_="<c2c0a706a0d1d86732602630470620070640d1d8c2c0d114bb10d1d8c2>".
   "<c0a706a0d1d8c2c0d114375b1026307115317b50c2c0d114bb10d1d8>";

# Decode left half of the snowflake (without newlines)
s^.^$x=ord$&;$"x($x>>3).qw(\ /_ __/ \/ __ _\ / __/\__)[$x&7]^eg;

# Reconstruct the right half and the newlines
s^.{27}^$_=reverse$&;y~/\\~\\/~;print$&.$_.$/^eg

এই সংস্করণে, স্নোফ্লেকটি নিম্নলিখিত উপায়ে এনকোড করা হয়েছে:

  • প্রতিটি বাইটে 8 টি বিটগুলি এভাবে ভাগ করা হয়:

    +---+---+---+---+---+---+---+---+
    |      5 bits       |   3 bits  |
    +---+---+---+---+---+---+---+---+
              R               C
    
  • Rশূন্যস্থান এক রান এনকোড। দীর্ঘতম রানটি 27 টি অক্ষর, সুতরাং সমস্ত রান 5 বিটে ফিট করে।

  • Cঅক্ষরগুলির ক্রমকে এনকোড করে যা কেবল আক্ষরিক অ্যারেতে দেখা যায়। (আমি এখানে সামান্য ক্রেজিয়ার এনকোডিং ব্যবহার করতাম যেখানে অ্যারেটি কেবল অন্তর্ভুক্ত ছিল / \ _, তবে ডিকোড করার জন্য পার্ল কোডটি বেশি ছিল ...)

  • আমি ভাগ্যবান যে বাইনারি ডেটাতে কোনও "/ 'বা থাকে না \যা পালানোর প্রয়োজন হয়। আমি এর জন্য কোন পরিকল্পনা করিনি। তবে এটি করা সত্ত্বেও আমি সম্ভবত অ্যারের আইটেমগুলির ক্রমটি ঠিক করতে পারতাম।

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


3

পাইথন, 284

for s in "eJyVkNENACEIQ/+dgg1YiIT9tzgENRyWXM4/pH1tIMJPlUezIiGwMoNgE5SzQvzRBq52Ebce6cr0aefbt7NjHeNEzC9OAalADh0V3gK35QWPeiXIFHKH8seFfh1zlQB6bjxXIeB9ACWRVwo=".decode('base64').decode('zlib').split('\n'):print s+'  '*(27-len(s))+'\\'.join([c.replace('\\','/')for c in s[::-1].split('/')])

আরও কিছুটা সাদা জায়গা সহ:

for s in "eJyVkNENACEIQ/+dgg1YiIT9tzgENRyWXM4/pH1tIMJPlUezIiGwMoNgE5SzQvzRBq52Ebce6cr0aefbt7NjHeNEzC9OAalADh0V3gK35QWPeiXIFHKH8seFfh1zlQB6bjxXIeB9ACWRVwo=".decode('base64').decode('zlib').split('\n'):
  print s + '  '*(27-len(s)) + '\\'.join([c.replace('\\','/') for c in s[::-1].split('/')])

বাম দিকটি সংকুচিত হয়; ডান দিকটি বাম দিক থেকে পুনরুত্পাদন করা হয়।


3

পার্ল, 224 223 টি অক্ষর

use MIME::Base64;$_=decode_base64 wsCnBqDR2GcyYCYwRwYgBwZA0djCwNEUuxDR2MLApwag0djCwNEUN1sQJjBxFTF7UMLA0RS7ENHY;s^.^$x=ord$&;$"x($x>>3).qw(\ /_ __/ \/ __ _\ / __/\__)[$x&7]^eg;s^.{27}^$_=reverse$&;y~/\\~\\/~;print$&.$_.$/^eg

কিছুটা বেশি পঠনযোগ্য

use MIME::Base64;

# raw binary data in base-64-encoded form as a bareword
$_=decode_base64
    wsCnBqDR2GcyYCYwRwYgBwZA0djCwNEUuxDR2MLApwag0djCwNEUN1sQJjBxFTF7UMLA0RS7ENHY;

# Decode left half of the snowflake (without newlines)
s^.^$x=ord$&;$"x($x>>3).qw(\ /_ __/ \/ __ _\ / __/\__)[$x&7]^eg;

# Reconstruct the right half and the newlines
s^.{27}^$_=reverse$&;y~/\\~\\/~;print$&.$_.$/^eg

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

এটি কীভাবে কাজ করে তার ব্যাখ্যার জন্য, অন্য উত্তরটি দেখুন যেখানে আমি বাইনারিটিতে একই পোস্ট করি । আমি সত্যিই দুঃখিত যে আমি আসলে কোচ স্নোফ্লেক তৈরি করছি না , কেবল এটি সংকুচিত করছি ...

পূর্বের সংস্করণসমূহ

  • (359) কেবল বাম অর্ধেকের পরিবর্তে পুরো স্নোফ্লেকে এনকোড করা হয়েছে। বিট এনকোডিংয়ের মধ্যে স্পেসগুলি অন্তর্ভুক্ত ছিল; এখনও কোন রান দৈর্ঘ্য। বেশ কয়েকটি ইন্টারপোল্টেড ভেরিয়েবল প্লাস এমন @_অ্যারে ব্যবহার করা হয়েছে যা ব্যবহার করে অ্যাক্সেস করা হয়েছিল s/\d/$_[$&]/eg। নিউলাইনগুলি হিসাবে এনকোড করা হয়েছিল !

  • (289) প্রথম সংস্করণটি স্নোফ্লেকের কেবল বাম অর্ধেকটি এনকোড করে।

  • (267) প্রথম সংস্করণ যা স্পেসগুলির জন্য রান-লেংথ এনকোডিং ব্যবহার করে।

  • (266) এ পরিবর্তন ' 'করুন $"

  • (224) বেস-64৪ হিসাবে এনকোড করা র‌্যাডিক্যালি ভিন্ন সংক্ষেপণ। (এখন বাইনারি সংস্করণের সমান ।)

  • (223) বুঝতে পেরেছি যে আমি প্রিন্টটি সর্বশেষ উপাদানের ভিতরে রাখতে পারি এবং সেভাবে একটি সেমিকোলন সংরক্ষণ করতে পারি।

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