পাসওয়ার্ডের সাবজেক্টে


10

ইন রাখুন টকিং এবং কেউই explodes , খেলোয়াড়ের তাদের "বিশেষজ্ঞ" থেকে পাওয়া তথ্যের ভিত্তিতে বোমা defusing (ক ম্যানুয়াল সঙ্গে অন্যান্য মানুষ) সঙ্গে tasked হয়। প্রতিটি বোমা মডিউল দ্বারা গঠিত, যার মধ্যে একটি পাসওয়ার্ড হতে পারে, যেখানে বিশেষজ্ঞকে সম্ভাব্য পাসওয়ার্ডগুলির এই তালিকা দেওয়া হয়, পাঁচটি অক্ষর দীর্ঘ:

about   after   again   below   could
every   first   found   great   house
large   learn   never   other   place
plant   point   right   small   sound
spell   still   study   their   there
these   thing   think   three   water
where   which   world   would   write

এবং প্লেয়ারটিকে পাসওয়ার্ডের প্রতিটি জায়গার জন্য 6 টি সম্ভাব্য অক্ষরের একটি তালিকা দেওয়া হয়। সম্ভাব্য অক্ষর সংমিশ্রণ দেওয়া, সঠিক পাসওয়ার্ড আউটপুট। ইনপুট যে কোনও যুক্তিসঙ্গত বিন্যাসে থাকতে পারে (2 ডি অ্যারে, স্ট্রিং নিউলাইন দ্বারা পৃথক করা ইত্যাদি) আপনি তালিকা / স্ট্রিং / অ্যারে / পাসওয়ার্ডের যে কোনও পাসওয়ার্ডকে সংকুচিত করতে / উত্পন্ন করতে যে কোডটি ব্যবহার করেন তা ছাড় দিতে পারেন। (ধন্যবাদ @ ডেনারএফি)

দ্রষ্টব্য: পাসওয়ার্ডগুলি সংবেদনশীল নয়। আপনি ধরে নিতে পারেন যে ইনপুটটি কেবলমাত্র একটি পাসওয়ার্ডের জন্য সমাধান করবে।

উদাহরণ / পরীক্ষার কেস

এখানে ইনপুটটি স্ট্রিংগুলির অ্যারে হিসাবে উপস্থাপন করা হবে।

["FGARTW","LKSIRE","UHRKPA","TGYSTG","LUOTEU"] => first
["ULOIPE","GEYARF","SHRGWE","JEHSDG","EJHDSP"] => large
["SHWYEU","YEUTLS","IHEWRA","HWULER","EUELJD"] => still


8
আমি প্রোগ্রামে ইনপুট হিসাবে সম্ভাব্য পাসওয়ার্ডগুলির তালিকাটিকে অনুমতি দেওয়ার পরামর্শ দিচ্ছি। অন্যথায় এটি নেমে আসে যার ভাষায় সর্বোত্তম স্ট্রিং সংক্ষেপণ রয়েছে।
ডেনকার

5
আপনি যদি এটি পরিবর্তন করেন ঠিক আছে; আমি কিছু মনে করব না (আমার জমা দেওয়ার বেশিরভাগ অংশ অপরিবর্তিত থাকবে)।
ডুরকনব

4
আমি ডেনকারএফের সাথে একমত - সম্ভাব্য পাসওয়ার্ডগুলি স্ট্যাটিক তালিকার চেয়ে ইনপুট হিসাবে দেওয়া আরও অনেক আকর্ষণীয় চ্যালেঞ্জের পক্ষে হয়ে থাকে।
মেগো

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

উত্তর:


6

পাইথ, 13 বাইট

:#%*"[%s]"5Q0c"ABOUTAFTERAGAINBELOWCOULDEVERYFIRSTFOUNDGREATHOUSELARGELEARNNEVEROTHERPLACEPLANTPOINTRIGHTSMALLSOUNDSPELLSTILLSTUDYTHEIRTHERETHESETHINGTHINKTHREEWATERWHEREWHICHWORLDWOULDWRITE"5

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

 #             filter possible words on
:           0  regex match, with pattern
  %        Q   format input as
    "[%s]"     surround each group of letters with brackets (regex char class)
   *      5    repeat format string 5 times for 5 groups of letters

আপনি আপনার প্রথম কোড ব্লকটি আপডেট করতে ভুলে গেছেন: পি
ডাউনওয়েট

@ ডাউনগোট আমি আপডেট করতে কী ভুলে গেছি? এটা আমার কাছে ঠিক দেখাচ্ছে
ডুরকনব

