পিকেসিএস # 7 প্যাডিং বৈধতা


25

ক্রিপ্টোগ্রাফিতে, পিকেসিএস # 7 প্যাডিং একটি প্যাডিং স্কিম যা একটি সংখ্যা বাইট এন ≥ 1 যুক্ত করে, যেখানে প্রতিটি যুক্ত বাইটের মান এন এর সমান হয় where

উদাহরণস্বরূপ, Hello, World!যার 13 বাইট রয়েছে, হেক্সে নিম্নলিখিতটি রয়েছে:

48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21

যদি আমরা পিকেসিএস # 7 প্যাড থেকে দৈর্ঘ্য 16 বেছে নিই, তবে ফলাফলটি হবে:

48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 03 03 03

এবং যদি আমরা 20 দৈর্ঘ্যের প্যাড বেছে নিই, তবে ফলাফলটি হবে:

48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 07 07 07 07 07 07 07

মনে রাখবেন যে প্রথম উদাহরণে আমরা তিনটি 03বাইট যুক্ত করি এবং দ্বিতীয়টিতে আমরা সাতটি 07বাইট যুক্ত করি।

আপনার কাজটি কোনও স্ট্রিং (বা পূর্ণসংখ্যার অ্যারে) এর সঠিক পিকেসিএস # 7 প্যাডিং রয়েছে কিনা তা যাচাই করা হবে। এটি হ'ল, যদি ইনপুট স্ট্রিংয়ের শেষ বাইটটি N হয়, তবে আপনার প্রোগ্রামটি পরীক্ষা করা উচিত যে স্ট্রিংয়ের শেষ এন বাইটগুলি N এর সমান are

ইনপুট

কোড পয়েন্ট 1 এবং 127 সহ অন্তর্ভুক্ত অক্ষরের সমন্বিত একটি একক নোম্পটি ASCII স্ট্রিং। আপনি যদি চান, আপনি পরিবর্তে পূর্ণসংখ্যার অ্যারের হিসাবে ইনপুট নিতে পারেন।

আউটপুট

একজন truthy মান যদি ইনপুট স্ট্রিং বৈধ সাথে PKCS # 7 প্যাডিং, অন্যথায় একটি falsy মান আছে।

উভয় ফাংশন এবং সম্পূর্ণ প্রোগ্রাম গ্রহণযোগ্য। এটি , সুতরাং লক্ষ্যটি হ'ল আপনার কোডে বাইটের সংখ্যা হ্রাস করা।

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

ইনপুটগুলির পূর্ণসংখ্যার অ্যারে সংস্করণটি এখানে উপস্থাপন করা হয়েছে - স্ট্রিং সংস্করণে নিম্নলিখিত পরীক্ষার ক্ষেত্রে অনেকের জন্য ছাপছাড়া অক্ষর থাকতে পারে:

Truthy:

