দশমিক থেকে ঘন প্যাকড দশমিক (ডিপিডি)


26

নান্দগেমের অনুরাগীদের জন্য: দয়া করে যুক্তি গেটগুলিতেও দশমিকের জন্য ডিপিডি ব্যবহার করে দেখুন!

পটভূমি

ঘনত্বযুক্ত প্যাকযুক্ত দশমিক (ডিপিডি) হ'ল দক্ষভাবে দশমিক অঙ্কগুলিকে বাইনারিতে সঞ্চয় করার একটি উপায়। এটি 10 ​​বিটগুলিতে তিনটি দশমিক অঙ্ক (000 থেকে 999) সংরক্ষণ করে, যা নিষ্পাপ বিসিডির চেয়ে বেশি দক্ষ (যা 4 বিটের মধ্যে একটি অঙ্ক রাখে)।

স্বরলিপি

  • ছোট হাতের অক্ষর aথেকে iবিট যে দশমিক উপস্থাপনা অনুলিপি করা হয়।
  • 0এবং 1ইনপুট বা আউটপুট বিট নিদর্শনগুলির সঠিক বিট।
  • x বিট রূপান্তর মধ্যে উপেক্ষা করা হয়।

রূপান্তর টেবিল

নীচে ডিপিডি 10 বিট থেকে তিন দশমিক সংখ্যায় রূপান্তর টেবিল রয়েছে। প্রতিটি দশমিক সংখ্যা 4-বিট বাইনারি (বিসিডি) হিসাবে উপস্থাপিত হয়। উভয় পক্ষের সবচেয়ে গুরুত্বপূর্ণ অঙ্ক থেকে কমপক্ষে বামে ডানদিকে লেখা হয়।

Bits                 =>  Decimal         (Digit range)
a b c d e f 0 g h i  =>  0abc 0def 0ghi  (0-7) (0-7) (0-7)
a b c d e f 1 0 0 i  =>  0abc 0def 100i  (0–7) (0–7) (8–9)
a b c g h f 1 0 1 i  =>  0abc 100f 0ghi  (0–7) (8–9) (0–7)
g h c d e f 1 1 0 i  =>  100c 0def 0ghi  (8–9) (0–7) (0–7)
g h c 0 0 f 1 1 1 i  =>  100c 100f 0ghi  (8–9) (8–9) (0–7)
d e c 0 1 f 1 1 1 i  =>  100c 0def 100i  (8–9) (0–7) (8–9)
a b c 1 0 f 1 1 1 i  =>  0abc 100f 100i  (0–7) (8–9) (8–9)
x x c 1 1 f 1 1 1 i  =>  100c 100f 100i  (8–9) (8–9) (8–9)

কার্য

দশ বিটের 10 বিটকে দশমিকের তিন অঙ্কে রূপান্তর করুন।

পরীক্ষার মামলা

DPD           Decimal
0000000101    005
0001100011    063
0001111001    079
0000011010    090
0001011110    098
1010111010    592
0011001101    941
1100111111    879
1110001110    986
0011111111    999
1111111111    999  * Output is same regardless of the `x` bits

ইনপুট

ডিফল্ট ইনপুট ফর্ম্যাটটি 10 ​​বিটের একটি তালিকা। বিটগুলি উপরের সঠিক ক্রমটি অনুসরণ করা উচিত, বা এর বিপরীত। পরিবর্তে আপনি একটি সমতুল্য স্ট্রিং বা পূর্ণসংখ্যার উপস্থাপনা ব্যবহার করতে পারেন। আমার অন্যান্য চ্যালেঞ্জগুলির বিপরীতে, নেস্টেড স্ট্রাকচারগুলি পুনরায় অর্ডার করার বা ব্যবহারের অনুমতি নেই

ইনপুটটির জন্য [1, 1, 0, 0, 0, 1, 0, 1, 0, 0], নিম্নলিখিত ফর্ম্যাটগুলি অনুমোদিত:

  • বিটের তালিকা: [1, 1, 0, 0, 0, 1, 0, 1, 0, 0]
  • স্ট্রিং: "1100010100"
  • বাইনারি পূর্ণসংখ্যা: 788বা0b1100010100
  • দশমিক পূর্ণসংখ্যা: 1100010100
  • বিপরীত: [0, 0, 1, 0, 1, 0, 0, 0, 1, 1]এবং উপরের অন্য কোনও ফর্ম্যাটে বিপরীত

নিম্নলিখিত ফর্ম্যাটগুলি অনুমোদিত নয়:

  • বিটগুলি নির্বিচারে পুনঃক্রম [0, 0, 0, 0, 0, 1, 1, 1, 0, 1]
  • নেস্টেড কাঠামো: [[1, 1, 0], [0, 0, 1], [0, 1, 0, 0]]বা[0b110, 0b001, 0b0100]

আউটপুট

