একটি পেন্টোমিনো আয়তক্ষেত্র মুদ্রণ করুন


16

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা কোনও ইনপুট নেয় না তবে 12 টি স্বতন্ত্র পেন্টোমিনোয়াস দিয়ে তৈরি একটি আয়তক্ষেত্রের ধ্রুবক পাঠ্য চিত্র চিত্রটি প্রিন্ট করে বা প্রদান করে :

12 পেন্টোমিনোস

আয়তক্ষেত্র কোনো মাত্রা থাকতে পারে এবং কোনো সজ্জাতে, কিন্তু সব 12 pentominoes ঠিক একবার ব্যবহার করা উচিত নয়, তাই এটি এলাকা 60 প্রতিটিতে বিভিন্ন pentomino একটি ভিন্ন গঠিত হতে হবে থাকবে মুদ্রণযোগ্য হওয়া ASCII অক্ষর (আপনি ব্যবহার করতে প্রয়োজন হবে না উপরের চিঠিগুলি)।

উদাহরণস্বরূপ, যদি আপনি এই 20 × 3 পেন্টোমিনো আয়তক্ষেত্র সমাধান সমাধান করে থাকেন:

3x20 সমাধান

আপনার প্রোগ্রামের আউটপুটটি দেখতে এরকম কিছু দেখাচ্ছে:

00.@@@ccccF111//=---
0...@@c))FFF1//8===-
00.ttttt)))F1/8888=-

বিকল্পভাবে, আপনি এই 6 × 10 সমাধানটি গল্ফ করা আরও সহজ খুঁজে পেতে পারেন:

000111
203331
203431
22 444
2   46
57 666
57769!
58779!
58899!
5889!!

যে কোনও আয়তক্ষেত্র সমাধান করবে, আপনার প্রোগ্রামের কেবল একটি মুদ্রণ করা দরকার। (আউটপুটটিতে একটি পিছনের নতুন লাইন ঠিক আছে))

এই দুর্দান্ত ওয়েবসাইটটিতে বিভিন্ন আয়তক্ষেত্রের মাত্রার জন্য প্রচুর সমাধান রয়েছে এবং আপনার সমাধানটি যতটা সম্ভব সংক্ষিপ্ত তা নিশ্চিত করার জন্য এগুলি সম্ভবত ব্রাউজ করা উপযুক্ত। এটি কোড-গল্ফ, বাইট জেতে সংক্ষিপ্ত উত্তর।


15
বোনাস যদি এটি পিটে "কুইন" হয়।
mbomb007

@ mbomb007 এটি কেবল 12 টি ব্লকের সাথে খেলতে পারা অনেকটা অসম্ভব: পি
স্প 3000

আমি মনে করি না যে সীমান্তে ফাঁকা স্থান দেওয়া উচিত। তবে যেহেতু সেগুলি রয়েছে তাই আমি কি স্থানের স্থানগুলি বাদ দিতে পারি? আমি যদি শেষে ফাঁকা স্থানের বাইরে একটি উল্লম্ব 5x12 সমাধান মুদ্রণ করি তবে আমি কী বোনাস পাব?
জন ডিভোরাক

@ স্প3000 পুরোপুরি পেন্টোমিনো আয়তক্ষেত্র সমাধান দ্বারা রচিত একটি পিট প্রোগ্রাম সম্পর্কে কীভাবে?
জন ডিভোরাক

@ জনডভোরাক আপনি পেছনের স্থান থাকলে তা বাদ দিতে পারবেন না। এগুলি কেবল প্রিন্টযোগ্য এএসসিআইআইয়ের মতো অক্ষর।
ক্যালভিনের শখ

উত্তর:


1

পাইথ, 37 বাইট

jc4.HC"&f3ªªwril3:[·)ÌDU[r)ÌDA»

প্রদর্শন

খুব সোজা পদ্ধতি ব্যবহার করুন: হেক্স বাইটগুলি সংখ্যা হিসাবে ব্যবহার করুন। একটি হেক্স সংখ্যায় রূপান্তর করুন, ভিত্তিতে 256 এনকোড করুন। এটি উপরের যাদু স্ট্রিং দেয়। ডিকোড করতে পাইথের বেস 256 ডিকোডার ফাংশনটি ব্যবহার করুন, হেক্সে রূপান্তর করুন, 4 টি অংশে বিভক্ত করুন এবং নিউলাইনগুলিতে যোগ দিন।


5

সিজেএম (44 বাইট)

এক্সএক্সডি ফর্ম্যাটে দেওয়া হয়েছে কারণ এতে নিয়ন্ত্রণের অক্ষর রয়েছে (একটি কাঁচা ট্যাব সহ যা মার্কডাউন দিয়ে সত্যিই খারাপভাবে অভিনয় করে ):

