ক্রিপ্টোগ্রাফিক কুইন বৈকল্পিক


22

এমন একটি প্রোগ্রাম তৈরি করুন যা ফর্মটিতে তার উত্সের MD5 যোগফল মুদ্রণ করে:

MD5 sum of my source is: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

কোন প্রতারণা নেই - আপনি কেবল উত্স ফাইলটি পড়তে এবং এর যোগফল গণনা করতে পারবেন না। প্রোগ্রামটি অবশ্যই কোনও বাহ্যিক তথ্য পড়বে না।

অবশ্যই আপনি আপনার ভাষার জন্য উপলব্ধ একটি এমডি 5 লাইব্রেরি ব্যবহার করতে পারেন।


1
যদি কেউ এমডি 5 (যেমন এইচ = এফ (এইচ) এর সাথে সংঘর্ষে পরিচালিত হয়, যেখানে এফের জন্য সমস্ত কোড আবর্জনা মুদ্রণের জন্য প্রয়োজনীয় একটি ক্রুড "নুন" থাকে তবে আমি মনে করি তাদের এটি করার অনুমতি দেওয়া উচিত।
নিক টি

1
@ নিকটি এটি যে খুব কঠিন হবে যদিও আমি যুক্ত করতে পারি।
পাইরুলেজ

উত্তর:


13

পাইথন 157 149

r='r=%r;import md5;print "MD5 sum of my source is: "+md5.new(r%%r).hexdigest()';import md5;print "MD5 sum of my source is: "+md5.new(r%r).hexdigest()

আউটপুট:

MD5 sum of my source is: bb74dfc895c13ab991c4336e75865426

আদর্শে যাচাইকরণ


উত্স ফাইলের জন্য আমি একটি আলাদা এমডি 5সাম পাচ্ছি।
স্কিভে

@ স্ল্যাকওয়্যার আপনি কি পাচ্ছেন?
ম্যাট

ওহ আপনি এটি আবার সম্পাদনা করেছেন। এখনই আমি 24ba0a79636297dab8803f571d4e3b44 md.pyলিনাক্সে
এমডি 5সাম

1
যদি আমি একটি newline (যোগ @slackwear \nআমার প্রোগ্রাম শেষে) আমি হ্যাশ আপনি পোস্ট পাবেন: 24ba0a79636297dab8803f571d4e3b44। আমি মোটামুটি নিশ্চিত যে আপনার একটি অতিরিক্ত নিউলাইন রয়েছে। (আমি বিশ্বাস করি কিছু সম্পাদক এটি স্বয়ংক্রিয়ভাবে করবেন)
ম্যাট

2
আপনি সঠিক. আমি অজানা ছিলাম যে ভিএফ পিছনে এলএফগুলি লুকিয়ে রাখবে
স্কিভে

12

পাইথন 2, 91 বাইট

s="import md5;print'MD5 sum of my source is: '+md5.new('s=%r;exec s'%s).hexdigest()";exec s

পাইথন কুইন ভেরিয়েন্টটি ব্যবহার করে যার জন্য সমস্ত কিছু দুবার পুনরাবৃত্তি করার প্রয়োজন হয় না। আদর্শের উপর পরীক্ষিত


1
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত
মাইক্রোথপিক

1

পার্ল + ডাইজেস্ট :: এমডি 5, 89 বাইট

$_=q(use Digest::MD5 md5_hex;say"MD5 sum of my source is: ",md5_hex"\$_=q($_);eval");eval

টিআইও লিঙ্ক নেই কারণ ডাইজেস্ট :: এমডি 5 টিআইও তে ইনস্টল করা নেই। নোট করুন যে এর জন্য ভাষার কনফারেন্স স্তরটি 5.10 বা উচ্চতর নির্ধারণ করা প্রয়োজন ( -M5.010; এটি পিপিসি বিধি অনুসারে বাইট জরিমানা বহন করে না।

ব্যাখ্যা

এটি আরও একটি "উত্স কোডের একটি ফাংশন মুদ্রণ করুন" চ্যালেঞ্জ, যার অর্থ এটি সর্বজনীন কুইন নির্মাতার মাধ্যমে তুচ্ছভাবে সমাধান করা যেতে পারে।

সর্বজনীন কুইন নির্মাতা

$_=q(…"\$_=q($_);eval");eval

পার্ল অনুপস্থিত আর্গুমেন্টগুলির জন্য "ডিফল্ট" ভেরিয়েবল q()শুরু করার জন্য আমরা স্ট্রিং নোটেশন (যা নীড়গুলি) $_ব্যবহার করি। তারপরে আমরা evalএকটি অনুপস্থিত যুক্তি দিয়েছিলাম, যাতে জগতের ভিতরে থাকা স্ট্রিংটি q()মূল্যায়ন হয়।

স্ট্রিংয়ের ভিতরে থাকা স্ট্রিংটি q()পুরো প্রোগ্রামটি কীভাবে তৈরি করা যায় তার একটি বর্ণনা; আমরা বাকী প্রোগ্রামটি অক্ষরে অক্ষরে নির্দিষ্ট করে রাখি, তারপরে $_পুরো স্ট্রিংটির অভ্যন্তরের পরিবর্তে একটি অবিচ্ছিন্ন ব্যবহার করি ।

কৌশলটি পুরো প্রোগ্রামের উত্সে অভিন্ন সামগ্রী সহ একটি স্ট্রিং তৈরি করে; আমরা একটি কুইন উত্পাদন করতে এটি মুদ্রণ করতে পারে। আমরা সর্বদা এটিতে অন্যান্য জিনিসও করতে পারি, যদিও, সার্বজনীন কুইন নির্মাণকারী তৈরি করে।

প্রোগ্রাম বাকি

use Digest::MD5 md5_hex;say"MD5 sum of my source is: ",md5_hex

খুব সাধারণ: একটি এমডি 5 বিল্টিন আমদানি করুন, তারপরে প্রশ্নে নির্দিষ্ট করা স্ট্রিংটি মুদ্রণ করুন (এটি সংকোচনের পক্ষে মূল্যহীন নয়, আমি বিশ্বাস করি পার্লে ডেকম্প্রেসর কেবল আক্ষরিকভাবে স্ট্রিংকে উল্লেখ করার চেয়ে আরও বেশি জায়গা গ্রহণ করবে), এবং MD5 বিল্টিন ব্যবহার করুন স্ট্রিংটি আমরা সর্বজনীন কুইন কনস্ট্রাক্টরের মাধ্যমে পেয়েছি।


0

নোড.জেএস আরইপিএল (সংস্করণ 0.9.3), 96 94 বাইট

এই চ্যালেঞ্জটি পোস্ট করার সময় নোড.জেএস এর সর্বশেষ সংস্করণ ব্যবহার করা হয়েছিল। আমি নোড.জেএস'র ক্রিপ্টো মডিউলটির জন্য 9 ই নভেম্বর, ২০১২ ডকুমেন্টেশন ট্র্যাক করেছি এবং এটি এখানে আমি এখানে আবার ব্যবহার করেছি এমন সমস্ত ফাংশন সমর্থন করে।

function x(s){return require("crypto").createHash("md5").update(s+";x(x)").digest("hex")};x(x)

আপনি যদি এই কোডটি পরীক্ষা করার জন্য নোড.জেএস এর একটি প্রাচীন সংস্করণ ইনস্টল করার মতো বোধ করেন না তবে বিশ্রাম নিন যে এটি খুব সাম্প্রতিক সংস্করণেও কাজ করে।

নোড.জেএস আরইপিএল (সংস্করণ 7.0.0), 81 বাইট

এবং এখানে ES6 এর তীর ফাংশন ব্যবহার করে একটি সংস্করণ দেওয়া হয়েছে।

x=s=>require("crypto").createHash("md5").update(`x=${s};x(x)`).digest("hex");x(x)

সম্পাদনা করুন : আমার নোড.জেএস ০.৯.৩ সংস্করণে একটি ত্রুটি চিহ্নিত করার জন্য অ্যান্ডারস কাসারগকে ধন্যবাদ , যা দুটি বাইট সংরক্ষণ করেছে তা স্থির করে।


যদিও আপনি ব্যবহৃত সমস্ত ফাংশনগুলি নোড.জেএস 0.9.3 দ্বারা সমর্থিত হতে পারে, তবে ES6 টেম্পলেট আক্ষরিক বাক্য গঠন `${s};x(x)`ছিল না।
অ্যান্ডারস ক্যাসরগ

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