[1]
[1, 1]
[2, 1]
[2, 2]
[5, 6, 5, 3, 3, 3]
[1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2]
[95, 115, 80, 32, 71, 7, 122, 49, 13, 7, 7, 7, 7, 7, 7, 7, 7]
[27, 33, 54, 65, 97, 33, 52, 55, 60, 1, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
[15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15]

Falsy:

[2]
[1, 2]
[5, 5, 5, 5]
[5, 6, 5, 4, 4, 4]
[3, 3, 3, 94, 3, 3]
[1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 127]
[50, 39, 94, 105, 49, 29, 74, 102, 2, 106, 44, 7, 7, 7, 7, 7, 7]
[26, 27, 59, 25, 122, 110, 20, 30, 114, 6, 9, 62, 121, 42, 22, 60, 33, 12]

কি [1 2 3 3 3 3]truthy বা falsey? আমি মনে করি এটি সত্যবাদী হওয়া উচিত তবে আমি ইতিবাচক নই।
ডিজেএমসিএমহেম

@ ডিজেএমসিএমহেম সত্যবাদী
জাকুব

@ ডিজেএমসিএমহেম সত্যবাদী (এটি সত্যবাদী পরীক্ষার ক্ষেত্রে সমাপ্তির সাথে সমাপ্ত 7)। স্ট্রিপিংয়ের পরে আপনি এটিকে ভাবতে পারেন [1 2 3]
Sp3000

অবশ্যই আপনি হ্যালো পরে একটি কমা রাখা বোঝাতে চেয়েছিলেন। (এটি
হেক্সে রয়েছে

@rici লক্ষ্য করার জন্য ধন্যবাদ, স্থির!
Sp3000

উত্তর:


8

পাইথন, 47 34 33 বাইট

lambda s:s[-1:]*s[-1]==s[-s[-1]:]

s[-1]তালিকার সর্বশেষ সদস্য ss[-1]ইনপুট অ্যারের শেষ সদস্যরা বহুবার পুনরাবৃত্তির sঅ্যারের সমান হয় তা পরীক্ষা করে s[-1]

পূর্ণসংখ্যার অ্যারের হিসাবে ইনপুট নেয়। এটি ল্যাম্বডা এক্সপ্রেশন; এটি ব্যবহার করতে, এটির lambdaসাথে উপসর্গ স্থাপন করে নিয়োগ করুন f=

আইডিয়নে চেষ্টা করে দেখুন!

পরীক্ষা করার জন্য:

>>> f=lambda s:s[-1:]*s[-1]==s[-s[-1]:]
>>> f([27, 33, 54, 65, 97, 33, 52, 55, 60, 1, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10])
True
>>> f([50, 39, 94, 105, 49, 29, 74, 102, 2, 106, 44, 7, 7, 7, 7, 7, 7])
False

লিকি নুনকে ধন্যবাদ 13 বাইট সংরক্ষিত!

ডেনিসকে একটি বাইট সংরক্ষণ করে!


def f(s)=একটি বাইট সংক্ষিপ্ত।
থ্রিএফএক্স

2
@ থ্রিএফএক্স আপনার কি ফেরা দরকার?
লিক নুন

@ থ্রিএফএক্স হ্যাঁ, তবে আমাকে লিখতে হবে returnlambdaসংস্করণ 7 বাইট খাটো।
কপার

তুমি ঠিক বলছো. দুঃখিত।
থ্রিএফএক্স

lambda s:[s[-1]]*s[-1]=s[-s[-1]:]
লিক নুন


7

পাইথ, 5 বাইট

gFer8

ইনপুটটিতে আরএলই, শেষ জোড়াটি নিন এবং পুনরাবৃত্তির সংখ্যাটি মানটির চেয়ে বড় বা সমান কিনা তা পরীক্ষা করুন।

এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার স্যুট


7

জেলি , 5 বাইট

ŒgṪṫṪ

ইনপুট হ'ল কোড পয়েন্টগুলির একটি অ্যারে, আউটপুট হ'ল খালি অ্যারে (সত্যবাদী) বা খালি অ্যারে (মিথ্যা)।

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

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

ŒgṪṫṪ  Main link. Argument: A (array)

Œg     Group all runs of consecutive, equal integers.
  Ṫ    Tail; yield the last run. It should consist of n or more occurrences of n.
    Ṫ  Tail; yield n, the last element of A.
   ṫ   Dyadic tail; discard everything after the n-th element of the last run.
       If the last run was long enough, this will yield a non-empty array (truthy);
       if not, the result will be an empty array (falsy).

6

সিজোম, 9 8 বাইট

1 বাইট সংরক্ষণের জন্য Sp3000 ধন্যবাদ।

{e`W=:/}

ইনপুট হিসাবে রিটার্ন 0(মিথ্যা) বা ধনাত্মক পূর্ণসংখ্যার (সত্যবাদী) হিসাবে পূর্ণসংখ্যা তালিকা নেয় ।

পরীক্ষা স্যুট.

ব্যাখ্যা

e`   e# Run-length encoding, yielding pairs of run-length R and value V.
W=   e# Get the last pair.
:/   e# Compute R/V, which is positive iff R ≥ V. Works, because V is guaranteed
     e# to be non-zero.

6

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

ওসাবির জন্য কোনও রান-লেংথ এনকোডিং নেই :(

¤sR¬£¬QOQ

ব্যাখ্যা:

¤           # Get the last element of the array
 s          # Swap the two top elements
  R         # Reverse the array
   ¬        # Get the first element
    £       # Substring [0:first element]
     ¬      # Get the first element
      Q     # Check if they are equal
       OQ   # Sum up and check if equal

একটি উদাহরণ সহ:

¤           # [5, 6, 5, 3, 3, 3]  3
 s          # 3  [5, 6, 5, 3, 3, 3]
  R         # 3  [3, 3, 3, 5, 6, 5]
   ¬        # 3  [3, 3, 3, 5, 6, 5]  3
    £       # 3  [3, 3, 3]
     ¬      # 3  [3, 3, 3]  3
      Q     # 3  [1, 1, 1]
       OQ   # 3==3 which results into 1

সিপি -1222 এনকোডিং ব্যবহার করে । এটি অনলাইন চেষ্টা করুন!


5

MATL , 10 বাইট

কোডটির পূর্ববর্তী সংস্করণে কোনও সমস্যা লক্ষ্য করার জন্য @ আদনানকে ধন্যবাদ

P0hG0):)&=

ইনপুট সঠিক প্যাডিং আছে যখন, আউটপুট যা একটি অ্যারের শুধুমাত্র বেশী ধারণকারী হয় truthy । এটির ভুল প্যাডিং থাকলে আউটপুটটি কমপক্ষে একটি শূন্যযুক্ত একটি অ্যারে হয় এবং এটি মিথ্যাও হয়

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

ব্যাখ্যা

P     % Implicitly take numeric array as input. Reverse the array
0h    % Append a 0. This ensures falsy output if input array is too short
G0)   % Push input again. Get its last element
:     % Range from 1 to that
)     % Apply as index into the array
&=    % 2D array of all pairwise equality comparisons. Implicitly display