ডিফল্ট আউটপুট ফর্ম্যাটটি 3 দশমিক অঙ্কের তালিকা। প্রতিটি অঙ্ককে 0 থেকে 9 হিসাবে উপস্থাপন করা উচিত, হয় পূর্ণসংখ্যা বা একটি অক্ষর। ইনপুট হিসাবে, আপনি স্ট্রিং বা পূর্ণসংখ্যার উপস্থাপনা চয়ন করতে পারেন। আপনি যদি পূর্ণসংখ্যার উপস্থাপনা চয়ন করেন তবে নেতৃস্থানীয় শূন্যগুলি বাদ দেওয়া যেতে পারে।

স্কোরিং এবং বিজয়ী মানদণ্ড

স্ট্যান্ডার্ড বিধি প্রযোজ্য। সংক্ষিপ্ততম প্রোগ্রাম বা প্রতিটি ভাষার জয়ের জন্য বাইটে ফাংশন।

উত্তর:


12

জাভাস্ক্রিপ্ট (ES6), 112 বাইট

এই সংক্ষিপ্ত সংস্করণটির সমস্ত ক্রেডিট @ নওহ্নহোফের কাছে যায়।

পূর্ণসংখ্যা হিসাবে ইনপুট নেয়। তিন দশমিক অঙ্কের একটি অ্যারে প্রদান করে।

n=>[(x=n>>4,y=x>>3,q=n/2&55,p=q%8)>5&&q-39?8|y&1:y,(p&5^5?x&6:q-23?8:y&6)|x&1,(p<5?p*2:p<6?x&6:p%q<7?y&6:8)|n&1]

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


জাভাস্ক্রিপ্ট (ES6), 118 117 বাইট

পূর্ণসংখ্যা হিসাবে ইনপুট নেয়। তিন দশমিক অঙ্কের একটি অ্যারে প্রদান করে।

n=>[(x=n>>4&7,y=n>>7,p=n/2&7)>5&&p<7|x/2^2?8|y&1:y,(p<7?p-5?x:8:x/2^1?8:y&6)|x&1,(p<5?p*2:p<6?x&6:p<7|x<2?y&6:8)|n&1]

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

কিভাবে?

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

ইনপুট পূর্ণসংখ্যা , আমরা গণনা:n

x=n16mod8y=n128p=n2mod8

উদাহরণ: প্রথম সংখ্যা (শত)

x     | 0                | 1                | 2                | 3               
n & 1 | 0101010101010101 | 0101010101010101 | 0101010101010101 | 0101010101010101
p     | 0011223344556677 | 0011223344556677 | 0011223344556677 | 0011223344556677
------+------------------+------------------+------------------+-----------------
y = 0 | 0000000000008888 | 0000000000008888 | 0000000000008888 | 0000000000008888
y = 1 | 1111111111119999 | 1111111111119999 | 1111111111119999 | 1111111111119999
y = 2 | 2222222222228888 | 2222222222228888 | 2222222222228888 | 2222222222228888
y = 3 | 3333333333339999 | 3333333333339999 | 3333333333339999 | 3333333333339999
y = 4 | 4444444444448888 | 4444444444448888 | 4444444444448888 | 4444444444448888
y = 5 | 5555555555559999 | 5555555555559999 | 5555555555559999 | 5555555555559999
y = 6 | 6666666666668888 | 6666666666668888 | 6666666666668888 | 6666666666668888
y = 7 | 7777777777779999 | 7777777777779999 | 7777777777779999 | 7777777777779999

x     | 4                | 5                | 6                | 7               
n & 1 | 0101010101010101 | 0101010101010101 | 0101010101010101 | 0101010101010101
p     | 0011223344556677 | 0011223344556677 | 0011223344556677 | 0011223344556677
------+------------------+------------------+------------------+-----------------
y = 0 | 0000000000008800 | 0000000000008800 | 0000000000008888 | 0000000000008888
y = 1 | 1111111111119911 | 1111111111119911 | 1111111111119999 | 1111111111119999
y = 2 | 2222222222228822 | 2222222222228822 | 2222222222228888 | 2222222222228888
y = 3 | 3333333333339933 | 3333333333339933 | 3333333333339999 | 3333333333339999
y = 4 | 4444444444448844 | 4444444444448844 | 4444444444448888 | 4444444444448888
y = 5 | 5555555555559955 | 5555555555559955 | 5555555555559999 | 5555555555559999
y = 6 | 6666666666668866 | 6666666666668866 | 6666666666668888 | 6666666666668888
y = 7 | 7777777777779977 | 7777777777779977 | 7777777777779999 | 7777777777779999

অ্যালগরিদম:

  • যদি , আমরা আছেp<6d=y
  • যদি আমাদেরp=6d=8+(ymod2)
  • যদি আমাদেরp=7 AND (x<4 OR x>5)d=8+(ymod2)
  • যদি আমাদেরp=7 AND (x=4 OR x=5)d=y

