বিটকয়েন্সে ২০১ Mine সালের জন্য খনি! PCG.SE নতুন বছরের ধাঁধা 2016


17

বিটকয়েন প্রোটোকলে, 2016 একটি খুব বিশেষ সংখ্যা। একটি নতুন ব্লক তৈরি করতে একটি হ্যাশ সন্ধানের "অসুবিধা" প্রতি দুই সপ্তাহে একবার পরিবর্তিত হয়ে আনুমানিক পরিবর্তনে প্রতি 2,016 ব্লককে সামঞ্জস্য করা হয়।

এই সংখ্যাটি বেছে নেওয়া হয়েছিল কারণ অসুবিধাটি নিজেকে সামঞ্জস্য করে যাতে প্রতিটি ব্লক সন্ধান করতে প্রায় 10 মিনিট সময় নেয় এবং দুই সপ্তাহের মধ্যে 2 × 7 × 24 × 6 = 2,016 দশ মিনিটের সময়সীমা থাকে।


এই সংখ্যাগত কাকতালীয়াকে স্মরণে রাখতে, এই বছরের নববর্ষের সমস্যাটি বিটকয়েন সম্পর্কে - বিশেষত, হ্যাশিং অ্যালগরিদম এটি ব্লক সাইন করতে ব্যবহার করে, SHA-256 6

আপনার কাজটি এমন একটি প্রোগ্রাম তৈরি করা যা বাইট ইনপুট নেবে (কমপক্ষে এএসসিআইআইতে) এবং বাইটস (একটি আপনার পছন্দের বিন্যাসে) একটি নোকস আউটপুট দেয় যা আসলটিতে সংযুক্ত হওয়ার সাথে সাথে 2016তার বেস 64 প্রতিনিধিত্বমূলক একটি SHA-256 হ্যাশ তৈরি করবে বাইট ইনপুট

এখানে বৈধ সমাধানের কয়েকটি উদাহরণ রয়েছে, লোকেরা ইতিমধ্যে তৈরি করা ইঞ্জিনগুলির সৌজন্যতার পাশাপাশি তাদের তৈরি করা হ্যাশগুলি:

> foo
Nonce: 196870
SHA256 hash: OCUdDDtQ42wUlKz2016x+NROo8P2lbJf8F4yCKedTLE=

> bar
Nonce: 48230
SHA256 hash: CNcaOCQgT7bnlQzQPXNwuBu8/LYEdk2016khRaROyZk=

> happynewyear
Nonce: 1740131
SHA256 hash: XsKke6z2016BzB+wRNCm53LKJ6TW6ir66GwuC8oz1nQ=

> 2016
Nonce: 494069
SHA256 hash: rWAHW2YFhHCr22016zw+Sog6aW76eImgO5Lh72u6o5s=

(note: the nonces don't actually have to be ASCII numbers; you can do
 any byte input you find convenient.)

আপনার প্রোগ্রামটি ব্যবহার করতে পারে কেবল পূর্ব-নির্মিত গ্রন্থাগার (স্ট্যান্ডার্ড ইনপুট এবং আউটপুট ফাংশন ব্যতীত) এমন একটি SHA256(bytes)ফাংশন যা বাইট ইনপুট নেয় এবং বেস 64 সহ যে কোনও ফর্ম্যাটে কোনও SHA256 হ্যাশ দেয় returns

সোর্স কোড জয়ের কয়েকটি বাইটে এটি করার প্রোগ্রাম।


1
আমাকে পাগল বলো, কিন্তু এই বিটকয়েনটি অন্য নামে খনন করছে না?
কোডফুন 64

1
এছাড়াও, একটি "প্রাক বিল্ট লাইব্রেরি" সংজ্ঞায়িত করুন। আমার ভাষার SHA-256 ফাংশন হ্যাশ উত্পাদন করে তবে বেস 64 নষ্ট করে না। সুতরাং, আমার বাইটে রূপান্তর, তারপরে অক্ষরগুলিতে রূপান্তর এবং তারপরে বেস 64 এ রূপান্তরটিও ব্যবহার করতে হবে।
LegionMammal978

@ LegionMammal978 একটি "প্রাক বিল্ট লাইব্রেরি" কোডটির বাইরে সংজ্ঞায়িত কোনও ফাংশন হবে যা এই চ্যালেঞ্জটির পক্ষে গণনা করে। সুতরাং আপনি আপনার SHA-256 ফাংশনের জন্য একটি বেস 64 র‌্যাপার ফাংশন তৈরি করতে পারেন যাতে এটি এই সমস্যায় ব্যবহার হয়।
জো জেড।