@ আদনান এখনই কাজ করছেন
লুইস মেন্ডো ২

বেশ ভাল লাগছে :)
আদনান

2
এছাড়াও, 25 কে অভিনন্দন! : 3
আদনান

4

গণিত, 29 বাইট

#&@@#<=Length@#&@*Last@*Split

সমান উপাদানগুলির রানগুলিতে ইনপুটটি বিভক্ত করুন, শেষটি বের করুন এবং পরীক্ষা করুন যে এর প্রথম উপাদানটি সেই রানের দৈর্ঘ্যের চেয়ে কম বা সমান।


3

হাস্কেল, 50 বাইট

import Data.List
((>=)<$>head<*>length).last.group

ইনপুট হিসাবে পূর্ণসংখ্যার অ্যারে নেয়।


আপনি আরপিএলে না থাকলে আপনার ডাটা আমদানি করতে হবে ist
xnor

2

জে, 13 বাইট

#~@{:-:{:{.|.

তালিকাটিকে একক যুক্তি হিসাবে গ্রহণ করে এবং 1যদি এটি সত্যবাদী হয় এবং ফলাফলগুলি আউটপুট করে0 যদি সত্যবাদী হয় মিথ্যা হয় তবে ফলাফলগুলি ।

ব্যবহার

   f =: #~@{:-:{:{.|.
   f 5 6 5 3 3 3
1
   f 5 6 5 4 4 4
0

ব্যাখ্যা