জেএস কোড হিসাবে:

p > 5 && p < 7 | x / 2 ^ 2 ? 8 | y & 1 : y

1
আপনার পদ্ধতির সাথে আমার সি উত্তরের অনুরূপ যা অন্য অস্থায়ী পরিবর্তনশীল ব্যবহার করে। আমার প্রাথমিক সি সলিউশনটি আরও কিছুটা গল্ফ করার পরে, জাভাস্ক্রিপ্টের একটি বন্দর 112 বাইটে ফলাফল দেয় ।
nwellnhof

10

পাইথন 3 , 229 ... 97 96 বাইট

lambda a:[[a&6,a>>4&6,a>>7&6,8][b"  eW7B]Oys"[~a&8or~a&6or~6|a>>4]%x&3]|a>>x%9&1for x in[7,4,9]]

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

@Xnor দ্বারা -4 বাইট

@ নয়েলহোফ দ্বারা -6 বাইটস

বিন্যাসকৃত:

h = lambda a:[
    [a&6, a>>4&6, a>>7&6, 8][              List to take high bits from
        b"  eW7B]Oys"[                     10 char string; where to get high bits for
                                             indicator values 1-8. 0th,1st chars not used.
            ~a&8 or ~a&6 or ~6|a>>4]       Compute indicator (by @nwellnhof)
        %x&3]                              High bits of each digit
    | a >> x%9 & 1                         bitwise OR with low bit of each digit
    for x in [7,4,9]]

ব্যাখ্যা

যেহেতু আমি মূলত এটি জেলিটিতে বাস্তবায়ন করতে চেয়েছিলাম, আমি বেশিরভাগ উত্তর থেকে এখানে ভিন্ন পদ্ধতির গ্রহণ করি, যা সহজ এবং সম্ভবত একটি গল্ফ ভাষাতে উপযুক্ত। যদিও গল্ফযুক্ত ফাংশনটি একটি পূর্ণসংখ্যা নেয় তবে কিছুটা তালিকা হিসাবে ইনপুটটিকে দেওয়া হোক [a0,a1,...,a9]। তারপরে আমরা ইনপুট থেকে তিনটি মান অর্জন করতে পারি

  • নিম্ন বিট [a2,a5,a9]: এগুলি সর্বদা [d0,d1,d2]যথাক্রমে নিম্ন বিট হবে ।
  • উচ্চ বিট [2*a0a1,2*a3a4,2*a7a8,8]: প্রতিটি অঙ্কের উচ্চ বিটগুলি এর মধ্যে একটি হবে।
  • সূচক বিট, [a3,a4,a5,a7,a8]প্রতিটি অঙ্কের উচ্চ বিটগুলি কীভাবে পাবেন তা নির্ধারণ করে। আমরা সূচকটি নিম্নরূপে (1 এবং 8 এর মধ্যে) গণনা করি:
    • যদি a5 == 0 হয় তবে সূচকটি 8 হয় (মূলত 0, তবে 8 এর পরিবর্তে একটি বাইট সংরক্ষণ করে)
    • যদি এ 3 ন্যান্ড এ 4 হয় তবে সূচকটি 6 - 2 * এ 3 এ 4 হয়
    • অন্যথায় সূচকটি 2 * a7a8 + 1 (আসলে একটি নেতিবাচক সংখ্যা হিসাবে গণনা করা হয়)।

তারপরে নবম সংখ্যাটি high_bits[arr[indicator][n]] | low_bits[n]নীচের টেবিলের মতো সুন্দরভাবে গণনা করা যায়, যা একটি স্ট্রিংয়ে সংকুচিত হয়।

arr = [
    [0,1,2],
    [3,1,2],
    [1,3,2],
    [2,1,3],
    [2,3,3],
    [3,2,3],
    [3,3,2],
    [3,3,3]
]

1
এর b"..."সাথে রূপান্তরকরণের জন্য আপনি একটি বায়স্ট্রিং ব্যবহার করতে পারেন ord
xnor

@ ননহ্নহোফ হা, আমি ঠিক একই জিনিসটি পেয়েছি! যাইহোক আপনাকে জমা দেবে।
lirtosiast

b"$>6;-/'?"[a&8and(~a&6or a>>4&6|1)]আরও চারটি বাইট সাশ্রয় করে।
nwellnhof

@ ননহ্নহফ আমার মনে হয় একটি মডুলো চেইন এখানে যাওয়ার উপায়, তবে তা না হলে অবশ্যই আপনার কাজ হবে।
lirtosiast

9

জাভাস্ক্রিপ্ট (নোড.জেএস) , 126 119 117 112 111 বাইট

(a,b,c,d,e,f,g,h,i,j)=>[(g&h&i+(b+=a*4+b,e+=d*4+e)!=5?8:b)+c,(g&i?h+e-3?8:b:e)+f,(g?h<i?e:h>i*e?b:8:h*4+i*2)+j]

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