0000000: 2202 7e0d 8ef3 570d e085 e168 cf27 092c
0000010: a235 0c22 3235 3662 3562 332f 5f2c 2c2e
0000020: 7b32 2f27 412b 662b 7d7a 4e2a 

যা লাইন বরাবর কিছু decod

"MAGIC STRING"256b5b3/_,,.{2/'A+f+}zN*

কিছুটা অনাবলিত অনলাইন ডেমো যা নিয়ন্ত্রণের অক্ষর ধারণ করে না এবং তাই ব্রাউজারের ইউআরআই ডিকোডিংয়ের লাইব্রেরি ফাংশনগুলির সাথে দুর্দান্ত খেলে।

মূল নীতিটি হ'ল যেহেতু কোনও টুকরো 5 টিরও বেশি সারি বিস্তৃত নয় আমরা সারি সংখ্যার লিনিয়ার ফাংশন থেকে একটি অফসেটকে সংক্ষিপ্তভাবে এনকোড করতে পারি (বেস 5 তে, যদিও আমি নির্ধারণ করার চেষ্টা করি নি যে এটি সর্বদা ক্ষেত্রে থাকবে কিনা) )।


5

বাশ + সাধারণ লিনাক্স ইউজ, 50

xxd -s20 -p -c2 $0
#<30 bytes of binary data>

এনকোডড বেস 64 থেকে এটি পুনরায় তৈরি করতে:

base64 -d <<< eHhkIC1zMjAgLXAgLWMyICQwCiMiImaSaZlmkDAAMwSjRKNEqoGogYhRVVF7UXu7d3s= > pent.sh

যেহেতু 12 টি পেন্টোমিনোস রয়েছে তাই তাদের রঙগুলি সহজেই হেক্স নাইববেলে এনকোড করা থাকে।

আউটপুট:

$ ./pent.sh
2222
6692
6999
6690
3000
3304
a344
a344
aa81
a881
8851
5551
7b51
7bbb
777b
$ 

4

জে, 49 বাইট

u:64++/\|:3#.inv 1377859090 1567813024 1337683230

আপনি অক্ষরটি এমনভাবে চয়ন করতে পারেন যে উল্লম্ব সংলগ্ন বর্ণগুলির মধ্যে সর্বাধিক বর্ধন ২ হয় We এর পরে আমরা চলমান অঙ্কগুলি তৈরি করি এবং চিঠিগুলির এএসসিআইআই কোড পেতে একটি অফসেট যুক্ত করি।

অবশ্যই গল্ফযোগ্য। (আমি এখনও বর্ধিত নির্ভুলতা বেস 36 সংখ্যাগুলি ইনপুট দেওয়ার কোনও উপায় খুঁজে পাইনি তবে সাধারণ বেস 36 এ 3 বাইট একাই সঞ্চয় করতে হবে))

আউটপুট:

AAA
ABA
BBB
DBC
DCC
DCC
DEE
DFE
FFE
FGE
FGG
GGH
HHH
IIH
JII
JJI
JKK
JKL
KKL
LLL

এটি এখানে অনলাইনে চেষ্টা করুন।


খুব সুন্দর. বেস -২66 এনকোডিংয়ের সাথে এই পার্থক্যটি প্রয়োগ করে সিজেমে এনকোডিং 33 বাইট দেয় (বি 256 ছাড়াই 48 বাইট সংস্করণ )।
পিটার টেলর

এটা সত্যিই দারুন! এটি 4x15 এর সাথেও কাজ করবে, যা আপনি চারটি সংখ্যা বাইটে প্যাকিংয়ের জন্য ভাল কাজ করতে পারেন, যদি আপনি দৈর্ঘ্যের পথের চেয়ে ডেটা প্রস্থের রাস্তা সংরক্ষণ করেন। আপনার এমন লেআউট দরকার যা ইউ পেন্টোমিনো সঠিক উপায়ে মুখ করে। প্রশ্নের লিঙ্কে প্রচুর আছে।
স্তর নদী সেন্ট