অদ্ভুত, প্রথম কোডের ব্লকটি উদাহরণটির সাথে মিলছে না বলে মনে হচ্ছে (এটি একটি পুরানো সংশোধন বলে মনে হচ্ছে?)
ডাউনগোট


6

বাশ, 22 বাইট

grep `printf [%s] $@`< <(echo ABOUTAFTERAGAINBELOWCOULDEVERYFIRSTFOUNDGREATHOUSELARGELEARNNEVEROTHERPLACEPLANTPOINTRIGHTSMALLSOUNDSPELLSTILLSTUDYTHEIRTHERETHESETHINGTHINKTHREEWATERWHEREWHICHWORLDWOULDWRITE | sed 's/...../&\n/g')

এর মতো চালান:

llama@llama:~$ bash passwords.sh FGARTW LKSIRE UHRKPA TGYSTG LUOTEU
FIRST
      printf [%s] $@    surround all command line args with brackets
grep `              `   output all input lines that match this as a regex
                     <  use the following file as input to grep

এটি আপনার স্কোরকে কোনও পার্থক্য দেয় না, তবে আমি এখনও এই গল্ফটির বিরুদ্ধে প্রতিরোধ করতে পারি না:fold -5<<<ABOUTAFTERAGAINBELOWCOULDEVERYFIRSTFOUNDGREATHOUSELARGELEARNNEVEROTHERPLACEPLANTPOINTRIGHTSMALLSOUNDSPELLSTILLSTUDYTHEIRTHERETHESETHINGTHINKTHREEWATERWHEREWHICHWORLDWOULDWRITE|grep `printf [%s] $@`
ডিজিটাল ট্রমা

2

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

(l,p)=>p.find(w=>l.every((s,i)=>eval(`/[${s}]/i`).test(w[i])))

ফায়ারফক্সে 48 বা তার আগের বাইট:

(l,p)=>p.find(w=>l.every((s,i)=>~s.search(w[i],"i")))

এই ক্ষেত্রে সংবেদনশীলতার প্রয়োজনীয়তার জন্য না হলে 49 বাইট হত:

(l,p)=>p.find(w=>l.every((s,i)=>~s.search(w[i])))


2

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

:@laL,["about":"after":"again":"below":"could":"every":"first":"found":"great":"house":"large":"learn":"never":"other":"place":"plant":"point":"right":"small":"sound":"spell":"still":"study":"their":"there":"these":"thing":"think":"three":"water":"where":"which":"world":"would":"write"]:Jm.'(:ImC,L:Im'mC)

অসম্পূর্ণ বাইটগুলি বর্গাকার বন্ধনী সহ শব্দের অ্যারে।

ব্যাখ্যা

:@laL                          Unifies L with the input where each string is lowercased
     ,[...]:Jm.                Unifies the Output with one of the words
               '(            ) True if what's in the parentheses is false,
                               else backtrack and try another word
                 :ImC          Unify C with the I'th character of the output
                     ,L:Im'mC  True if C is not part of the I'th string of L

2

রুবি, 48 42 39 বাইট

এখন এটি শেষ হয়ে গেছে, এটি পাইথ সলিউশনের সাথে খুব সমান, তবে %sবিন্যাস ছাড়াই এটি এখন মূলত একটি সরাসরি বন্দর।

যদি আপনি কেবল ফলাফলটি আউটপুট করেন তবে আপনাকে শেষের putsপ্রয়োজন হবে না কারণ এটি আপনার জন্য ডিল করবে।[0]puts