-5 বাইটস ধন্যবাদ @tsh (এবং নিজের দ্বারা 2) তাই lআমার প্রত্যাশার চেয়ে আরও বেশি প্রচেষ্টা করতে পারে।

@ Tsh এর কৌশল ব্যবহার করে আরও 2 বাইট!

-5 বাইট ধন্যবাদ @ আর্নল্ডকে

-1 বাইট ধন্যবাদ @ নীল

10 বিটের একটি তালিকা হিসাবে ইনপুট (10 টি আর্গুমেন্ট হিসাবে), 3 সংখ্যার একটি তালিকা হিসাবে আউটপুট।


1
(!i|!d|e)-> i+l!=5; (d|e|!h)->h+l!=1
tsh

1
(g?h-i|h&!e?h?b:e:8:h*4+i*2)-> (g?h<i?e:h>i*e?b:8:h*4+i*2)অন্য একটি বাইট সংরক্ষণ করে। (আমি এবার চেক করেছি ...)
নিল

8

সি (জিসিসি) , 138 129 বাইট

f(w){int t=w/2&55,s=t%8,v=w/16,u=v/8;w=((s<6|t==39?u:8|u%2)*10+v%2+(s&5^5?v&6:t-23?8:u&6))*10+w%2+(s<5?s*2:s<6?v&6:s%t<7?u&6:8);}

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

প্রথমে কিছু বিট ভেরিয়েবলগুলিতে বের করে sএবং t, যাতে রূপান্তর সারণির আটটি সারি চিহ্নিত করতে পারে:

1.  s < 4              u v w¹
2.  s = 4              u v 8¹
3.  s = 5              u 8 v
4.  s = 6              8 v u
5.  s = 7, t =  7      8 8 u
6.  s = 7, t = 23      8 u 8
7.  s = 7, t = 39      u 8 8
8.  s = 7, t = 55      8 8 8

¹ Can be computed with s*2

তারপর সেট আপ uএবং vবিভাগের (ডান বদল আনতে), যাতে সঙ্গে u, vএবং ইনপুট wঅবস্থানের 0-2 কম তিন স্কুবা BCD বিট ধারণ করে। বাকি বিট উপর নির্ভর করে অদলবদল করা হয় sএবং t। দুটি উল্লেখযোগ্য কৌশল:

s&5^5  // Rows 1, 2 and 4.
s%t<7  // Rows 1-5.

শিয়েরো আসাকোটোর জাভাস্ক্রিপ্ট সমাধানের একটি বন্দরটি কেবল 124 বাইট :

f(a,b,c,d,e,f,g,h,i,j){a=(((g&h&i+(b+=a*4+b,e+=d*4+e)!=5?8:b)+c)*10+(g&i?h+e-3?8:b:e)+f)*10+(g?h-i|h&!e?h?b:e:8:h*4+i*2)+j;}

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


আমি মনে করি এটি সংক্ষিপ্ত করা যেতে পারে:f(b){int a=b/2%8,e=b&110,c=b/16,d=c/8;b=10*(10*(d%2|(6>a|78==e?d:8))+c%2+(3<a&a%2?e-46?8:d&6:c&6))+b%2+(4>a?b&6:a-5?a-6&&e-14?8:d&6:c&6)};
এমসিসিসিএস

@ এমসিসিএসএস আপনার কোডও 138 বাইট বলে মনে হচ্ছে।
nwellnhof

5

রুবি , 153 ... 119 117 বাইট

->n{n+=n&896;a,b,c=n&1536,n&96,n&14;"%x"%n+=c<9?0:2036+[b/16-b-1918,r=a>>8,[r+126,a/16-26,a-1978,38][b/32]-a][c/2-5]}

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

কিভাবে এটা কাজ করে:

->n{n+=n&896;

এটিই প্রারম্ভিক বিন্দু: 3 টি বিটকে বামে স্থানান্তর করে বিসিডিতে রূপান্তর করুন, যা বেশিরভাগ নিদর্শনগুলির জন্য কাজ করে।

a,b,c=n&1536,n&96,n&14;

প্রতিটি স্তন্যপানের মাঝারি বিটগুলি পান (এবং তৃতীয় স্তনবৃন্তগুলির একটি অতিরিক্ত বিট, তবে কমপক্ষে উল্লেখযোগ্য বিটকে মাস্ক করুন)।

"%x"%n+=c<9?0

যদি তৃতীয় অঙ্কটি 10 ​​এরও কম হয় (9 এর চেয়ে কম কারণ আমরা কখনই এলএসবির যত্ন নিই না), আমরা সেট করেছি: এটি সরল বিসিডি, আমরা কোনও পরিবর্তন না করেই হেক্সট আউটপুট করতে পারি

:2036+[b/16-b-1918,r=a>>8,[r+126,a/16-26,a-1978,38][b/32]-a][c/2-5]}

