গণিত, 72 65 61 বাইট
Print@@@Tuples@{a=##/(b=#5#9#15#21#25#)&@@Alphabet[],b,a,b,a}
পরীক্ষামূলক জন্য, আমি প্রতিস্থাপন সুপারিশ Print@@@
সঙ্গে ""<>#&/@
। ম্যাথমেটিকা তারপরে চিরকালের জন্য 288,000 লাইন মুদ্রণের পরিবর্তে প্রথম কয়েক এবং শেষ কয়েকটি শব্দ দেখিয়ে একটি কাটা ফর্ম প্রদর্শন করবে।
ব্যাখ্যা
অবশেষে আমি স্ট্রিংগুলি বিভক্ত করার জন্য একটি ব্যবহার পেয়েছি। :)
আমি কিছুক্ষণের জন্য স্ট্রিং যুক্ত বা গুণিত করার সম্ভাবনা দেখে আগ্রহী হয়েছি তবে প্রকৃত ব্যবহারের ক্ষেত্রেগুলি যথেষ্ট সীমাবদ্ধ। মূল কথাটি হ'ল ম্যাথমেটিকায় "foo"+"bar"
বা "foo"*"bar"
(এবং ফলস্বরূপ, সংক্ষিপ্ত রূপ "foo""bar"
) এর মতো কিছু সম্পূর্ণ বৈধ। যাইহোক, এটি পাটিগণিতের এক্সপ্রেশনগুলিতে স্ট্রিংগুলির সাথে কী করবেন তা সত্যই জানে না, তাই এই জিনিসগুলি মূল্যহীন remain গণিত যদিও সাধারণত প্রযোজ্য সরলীকরণ প্রয়োগ করে । বিশেষত, স্ট্রিংগুলি ক্যানোনিকাল অর্ডারে সাজানো হবে (যা আপনি ম্যাথমেটিকায় মোটামুটি গণ্ডগোল হয়ে যায়, একবার আপনি বিভিন্ন মামলার অক্ষর, অঙ্কগুলি এবং অ-অক্ষরযুক্ত স্ট্রিং বাছাই শুরু করেন) যা প্রায়শই ডিলব্রেকার হয়ে থাকে তবে এখানে কিছু আসে যায় না matter । তদতিরিক্ত, "abc""abc"
সরল করা হবে"abc"^2
(আপনি যখন বার বার স্ট্রিং করেন তখন এটি একটি সমস্যা, তবে আমাদের তাও নেই), এবং এর মতো কিছু "abc"/"abc"
আসলে বাতিল হয়ে যায় (যা আমরা এমনকি ব্যবহার করব)।
সুতরাং আমরা এখানে গল্ফ চেষ্টা করছেন। আমাদের স্বরবর্ণের একটি তালিকা এবং ব্যঞ্জনবর্ণের একটি তালিকা দরকার, যাতে আমরা Tuples
সমস্ত সম্ভাব্য সংমিশ্রণ উত্পন্ন করতে তাদের খাওয়াতে পারি । আমার প্রথম পদ্ধতির ছিল নিষ্পাপ সমাধান:
Characters@{a="bcdfghjklmnpqrstvwxz",b="aeiouy",a,b,a}
ব্যঞ্জনবর্ণের সেই হার্ডকোডযুক্ত তালিকাটি কিছুটা আঘাত করে। গণিতের একটি Alphabet
অন্তর্নির্মিত রয়েছে যা আমাকে এড়াতে সহায়তা করবে, যদি আমি সস্তা উপায়ে স্বরগুলি সরিয়ে ফেলতে সক্ষম হত। এটি যদিও এটি জটিল হয়ে ওঠে gets উপাদানগুলি অপসারণের সহজতম উপায় হ'ল Complement
তবে নিম্নলিখিতটিগুলির মধ্যে একটি ব্যবহার করে এটি দীর্ঘ হওয়া শেষ করবে:
{a=Complement[Alphabet[],b=Characters@"aeiouy"],b,a,b,a}
{a=Complement[x=Alphabet[],b=x[[{1,5,9,15,21,25}]]],b,a,b,a}
(দ্রষ্টব্য যে আমাদের Characters
আর পুরো বিষয়টি প্রয়োগ করার দরকার নেই , কারণ Alphabet[]
স্ট্রিং নয়, চিঠিগুলির একটি তালিকা দেয়))
সুতরাং আসুন সেই পাটিগণিত ব্যবসায়ের চেষ্টা করি। যদি আমরা তালিকার পরিবর্তে পুরো বর্ণমালা অক্ষরের পণ্য হিসাবে প্রতিনিধিত্ব করি তবে বাতিল করার নিয়মের কারণে আমরা সরল বিভাগ দ্বারা অক্ষরগুলি সরাতে পারি। এটি অনেকগুলি বাইট সঞ্চয় করে কারণ আমাদের প্রয়োজন হবে না Complement
। তদতিরিক্ত, "a""e""i""o""u""y"
আসলে তুলনায় একটি বাইট ছোট Characters@"aeiouy"
। সুতরাং আমরা এটি দিয়ে:
a=##/(b="a""e""i""o""u""y")&@@Alphabet[]
আমরা কোথায় ব্যঞ্জনবর্ণ এবং স্বরবর্ণ পণ্য সংরক্ষণ করছেন a
এবং b
যথাক্রমে। এটি এমন একটি ফাংশন লিখে কাজ করে যা এর সমস্ত যুক্তিগুলিকে এর সাথে গুণিত করে ##
এবং স্বরগুলির পণ্য দ্বারা ভাগ করে। এই ফাংশনটি বর্ণমালা তালিকায় প্রয়োগ করা হয়, যা প্রতিটি বর্ণকে পৃথক যুক্তি হিসাবে পাস করে।
এখনও পর্যন্ত ভাল, কিন্তু এখন আমাদের আছে
{a=##/(b="a""e""i""o""u""y")&@@Alphabet[],b,a,b,a}
তর্ক হিসাবে Tuples
এবং সেই জিনিসগুলি এখনও পণ্য, তালিকাগুলি নয়। সাধারণত, সংশোধন করার সবচেয়ে সংক্ষিপ্ততম উপায়টি List@@@
সামনে রেখে দেয় যা পণ্যগুলিকে আবার তালিকায় পরিণত করে। দুর্ভাগ্যক্রমে, এই 7 বাইট যুক্ত করা এটিকে নিষ্পাপ পদ্ধতির চেয়ে দীর্ঘতর করে তোলে।
যাইহোক, দেখা যাচ্ছে যে Tuples
অভ্যন্তরীণ তালিকার মাথাগুলি মোটেও যত্ন করে না। যদি তুমি করো
Tuples[{f[1, 2], f[3, 4]}]
(হ্যাঁ, অপরিশোধিত জন্য f
)) আপনি পাবেন:
{{1, 3}, {1, 4}, {2, 3}, {2, 4}}
ঠিক যেমন আপনি List
পরিবর্তে একটি ব্যবহার করেছেন f
। সুতরাং আমরা আসলে সেই পণ্যগুলি সরাসরি সোজাতে পাস করতে পারি Tuples
এবং এখনও সঠিক ফলাফল পেতে পারি। এটি দুটি হার্ডকোডযুক্ত স্ট্রিং ব্যবহার করে নিষ্কলুষ পদ্ধতির উপর 5 বাইট সংরক্ষণ করে।
এখন এটি "a""e""i""o""u""y"
মোটামুটি বিরক্তিকর। তবে অপেক্ষা করুন, আমরা এখানে কয়েকটি বাইটও সংরক্ষণ করতে পারি! আমাদের ফাংশনের আর্গুমেন্টগুলি স্বতন্ত্র অক্ষর। সুতরাং আমরা যদি কেবল সঠিক যুক্তিগুলি বেছে নিই, আমরা স্ট্রিং ল্যাটারেলের পরিবর্তে সেগুলি পুনরায় ব্যবহার করতে পারি, যা তাদের তিনটির জন্য সংক্ষিপ্ত। আমরা চাই আর্গুমেন্ট #
(সংক্ষিপ্ত #1
), #5
, #9
, #15
, #21
এবং #25
। যদি আমরা #
শেষের দিকে রাখি, তবে *
তাদের একসাথে গুণতে আমাদের কোনও যোগ করার দরকার নেই , কারণ (রেজেক্স) #\d+
একটি সম্পূর্ণ টোকেন যা এতে কোনও অ-অঙ্ক যুক্ত করতে পারে না। অতএব আমরা #5#9#15#21#25#
আরও 4 টি বাইট সংরক্ষণ করি।