#~@{:-:{:{.|.  Input: array A
           |.  Reverse A
       {:      Get the last value in A
         {.    Take that many values from the reverse of A
   {:          Get the last value in A
#~@            Make a list with that many copies of the last value
     -:        Test if the list of copies matches the sublist of A and return

@randomra একটি ক্ষেত্রে যেমন 3 4 3 3 3হবে ~.যেমন 3 4যাতে শেষ সারি =হয় 0 1 0 0 0। আমি মনে করি বিপরীতে {:*/@{.0{=@|.কাজ করা উচিত হিসাবে কাজ করা, তবে এটি 13 বাইট হিসাবে শেষ হয়।
মাইল

ঠিক আছে, দুর্দান্ত ক্যাচ আমি সেটা মিস করছিলাম.
এলোমেলো

2

ব্রেন-ফ্লাক , 54 বাইট

(({})[()]){({}[()]<({}[({})]){<>}{}>)}{}{<>(<(())>)}{}

ইনপুটটি পূর্ণসংখ্যার একটি তালিকা, আউটপুট সত্যের জন্য 1 এবং মিথ্যাটির জন্য খালি।

ব্যাখ্যা

(({})[()]){ Loop a number of times equal to the last integer in the input - 1
    ({}[()] Handle loop counter
        < Silently...
            ({}[({})]) Replace the last code point in the string with its difference with the code point before it
            {<>} If the difference is not zero then switch stacks
            {} Discard the difference
        > End silently
    ) Handle loop counter
} End loop
{} Discard the loop counter
{<>(<(())>)} If the top of the current stack is not 0 (which means we have not switched stacks push 0 then 1
{} Discard the top of the stack (either nothing if falsey or 0 if truthy)

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


1
ওহে, তোমাকে এখানে দেখে ভাল লাগল! সাইটে স্বাগতম!
ডিজেএমসিএমহেম

1

ব্যাচ, 101 বাইট

@for %%a in (%*)do @set/an=%%a,c=0
@for %%a in (%*)do @set/ac+=1,c*=!(n-%%a)
@if %c% geq %n% echo 1

কমান্ড-লাইন প্যারামিটার হিসাবে ইনপুট নেয়, এগুলির উপরে লুপ করে তোলে যাতে এটি সর্বশেষটি পেতে পারে n, ট্রেলিংয়ের রান গণনা করার জন্য তাদের সমস্তের উপর আবার লুপ করে n, পরিশেষে প্রিন্ট করা হয় 1যদি গণনা কমপক্ষে সমান হয় n। বিকল্পভাবে যদি মুদ্রণ 0বা একটি শূন্য-মান গ্রহণযোগ্য হয়, তবে 93 বাইটের জন্য, শেষ লাইনটি এতে পরিবর্তন করুন @cmd/cset/ac/n



1

ডায়ালগ এপিএল , 10 বাইট

(⊃∧.=⊃↑⊢)⌽

প্রথম
∧.=সব-সমান
প্রথম
এন থেকে নেওয়া বিপরীত যুক্তি?


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


2
কত বাইট?
কনর ও'ব্রায়ান

@ কনরও ব্রায়েন দুঃখিত, বয়লারপ্লেটটি পূরণ করতে ভুলে গেছেন।
অ্যাডম

1

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

a=>(r=k=>a.pop()^n?k<2:r(k-1))(n=a.pop())

উদাহরণ:

let f =
a=>(r=k=>a.pop()^n?k<2:r(k-1))(n=a.pop())

console.log(f([5, 6, 5, 3, 3, 3]))
console.log(f([5, 6, 5, 4, 4, 4]))


1

সি 91 বাইট

int f(int*l){int n;for(n=0;l[++n];);l+=n-1;for(int i=*l;i;)if(l[-i--+1]^*l||n<*l)return 0;}

ইনপুট: নাল-টার্মিনেটেড অ্যারেতে একটি পয়েন্টার।
আউটপুট: ফেরত0 অবৈধ প্যাডিংয়ের জন্য এবং বৈধের জন্য শূন্য নয় (অ্যারের শেষ উপাদান)

উদাহরণ:

int a[] = {5, 6, 5, 3, 3, 3, 0};
printf("%d\n", f(&a[5], 6));

int b[] = {1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 0};
printf("%d\n", f(&b[11],12 ));

int m[] = {5, 6, 5, 4, 4, 4, 0};
printf("%d\n", f(&m[5], 6));

int n[] = {3, 3, 3, 94, 3, 3, 0};
printf("%d\n", f(&n[5], 6));

দেয়:

3
2
0
0

এটি অপরিবর্তিত আচরণের উপর নির্ভর করে। যদি প্যাডিং বৈধ হয় তবে কোনও রিটার্নের বিবৃতি নেই, তবে এটি ব্যবহার gcc -std=c99করে অ্যারের শেষ উপাদানটি পাস হয়েছিল (কমপক্ষে আমার মেশিনে)।



1

ব্র্যাচল্যাগ , 6 বাইট

a₁=.l∈

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

লিকে নুনের ব্র্যাচ্যল্যাগ ভি 1 উত্তরটি যেমন সাফল্য বা ব্যর্থতার মধ্য দিয়ে আউটপুট দেয়। একই রকম দৃষ্টিভঙ্গিও গ্রহণ করে তবে অনেকটা সংক্ষিপ্ত আকারে বেরিয়ে আসে।

a₁        There exists a suffix of the input
  =       the elements of which are all equal
   .      which is the output variable
    l     the length of which
     ∈    is an element of
          the output variable.

ব্র্যাচল্যাগ , 6 বাইট

ḅt.l≥∈

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

একটি বিকল্প সংস্করণ যা একই দৈর্ঘ্যে প্রকাশিত হয় যা ডেনিসের জেলি উত্তর থেকে কিছুটা অনুপ্রেরণা নেয়।

 t        The last
ḅ         block of consecutive equal elements of the input
  .       is the output variable
   l      the length of which
    ≥     is greater than or equal to
     ∈    an element of
          the output variable.

0

রেটিনা , 34 বাইট

বাইট গণনাটি আইএসও 8859-1 এনকোডিং ধরেছে।

.+
$*
\b(1(1)*)(?<-2>¶\1)*$(?(2)!)

ইনপুট হল পূর্ণসংখ্যার একটি লাইনফিড-বিচ্ছিন্ন তালিকা। প্রিন্ট 0বা 1

এটি অনলাইন চেষ্টা করুন! (প্রথম লাইনটি টেস্ট স্যুটে সক্ষম করে, যেখানে প্রতি লাইনে একটি স্থান-বিভাজিত পরীক্ষার কেস থাকে))

একটি বিকল্প ধারণা যা 35 বাইট এবং প্রিন্ট 0বা ধনাত্মক পূর্ণসংখ্যার সমাপ্ত হয় :

.+
$*
\b(?=(1+)(¶\1)*$)(?<-2>1)*1\b


0

জাভাস্ক্রিপ্ট (ইএস 5), 89 বাইট

function(b){for(var d=b[b.length-1],c=0;c<d;c++)if(b[b.length-c-1]!=d)return!1;return!0};

Ungolfed:

function a(arr){
var b=arr[arr.length-1];
for(var i=0;i<b;i++){
    if(arr[arr.length-i-1]!=b)return false;
}
return true;
}

0

ব্রেন-ফ্ল্যাক 84 বাইট

100000000 আমাকে এখানে মারধর করে

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

((({}))){({}[()]<(({})<([{}]{}<>)<>>)>)}<>([])({<{}>{}<([])>}{}<(())>){((<{}{}>))}{}

পূর্ণসংখ্যার অ্যারের হিসাবে ইনপুট নেয়।

আসার ব্যাখ্যা।

এখানে একটি by৪ বাইট সংস্করণ দেওয়া হয়েছে যা উত্তরটির বাইরে নেই:

((({}))){({}[()]<(({})<([{}]{}<>)<>>)>)}<>([])({<{}>{}<([])>}{})
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.