অন্যথায় কিছুটা বিস্ফোরণ ঘটিয়ে কিছু কালো যাদু করুন, যতক্ষণ না আমরা আমাদের ফলাফল পেতে পারি।


5

রেটিনা 0.8.2 , 191 181 বাইট

(...)(...)
:$1,$2;
..(.),11(.);111
100$1,100$2;100
(10|(..)(.,)01)(.);111
100$3$2$4;100
(..)(.),(00.);111
100$2,1$3;0$1
(..)((.{5});110|(.);101)
100$3$4;$1
1
01
+`10
011
.0+(1*)
$.1

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। সম্পাদনা করুন: প্রয়োজনীয় যেখানে ব্যতীত 4 বিটের অঙ্কগুলিতে প্যাডিং না করে 10 বাইট সংরক্ষণ করা হয়েছে। ব্যাখ্যা:

(...)(...)
:$1,$2;

পৃথককারীগুলি সন্নিবেশ করান যাতে প্রতিটি অঙ্ক পৃথকভাবে দশমিক রূপান্তর করতে পারে। এটি কার্যকরভাবে রূপান্তর সারণীতে প্রথম দুটি কেস পরিচালনা করে।

..(.),11(.);111
100$1,100$2;100

রূপান্তর সারণীতে শেষ (অষ্টম) কেসটি পরিচালনা করুন।

(10|(..)(.,)01)(.);111
100$3$2$4;100

রূপান্তর সারণীতে ষষ্ঠ এবং সপ্তম মামলা পরিচালনা করুন।

(..)(.),(00.);111
100$2,1$3;0$1

রূপান্তর সারণীতে পঞ্চম মামলা পরিচালনা করুন।

(..)((.{5});110|(.);101)
100$3$4;$1

রূপান্তর সারণীতে তৃতীয় এবং চতুর্থ মামলাগুলি পরিচালনা করুন।

1
01
+`10
011
.0+(1*)
$.1

দশমিক রূপান্তর থেকে বাইনারি সম্পাদন করুন।


5

জেলি , 51 48 40 39 বাইট

&\‘f4;s3ɓạ4ḅ-œ?µ/Ḥ
“MY-€-Y¤©¡‘Dịs3Ḅç+ƭ/

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

অ্যালগরিদম

তালিকা সূচকগুলি বাদ দিয়ে এই বিভাগের সমস্ত পূর্ণসংখ্যার বাইনারিতে লেখা হয়।

ইনপুট দেওয়া হয়েছে , আমরা প্রথমে অ্যারেগুলি তৈরি করি , এবং ।αβγδεζηθικ[ηη,θι,δε][αβ,δε,θι][γ,ζ,κ]

  1. যদি তিনটি আউটপুট ডিজিট কম ( থেকে )।ηη=0000000111
  2. যদি তবে , ঠিক এক আউটপুট ডিজিট উচ্চ ( বা )।ηη=11θι<1110001001
  3. যদি তবে , ঠিক দুটি আউটপুট অঙ্ক বেশি।ηη=θι=11δε<11
  4. যদি , তিনটি আউটপুট অঙ্কই বেশি।ηη=θι=δε=11

যদি আমরা শীর্ষস্থানীয় এর সংখ্যা গণনা করি, তবে সংখ্যক মিলের একটি অ্যারে তৈরি করে, , এবং ফলাফলটিকে তিনটি দৈর্ঘ্যের সাবহারে বিভক্ত করুন, আমরা প্রতিটি ক্ষেত্রে নিম্নলিখিত ফলাফলগুলি পাই।11[ηη,θι,δε]100[αβ,δε,θι]

  1. [[αβ,δε,θι]]
  2. [[100,αβ,δε],[θι]]
  3. [[100,100,αβ],[δε,θι]]=[[100,100,αβ],[δε,11]]
  4. [[100,100,100],[αβ,δε,θι]]=[[100,100,100],[αβ,11,11]]

প্রথম এবং শেষ ক্ষেত্রে, আমাদের কেবল প্রথম ফলকটি জিপ করতে হবে , প্রথম ক্ষেত্রে এবং সর্বশেষে[γ,ζ,κ][αβγ,δεζ,θικ][100γ,100ζ,100κ]

বাকি দুটি ক্ষেত্রে একই আছে, কিন্তু অ্যারে এবং পুনর্বিন্যস্তভাবে করা থাকতে হবে, মূল্যবোধ অনুযায়ী এবং সম্ভবত ।[100,αβ,δε][100,100,αβ][θι]δε

দ্বিতীয় ক্ষেত্রে, are এর ছয়টি অনুক্রম হ'ল are , , , , , এবং ।[100,αβ,δε][100,αβ,δε][100,δε,αβ][αβ,100,δε][αβ,δε,100][δε,100,αβ][δε,αβ,100]