->w,l{w.grep(/#{'[%s]'*l.size%l}/i)[0]}

পরীক্ষার ক্ষেত্রে:

f=->w,l{w.grep(/#{'[%s]'*l.size%l}/i)[0]}

w = %w{about after again below could
every first found great house
large learn never other place
plant point right small sound
spell still study their there
these thing think three water
where which world would write}

puts f.call(w, ["FGARTW","LKSIRE","UHRKPA","TGYSTG","LUOTEU"]) # first
puts f.call(w, ["ULOIPE","GEYARF","SHRGWE","JEHSDG","EJHDSP"]) # large
puts f.call(w, ["SHWYEU","YEUTLS","IHEWRA","HWULER","EUELJD"]) # still

1

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

w=>l=>w.filter(s=>eval("for(b=1,i=5;i--;)b&=!!~l[i].indexOf(s[i])")[0])

ব্যবহার:

f=w=>l=>w.filter(s=>eval("for(b=1,i=5;i--;)b&=!!~l[i].indexOf(s[i])")[0])
f(array_of_words)(array_of_letters)

1

পাইথন, 64 60 57 বাইট

wস্ট্রিং হিসাবে শব্দের তালিকা তৈরি করার কোড , শব্দগুলি স্পেস-বিভাজক (সমাধান কোডের দৈর্ঘ্য থেকে বাইট ছাড় দেওয়া হয়):

w="about after again below could every first found great house large learn never other place plant point right small sound spell still study their there these thing think three water where which world would write"

বর্তমান সমাধান (57 বাইট): @ রুটটোকে ধন্যবাদ 3 বাইট সংরক্ষিত

import re;f=lambda a:re.findall("(?i)\\b"+"[%s]"*5%a,w)[0]

এই ফাংশনটিতে ঠিক 5 টি স্ট্রিংয়ের একটি tuple(না list!) লাগে যা প্রতিটি পাসওয়ার্ড অক্ষরের ইনপুট হিসাবে সম্ভাব্য অক্ষরকে উপস্থাপন করে।

আদর্শ কোড.কম এ চলমান এই কোডটি দেখুন


দ্বিতীয় সংস্করণ (60 বাইট):

import re;f=lambda a:re.findall("\\b"+"[%s]"*5%a+"(?i)",w)[0]

এই ফাংশনটিতে ঠিক 5 টি স্ট্রিংয়ের একটি tuple(না list!) লাগে যা প্রতিটি পাসওয়ার্ড অক্ষরের ইনপুট হিসাবে সম্ভাব্য অক্ষরকে উপস্থাপন করে।

আদর্শ কোড.কম এ চলমান এই কোডটি দেখুন

প্রথম সংস্করণ (by৪ বাইট):

import re;f=lambda a:re.findall("\\b["+"][".join(a)+"](?i)",w)[0]

এই ফাংশনটি ঠিক 5 টি স্ট্রিংয়ের যেকোন পুনরাবৃত্ত (যেমন listবা tuple) গ্রহণ করে যা প্রতিটি পাসওয়ার্ড অক্ষরের ইনপুট হিসাবে সম্ভাব্য অক্ষরকে উপস্থাপন করে।

আদর্শ কোড.কম এ চলমান এই কোডটি দেখুন


1
এই "(?i)\\b"+"[%s]"*5%a
রেজেক্সটি

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

@ বাইটকম্যান্ডার আমি কোন ক্রেডিট দেখছি না।
এরিক আউটগলফার

@ The w=...কোড লাইনের ঠিক নীচে : " আসল সমাধান (57 বাইটস, @ রুটটোকে ধন্যবাদ 3 বাইট সংরক্ষণ করেছেন): "
বাইট কমান্ডার

@ বাইটকম্যান্ডার আমার পিসি হাইবারনেশন থেকে জাগানোর পরে সম্ভবত আমি পূর্ববর্তী সংস্করণটি দেখেছি।
এরিক আউটগলফার

0

হুন , 125 বাইট

|=
r/(list tape)
=+
^=
a
|-
?~
r
(easy ~)
;~
plug
(mask i.r)
(knee *tape |.(^$(r t.r)))
==
(skip pass |*(* =(~ (rust +< a))))

Ungolfed:

|=  r/(list tape)
=+  ^=  a
|-
  ?~  r
    (easy ~)
  ;~  plug
    (mask i.r)
    (knee *tape |.(^$(r t.r)))
  ==
(skip pass |*(* =(~ (rust +< a))))

হুনে রেজেক্স নেই, কেবল পার্সার কম্বিনেটর সিস্টেম। এটি সবকিছুকে কাজ করা জটিল করে তোলে: (mask "abc")মোটামুটি রেগেক্সে অনুবাদ করে [abc]এবং আমরা যে পার্সারটি তৈরি করছি তার মূল এটি।

;~(plug a b)এর অধীনে দুটি পার্সারের এক জাঁকজমকপূর্ণ বাঁধন ++plug, যা প্রথম এবং তারপরে দ্বিতীয়টি পার্স করতে হয় অথবা অন্যথায় এটি ব্যর্থ হয়।

++kneeএকটি পুনরাবৃত্ত পার্সার তৈরি করতে ব্যবহৃত হয়; আমরা এটিকে এক ধরণের *tapeফলাফল ( ) এবং প্রকৃত পার্সার তৈরি করার জন্য কল করতে একটি কলব্যাক দিই । এই ক্ষেত্রে, কলব্যাকটি হ'ল "পুরো বন্ধটি আবার কল করুন, তবে পরিবর্তে তালিকার লেজের সাথে"। ?~জাদুঅক্ষর পরীক্ষার তালিকা খালি, এবং দেয় (easy ~)(পার্স কিছু এবং রিটার্ন ~ না) অথবা অন্য যোগ maskকরুন এবং আবার recurse।

পার্সার তৈরি করে আমরা এটি ব্যবহার করতে পারি। ++skipফাংশনটি হ্যাঁ প্রত্যাবর্তনের তালিকার সমস্ত উপাদান সরিয়ে দেয়। ++rustআমাদের নিয়মের সাথে উপাদানটি বিশ্লেষণের চেষ্টা করে unitযা হয় হয় ( [~ u=result]বা ~আমাদের হাস্কেলের সম্ভবত সংস্করণ) আমাদের ফেরত দেয় । যদি এটি ~(কোনওটিই নয় এবং নিয়মটি পুরো বিষয়বস্তু বিশ্লেষণে ব্যর্থ হয়েছে বা পুরো বিষয়বস্তু বিশ্লেষণ করতে ব্যর্থ হয়েছে), তবে ফাংশনটি সত্য ফিরে আসে এবং উপাদানটি সরানো হয়।

যা অবশিষ্ট আছে তা হল একটি তালিকা, যেখানে প্রতিটি অক্ষর প্রদত্ত তালিকার বিকল্পগুলির মধ্যে একটি। আমি ধরে নিচ্ছি যে পাসওয়ার্ডগুলির তালিকা ইতিমধ্যে নামের অধীনে প্রসঙ্গে রয়েছে pass

> =pass %.  :*  "ABOUT"  "AFTER"   "AGAIN"   "BELOW"   "COULD"
   "EVERY"   "FIRST"   "FOUND"   "GREAT"   "HOUSE"
   "LARGE"   "LEARN"   "NEVER"   "OTHER"   "PLACE"
   "PLANT"   "POINT"   "RIGHT"   "SMALL"   "SOUND"
   "SPELL"   "STILL"   "STUDY"   "THEIR"   "THERE"
   "THESE"   "THING"   "THINK"   "THREE"   "WATER"
   "WHERE"   "WHICH"   "WORLD"   "WOULD"   "WRITE"
   ~  ==  limo
> %.  ~["SHWYEU" "YEUTLS" "IHEWRA" "HWULER" "EUELJD"]
  |=
  r/(list tape)
  =+
  ^=
  a
  |-
  ?~
  r
  (easy ~)
  ;~
  plug
  (mask i.r)
  (knee *tape |.(^$(r t.r)))
  ==
  (skip pass |*(* =(~ (rust +< a))))
[i="STILL" t=<<>>]

0

পাইথন 3, 81 বাইট

from itertools import*
lambda x:[i for i in map(''.join,product(*x))if i in l][0]

একটি বেনাম ফাংশন যা স্ট্রিংগুলির তালিকার ইনপুট নেয় xএবং পাসওয়ার্ডটি দেয়।

সম্ভাব্য পাসওয়ার্ডগুলির তালিকাটি এই lহিসাবে সংজ্ঞায়িত করা হয়েছে:

l=['ABOUT', 'AFTER', 'AGAIN', 'BELOW', 'COULD',
   'EVERY', 'FIRST', 'FOUND', 'GREAT', 'HOUSE',
   'LARGE', 'LEARN', 'NEVER', 'OTHER', 'PLACE',
   'PLANT', 'POINT', 'RIGHT', 'SMALL', 'SOUND',
   'SPELL', 'STILL', 'STUDY', 'THEIR', 'THERE',
   'THESE', 'THING', 'THINK', 'THREE', 'WATER',
   'WHERE', 'WHICH', 'WORLD', 'WOULD', 'WRITE']

এটি একটি সাধারণ উদ্দীপনা; রেজিক্স ছাড়াই আমি কীভাবে এটি পেতে পারি তা আগ্রহী ছিলাম।

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

from itertools import*  Import everything from the Python module for iterable generation
lambda x                Anonymous function with input list of strings x
product(*x)             Yield an iterable containing all possible passwords character by
                        character
map(''.join,...)        Yield an iterable containing all possible passwords as strings by
                        concatenation
...for i in...          For all possible passwords i...
i...if i in l           ...yield i if i is in the password list
:[...][0]               Yield the first element of the single-element list containing the
                        correct password and return

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

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