@ স্টিভেরিলিল আপনার এটির জন্য একটি প্রারম্ভিক অফসেটের প্রয়োজন হবে কারণ প্রথম লাইনে 4 টিরও বেশি টুকরো থাকবে, সুতরাং আপনি সেগুলি বেস 4 এ কোড করতে পারবেন না। সঙ্গে এই অতিরিক্ত অফসেট (যেমন 3#i.5যা 0 0 0 1 1 1 ... 4 4 4) এটি কাজ করতে পারে কিন্তু সম্ভবত খাটো হবে না (অন্তত উপায় আমি চেষ্টা)।
এলোমেলো


1

চুনি

Rev 3, 55bytes

i=1
'S, OJ1*$HCH(#%0'.bytes{|e|puts "%x"%i+=e*130&9011}

র্যান্ডম্রা ধারণা সম্পর্কে আরও বিকাশ হিসাবে, নীচে আউটপুট এবং পার্থক্য সারণী বিবেচনা করুন। পার্থক্য সারণীটি আগের মতো সংকুচিত করা যেতে পারে এবং 65 = বাইনারি 1000001 দ্বারা গুণ করে এবং একটি মাস্ক 11001100110011 প্রয়োগ করে প্রসারিত করা যায় However তবে, রুবি 8 বিট অক্ষর দিয়ে ভবিষ্যদ্বাণীপূর্ণভাবে কাজ করে না (এটি ইউনিকোড হিসাবে তাদের ব্যাখ্যা করার প্রবণতা রয়েছে))

আশ্চর্যজনকভাবে, শেষ কলামটি সম্পূর্ণ সমান। এর কারণে, সংকোচনে আমরা ডেটাতে একটি রাইটশিফ্ট সম্পাদন করতে পারি। এটি নিশ্চিত করে যে সমস্ত কোড 7 বিট ASCII। প্রসারণে আমরা কেবল 65 এর পরিবর্তে 65 * 2 = 130 দিয়ে গুণ করি।

প্রথম কলামটি সম্পূর্ণ সমান। সুতরাং কোনও নিয়ন্ত্রণের অক্ষর এড়াতে আমরা যেখানে প্রয়োজন সেখানে প্রতিটি উপাদানকে (প্রতিটি বাইটে 32 টি) যুক্ত করতে পারি। অযাচিত 1 টি 11001100110011 এর পরিবর্তে 10001100110011 = 9011 মাস্ক ব্যবহার করে মুছে ফেলা হয়েছে।

Solution 59 of document linked in question

Start0001

Out  Diff
2223 2222
2433 0210
2433 0000
4445 2012
6555 2110
6577 0022
6687 0110
6887 0200
8897 2010
aa99 2202
caa9 2010
cab9 0010
cbbb 0102
cdbd 0202
cddd 0020

যদিও আমি টেবিলের জন্য 15 বাইট ব্যবহার করি, তবে আমি কেবলমাত্র প্রতিটি বাইটের 6 টি বিট ব্যবহার করি, এটি মোট 90 বিট। প্রকৃতপক্ষে প্রতিটি বাইটের জন্য কেবলমাত্র 36 টি মান রয়েছে, যা মোট 2.21E23 সম্ভাবনা। এটি rop 77 বিট এন্ট্রপিতে মাপসই হবে।

রেভডম্রার ইনক্রিমেন্টাল অ্যাপ্রোচ ব্যবহার করে রেভ 2, 58 বাইট

i=0
'UPEIP@bPHPBETTEPRADT'.bytes{|e|puts "%x"%i+=e*65&819}

অবশেষে, নিষ্পাপ সমাধানের চেয়ে খাটো কিছু। রেভোমরার বর্ধিত পদ্ধতি, রেভ 1 এর বাইটপ্যাকিং পদ্ধতিটি।

1 রেভ 1, 72 বাইট, রেভ 0 এর গল্ফ সংস্করণ

গল্ফিংয়ের কারণে কোডটির পুনর্বিন্যাসকে সামঞ্জস্য করার জন্য বেসলাইনটিতে কিছু পরিবর্তন আনা হয়েছিল, তবে তবুও নিষ্পাপ সমাধানের চেয়ে বেশি সময় ধরে এসেছিল।

i=0
'UPUIYD&!)$&V*).);c+*'.bytes{|e|i+=1;puts "%x"%(i/2*273+(e*65&819))}

অফসেটগুলি ম্যাজিক স্ট্রিংয়ের প্রতিটি চরিত্রের সাথে বেস 4 এ বিন্যাসে এনকোড করা হয়েছে BAC, যেমন 1 এর ডানহ্যান্ড প্রতীককে প্রতিনিধিত্ব করে, 16 এর মধ্য প্রতীককে উপস্থাপন করে এবং বামহস্ত প্রতীকটি 4 এর অবস্থানে জুড়ে রয়েছে। তাদের নিষ্কাশনের জন্য, এসকিআই কোডটি 65 (বাইনারি 1000001) দিয়ে গুণতে হয় BACBAC, তবে এটি দেওয়াতে 819 (বাইনারি 1100110011) দিয়ে বর্ধিত হয় .A.B.C