গণনা করে আমরা , , এবং থেকে চার, তিন এবং দু'টি মানচিত্র তৈরি করি ক্রিয়াকলাপ] , এবং ।100θι000110[αβ,δε,100][αβ,100,δε][100,δε,αβ]

Am দিয়ে ফলাফলটি জিপ করার পরে আমরা , , বা ।[γ,ζ,κ][αβγ,δεζ,100κ][αβγ,100ζ,δεκ][100γ,δεζ,αβκ]

তৃতীয় ক্ষেত্রে, এর (ডুপ্লিকেট সহ) আদেশগুলি হ'ল , , , , এবং ।[100,100,αβ][100,100,αβ][100,αβ,100][100,100,αβ][100,αβ,100][αβ,100,100][αβ,100,100]

গণনা করে , আমরা মানচিত্র , , এবং থেকে তিন, চার, এবং পাঁচটি মডুলো ছয়, ক্রমান্বয়ে , এবং ।(100θι)(100δε)=δεθι=δε11000110[100,100,αβ][100,αβ,100][αβ,100,100]

Am দিয়ে ফলাফলটি জিপ করার পরে আমরা , , বা ।[γ,ζ,κ][100γ,100ζ,αβκ][100γ,αβζ,100κ][αβγ,100ζ,100κ]

কোড

“MY-€-Y¤©¡‘Dịs3Ḅç+ƭ/  Main link. Argument: A (array of 10 bits)

“MY-€-Y¤©¡‘           Array literal; yield [77, 89, 45, 12, 45, 89, 3, 6, 0].
           D          Decimal; yield
                      [[7,7], [8,9], [4,5], [1,2], [4,5], [8,9], [3], [6], [0]].
            ị         Retrieve the elements of A at those indices.
                      Indexing is 1-based and modular, so 1 is the first index, while
                      0 is the last.
             s3       Split the results 2D array of bits into chunks of length 3.
               Ḅ      Convert the 9 arrays of bits from binary to integer.
                ç+ƭ/  Reduce the resulting array (length 3) once by the helper link,
                      then by addition.


&\‘f4;s3ɓạ4ḅ-œ?µ/Ḥ    Helper link. Arguments: B, C (arrays of three integers each)

&\                    Cumulatively reduce B by bitwise AND.
  ‘                   Increment the results by 1.
   f4                 Filter; keep only integers equal to 4.
     ;                Concatenate the result with C.
      s3              Split the result into (one or two) chunks of length 3.
        ɓ      µ/     Reduce the array of chunks by the following chain.
         ạ4               Take the absolute difference of the integers in the right
                          chunk and the integer 4.
           ḅ-             Convert the resulting array from base -1 to integer, i.e.,
                          map [x] to n = x and [x, y] to n = y - x.
             œ?           Take the n-th permutation of the left chunk.
                 Ḥ    Unhalve; multiply the resulting integers by 2.


2

পরিষ্কার , 238 ... 189 বাইট

-2 বাইট ধন্যবাদ নীলকে

import StdEnv
$a b c d e f g h i j=100*(c+2*b+4*a)+10*(f+2*e+4*d)+j+2*i+4*h-2*(h*(99*b+198*a-394)+i*(9*e+18*d+h*(e+2*d-4+(b+2*a-4)*(1-10*e-100*d+110*e*d))-35)-4)*g+0^(e+d)*(2*b+4*a-8*i*h*g)

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

ফলাফল গণনা করার জন্য প্রত্যক্ষ সূত্র ব্যবহার করে 10 টি যুক্তি আকারে 10 বিটের একটি 'তালিকা' নেয়।


ইন i*(9*e+19*d+i*...), দ্বিতীয় দ্বিতীয় i*অপ্রয়োজনীয় দেখায়।
নিল

@ নীল আপনি ঠিক বলেছেন, ধন্যবাদ
29urous

1

পার্ল 5, 195 বাইট

sub f{$n=shift;@p=((map{($n>>$_&3)*2}(8,5,1)),8);for(16390,28935,29005,227791,29108,225788,226803,228863){return 2*$n&256|$n&17|$p[$_>>4&3]<<8|$p[$_/4&3]<<4|$p[$_&3]if($_>>12&$n/2)==($_>>6&63);}}

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

আমি জানি এই প্রতিযোগিতার জন্য 195 বাইটগুলি অনেক বেশি, তবে পার্ল কোডটি আরও কীভাবে সংকোচিত করা যায় তা সম্পর্কে আমার কোনও ধারণা ছিল না। পরামর্শ?

কোড ব্যাখ্যা

আরও পঠনযোগ্য সংস্করণে কোডের উদ্দেশ্যটি স্পষ্ট হওয়া উচিত:

sub dpd {
  my $n = shift;
  my $v=2*($n&128)|$n&17;
  my @p=((map{($n>>$_&3)*2}(8,5,1)),8);
  for (16390,28935,29005,227791,29108,225788,226803,228863) {
    return $v |$p[$_>>4&3]<<8|$p[$_>>2&3]<<4|$p[$_&3]
      if(($_>>12&$n/2)==($_>>6&63));
  }
}

ডিপিডি এনকোডিংয়ের নিয়মগুলিতে, প্রতিটি লাইন একটি 18 বিট মানতে এনকোড করা হয়, বিভক্তিকে (6,6, (2,2,2)) বিটে বিভক্ত করা হয়।

  • প্রথম 6 টি বিট ইনপুটটির বিট 1 (= এইচ) থেকে 6 (= ডি) জন্য উপযুক্ত বিট মাস্ক (বিট 4 = এফ নিরর্থক, তবে এটি অন্তর্ভুক্ত করার জন্য এটি মূল্যায়ন কোডকে সহজতর করে)।
  • পরবর্তী 6 টি বিট এই বিট মাস্কের মান বিট b বিট মাস্কের একটি মান যেখানে রয়েছে সেখানে সমস্ত স্থানে মানগুলি পরীক্ষা করা হয়।
  • নিম্নলিখিত 3 * 2 বিটগুলিতে @p3-বিট সিকোয়েন্সগুলির জন্য অ্যারের সূচকগুলি রয়েছে যা ফলাফলের 11-9, 7-5 এবং 3-1-এ বিট করতে হয়।
  • অ্যারেটি @pইনপুটটির 9-8, 6-5, 3-2, এবং 8চতুর্থ সদস্য হিসাবে সংখ্যা থেকে তৈরি করা হয়েছে
  • ইনপুটটির 7,4 এবং 0 অবস্থানের বিটগুলি ফলাফলের 8,4 এবং 0-তে সরাসরি বিটগুলিতে স্থানান্তরিত হয়।

উদাহরণস্বরূপ, তালিকার প্রথম নম্বর 16390, যা 100000000000110কিছুটা ক্ষেত্র হিসাবে রয়েছে, নিম্নলিখিত তথ্য বহন করে:

000100 : bit mask says: only consider bit 3 of the input
000000 : bit values say: bit 3 should be 0
00     : use '0ab' as higher bits of first digit
01     : use '0de' as higher bits of second digit
10     : use '0gh' as higher bits of third digit

1

05 এ বি 1 ই , 84 বাইট

পোর্ট অফ KimOyhus 'উত্তর 05AB1E করতে।

•4’7þ2Ô€iΘEuĆΣk4Ѐ:ΘΛs‡CaΔʒì₁3¶rdiMß¡þи иø-˜)Â∍DY—WûQ@—Mā}Γ¤ÒÙ]p•44в2ôvÐyèP≠«}4ôC3.£

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

রুক্ষ ব্যাখ্যা:

•yadayada•44в2ô   # encoded list of nand gates
v                 # for each gate
 ÐyèP≠            # compute the output of the gate
      «           # append it to the input
       }          # end of the loop
4ô                # split the list of bits in groups of 4
  C               # convert each from binary to decimal
   3.£            # keep the last 3 numbers
                  # implicit output

0

05 এ বি 1 ই , 104 103 101 বাইট

•3γã•S£©4èUXтÌ‹XSPVY®2èDˆTQ*~i0®нëт}®1èY¯`*i0®нëY_Xт>Ê*i0¯`ëт]®3èY¯`_*X110Q~i0®нëXт›iYiтë0¯`ëX]®θJ4ôC

এই ধরণের চ্যালেঞ্জের জন্য অবশ্যই সঠিক ভাষা নয়, তবে আহ ভালভাবে ...
স্ট্রিং হিসাবে ইনপুট, তিন অঙ্কের তালিকা হিসাবে আউটপুট।

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

আমাদের বিবেচনা করার জন্য নিম্নলিখিত আটটি পরিস্থিতি রয়েছে:

     1st 2nd 3rd 4th 5th 6th                          1st digit    2nd digit    3rd digit
1.   ab  c   de  f   0gh i   →   0abc 0def 0ghi   →   '0'+1st 2nd  '0'+3rd 4th  5th     6th
2.   ab  c   de  f   100 i   →   0abc 0def 100i   →   '0'+1st 2nd  '0'+3rd 4th  5th     6th
3.   ab  c   gh  f   101 i   →   0abc 100f 0ghi   →   '0'+1st 2nd  '100'   4th  '0'+3rd 6th
4.   gh  c   de  f   110 i   →   100c 0def 0ghi   →   '100'   2nd  '0'+3rd 4th  '0'+1st 6th
5.   gh  c   00  f   111 i   →   100c 100f 0ghi   →   '100'   2nd  '100'   4th  '0'+1st 6th
6.   de  c   01  f   111 i   →   100c 0def 100i   →   '100'   2nd  '0'+1st 4th  '100'   6th
7.   ab  c   10  f   111 i   →   0abc 100f 100i   →   '0'+1st 2nd  '100'   4th  '100'   6th
8.   xx  c   11  f   111 i   →   100c 100f 100i   →   '100'   2nd  '100'   4th  '100'   6th