@ কোডফান This৪ এটি একটি কোড সমস্যা যা বিটকয়েন খনির ক্ষেত্রে ব্যবহৃত পদ্ধতির সিমুলেট করে , তবে নিজেই বিটকয়েনগুলির জন্য খনি হয় না।
জো জেড।

উত্তর:


7

পার্ল 5.10+, 39 + 18 = 57 বাইট

sha256_base64($_.++$i)!~2016?redo:say$i

এটি -nMDigest::SHA=/./কমান্ড লাইন সুইচ দিয়ে চালানো দরকার যা বাইট গণনায় অন্তর্ভুক্ত। এটি পার্ল ৫.১০+ sayবৈশিষ্ট্যটিও ব্যবহার করে এবং তাই -M5.010(বা -E) কমান্ড লাইন সুইচ দিয়ে চালানো দরকার যা নিখরচায় বিবেচিত হয়। ইনপুটটি স্টিডিনে সরবরাহ করা উচিত, কোনও ট্রেইলিং নিউলাইন ছাড়াই (আপনি চান না যে নতুন লাইনটি ইনপুটটির অংশ হিসাবে বিবেচনা করা হবে)।

উদাহরণ:

$ echo -n foo | perl -nMDigest::SHA=/./ -E 'sha256_base64($_.++$i)!~2016?redo:say$i'
196870
$ echo -n bar | perl -nMDigest::SHA=/./ -E 'sha256_base64($_.++$i)!~2016?redo:say$i'
48230
$ echo -n happynewyear | perl -nMDigest::SHA=/./ -E 'sha256_base64($_.++$i)!~2016?redo:say$i'
1740131
$ echo -n 2016 | perl -nMDigest::SHA=/./ -E 'sha256_base64($_.++$i)!~2016?redo:say$i'
494069

8

গণিত, 94

(For[i=0,IntegerDigits[4Hash[#<>ToString@++i,"SHA256"],64]~SequenceCount~{54,52,53,58}<1,];i)&

এই ফাংশনটি প্রার্থী হিসাবে ইতিবাচক পূর্ণসংখ্যার চেষ্টা করবে। সঠিক উত্তর পেতে আমার ল্যাপটপে 4 মিনিটের বেশি সময় লাগে।

%["foo"]
(* 196870 *)

দীর্ঘতর তবে দ্রুত ( ~5x) বাস্তবায়ন সমান্তরাল ব্যবহার করে:

f[k_]:=
    Do[If[Length@#>0,Return[i+#[[1,1]]]]&@
        Position[ParallelMap[IntegerDigits[4Hash[k<>ToString@#,"SHA256"],64]
            ~SequenceCount~{54,52,53,58}&,i+Range@1*^4],1]
        ,{i,0,∞,1*^4}]

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

পছন্দ করুন
njpipeorgan


পছন্দ করুন বিটিডব্লিউ, "ডব্লিউএলএফ" এর মতো আরও ভাল নামটি কেন বিবেচনা করবেন না?
এনজিপিপোরগান

5

রুবি, 87 86 বাইট

আমি চ্যালেঞ্জটি সঠিকভাবে বুঝতে পেরেছি কিনা তা নিশ্চিত নই, তবে 196870আপনি ইনপুট দিলে এটি কয়েক সেকেন্ডের মধ্যে খুঁজে পাওয়া যায় foo

require"digest"
gets.chop!
$.+=1until/2016/=~Digest::SHA256.base64digest("#$_#$.")
p$.

5

পাওয়ারশেল, 150 152 153 বাইট

while([Convert]::ToBase64String([Security.Cryptography.SHA256]::Create().ComputeHash([Text.Encoding]::UTF8.GetBytes("$args$i")))-notmatch2016){$i++}$i

উদাহরণ

PS > .\BitCoin.ps1 foo
196870

PS > .\BitCoin.ps1 bar
48230

PS > .\BitCoin.ps1 happynewyear
1740131

PS > .\BitCoin.ps1 2016
494069

2

সি #, 179 বাইট

s=>{int i=0;while(!System.Convert.ToBase64String(System.Security.Cryptography.SHA256.Create().ComputeHash(System.Text.Encoding.UTF8.GetBytes(s+i))).Contains("2016"))i++;return i;}

পাওয়ারশেল সমাধানের মতো, আরও দীর্ঘ।


এটি অনেক কীওয়ার্ড।
জো জেড।

1
@JoeZ। এটি আপনার জন্য সি #
LegionMammal978
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.