সমস্ত সম্ভাব্য ব্রেইল অক্ষর লিখুন


13

আজ সকালে লিফট বোতামগুলির দিকে তাকিয়ে একটি আকর্ষণীয় ধাঁধা আমার কাছে এসেছিল।

আপনাকে 2x3 গ্রিডে থাকা সমস্ত ব্রেইল নিদর্শনগুলির একটি তালিকা তৈরি করতে হবে gene একটি হ্যাশ ব্যবহার করুন #একটি আচমকা এবং একটি হাইফেন বোঝাতে -একটি ফ্ল্যাট এলাকায় বোঝাতে।

প্রত্যাশিত আউটপুট নমুনা:

#-
--
--

##
--
--

#-
#-
--

(and so on...)

নিয়মাবলী:

  • আপনার প্রোগ্রামকে অবশ্যই প্রতিটি প্যাটার্নকে কমপক্ষে একটি চরিত্র বা রেখার দ্বারা পৃথক করতে হবে।
  • নিদর্শনগুলি যে কোনও ক্রমে উত্পন্ন হতে পারে।
  • ব্রেইল বর্ণমালা আসলে যা ব্যবহার করে তা নির্বিশেষে সমস্ত নিদর্শন উত্পন্ন করা উচিত। সম্পূর্ণ ফাঁকা প্যাটার্নটি alচ্ছিক।
  • কেবল অনন্য দ্বিধাগুলি তৈরি করা উচিত। উল্লিখিত নিদর্শনগুলিকে সমতুল্য হিসাবে বিবেচনা করা হয় কারণ ধাক্কাগুলি অভিন্ন অরেজমেন্টে রয়েছে। এই ক্ষেত্রে, উপরের-বাম কোণার নিকটতম প্যাটার্নটি ব্যবহার করুন (উদাহরণস্বরূপ, এই উদাহরণের মধ্যে প্রথম বিকল্প।)
#-  -#  --  --
#-  -#  #-  -#
--  --  #-  -#

বোনাস পয়েন্ট আপনি এটা কোন কাজ করতে পারে যদি এক্স দ্বারা Y আকারের গ্রিড। ( সম্পাদনা: যুক্তিসঙ্গত সীমার মধ্যে .x4 অবধি ধারণার প্রমাণের জন্য যথেষ্ট))

উইকির নিবন্ধটি পড়লে, মনে হয় 45 টি নিদর্শন রয়েছে (ফাঁকা সহ) যা এই ধাঁধার নিয়ম মেনে চলে।


এটি বেশিরভাগ গণনা নয়, তবে এটি খুব কাছে। জন্য xএক্স yগ্রিডের আপনাকে প্রথমে উৎপন্ন 2^(xy)যারা যা বিরুদ্ধে 0 মাস্ক আউট সংখ্যা এবং ফিল্টার 2^x - 1বা (2^(xy+1) - 1)/(2^y - 1)
পিটার টেলর

উত্তর:


6

গল্ফস্ক্রিপ্ট, 34 32 টি অক্ষর

44,{84+2base(;{'-#'=}/@\n.}%2/n*

সক্রিয় আউট আছে যে হয় কেবল 64 টি নিদর্শন উৎপাদিত এবং খারাপ বেশী ফিল্টার আউট চেয়ে খাটো সমাধান। প্রকৃতপক্ষে, গ্রিড পজিশনে যথাযথ বিট ম্যাপিংয়ের মাধ্যমে, এই প্রোগ্রামের মতো সমস্ত বৈধ (খালি নয়) নিদর্শনগুলি টানা ধারাবাহিক সংখ্যায় ম্যাপ করা সম্ভব this

বিশেষত, আমি যে ম্যাপিংটি ব্যবহার করি তা হ'ল:

5 4
3 1
2 0

যেখানে সংখ্যাগুলি বিট অবস্থানটি চিহ্নিত করে (কমপক্ষে উল্লেখযোগ্য বিট থেকে শুরু করে 0) গ্রিডের সেই অবস্থানে ম্যাপ করে। এই ম্যাপিংয়ের সাথে, বৈধ গ্রিডগুলি 20 থেকে 63 সংখ্যার সাথে মিল করে।

এই প্রায় সুস্পষ্ট বাইনারি 6-বিট সংখ্যা আউট লেখা এবং প্রতি মাসের দ্বিতীয় বিট মধ্যে লাইন ব্রেক যোগ দ্বারা প্রাপ্ত ম্যাপিং হিসাবে একই ব্যতীত যে বিট 1এবং 2এবং প্রকৃতপক্ষে, যে ঠিক কিভাবে আমার প্রোগ্রামটি নির্ণয় - অদলবদল করছে। (আমি বাইনারিতে রূপান্তর করার আগে সংখ্যায় 64৪ যোগ করি এবং তারপরে অতিরিক্ত উচ্চ বিটটি বন্ধ করে ফেলি; এটি কেবল সংখ্যাটি zero বিটের শূন্য প্যাডের মতো, যেহেতু গল্ফস্ক্রিপ্ট baseঅন্যথায় কোনও জিরো ফিরিয়ে না দেয়।)

পুনশ্চ. অনলাইন ডেমো এখানে। (সার্ভারটি ইদানীং ওভারলোড হয়ে গেছে বলে মনে হচ্ছে; যদি আপনি একটি সময়সীমা পান তবে আবার চেষ্টা করুন বা দোভাষীটি ডাউনলোড করুন এবং স্থানীয়ভাবে এটি পরীক্ষা করুন))