আমি প্রথমে (অন্তর্নিহিত) ইনপুটটিকে আকারের অংশে বিভক্ত করে [2,1,2,1,3,1]সেই তালিকাটি রেজিস্টারে সংরক্ষণ করি:

3γã•     # Push compressed integer 212131
     S    # Convert it to a list of digits
      £   # Split the (implicit) input in chunks of that size
       ©  # Store it in the register (without popping)

আমার এই 05AB1E ডগা (বিভাগটি দেখুন ইপিএসে দক্ষিন কোরিয়ায় কিভাবে পূর্ণসংখ্যার কম্প্রেস কিভাবে? ) কেন বুঝতে •3γã•হয়212131

এখন আমরা প্রথমে আউটপুটটির প্রথম অঙ্কের জন্য 0 এবং 1 গুলি তৈরি করতে যাচ্ছি। সিনারিওগুলি 1,2,3,7 ব্যবহার '0'+1st+2nd; এবং পরিস্থিতি 4,5,6,8 ব্যবহার করুন '100'+2nd:

4è                  # Take the 5th item of the list
  U                 # Pop and store it in variable `X`
XтÌ‹                #  Check if `X` is below 102
                ~   # OR
   XSP              #  `X` is equal to 111
      VY            #  And store that result in variable `Y`
               *    #  and
        ®2è         #  Get the 3rd item from the list of the register
           Dˆ       #  Push it to the global array
             TQ     #  And check if it's equal to 10
i                   # If the combined check above is truthy (exactly 1):
 0                  #  Push 0 to the stack
 ®н                 #  Push the 1st item of the list to the stack
ë                   # Else:
 т                  #  Push 100 to the stack
}                   # Close the if-else
®1è                 # And push the 2nd item of the list to the stack

তারপরে আমরা আউটপুটটির দ্বিতীয় অঙ্কের জন্য 0 এবং 1 গুলি তৈরি করতে যাচ্ছি। সিনারিওগুলি 1,2,4 ব্যবহার '0'+3rd+4th; পরিস্থিতি 3,5,7,8 ব্যবহার '100'+4th; এবং দৃশ্য 6 ব্যবহার করে '0'+1st+4th:

Y                # Push `Y` (check if `X` equals 111)
   *             # and
 ¯`              # Push the item from the global array (3rd item of the list)
i                # If both checks above are truthy (exactly 1):
 0               #  Push 0 to the stack
 ®н              #  Push the 1st item of the list to the stack
ë                # Else:
 Y_              #  Push inverted `Y` (check if `X` does NOT equal 111)
       *         #  and
   Xт>Ê          #  Check if `X` (5th item of the list) does NOT equal 101
 i               #  If both checks above are truthy (exactly 1):
  0              #   Push 0 to the stack
  ¯`             #   Push the item from the global array (3rd item of the list)
 ë               #  Else:
  т              #   Push 100 to the stack
]                # Close both if-else cases
®3è              # And push the 4th item of the list to the stack

তারপরে আমরা আউটপুট তৃতীয় অঙ্কের জন্য 0 এবং 1 গুলি তৈরি করতে যাচ্ছি। সিনারিও 1,2 ব্যবহার 5th+6th; দৃশ্য 3 ব্যবহার '0'+3rd+6th; পরিস্থিতি 4,5 ব্যবহার '0'+1st+6th; এবং পরিস্থিতিতে 6,7,8 ব্যবহার করুন '100'+6th:

Y           #  Push `Y` (check if `X` equals 111)
    *       #  and
 ¯`_        #  Check if the item from the global array (3rd item of the list) is exactly 0
         ~  # OR
    X110Q   #  Check if `X` (5th item of the list) equals 110
i           # If the combined check above is truthy (exactly 1):
 0          #  Push 0 to the stack
 ®н         #  Push the 1st item of the list to the stack
ë           # Else:
 Xт›i       #  If `X` (5th item of the list) is larger than 100 (so 101/110/111):
     Yi     #   If `Y` (if `X` equals 111):
       т    #    Push 100 to the stack
      ë     #   Else:
       0    #    Push 0 to the stack
       ¯`   #    Push the item from the global array (3rd item of the list)
    ë       #  Else:
     X      #   Push `X` (5th item of the list) to the stack
]           # Close all if-else cases
®θ          # And push the last (6th) item of the list to the stack

এখন আমাদের স্ট্যাকের সমস্ত 0 এবং 1 রয়েছে, তাই আমরা এটিকে তিনটি আউটপুট অঙ্কে রূপান্তর করতে পারি:

J     # Join the entire stack together
 4ô   # Split it into parts of size 4
   C  # Convert each part from binary to an integer (and output implicitly)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.