বিদারণ , 1328 989 887 797 বাইট
এই উত্তরটি অযৌক্তিকভাবে দীর্ঘ (আমি আশা করি আমরা ছিল একটি বিট কলাপসিবল অঞ্চলে ) ... ভুলবেন না দয়া করে এই গত স্ক্রোল করুন এবং অন্যান্য উত্তর কিছু ভালোবাসা প্রদর্শন!
এই কোডে কাজ করা এই চ্যালেঞ্জকে অনুপ্রাণিত করেছিল। আমি ইওইআইএসআইএস-এ ফিশনে একটি উত্তর যুক্ত করতে চেয়েছিলাম, যা আমাকে এই ক্রমের দিকে নিয়ে গেছে। তবে, বাস্তবে ফিশন শিখতে এবং বাস্তবায়ন করতে এটি চালু এবং বন্ধ করতে কয়েক সপ্তাহ সময় নেয়। ইতিমধ্যে, ক্রমটি আমার উপর সত্যিই বেড়েছে তাই আমি এর জন্য একটি পৃথক চ্যালেঞ্জ পোস্ট করার সিদ্ধান্ত নিয়েছি (প্লাস, এটি কোনওভাবেই EOEIS তে গাছের নিচে খুব বেশি হত না)।
সুতরাং আমি তোমাকে উপস্থাপন করলাম, মনস্ট্রোসিটি:
R'0@+\
/ Y@</ /[@ Y]_L
[? % \ / \ J
\$@ [Z/;[{+++++++++L
UR+++++++++>/;
9\ ; 7A9
SQS {+L /$ \/\/\/\/\/ 5/ @ [~ &@[S\/ \ D /8/
~4X /A@[ %5 /; & K } [S//~KSA /
3 \ A$@S S\/ \/\/\/ \/>\ /S]@A / \ { +X
W7 X X /> \ +\ A\ / \ /6~@/ \/
/ ~A\; +;\ /@
ZX [K / {/ / @ @ } \ X @
\AS </ \V / }SZS S/
X ;;@\ /;X /> \ ; X X
; \@+ >/ }$S SZS\+; //\V
/ \\ /\; X X @ @ \~K{
\0X / /~/V\V / 0W//
\ Z [K \ //\
W /MJ $$\\ /\7\A /;7/\/ /
4}K~@\ &] @\ 3/\
/ \{ }$A/1 2 }Y~K <\
[{/\ ;@\@ / \@<+@^ 1;}++@S68
@\ <\ 2 ; \ /
$ ;}++ +++++++L
%@A{/
M \@+>/
~ @
SNR'0YK
\ A!/
এটি প্রত্যাশা করে যে ইনপুটটিতে কোনও ট্রেলিং নিউলাইন নেই, তাই আপনি এটি পছন্দ করতে চাইতে পারেন echo -n 120 | ./Fission oeis256504.fis
।
লেআউটটি সম্ভবত এখনও আরও দক্ষ হতে পারে, তাই আমি মনে করি এখানে উন্নতির জন্য আরও অনেক জায়গা রয়েছে (উদাহরণস্বরূপ, এতে 911 581 461 374 স্পেস রয়েছে)।
আমরা ব্যাখ্যাটি পাওয়ার আগে, এটি পরীক্ষা করার জন্য একটি নোট: সরকারী দোভাষী পুরোপুরি যেমন কাজ করেন না তেমন। ক) Mirror.cpp
অনেক সিস্টেমে সংকলন করে না। যদি আপনি এই সমস্যায় পড়ে থাকেন তবে কেবল আপত্তিকর লাইনটি মন্তব্য করুন - ক্ষতিগ্রস্ত উপাদান (একটি এলোমেলো আয়না) এই কোডটিতে ব্যবহৃত হয় না। খ) কয়েকটি বাগ রয়েছে যা অপরিজ্ঞাত আচরণের দিকে পরিচালিত করতে পারে (এবং সম্ভবত এই প্রোগ্রামটির জন্য কোনও প্রোগ্রামের ইচ্ছা থাকবে)। এই প্যাচগুলি ঠিক করার জন্য আপনি প্রয়োগ করতে পারেন । একবার আপনি এটি সম্পন্ন করার পরে, আপনার সাথে দোভাষীটি সংকলন করতে সক্ষম হওয়া উচিত
g++ -g --std=c++11 *.cpp -o Fission
মজাদার ঘটনা: এই প্রোগ্রামটি প্রায় প্রতিটি উপাদান ফিশনকে #
(র্যান্ডম মিরর), :
(অর্ধ মিরর), -
বা |
(প্লেইন মিরর) ব্যতীত "
(প্রিন্ট মোড) ছাড়াই ব্যবহার করে।
পৃথিবীতে কি?
সতর্কতা: এটি বেশ দীর্ঘ হবে ... আমি ধরে নিচ্ছি যে ফিশন কীভাবে কাজ করে এবং কীভাবে এটি এতে প্রোগ্রাম করতে পারে সে সম্পর্কে আপনি সত্যই আগ্রহী। কারণ আপনি যদি না হন তবে আমি কীভাবে সম্ভবত এটি সংক্ষেপ করতে পারি তা নিশ্চিত নই। (পরবর্তী অনুচ্ছেদে যদিও ভাষার সাধারণ বিবরণ দেওয়া আছে।)
বিভাজন একটি দ্বি-মাত্রিক প্রোগ্রামিং ভাষা, যেখানে ডেটা এবং নিয়ন্ত্রণ প্রবাহ উভয়ই গ্রিডের মধ্য দিয়ে অণু দ্বারা প্রতিনিধিত্ব করা হয় । আপনি যদি আগে মার্বেলসটি দেখে বা ব্যবহার করেন তবে ধারণাটি অস্পষ্টভাবে পরিচিত হওয়া উচিত। প্রতিটি পরমাণুর দুটি পূর্ণসংখ্যা বৈশিষ্ট্য রয়েছে: একটি অ-নেতিবাচক ভর এবং একটি স্বেচ্ছাসেবী শক্তি। ভর যদি কখনও নেতিবাচক হয়ে যায় তবে গ্রিড থেকে পরমাণু অপসারণ করা হয়। বেশিরভাগ ক্ষেত্রে আপনি ভরকে পরমাণুর "মান" এবং শক্তিকে কিছু ধরণের মেটা-সম্পত্তি হিসাবে বিবেচনা করতে পারেন যা পরমাণুর প্রবাহ নির্ধারণের জন্য বিভিন্ন উপাদান দ্বারা ব্যবহৃত হয় (অর্থাত্ বেশিরভাগ ধরণের স্যুইচের চিহ্নের উপর নির্ভর করে) শক্তি). আমি (m,E)
যখন প্রয়োজন হবে তখন দ্বারা পরমাণুগুলি চিহ্নিত করব । প্রোগ্রামের শুরুতে, গ্রিডটি একটি গুচ্ছ দিয়ে শুরু হয়(1,0)
চারটি উপাদানগুলির যে কোনও স্থানে আপনি যেখানেই রেখেছেন সেখান থেকে পরমাণুগুলি UDLR
(যেখানে অক্ষরটি নির্দেশ করে যে দিকে পরমাণুটি প্রাথমিকভাবে চলছিল)। এরপরে বোর্ডটি পুরো গুচ্ছ উপাদানগুলির সাথে জনবহুল হয় যা পরমাণুর ভর ও শক্তি পরিবর্তন করে, তাদের দিক পরিবর্তন করে বা আরও অত্যাধুনিক জিনিসগুলি করে। একটি সম্পূর্ণ তালিকার জন্য esolangs পৃষ্ঠাটি দেখুন , তবে আমি এই ব্যাখ্যায় তাদের বেশিরভাগকে পরিচয় করিয়ে দেব। আরেকটি গুরুত্বপূর্ণ পয়েন্ট (যা প্রোগ্রামটি বেশ কয়েকবার ব্যবহার করে) হ'ল গ্রিডটি টোরয়েডাল: একটি পরমাণু যা কোনও দিককে আঘাত করে তার বিপরীত দিকে উপস্থিত হয়, একই দিকে চলে।
আমি প্রোগ্রামটি কয়েকটি ছোট অংশে লিখেছি এবং শেষে তাদের একত্রিত করেছি, যাতে আমি ব্যাখ্যাটি দিয়ে যাব।
atoi
এই উপাদানটি বরং উদ্বেগজনক বলে মনে হতে পারে তবে এটি দুর্দান্ত এবং সহজ এবং আমাকে ফিশনের পাটিগণিত এবং নিয়ন্ত্রণ প্রবাহের গুরুত্বপূর্ণ ধারণাটি প্রচুর পরিচয় করিয়ে দেওয়ার অনুমতি দেয়। অতএব, আমি এই অংশটি বেশ নিখুঁত বিশদে নিয়ে যাব, তাই আমি অন্যান্য অংশগুলিকে নতুন ফিশন যান্ত্রিকগুলি প্রবর্তন করতে এবং উচ্চ স্তরের উপাদানগুলি নির্দেশ করতে পারি যার বিশদ নিয়ন্ত্রণ প্রবাহটি আপনাকে নিজের অনুসরণ করতে সক্ষম হওয়া উচিত।
বিভাজন শুধুমাত্র পৃথক অক্ষর থেকে বাইট মানগুলি পড়তে পারে, পুরো সংখ্যা নয়। যদিও এটি এখানে প্রায় গ্রহণযোগ্য অনুশীলন , আমি যখন ছিলাম তখন আমি বুঝতে পেরেছিলাম, আমি এটি সঠিকভাবে করতে পারি এবং এসটিডিএন-তে প্রকৃত পূর্ণসংখ্যাগুলি পার্স করতে পারি। atoi
কোডটি এখানে :
;
R'0@+\
/ Y@</ /[@ Y]_L
[? % \ / \ J
\$@ [Z/;[{+++++++++L
UR+++++++++>/;
O
ফিশনের দুটি গুরুত্বপূর্ণ উপাদান হ'ল ফিশন এবং ফিউশন রিঅ্যাক্টর। ফিশন রিঅ্যাক্টরগুলি হ'ল V^<>
(উপরের কোডগুলি ব্যবহার করে <
এবং >
)। একটি বিভাজন চুল্লী একটি পরমাণু (চরিত্রের পালকে প্রেরণ করে) এটি ডিফল্ট হিসাবে সংরক্ষণ করতে পারে (2,0)
। যদি কোনও পরমাণু চরিত্রের শীর্ষকে আঘাত করে, তবে দুটি নতুন পরমাণু পক্ষগুলিতে প্রেরণ করা হবে। তাদের ভর সঞ্চিত ভর দ্বারা আগত ভরকে বিভক্ত করে নির্ধারিত হয় (অর্থাত্ ডিফল্ট হিসাবে অর্ধেক হওয়া) - বাম-বাম পরমাণু এই মানটি পায় এবং ডানদিকের পরমাণু ভরটির বাকী অংশটি পায় (অর্থাত্ বিচ্ছেদটিতে ভর সংরক্ষণ করা হয়) । উভয় বহির্গামী পরমাণুর মধ্যে আগত শক্তি বিয়োগ হবে minসঞ্চিত শক্তি এর অর্থ আমরা পাটিগণিতের জন্য বিভাজন বিক্রিয়াগুলি ব্যবহার করতে পারি - উভয় বিয়োগ এবং বিভাগের জন্য। যদি সাইট থেকে বিভাজন চুল্লিটি আঘাত করা হয় তবে পরমাণুটি কেবল তির্যকভাবে প্রতিবিম্বিত হয় এবং তারপরে চরিত্রের শীর্ষের দিকে অগ্রসর হয়।
ফিউশন রিঅ্যাক্টরগুলি হ'ল YA{}
(উপরের কোডগুলি ব্যবহার করে Y
এবং {
)। তাদের ফাংশনটি অনুরূপ: তারা একটি পরমাণু (ডিফল্ট (1,0)
) সঞ্চয় করতে পারে এবং শীর্ষ থেকে আঘাত করা হলে দুটি নতুন পরমাণু পাশগুলিতে প্রেরণ করা হবে। তবে, এই ক্ষেত্রে দুটি পরমাণু সমান হবে, সর্বদা আগত শক্তি বজায় রাখবে এবং সঞ্চিত ভর দ্বারা আগত ভরকে গুণ করবে lying এটি, ডিফল্টরূপে, ফিউশন রিঅ্যাক্টর কেবল তার শীর্ষকে আঘাত করে যে কোনও পরমাণুকে নকল করে। যখন চারদিক থেকে আঘাত লয় চুল্লি একটি বিট আরো জটিল আছেন: পরমাণু হল এছাড়াওকোনও পরমাণু বিপরীত দিকে আঘাত না করা পর্যন্ত সঞ্চিত (অন্য স্মৃতি থেকে স্বতন্ত্র)। যখন এটি ঘটে তখন শীর্ষের দিকের দিকে একটি নতুন পরমাণু প্রকাশিত হয় যার ভর এবং শক্তি দুটি পুরাতন পরমাণুর যোগফল। কোনও নতুন পরমাণু যদি একই দিকে হিট হয় তবে কোনও মিলিত পরমাণু বিপরীত দিকে পৌঁছানোর আগেই পুরানো পরমাণুটি সরানো হবে। সংযোজন এবং গুণ প্রয়োগ করতে ফিউশন রিঅ্যাক্টর ব্যবহার করা যেতে পারে।
আর একটি সহজ উপাদান যা আমি বেরিয়ে আসতে চাই তা হ'ল [
এবং ]
যা পরমাণুর দিকটি যথাক্রমে ডান এবং বামে সেট করে (আগত দিক নির্বিশেষে)। উল্লম্ব সমতুল্য M
(ডাউন) এবং W
(উপরে) কিন্তু সেগুলি atoi
কোডের জন্য ব্যবহৃত হয় না । তাদের প্রাথমিক পরমাণু প্রকাশের পরেও UDLR
কাজ করে WM][
।
যাইহোক, চলুন এখানে কোডটি দেখুন। প্রোগ্রামটি 5 টি পরমাণু দিয়ে শুরু হয়:
R
এবং L
নীচে কেবল (সাথে তাদের ভর বৃদ্ধি পেতে +
) পরিণত (10,0)
এবং তারপর একটি বিদারণ এবং একটি লয় চুল্লী সঞ্চিত যথাক্রমে। বেস -10 ইনপুট পার্স করতে আমরা এই চুল্লিগুলি ব্যবহার করব।
L
উপরের ডান কোণায় থাকা তার বর্তমান ভরের (সঙ্গে decremented পায় _
) পরিণত (0,0)
এবং লয় চুল্লী পাশ মধ্যে সংরক্ষিত হয় Y
। এটি আমরা যে সংখ্যাটি পড়ছি তার উপর নজর রাখার জন্য - আমরা সংখ্যাগুলি পড়ার সাথে সাথে এটি ধীরে ধীরে বাড়িয়ে তুলব।
R
উপরের বাম কোণায় চরিত্র কোডে তার বর্তমান ভরের সেট পায় 0
সঙ্গে (48) '0
, তারপর ভর এবং শক্তি আনা হয় @
এবং পরিশেষে ভর বৃদ্ধি সঙ্গে একবার +
দিতে (1,48)
। এরপরে এটি ডায়াগোনাল মিররগুলির সাথে পুনঃনির্দেশিত হয় \
এবং /
ফিশন চুল্লিটিতে সংরক্ষণ করা হয় be 48
ASCII ইনপুটটিকে অঙ্কগুলির প্রকৃত মানগুলিতে রূপান্তর করতে আমরা বিয়োগের জন্য ব্যবহার করব । 1
বিভাজন এড়াতে আমাদের ভরও বাড়াতে হয়েছিল 0
।
- অবশেষে,
U
নীচের বাম কোণে হ'ল যা গতিতে সমস্ত কিছু নির্ধারণ করে এবং প্রাথমিকভাবে কেবল নিয়ন্ত্রণ প্রবাহের জন্য ব্যবহৃত হয়।
ডান দিকে পুনঃনির্দেশিত হওয়ার পরে, নিয়ন্ত্রণ পরমাণু হিট ?
। এটি ইনপুট উপাদান। এটি একটি অক্ষর পড়ে এবং পরমাণুর ভরকে পড়ুন ASCII মান এবং শক্তিতে সেট করে 0
। আমরা যদি এর পরিবর্তে ইওএফটিকে আঘাত করি তবে শক্তি সেট হয়ে যাবে 1
।
পরমাণু চলতে থাকে এবং তারপরে আঘাত করে %
। এটি একটি আয়না সুইচ। ধনাত্মক শক্তির জন্য, এটি /
আয়নার মতো কাজ করে । তবে ইতিবাচক শক্তির জন্য এটি একটির মতো কাজ করে \
(এবং শক্তিটি 1 দ্বারা হ্রাসও করে)। সুতরাং আমরা যখন অক্ষরগুলি পড়ছি তখন পরমাণু উপরের দিকে প্রতিবিম্বিত হবে এবং আমরা অক্ষরটি প্রক্রিয়া করতে পারি। তবে আমরা যখন ইনপুটটি দিয়ে এসেছি তখন পরমাণুটি নীচের দিকে প্রতিবিম্বিত হয় এবং ফলাফলটি পুনরুদ্ধার করতে আমরা বিভিন্ন যুক্তি প্রয়োগ করতে পারি। FYI, বিপরীত উপাদান হয় &
।
সুতরাং আমরা একটি পরমাণু আপ জন্য আপ চলিত আছে। আমরা প্রতিটি চরিত্রের জন্য যা করতে চাই তা হ'ল তার অঙ্কের মানটি পড়া, এটি আমাদের চলমান মোটে যোগ করুন এবং তারপরে পরবর্তী অঙ্কের জন্য প্রস্তুত করার জন্য সেই চলমান মোটকে 10 দিয়ে গুণ করুন।
অক্ষরের পরমাণুটি প্রথমে একটি (ডিফল্ট) ফিউশন রিঅ্যাক্টরটিকে হিট করে Y
। এটি পরমাণুকে বিভক্ত করে এবং আমরা ইনপুট উপাদানটিতে ফিরে লুপ করতে এবং পরের অক্ষরটি পড়তে নিয়ন্ত্রণের পরমাণু হিসাবে বাম-বামে থাকা অনুলিপিটি ব্যবহার করি। ডানদিকে যাওয়া অনুলিপি প্রক্রিয়া করা হবে। আমরা যেখানে চরিত্রটি পড়েছি সেই ক্ষেত্রে বিবেচনা করুন 3
। আমাদের পরমাণু হবে (51,0)
। আমরা ভর এবং শক্তি এর সাথে অদলবদল করি @
, যেমন আমরা পরবর্তী বিভাজন চুল্লিটির বিয়োগফলকে ব্যবহার করতে পারি। চুল্লিটি 48
শক্তিকে বিয়োগ করে (ভর পরিবর্তন না করে), সুতরাং এটি দুটি কপি প্রেরণ করে (0,3)
- শক্তিটি এখন আমাদের পড়া অঙ্কটির সাথে সামঞ্জস্য করে। উপরের অনুলিপিটি সহজেই বাতিল করা হয় ;
(এমন উপাদান যা কেবলমাত্র সমস্ত আগত পরমাণু ধ্বংস করে)। আমরা ডাউনগিংয়ের অনুলিপি নিয়ে কাজ চালিয়ে যাব। আপনাকে এর মধ্য দিয়ে চলতে হবে/
এবং \
আয়না কিছুটা।
@
শুধু লয় চুল্লী অদলবদল ভর এবং শক্তি আবার সামনে, এই ধরনের যে আমরা যুক্ত করতে হবে (3,0)
আমাদের চলমান মোট Y
। মনে রাখবেন যে চলমান মোটে নিজেই সর্বদা 0
শক্তি থাকে।
এখন J
এক লাফ। এটি যা করে তা হ'ল যে কোনও আগত পরমাণুটিকে তার শক্তিতে এগিয়ে যায়। যদি এটি হয় 0
তবে পরমাণুটি কেবল সোজাভাবে এগিয়ে চলেছে। যদি এটি 1
একটি ঘর এড়িয়ে যায়, যদি এটি 2
দুটি ঘর ছেড়ে যায় এবং আরও অনেক কিছু। শক্তি লাফিয়ে ব্যয় হয়, তাই পরমাণু সর্বদা শক্তি দিয়ে শেষ হয় 0
। যেহেতু চলমান মোটের শূন্য শক্তি রয়েছে তাই আপাতত লাফটি উপেক্ষা করা হবে এবং পরমাণুটিকে ফিউশন রিঅ্যাক্টরে পুনঃনির্দেশিত করা হবে {
যা এর ভরকে বহুগুণ করে 10
। ডাউনগিংয়ের অনুলিপিটি বাতিল হয়ে যায় ;
যখন আপগোং করা অনুলিপিটি Y
নতুন চলমান মোট হিসাবে চুল্লিটিতে ফেরত দেওয়া হয় ।
উপরেরগুলি পুনরাবৃত্তি করতে থাকে (মজাদার পাইপলাইনযুক্ত পদ্ধতিতে যেখানে পূর্ববর্তীগুলি সম্পন্ন হওয়ার আগে নতুন অঙ্কগুলি প্রক্রিয়া করা হচ্ছে) যতক্ষণ না আমরা ইওএফ-তে আঘাত করি। এখন %
পরমাণুটিকে নীচের দিকে প্রেরণ করবে। (0,1)
চলমান মোট চুল্লী আঘাত করার আগে এই পরমাণুটিকে এখনই পরিণত করার ধারণাটি তৈরি করা হয়েছে যাতে ক) মোট প্রভাবিত হয় না (শূন্য ভর) এবং খ) আমরা 1
উপরের দিকে ঝাঁপিয়ে পড়ার শক্তি পাই [
। আমরা সহজেই শক্তির সাথে যত্ন নিতে পারি $
, যা শক্তি বৃদ্ধি করে।
ইস্যুটি হ'ল ?
আপনি যখন ইওএফ-তে আঘাত করছেন তখন ভর পুনরায় সেট করবেন না যাতে ভরটি এখনও সর্বশেষ অক্ষরের পড়ার মতো হবে এবং শক্তিটি হবে 0
(কারণ %
এতে 1
পিছনে হ্রাস হয়েছে 0
)। সুতরাং আমরা এই ভর থেকে মুক্তি পেতে চাই। এটি করার জন্য আমরা @
আবারও ভর এবং শক্তি অদলবদল করি ।
আমি এই বিভাগে আপ শেষ হচ্ছে সামনে আরও একটি উপাদান পরিচয় করিয়ে দিতে প্রয়োজন: Z
। এটি মূলত %
বা হিসাবে একই &
। পার্থক্যটি হ'ল এটি ইতিবাচক-শক্তি পরমাণুগুলি সরাসরি (শক্তি হ্রাস করার সময়) মধ্য দিয়ে যেতে দেয় এবং বামে 90 ডিগ্রিহীন-ধনাত্মক-শক্তি পরমাণুকে প্রতিফলিত করে। আমরা এটিকে পরমাণুর শক্তিটি অতিক্রম করে লুপিং দ্বারা ব্যবহার করতে পারি Z
- শক্তি শেষ হওয়ার সাথে সাথে পরমাণু অপসারণ হয়ে লুপটি ছেড়ে যাবে। এই নিদর্শন:
/ \
[Z/
যেখানে শক্তি শূন্য হলে পরমাণু উপরের দিকে চলে যাবে। আমি এই প্যাটার্নটি প্রোগ্রামের অন্যান্য অংশগুলিতে এক আকারে বা অন্য কয়েকবার ব্যবহার করব।
সুতরাং যখন পরমাণুর এই সামান্য লুপ ছেড়ে, এটা তো কেবল (1,0)
এবং অদলবদল (0,1)
দ্বারা @
ইনপুটের চূড়ান্ত ফলাফল প্রকাশ করতে লয় চুল্লী আঘাত আগে। যাইহোক, চলমান মোট 10 এর গুণক দ্বারা বন্ধ হয়ে যাবে, কারণ আমরা ইতিমধ্যে এটি অন্য একটি অঙ্কের জন্য অস্থায়ীভাবে গুণিত করেছি।
সুতরাং এখন শক্তি দিয়ে 1
, এই পরমাণুটি এড়িয়ে যাবে [
এবং এতে লাফিয়ে যাবে /
। এটি এটিকে একটি ফিশন চুল্লিতে প্রতিবিম্বিত করে যা আমরা 10 দ্বারা বিভক্ত করতে এবং আমাদের বহিরাগত গুণকে ঠিক করার জন্য প্রস্তুত করেছি। আবার, আমরা একটি অর্ধেকে ফেলে রেখে অন্যটিকে ;
আউটপুট হিসাবে রাখি (এখানে উপস্থাপন করা হয় O
যার সাথে কেবল এটি সম্পর্কিত অক্ষরটি মুদ্রণ করবে এবং পরমাণুটিকে ধ্বংস করবে - পুরো প্রোগ্রামে আমরা পরিবর্তে অ্যাটমটি ব্যবহার করি)।
itoa
/ \
input -> [{/\ ;@
@\ <\
$ ;}++ +++++++L
%@A{/
M \@+>/
~ @
SNR'0YK
\ A!/
অবশ্যই, আমাদের ফলাফলটি আবার স্ট্রিংয়ে রূপান্তর করতে হবে এবং এটি মুদ্রণ করতে হবে। এই অংশটির জন্য এটিই। এটি ধরে নিয়েছে যে ইনপুটটি 10 বা তার বেশি টিকের আগে আসে না, তবে সহজেই দেওয়া পুরো প্রোগ্রামে। এই বিটটি পুরো প্রোগ্রামের নীচে পাওয়া যাবে।
এই কোডটি একটি নতুন খুব শক্তিশালী ফিশন উপাদান: স্ট্যাক প্রবর্তন করে K
। স্ট্যাক প্রাথমিকভাবে খালি। অ-নেতিবাচক শক্তির সাথে একটি পরমাণু যখন স্ট্যাকটিকে আঘাত করে, তখন পরমাণুটিকে কেবল স্ট্যাকের দিকে ঠেলে দেওয়া হয়। নেতিবাচক শক্তির সাথে একটি পরমাণু যখন স্ট্যাকটিকে আঘাত করে, তখন এর ভর এবং শক্তি স্ট্যাকের শীর্ষে (যা দ্বারা পপ করা হয়) পরমাণু দ্বারা প্রতিস্থাপিত হবে। যদি স্ট্যাকটি খালি থাকে তবে পরমাণুর দিকটি বিপরীত হয় এবং এর শক্তি ইতিবাচক হয়ে যায় (অর্থাত্ এটি বহুগুণ হয় -1
)।
ঠিক আছে, আসল কোডে ফিরে আসুন। itoa
স্নিপেটের ধারণাটি হ'ল বারবার পরবর্তী অঙ্কটির জন্য ইনপুট মডুলো 10 নেওয়া যখন পরবর্তী পুনরাবৃত্তির জন্য 10 দ্বারা ইনপুট ভাগ করে div এটি বিপরীত ক্রমে সমস্ত অঙ্ক উপার্জন করবে (কমপক্ষে তাত্পর্যপূর্ণ থেকে অত্যন্ত তাৎপর্যপূর্ণ পর্যন্ত)। অর্ডার ঠিক করার জন্য আমরা সমস্ত অঙ্কগুলি একটি স্ট্যাকের দিকে ঠেলা দিয়ে থাকি এবং শেষে তাদের মুদ্রণের জন্য একে একে একে পপ করে ফেলি।
কোডের উপরের অর্ধেকটি অঙ্কের গণনা করে: L
প্লাসগুলি সহ একটি 10 দেয় যা আমরা ক্লোন করে ফিশন এবং ফিউশন রিঅ্যাক্টারে ফিড করি যাতে আমরা বিভাজন করতে পারি এবং 10 দ্বারা গুণ করতে পারি লুপটি মূলত [
উপরের বাম কোণায় শুরু হওয়ার পরে শুরু হয় । বর্তমান মানটি বিভক্ত: একটি অনুলিপি 10 দ্বারা বিভক্ত হয়, তারপরে 10 দ্বারা গুণিত হয় এবং একটি ফিশন রিঅ্যাক্টরে সংরক্ষণ করা হয়, যা শীর্ষে অন্য অনুলিপি দ্বারা আঘাত করা হয়। এই i % 10
হিসাবে গণনা i - ((i/10) * 10)
। আরও মনে রাখবেন যে A
বিভাগের পরে এবং গুণনের আগে মধ্যবর্তী ফলাফলকে বিভক্ত করে, যেমন আমরা i / 10
পরবর্তী পুনরাবৃত্তিতে ফিড করতে পারি ।
%
লুপ aborts একবার পুনরাবৃত্তির পরিবর্তনশীল 0. হিট যেহেতু এই হল বেশী বা কম একটি কাজের জন্য সময় লুপ, এই কোড would এমনকি মুদ্রণের জন্য কাজ 0
(নেতৃস্থানীয় শূণ্যসমূহ অন্যথায় তৈরি ছাড়াই)। একবার লুপটি ছেড়ে গেলে আমরা স্ট্যাকটি খালি করতে চাই এবং অঙ্কগুলি মুদ্রণ করতে চাই। S
এর বিপরীত Z
, সুতরাং এটি একটি স্যুইচ যা ডান থেকে 90 ডিগ্রি অ-ধনাত্মক শক্তি সহ একটি আগত পরমাণুকে প্রতিফলিত করবে। সুতরাং পরমাণুটি আসলে কোনও অঙ্কটি পপ অফ করতে S
সোজা থেকে সোজা থেকে প্রান্তের উপরে চলে যায় K
( ~
যা নিশ্চিত করে যে আগত পরমাণুর শক্তি আছে -1
)। যে অঙ্ক দ্বারা মান বৃদ্ধি হয় 48
সংশ্লিষ্ট অঙ্ক চরিত্রের হওয়া ASCII কোড পাওয়ার জন্য। এর A
সাথে একটি অনুলিপি মুদ্রণের জন্য অঙ্কটি বিভক্ত করে!
এবং অন্যান্য অনুলিপিটি Y
পরবর্তী অঙ্কের জন্য চুল্লিটিতে ফিড করুন । মুদ্রিত অনুলিপিটি স্ট্যাকের পরবর্তী ট্রিগার হিসাবে ব্যবহৃত হয়েছে (নোট করুন যে আয়নাগুলি এটিকে প্রান্তের চারপাশে M
বাম দিক থেকে আঘাত করতে প্রেরণ করে )।
যখন স্ট্যাকের খালি, K
পরমাণু প্রতিফলিত এবং তার শক্তি চালু হবে +1
, এই ধরনের এটি সোজা মাধ্যমে প্রেরণ করা S
। N
একটি নতুন লাইন প্রিন্ট করে (কেবল এটি পরিষ্কার :)) এবং তারপরে পারমাণবিকটি R'0
আবার দিকে ফিরে যায় Y
। আশেপাশে আর কোনও পরমাণু নেই বলে এটি কখনই প্রকাশিত হবে না এবং প্রোগ্রামটি সমাপ্ত হবে।
বিভাজন সংখ্যা গণনা করা: ফ্রেমওয়ার্ক
আসুন প্রোগ্রামটির আসল মাংসে আসি। কোডটি মূলত আমার গাণিতিক রেফারেন্স প্রয়োগের একটি বন্দর:
fission[n_] := If[
(div =
SelectFirst[
Reverse@Divisors[2 n],
(OddQ@# == IntegerQ[n/#]
&& n/# > (# - 1)/2) &
]
) == 1,
1,
1 + Total[fission /@ (Range@div + n/div - (div + 1)/2)]
]
div
সর্বাধিক বিভাজনে পূর্ণসংখ্যার সংখ্যা কোথায় ।
প্রধান পার্থক্য হ'ল আমরা ফিশনে অর্ধ-পূর্ণসংখ্যার মানগুলি নিয়ে কাজ করতে পারি না তাই আমি দুটি দিয়ে বহুগুণে অনেক কিছু করছি এবং ফিশনে কোনও পুনরাবৃত্তি নেই। এটির কাজ করার জন্য, আমি পরে ভাগ করার জন্য একটি সারিতে একটি পার্টিশনে সমস্ত পূর্ণসংখ্যার দিকে চাপ দিচ্ছি। আমরা প্রক্রিয়া করা প্রতিটি সংখ্যার জন্য, আমরা একটি করে কাউন্টার বাড়িয়ে দেব এবং সারিটি খালি হয়ে গেলে, আমরা কাউন্টারটি ছেড়ে দেব এবং প্রিন্ট করার জন্য এটি প্রেরণ করব। (একটি সারি, Q
ঠিক K
ফিফোর ক্রমে ঠিক ঠিক মতো কাজ করে ))
এই ধারণার জন্য এখানে একটি কাঠামো দেওয়া হল:
+--- input goes in here
v
SQS ---> compute div from n D /8/
~4X | /~KSA /
3 +-----------> { +X
initial trigger ---> W 6~@/ \/
4
W ^ /
| 3
^ generate range |
| from n and div <-+----- S6
| -then-
+---- release new trigger
সর্বাধিক গুরুত্বপূর্ণ নতুন উপাদান হ'ল অঙ্কগুলি। এগুলি টেলিপোর্টাররা। একই অঙ্কযুক্ত সমস্ত টেলিপোর্টার একসাথে অন্তর্ভুক্ত। যখন কোনও পরমাণু কোনও টেলিপোর্টারকে হিট করে তা তাত্ক্ষণিকভাবে একই গ্রুপের পরবর্তী টেলিপোর্টারকে সরিয়ে নিয়ে যায়, যেখানে পরেরটি স্বাভাবিক বাম-থেকে-ডানদিকে, উপর থেকে নীচে ক্রমে নির্ধারিত হয়। এগুলি প্রয়োজনীয় নয়, তবে বিন্যাসে সহায়তা করুন (এবং এর ফলে কিছুটা গল্ফ করা হচ্ছে)। এগুলিও রয়েছে X
যা সহজেই একটি পরমাণুর সদৃশ হয়, একটি অনুলিপি সরাসরি এবং অন্যটি পেছনের দিকে প্রেরণ করে।
এতক্ষণে আপনি নিজেরাই বেশিরভাগ ফ্রেমওয়ার্ক বাছাই করতে সক্ষম হতে পারেন। উপরের বাম কোণে প্রক্রিয়াজাতকরণের জন্য মানগুলির সারি রয়েছে এবং n
একবারে একটি প্রকাশ করে । এর একটি অনুলিপি n
নীচে টেলিপোর্ট করা হয়েছে কারণ পরিসরটি গণনা করার সময় আমাদের এটির প্রয়োজন হয়, অন্য অনুলিপিটি শীর্ষে অবস্থিত ব্লকের মধ্যে চলে যায় যা গণনা করে div
(এটি এখন পর্যন্ত কোডের একক বৃহত্তম বিভাগ)। একবার div
গণনা করা হয়ে গেলে , এটি সদৃশ হয় - একটি অনুলিপি উপরের ডানদিকে একটি কাউন্টার বাড়ায়, যা এতে সঞ্চিত থাকে K
। অন্য অনুলিপি নীচে টেলিপোর্ট করা হয়। যদি div
তা হয় তবে 1
আমরা তাৎক্ষণিকভাবে এটি উপরের দিকে প্রতিবিম্বিত করি এবং কোনও নতুন মান সন্ধান না করে এটি পরবর্তী পুনরাবৃত্তির জন্য ট্রিগার হিসাবে ব্যবহার করি। অন্যথায় আমরা ব্যবহার করি div
এবংn
নতুন পরিসীমা উত্পন্ন করার জন্য নীচের অংশে (অর্থাত্ পরবর্তীতে সারিবদ্ধভাবে যুক্ত জনগণের সাথে পরমাণুগুলির একটি ধারা), এবং তারপরে পরিসীমাটি সম্পূর্ণ হওয়ার পরে একটি নতুন ট্রিগার প্রকাশ করুন।
একবার কিউ খালি, ট্রিগার প্রতিফলিত হবে মাধ্যমে সোজা ক্ষণস্থায়ী S
এবং উপরের ডান দিকের কোণায়, যেখানে এটি থেকে কাউন্টার (চূড়ান্ত ফলাফল) প্রকাশ পুনরায় উপস্থিত হওয়া A
, যা তারপর teleported হয় itoa
মাধ্যমে 8
।
ফিশন নম্বর গণনা করা: লুপ বডি
সুতরাং কেবলমাত্র বাকি দুটি অংশটি গণনা করা div
এবং সীমাটি তৈরি করা। কম্পিউটিং div
এই অংশ:
;
{+L /$ \/\/\/\/\/ 5/ @ [~ &@[S\/ \
/A@[ %5 /; & K } [S/
\ A$@S S\/ \/\/\/ \/>\ /S]@A / \
X X /> \ +\ A\ / \ /
/ ~A\; +;\ /@
ZX [K / {/ / @ @ } \ X @
\AS </ \V / }SZS S/
X ;;@\ /;X /> \ ; X X
\@+ >/ }$S SZS\+; //\V
/ \\ /\; X X @ @ \~K{
\0X / /~/V\V / 0W//
\ Z [K \ //\
\ /\7\A /;7/\/
কিছুটা ধৈর্য নিয়ে নিজের জন্য ধাঁধা দেওয়ার জন্য আপনি সম্ভবত এখন যথেষ্ট পরিমাণে দেখেছেন। উচ্চ-স্তরের ভাঙ্গন এটি হ'ল: প্রথম 12 টি কলাম বা এর বিভাজনকারীদের একটি স্ট্রিম তৈরি করে 2n
। পরবর্তী 10 কলামগুলি সন্তুষ্ট না করে এমনগুলি ফিল্টার করে OddQ@# == IntegerQ[n/#]
। পরবর্তী 8 টি কলামগুলি সন্তুষ্ট না করে এমনগুলি ফিল্টার করে n/# > (# - 1)/2)
। অবশেষে আমরা সমস্ত বৈধ বিভাজকগুলিকে একটি স্ট্যাকের দিকে ঠেলে দিই এবং একবার শেষ হয়ে গেলে আমরা পুরো স্ট্যাকটি ফিউশন রিঅ্যাক্টারে খালি করে ফেললাম (শেষ / বৃহত্তম বিভাজক ব্যতীত সমস্ত ওভাররাইট করে) এবং তারপরে ফলাফলটি প্রকাশ করি, তার শক্তিটি বাদ দিয়ে (যা ছিল না -অসমান্যতা পরীক্ষা করা থেকে জেরো)।
সেখানে প্রচুর ক্রেজি পাথ রয়েছে যা আসলে কিছুই করে না। মূলত, \/\/\/\/
শীর্ষে পাগলামি ( 5
গুলি এছাড়াও এর অংশ) এবং নীচের চারপাশে একটি পাথ (যা 7
এস এর মধ্য দিয়ে যায় )। কিছু বাজে বর্ণের শর্তাদি মোকাবেলায় আমাকে এগুলি যুক্ত করতে হয়েছিল। বিদারণ একটি বিলম্ব উপাদান ব্যবহার করতে পারে ...
কোডটি থেকে নতুন পরিসীমা উত্পন্ন n
এবং div
এই হল:
/MJ $$\
4}K~@\ &] @\ 3/\
\{ }$A/1 2 }Y~K <\
\@ / \@<+@^ 1;}++@
2 ; \ /
আমরা প্রথমে গণনা করব n/div - (div + 1)/2
(উভয় পদ ফ্লোরড, যা একই ফলাফল দেয়) এবং পরে সংরক্ষণ করি। তারপরে আমরা div
নীচে থেকে একটি সীমা তৈরি করি 1
এবং সেগুলির প্রতিটিতে সঞ্চিত মান যুক্ত করি।
এই দুটি ক্ষেত্রে দুটি নতুন সাধারণ প্যাটার্ন রয়েছে, যা আমার উল্লেখ করা উচিত: একটি হ'ল SX
বা ZX
নীচে থেকে আঘাত (বা ঘূর্ণিত সংস্করণ)। আপনি যদি একটি অনুলিপি সরাসরি এগিয়ে যেতে চান তবে এটি একটি অণু সদৃশ করার একটি দুর্দান্ত উপায় (যেহেতু ফিউশন রিঅ্যাক্টরের আউটপুটগুলি পুনর্নির্দেশ করা কখনও কখনও জটিল হতে পারে)। S
বা Z
rotates মধ্যে পরমাণু X
এবং তারপর প্রসারণ মূল দিক মধ্যে মিরর কপি ফিরে rotates।
অন্য প্যাটার্নটি হ'ল
[K
\A --> output
আমরা যদি কোনও মান সঞ্চয় K
করি K
তবে উপরে থেকে নেতিবাচক শক্তির সাথে আঘাত করে আমরা বারবার এটি পুনরুদ্ধার করতে পারি । A
মান আমরা প্রতি আগ্রহ দেখিয়েছেন সদৃশ এবং কি পরের বার আমরা এটি প্রয়োজন জন্য স্ট্যাকের সম্মুখের অধিকার ফিরে কপি পাঠায়।
ওয়েল, এটি বেশ একটা টোম ছিল ... তবে আপনি যদি সত্যিই এটিটি পেয়ে থাকেন তবে আমি আশা করি যে আপনি এই ধারণাটি পেয়ে গেছেন যে ফিশন ͢