সম্পাদনা করুন: অপ্রয়োজনীয় অ্যারে বিল্ডিং এবং ডাম্পিং এড়িয়ে দুটি চর সংরক্ষণ করতে পরিচালিত। রাম রাম!


2
আপনার কিছু বিবরণ যুক্ত করতে আপত্তি আছে? আপনি কীভাবে এই ম্যাপিংটি সংজ্ঞায়িত করছেন তা দেখতে আগ্রহী।
আর্দনিউ

@ অর্ডনিউ: সম্পন্ন, উপরে দেখুন।
ইলমারি করোনেন

আমি মনে করি এটি অনেক লোকের উত্তর পরিবর্তন করতে চলেছে। :-)
হ্যান্ড-ই-ফুড

3

গণিত 97

Grid /@ Cases[(#~Partition~2 & /@ Tuples[{"#", "-"}, 6]), x_ /; 
         x[[All, 1]] != {"-", "-", "-"} && x[[1]] != {"-", "-"}]

অন্ধ ব্যক্তির লিখনাদির প্রণালী


খালি অন্তর্ভুক্ত নেই:

Length[%]

44

এনবি! = ম্যাথমেটিকার একটি চরিত্র।


3

সি # - 205

class C{static void Main(){var s="---##-##";Action<int,int>W=(i,m)=>{Console.WriteLine(s.Substring((i>>m&3)*2,2));};for(int i=0;i<64;++i){if((i&3)>0&&(i&42)>0){W(i,0);W(i,2);W(i,4);Console.WriteLine();}}}}

পঠনযোগ্য সংস্করণ:

class C
{
    static void Main()
    {
        var s = "---##-##"; // all two-bit combinations
        // a function to write one two-bit pattern (one line of a Braille character)
        Action<int,int> W = (i,m) => { Console.WriteLine(s.Substring(((i >> m) & 3) * 2, 2)); };
        // for all possible 6-bit combinations (all possible Braille characters)
        for(int i = 0; i < 64; ++i)
        {
            // filter out forbidden (non-unique) characters
            if ((i & 3) > 0 && (i & 42) > 0)
            {
                // write three rows of the Braille character and an empty line
                W(i,0);
                W(i,2);
                W(i,4);
                Console.WriteLine();
            }
        }
    }
}

3

পার্ল, 71 67 65 চর

y/10/#-/,s/../$&
/g,/^#/m&&print
for map{sprintf"%06b
",$_}18..63

বাইনারি রূপান্তর করুন, প্রতিলিপি সম্পাদন করুন এবং প্রতি দুটি অক্ষরের পরে একটি নতুন লাইন যুক্ত করুন। /^#/mপরীক্ষা দুই নিদর্শন (20 এবং 21) যে বামদিকের কলামের একটি উত্থাপিত আচমকা হবে না ঘটিয়েছে।

সাধারণ সমাধান, 150 106 103 100 চর

কমান্ড লাইন আরগগুলি পড়ুন xএবং করুন y। নিউলাইনগুলি উল্লেখযোগ্য

y/01/-#/,s/.{$x}/$&
/g,/^#/m*/^.*#/&&print
for map{sprintf"%0*b
",$x*$y,$_-1}1..1<<($y=pop)*($x=pop)

আগের মতো 0..2 xy এর উপরে ইটারেট করুন , প্রতিটি ইনটিকে বাইনারিতে রূপান্তর করা, প্রতিস্থাপন করা -এবং এর #জন্য 0এবং এর জন্য এবং 1প্রতিটি $xঅক্ষরের পরে একটি নতুন লাইন সন্নিবেশ করা ।

/^#/mবামদিকের কলামে উত্থিত বাম্প রয়েছে এবং এটি /^.*#/পরীক্ষা করে যে শীর্ষ সারিতে একটি উত্থিত বাম্প রয়েছে tests উভয় পরীক্ষায় উত্তীর্ণ নিদর্শনগুলিই মুদ্রিত হয়।


এই অ্যাকাউন্টটি কীভাবে অবৈধ সংমিশ্রণের জন্য?
স্কিলেভার

কারণ লুপ বাদ 1..17, 20, এবং 21 জন্য নিদর্শন
ভিড়

2

পাইথন, 120 118 113 95 118

for j in range(256):
    if j/4&48and j/4&42:print''.join('_#'[int(c)]for c in bin(j/4)[2:].rjust(6,'0'))[j%4*2:j%4*2+2]

সম্পাদনা করুন: উইনস্টন ইওয়ার্টের পরামর্শ ব্যবহার করেছেন এবং এক্স বাই ওয়াইড গ্রিড দ্রবণটি যুক্ত করেছেন

সম্পাদনা: স্বতন্ত্রতা সম্পর্কে আমি শেষ সীমাবদ্ধতাটি কোনওরকম মিস করেছি। এই স্ক্রিপ্টটি কেবল 45 নয়, সমস্ত সম্ভাব্য ক্রম তৈরি করে।

সম্পাদনা: 118 এ ব্যাক আপ করুন কিন্তু এখন সঠিক


প্রতিস্থাপন ['#','-']সঙ্গে'#-'
উইনস্টন Ewert

2

জে, 35 33 অক্ষর

3 2$"1'-#'{~(2 A.i.6){"1#:20+i.44

ইলমারি করোনেন তাদের গল্ফস্ক্রিপ্ট সমাধানে যে পদ্ধতিটি নিয়ে এসেছিলেন তা ব্যবহার করে। তবে, যেহেতু জ ক্রিয়াপদ #:(অ্যান্টিব্যাস) বিটগুলি সংরক্ষণ করে (বা, ভাল, জেনেরিক ক্ষেত্রে অঙ্কগুলি) তাই আমাদের ডানটির পরিবর্তে বাম থেকে সূচীকরণ করতে হবে (অর্থাত্ সূচক 0 বামতম, সর্বোচ্চ বিট)।

সমাধানটি বরং সোজা: 20+i.44সংখ্যার একটি তালিকা দেয় 20..63, সমেত। #:এই তালিকার প্রতিটি উপাদানের অ্যান্টিব্যাস -2 নেয় এবং এইভাবে এই পরিসরের প্রতিটি সংখ্যার জন্য বিটপ্যাটার্নগুলির একটি তালিকা তৈরি করে। {বিটগুলি সঠিক প্যাটার্নে নির্বাচন করে (মূলত পুনঃব্যবস্থা করা) এবং তারপরে {আউটপুট প্রস্তুত করার জন্য স্ট্রিং '- #' এর সূচক হিসাবে অঙ্কগুলি ব্যবহার করার জন্য আবার ব্যবহার করা হয়। শেষ পর্যন্ত, আমরা প্রতিটি প্রবেশকে $(আকার) দিয়ে 2-বাই -3 আয়তক্ষেত্রের ব্যবস্থা করি ।


3 2$"1'-#'{~(2 A.i.6){"1#:20+i.44      N.B. use A. (anagram) to generate the right permutation

3 2$"1'-#'{~0 1 2 4 3 5{"1#:20+i.44


কেউ কি জানেন যে কীভাবে (0 2 3 ,. 1 4 5) { #: 44কোনও একক সংখ্যার চেয়ে সংখ্যার তালিকার সাথে কাজ করতে টুইট করা যেতে পারে? সম্ভবত আরও কিছু অক্ষর শেভ করতে হবে।
ফায়ারফ্লাই

1

পাইথন - 121 112

ফাঁকা অন্তর্ভুক্ত করা হয় না

from itertools import*
print'\n'.join('%s%s\n'*3%b for(b,n)in zip(product(*['_#']*6),range(64))if n&48and n&42)

আপনি যে পণ্য ছাঁটা করতে দিয়ে '_#',repeat=6->*['_#']*6
boothby

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