কিছু এসকি কোডের নিয়ন্ত্রণ সারণী এড়ানোর জন্য 7th ম বিট সেট থাকে, অর্থাত তারা প্রয়োজনীয় মানের চেয়ে higher৪ বেশি। কারণ এই বিটটি মাস্ক 819 দ্বারা মুছে ফেলা হয়েছে, এটি অপরিবর্তনীয়, ব্যতীত যখন মান C3 হয়, যা ক্যারিওভারের কারণ হয়। এটি কেবলমাত্র এক জায়গায় সংশোধন করতে হবে (পরিবর্তে gআমাদের ব্যবহার করতে হবে c))

0 রেভ, অরগল্ফড সংস্করণ

a= %w{000 010 000 201 100 100 011 021 110 120 011 112 111 221 211 221 122 123 112 222}
i=2
a.each{|e|puts "%x"%(i/2*273+e.to_i(16));i+=1} 

আউটপুট

111
121
222
423
433
433
455
465
665
675
677
778
888
998
a99
aa9
abb
abc
bbc
ccc

ব্যাখ্যা

নিম্নলিখিত সমাধান থেকে, আমি বেসলাইনটি বিয়োগ করি, অফসেটটি দিয়ে যা আমি ডেটা হিসাবে সঞ্চয় করি। বেসলাইনটি কোডের একটি হেক্সাডেসিমাল হিসাবে পুনঃজেনার করে i/2*273(273 দশমিক = 111 হেক্স।)

solution   baseline   offset
AAA        AAA        000
ABA        AAA        010
BBB        BBB        000
DBC        BBB        201
DCC        CCC        100
DCC        CCC        100
DEE        DDD        011
DFE        DDD        021
FFE        EEE        110
FGE        EEE        120
FGG        FFF        011
GGH        FFF        112
HHH        GGG        111
IIH        GGG        221
JII        HHH        211
JJI        HHH        221
JKK        III        122
JKL        III        123
KKL        JJJ        112
LLL        JJJ        222

এটি দেখতে মূলত আমার মতো একই পদ্ধতির মতো দেখায় তবে আপনি 4 এর একক ব-দ্বীপটি এড়াতে সক্ষম হয়েছেন যা আমাকে বেস 5 এ এনকোড করতে বাধ্য করেছিল L মনে হচ্ছে আমি টুকরোগুলির জন্য ভুল লেবেলিং বেছে নিয়েছি।
পিটার টেলর

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

যদি আমি আগে পরিষ্কার ছিলাম না, আমার উদ্দেশ্য ছিল আমার চেয়ে আরও ভাল কাজ করার জন্য আপনাকে অভিনন্দন জানানো, আপনাকে অনুলিপি করার অভিযোগ না করা। এবং আমি 2.5 এর বৃদ্ধির হার ব্যবহার করার চেষ্টা করব না কারণ আমি মনে করি না এটি র্যান্ডম্রার পার্থক্য এনকোডিং পদ্ধতিকে পরাজিত করবে।
পিটার টেলর

@ পিটার টেলর ধন্যবাদ, আমি পেয়েছি যে আপনি আমাকে অভিনন্দন জানাচ্ছেন। অন্যদিকে, আপনি মূলত একই ধারণাটি নিয়ে প্রথমে এসেছিলেন এবং এটিকে আরও খাটো করে তুলেছেন, তাই আপনাকেও অভিনন্দন। র্যান্ডমরার পার্থক্য পদ্ধতির সাথে অবশেষে আমি নিষ্পাপ সমাধানের চেয়ে কম পেতে পারি। এটি 4x15 এও ভাল কাজ করবে (সঠিক পেন্টোমিনো লেআউট দেওয়া হয়েছে)। এটি আমি সি বা অন্য কোনও ভাষায় এটি করেছি যা ৮ বিট স্ট্রিংয়ের সাথে ভালভাবে কাজ করে। রুবি যেমন ইউনিকোড সমর্থন করে, এটি 8 বিট স্ট্রিংকে ইউনিকোড হিসাবে ব্যাখ্যা করার চেষ্টা করে এবং কিছু বিরক্তিকর ত্রুটি বার্তা দিতে পারে।
স্তর নদী সেন্ট

0

ফু, 66 বাইট

"00.@@@ccccF111//=---\n0...@@c))FFF1//8===-\n00.ttttt)))F1/8888=-"

এটি উপরের মাইক্রোস্ক্রিপ্ট দ্বিতীয় সমাধানের সাথে চরিত্রের জন্য চরিত্রের অনুরূপ ... আমি এই ভাষাগুলি সম্পর্কিত বলে ধরে নিই?
ড্যারেল হফম্যান

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