Rebmu : টি অক্ষর বা (৩ + + দৈর্ঘ্য (পি 1) + ২ * সর্বোচ্চ (দৈর্ঘ্য (পি 2), দৈর্ঘ্য (পি 3))
প্রথমে আমি একটি 79 টি চরিত্রের সমাধান দেব যা আপনাকে জিজ্ঞাসা করবে কোন ভাষাগুলি শিখতে হবে? (এন্ট্রপি ৪.০, ৩০ টি চিঠিও অন্তর্ভুক্ত নয় ?
) এবং আপনাকে রেবোল এবং [রেড] এর প্রস্তাব দেয় :
DD 11 DD :do dd {dd {p{Which languages must you learn?}qt}} pp{{[RReebdo]l}}
এখানে অনন্য একটি কৌশল উপলভ্য যা অন্য ভাষায় নয়, এটি এই সুযোগটি গ্রহণ করে আসে যে কোঁকড়ানো ধনুর্বন্ধনী একটি অসমমিত স্ট্রিং ডিলিমিটার, যা আইনীভাবে বাসা বাঁধতে পারে:
my-string: {"It's cool," said {Dr. Rebmu}, "for MANY reasons--like less escaping."}
এটি আমাকে একটি সাধারণ সমাধান তৈরি করতে দেয়, যা এমন কোনও প্রোগ্রামে অনায়াসে কাজ করতে পারে যা পালানোর ক্রমগুলি ব্যবহার করে না। Character৯ টি অক্ষরের সংস্করণ শর্টকাটের পক্ষে যথেষ্ট সহজ ছিল তবে প্রোগ্রামগুলি p2 এবং p3 এর জন্য স্বেচ্ছাসেবী প্রোগ্রাম উত্সটি সঠিকভাবে ধারণ করতে আপনার পুরো টেমপ্লেটটি দরকার। আমরা যদি এটি ব্যবহার করি তবে এটি 87 টি অক্ষর হত:
DD 11 DD :do dd {dd {p{Which languages must you learn?}qt}} ddoo{{pp{{[RReebdo]l}}}}
এই সাধারণ ফর্মটি ব্যবহার করার প্যাটার্নটি হ'ল যদি আপনার চলক দৈর্ঘ্যের ক্রমিক অক্ষরের তিনটি উত্স পাঠ্য থাকে (আসুন AAA
, উদাহরণস্বরূপ ব্যবহার করুন BBBBB
, CCCCCCC
) আপনি এগুলি এর লাইনের সাথে কিছু হিসাবে এনকোড করতে পারেন:
DD 11 DD :do dd {dd {AAAqt}} ddoo{{BCBCBCBCBC C C}}
(দ্রষ্টব্য: যদিও প্যাটার্ন অক্ষর ব্যবহার করে এমন প্রোগ্রামগুলিতে টুইট করা ব্যতীত এই প্যাটার্নটি কাজ করবে না, এটি কোনও মারাত্মক ত্রুটি নয় ces ধনুর্বন্ধনী দ্বারা ডিলিট করা স্ট্রিংয়ের সাথে তুলনামূলকভাবে বামবন্ধন পেতে কিছু জাতীয় প্রয়োজন {Foo ^{ Bar}
... তবে আপনি সহজেই এটি পুনরায় লিখতে পারেন বিকল্প স্ট্রিং স্বরলিপি "Foo { Bar"
, এবং একত্রিত কেসগুলি একত্রিত করা স্ট্রিংয়ের মিশ্রণটি একসাথে আঠালো করে পরিচালনা করা যায়))
সুতরাং ... একটি উদাহরণ কিভাবে? একবার সাধারণ ফর্মটি উপলভ্য হয়ে গেলে, এই 573 অক্ষর প্রোগ্রামটি 3 টি পূর্ব কোড গল্ফ সমাধান থেকে কয়েক মিনিটের মধ্যে একত্রিত হয়েছিল:
ডিডি 11 ডিডি: দো ডিডি {ডিডি {আরজে এন 0% আরএন ওয়া 1 এম 2 জ এস {\ এক্স /} ডি00 এইচসি এবং [আপনি [জে? ওয়া কিউস ~ আরপিকিউ] [আইইএল00 সি [এসকিউডি 2 কে] [ইইভি? কেকিউ [টিএলকিউ]] পিসি সেগ - বি00 [ EZ 1 5] 3] prRJ [Si ~ dSPscSqFHs] ইজেড 1 [S + DCA + + wM2cNO]]] Va | [mpAp2j] prSI ~ W { } Ls2w Wl h01tiVsb01n -1 chRVs { } hLceVn01qt}} ddoo {{BrdSz [fcebC [এসএন [{এন এসবিও [tttll1eV} 0e5gXN1 01L {5s0} সি {1} 0 {0 দো 5 এফ 0 বিবিএমই 1 আর 0} 0]] টিএমডব্লিউ 9 সি 9 নুমজ জেএল [পেন + [কেপিআরজেজেএনএন] [এএইচএসসিএনবি] [ন এসডব্লিউএনসি] {কে, জে বি পি { f এলএফ ইজেড - - এন [এন এম {জি অটোস্টেস্টোরঅ্যান্ডবায়সোম আরও}] {টি অ্যাকোনেডাউনঅ্যান্ডপ্যাসিটার পাউন্ড} সি বি ডব্লু পি এলএফ]]}}
যদি কেউ তাদের পছন্দের ভাষায় সেই প্রোগ্রামটি লেখার চেষ্টা করতে চায় এবং তারা 573 কে মারতে পারে বলে মনে করে তবে আমাকে জানান। আপনি যদি করেন তবে আমি আপনাকে প্রচুর পরিমাণে খ্যাতি দিচ্ছি - ধরে নিচ্ছি যে আপনার পছন্দমত ভাষাটি রেবমু নয়, কারণ আমি জানি যে এই প্রোগ্রামগুলি ন্যূনতম নয়। :-)
আপনার শেষে যে "অপব্যয়কর" ব্যবধানটি পাবেন তা হ'ল পি 2 এবং পি 3 ভারসাম্যহীন দৈর্ঘ্যের হয়। তবে সমস্ত 3 টি প্রোগ্রাম এক্ষেত্রে বিভিন্ন আকারের তাই পি 2 / পি 3 বেছে নেওয়ার জন্য কোনও বিশেষ ভাল জুড়ি নেই। (আমি এগুলি বেছে নিয়েছিলাম কারণ ইনপুট হিসাবে কোনও বাহ্যিক ডেটা ছিল না, যেমন একটি গোলকধাঁধা বা যা কিছু, সেগুলি একই দৈর্ঘ্যের ছিল না While যদিও আমি নতুন প্রোগ্রামগুলি লিখতে পারতাম যা আরও অনুকূল ছিল, আমি যথেষ্ট সময় ব্যয় করেছি এবং বিষয়টিটি ছিল আপনি না নতুন প্রোগ্রাম লিখতে ...)
কিভাবে এটা কাজ করে
(দ্রষ্টব্য: আমি আরো "সৃজনশীল" পদ্ধতির যে হিসাবে মসৃণ ছিল না কিন্তু দিয়ে শুরু আরো আকর্ষণীয় সুদর্শন আমি এটা সরানো। আমার ব্লগে একটি এন্ট্রি করতে যেমন এই পদ্ধতির বর্ণনা ইতিমধ্যে দীর্ঘ।)
এখানে একটি কীটি অন্য কিছু এন্ট্রিগুলির মতো "স্ট্রিং হিসাবে ইভাল কোড" কৌশল, এটিতে অসমমিত স্ট্রিং ডিলিমিটারের ট্রাম্প কার্ড রয়েছে। আমি ৮০ টি চরিত্রের মামলার কাজটি ব্যাখ্যা করে শুরু করব।
এখানে "পুরো" প্রোগ্রামটি রয়েছে, এই মামলার পাঠযোগ্যতার জন্য সাদা স্থানটি সামঞ্জস্য করে:
DD 11 ; assign 11 to dd (about to overwrite again)
DD :do ; make dd a synonym for DO (a.k.a. "eval")
; eval a string as source code that ends with QUIT (QT)
dd {dd {p{Which languages must you learn?}qt}}
; we'll never get here, but whatever's here must be legally parseable
pp{{[RReebdo]l}}
এখানে আমরা ডিও (ওরফে "ইওল") এর প্রতিশব্দে ডিডি সেট করে রেখেছি। তবে কৌশলটি হ'ল যখন অর্ধবৃত্তিত প্রোগ্রামগুলি চলতে থাকে তখন তারা চলমান কোডটি সরিয়ে দেয় যার একমাত্র প্রভাব হ'ল নিরপেক্ষ আক্ষরিক 1 তে ডি সংজ্ঞায়িত করা।
বিজোড়-অক্ষর কোডটি এখানে যা তৈরি করে তা আবার হোয়াইটস্পেসকে সামঞ্জস্য করে:
D 1 ; assign 1 to d
D d ; assign d to itself, so it's still 1
d ; evaluates to integer, no side effect
{d pWihlnugsms o er?q} ; string literal, no side effect
p {Rebol} ; print "Rebol"
এবং এখানে সম-চরিত্র কোড:
D 1 ; assign 1 to d
D:od ; URL-literal (foo:...), no side effect
d ; evaluates to integer, no side effect
{{hc agae utyulan}t} ; string literal (well-formed!), no side effect
p {[Red]} ; print "[Red]"
এটি প্রকৃতপক্ষে কেস নয় যে অর্ধবিহীন প্রোগ্রামের জন্য, dd {dd {(arbitrary code)qt}}
আপনি যা চান কোডটি সম্পাদন করবে। তবে, কেবল একটির পরিবর্তে মূল্যায়ন করার জন্য দুটি কল রয়েছে। এটি কারণ কারণ নেস্টেড ব্রেসগুলি আন্তঃবাহিত কোডগুলিতে দুর্দান্ত কাজ করে, তারা ডিও এর স্পষ্ট আচরণকে জগাখিচু করে। কারণ:
do {{print "Hello"}}
স্ট্রিংটিকে একটি প্রোগ্রাম হিসাবে লোড করবে, কিন্তু সেই প্রোগ্রামটি কেবল স্ট্রিং ধ্রুবক হিসাবে বাড়ে {print "Hello"}
। সুতরাং আমি এখানে যে কৌশলটি ব্যবহার করি তা হ'ল আমার ডিডি নেওয়া (ডিও হিসাবে একই ফাংশনের মান ধারণ করে) এবং এটি দুটিবার চালানো। হালওয়ারগুলি স্ট্রিংয়ের বিভিন্ন অংশে চিবিয়ে খায় তবে বিষয়বস্তুর জন্য বৈষম্য / বিজোড়তা সঠিক থাকলে তারা উভয়কেই চিবিয়ে খায় না এবং কারণ অর্ধিংয়ের পরে স্ট্রিংটির বাইরে যা থাকে তা কেবল অবিচ্ছেদ্য ধ্রুবকd
they
এই নিদর্শনটির সাথে প্রোগ্রামের আচরণটি লেখার ক্ষেত্রে কোনও চ্যালেঞ্জ নেই যখন এটি অর্ধেক না কেটে দেওয়া হয় - আপনি কোডের চরিত্রের দৈর্ঘ্য সমান হওয়া অবধি কোনও কিছু রাখতে পারেন (আপনি যদি কিউটি গণনা করছেন, তবে এটি কোট নয়)) আপনার যদি কোনও বিজোড় নম্বর থেকে সমান নম্বর পাওয়ার দরকার হয় তবে একটি স্পেসে ফেলে দিন (সুতরাং পি 1 এর বিজোড় প্রোগ্রাম দৈর্ঘ্যের জন্য উপরে আমার সূত্রটিতে একটি +1 আছে) । কৌতুকটি সেই আন্তঃবাহিত কোডটি পরে লিখবে বলে মনে হয়, যা অবশ্যই যদি পার্সারটি পাস না করে । (এটি কিউটি-র কারণে চালানো হবে না, তবে এটি কার্যকর হওয়ার আগে এটি লোডেবল হতে হবে))
এই মামলাটি তুচ্ছ; pp
প্রতীক হিসাবে সূক্ষ্ম লোড এটি অপরিজ্ঞাত হলেও, এবং p
প্রতিটি অর্ধ প্রোগ্রামে মুদ্রণের জন্য বিভক্ত হয় । তবে আমরা আবার একটি স্ট্রিং আক্ষরিক আবার ব্যবহার করে অন্য কৌশল করতে পারি। অর্ধেক প্রোগ্রামগুলি এখনও ডিও সংজ্ঞায়িত করে থাকে, তাই আমরা কেবল এটি বলতে পারি:
ddoo{{pp{{[RReebdo]l}}}}
পুরো ক্ষেত্রে পার্সারের একমাত্র অংশটি প্রতীকী শব্দ ddoo
এবং একটি স্ট্রিং আক্ষরিক হয়ে ওঠার পরে আমরা সেই স্ট্রিং আক্ষরিক অভ্যন্তরে যে কোনও দুটি প্রোগ্রাম ইচ্ছামত ইন্টারলিভ করতে পারি এবং পার্সারকে রাগান্বিত করে না। অর্ধেক সংস্করণগুলি কেবল এটাই বলবে:
do{p{Rebol}}
..এবং...
do{p{[Red]}}
আমি যেমন বলেছি, এই অংশটি অন্যান্য সমাধানগুলির সাথে পরিচিত বলে মনে হচ্ছে যা প্রোগ্রামগুলিকে স্ট্রিং হিসাবে বিবেচনা করে এবং সেগুলি পরিষ্কার করে। তবে প্রতিযোগিতার ক্ষেত্রে, আপনি যে প্রোগ্রামগুলি প্যাক করছেন সেগুলিতে নেস্টেড স্ট্রিং থাকে, যা তাদের জন্য ক্ষতচিহ্ন ফেলে দেয়। এখানে কেবলমাত্র জিনিস যা আপনাকে সমস্যায় ফেলবে তা হ'ল ক্যারেট ( ^
) এর মাধ্যমে পালিয়ে আসা ... যা সহজেই কাজ করা যায়।
(ছোট 'প্রতারণামূলক' নোট: এই সমস্যার প্রতিক্রিয়া হিসাবে আমি "ক্যুইট" এর জন্য কিউটি যুক্ত করেছি ually আসলে, আমি উদ্দেশ্যপূর্বক ছাড়ার আগে সংক্ষিপ্তসারটি সরিয়ে দিয়েছিলাম ... কারণ একরকম আমি ভেবেছিলাম এটি কেবল কনসোল ব্যবহারের পক্ষে ভাল এবং কেবল গ্রহণ করার জন্য) দ্বি-অক্ষরের স্থানটি যদি এটি আরপিএল না থাকে I'm আমি এটি যুক্ত করছি কারণ আমি দেখছি আমি ভুল ছিলাম, বিশেষত এই মামলার জন্য এটি যুক্ত করছি না Nevertheless তবুও, পরিবর্তনের আগে এটি 2 অক্ষর দীর্ঘতর হত Also এছাড়াও, যখন আমি প্রথম সমাধানটি পোস্ট করলাম তখন রেবমুতে একটি বাগ ছিল যা এটি আসলে কাজ করা থেকে বিরত রেখেছিল যদিও এটি হওয়া উচিত ছিল ... এখন এটি কার্যকর হয়।)
x0=00;;
। দুর্দান্ত চ্যালেঞ্জ!