নতুন পাসওয়ার্ড আইডিয়া: শব্দ-ওয়াকার


23

আমি আমার পাসওয়ার্ডগুলি উত্পন্ন করার জন্য একটি নতুন উপায়ের কথা ভেবেছিলাম এবং এটি দীর্ঘমেয়াদে খুব চালাক না হলেও এটি এখনও মজাদার কোড-গল্ফ তৈরি করতে পারে।

শব্দের একটি স্ট্রিং গ্রহণ করে, পাসওয়ার্ডটি এভাবে তৈরি করা হয়:

  • নবম শব্দে নবম চরিত্রটি চয়ন করুন
  • যদি n শব্দের চেয়ে বড় হয় তবে পিছন দিকে গণনা চালিয়ে যান

উদাহরণ:

This is a fun task!
T     s a  u      !

টি হ'ল প্রথম অক্ষরটি
হ'ল দ্বিতীয়টি
প্রথমটি, তবে পিছনে পিছনে যাওয়া এটি তৃতীয়
ইউ দ্বিতীয় কিন্তু পিছনের দিকে গণনা করার কারণে এটিও চতুর্থ
'!' 'টাস্ক'-এ পঞ্চম চরিত্র! এবং এইভাবে চূড়ান্ত পাসওয়ার্ড অন্তর্ভুক্ত করা হবে,Tsau!

বিধি

  • ইনপুট একটি স্ট্রিং হবে
  • স্পেসে স্ট্রিং আলাদা করুন, অন্য সমস্ত অক্ষর অবশ্যই অন্তর্ভুক্ত থাকতে হবে
  • বড় হাতের অক্ষরগুলি বড় হাতের অক্ষরের সাথে অবশ্যই বড় হতে হবে remain
  • আপনি প্রতিটি শব্দের মধ্যে n পদক্ষেপ গ্রহণ করেন, যেখানে n হ'ল সংখ্যার আগে যে শব্দগুলির সংখ্যা এসেছে
  • যদি এন শব্দের চেয়ে বড় হয় তবে আপনাকে অবশ্যই শব্দের মধ্য দিয়ে পিছনে যেতে হবে, আপনি যদি শুরুটি আঘাত করেন তবে এন বার না পাড়া পর্যন্ত আপনি আবার এগিয়ে যাবেন until
  • প্রথম এবং শেষের অক্ষরটি কেবল একবার পদক্ষেপ নেওয়া হয়, সুতরাং সপ্তম অবস্থানে 'মজা' উদাহরণ হিসাবে 'ফানুফুন' যায় এবং 'এন' এ শেষ হয়, 'ফানফুফ' হয় না এবং শেষ হয়
  • আউটপুট অবশ্যই একটি স্ট্রিং হতে হবে

উদাহরণ:

Input              Output
Once Upon A Time   OpAe
There was a man    Taaa
Who made a task    Waak
That was neat!     Taa
This is a long string to display how the generator is supposed to work  Tsagnoyotoipto

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জিতেছে!


3
toলম্বা স্ট্রিংয়ের দ্বাদশ শব্দের (0-সূচকযুক্ত), এবং তাই কোড লেটারটি হওয়া উচিত t, নয় o
নীল

@ নীল <s> ক্রমটি 1-সূচকযুক্ত, অন্যথায় আপনি প্রথম শব্দের সাথে প্রথম অক্ষর দিয়ে শুরু করতে পারবেন না </ s> (আমি চেষ্টা করেছি) আমার খারাপ, আমি এখন এটি দেখতে পাচ্ছি
Troels এমবি জেনসেন

14
Tsau!Fuck!
সেরজিওল

1
এছাড়াও ফানফুন থেকে ফুনুফুন বেছে নেওয়ার জন্য আপনার পদক্ষেপের পরিকল্পনা আউটপুটটিতে স্বরগুলির শতাংশ বাড়িয়ে তুলবে। ক্রিপ্টোগ্রাফিকভাবে, এটি একটি শক্তিশালী পাসওয়ার্ড জেনারেটর নয়।
ক্রিগগি

1
@ ক্রিগি আমি কখনই এটি ব্যবহারের ইচ্ছা করি নি, তবে যেমনটি আমি বলেছিলাম এটি মজাদার চ্যালেঞ্জের মুখোমুখি হবে, এবং মনে হয় যে গল্ফাররা তাতে রাজি
ট্রয়েস এমবি জেনসেন

উত্তর:





4

জাভা 10, 148 117 114 110 বাইট

s->{int i=-1,j;for(var a:s.split(" "))System.out.print(a.charAt((j=a.length()-1)>0*i++?i/j%2<1?i%j:j-i%j:0));}

-31 ধন্যবাদ বাইট @SamYonnou একটি বন্দর তৈরি করে @ user71546 এর জাভাস্ক্রিপ্ট উত্তর
-4 বাইটস আবার জ্যামের অ্যালগরিদমকে অনুকূল করে @ সামায়োননুকে ধন্যবাদ জানায় ।

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

ব্যাখ্যা:

s->{                            // Method with String parameter and no return-type
  int i=-1,                     // Step integer, starting at -1
      j;                        // Temp integer
  for(var a:s.split(" "))       // Loop over the parts split by spaces
    System.out.print(           // Print:
     a.charAt((j=a.length()-1)  //  Set `j` to the the length of the part minus 1
               >0               //  If the length of the part is larger than 1 (`j` > 0)
                 *i++?          //  (and increase `i` by 1 in the process with `i++`)
                i/j%2<1?        //   If `i` integer-divided by `j` is even:
                 i%j            //    Print the character at index `i` modulo-`j`
                :               //   Else:
                 j-i%j          //    Print the character at index `j` minus `i` modulo-`j`
               :                //  Else:
                0));}           //   Print the first (and only) character
                                //   (the >0 check is added to prevent divided-by-0 errors)

0, 2 এবং 5 পরীক্ষার
কেসগুলির

1
ব্যবহারকারী 71546 এর সংস্করণটি যা করছে মনে হচ্ছে তার অনুরূপ "আরও গাণিতিক পদ্ধতির ব্যবহার করে" 117 এ নেমে গেল:s->{int i=-1,j;for(var a:s.split(" ")){System.out.print(a.charAt(++i>(j=a.length()-1)?j>0?i/j%2==0?i%j:j-i%j:0:i));}}
স্যামায়ননু

1
@ সাম্যাওনৌ ধন্যবাদ! এবং বন্ধনীগুলি সরিয়ে এবং এতে পরিবর্তন ==0করে আমি আরও তিনটি বাইট গল্ফ করতে সক্ষম হয়েছি <1
কেভিন ক্রুইজসেন

1
++i>(j=a.length()-1)শর্ত থেকে পরিত্রাণ পেয়ে 110 তে গল্ফড যেহেতু সেই শর্তের ফলাফল নির্বিশেষে গণিত একইভাবে কাজ করে:s->{int i=-1,j;for(var a:s.split(" "))System.out.print(a.charAt(0<(j=a.length()+i-++i)?i/j%2<1?i%j:j-i%j:0));}
সামায়োনু

1
@ সাম্যাওনৌ আবারও ধন্যবাদ! আমি সামান্য পরিবর্তন করেছি 0<(j=a.length()+i-++i)?করতে (j=a.length()-1)>0*i++?(কোন বাইট তাই তবে করছেন সংরক্ষিত হয়) তাই ব্যাখ্যা ধরনের একটি বিট সহজ ছিল।
কেভিন ক্রুইজসেন

3

কাঠকয়লা , 16 বাইট

⭆⪪S §⁺ι✂ι±²¦⁰±¹κ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

  S                 Input string
 ⪪                  Split on spaces
⭆                   Map over words and join
      ι ι           Current word
       ✂ ±²¦⁰±¹     Slice backwards from 2nd last character to start exclusive
     ⁺              Concatenate
    §          κ    Cyclically index on current word index
                    Implicitly print

আমি প্রায়শই স্লাইসের শেষ প্যারামিটার ব্যবহার করতে পাই না।


আমি পছন্দ করি যে কাঠকয়লা একটি কাঁচি গ্লিফ ব্যবহার করে
জোনা

3

জাভাস্ক্রিপ্ট (নোড.জেএস) , 78 70 69 68 বাইট

-1 বাইট @ আরনাউল্ড

x=>x.split` `.map((y,i)=>y[a=i%(l=y.length-1)|0,i/l&1?l-a:a]).join``

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

ব্যাখ্যা

x=>
 x.split` `                    // Split the words by spaces
 .map((y,i)=>                  // For each word:
  y[                           //  Get the character at index:
                               //   A walk has cycle of length (2 * y.length - 2)
   a=i%(l=y.length-1)|0,       //   Calculate index a = i % (y.length - 1)
   i/l&1                       //   Check in which half the index i in
   ?l-a                        //   If in the second half of cycle, use y.length - 1 - a
   :a                          //   If in the first half of cycle, use a                  
  ]
 ).join``                      // Join back the letters





1

জাপট,, -P11 বাইট

¸Ëê ŪD gEÉ

চেষ্টা করে দেখুন

¸Ë+s1J w)gE

চেষ্টা করে দেখুন


ব্যাখ্যা

¸Ëê ŪD gEÉ
¸               :Split on spaces
 Ë              :Map over each element D at index E
  ê             :  Palindromise
    Å           :  Slice off the first character
     ªD         :  Logical OR with the original element (the above will return an empty string for single character words)
        g       :  Get the character at index
         EÉ     :  E-1
¸Ë+s1J w)gE
¸               :Split on spaces
 Ë              :Map over each element D at index E
   s1J          :  Slice off the first and last characters
       w        :  Reverse
  +     )       :  Append to D
         gE     :  Get the character at index E

1

সি (জিসিসি) , 148 বাইট (স্ট্রিং সংস্করণ), 114 বাইট (মুদ্রণ সংস্করণ)

যদি আমি অবশ্যই একটি স্ট্রিং (দীর্ঘ সংস্করণ) ফেরত পাঠাতে পারি:

char c[99]={0};char*f(s,t,u,i,j,k)char*s,*t,*u;{for(u=c,i=0;t=strtok(s," ");s=0,i++)*u++=t[j=strlen(t),k=2*j-(j>1)-1,(i%k<j?i%k:k-i%k)%j];return c;}

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

অন্যথায়, আমি কেবল মুদ্রণ করেছি এবং একটি বাফার (সংক্ষিপ্ত সংস্করণ) সম্পর্কে চিন্তা করব না:

f(s,t,i,j,k)char*s,*t;{for(i=0;t=strtok(s," ");s=0,i++)putchar(t[j=strlen(t),k=2*j-(j>1)-1,(i%k<j?i%k:k-i%k)%j]);}

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


-(j>1)-1+~(j>1)আমার মনে হয় 1 বাইট কম দিয়ে প্রতিস্থাপন করা যাবে ।
শিয়েরু আসাকোটো

106 অক্ষর: putchar( t[ j=strlen(t)-1, k = i++ % (j ? j*2 : 1), k<j ? k : j+j-k ]); এটি অনলাইনে চেষ্টা করুন!
ব্যবহারকারী5329483

বাফার্ড সংস্করণ: গ্লোবাল ভেরিয়েবলগুলি সুস্পষ্টভাবে শূন্য করা হয়। প্রতিস্থাপন *u++সঙ্গে c[i]এবং তুমি মুছে ফেলুন।
ব্যবহারকারী5329483

@ ব্যবহারকারী5329483 105 বাইটে
সিলিংক্যাট



1

হাস্কেল, 65 62 61 বাইট

zipWith(\i->(!!i).cycle.(id<>reverse.drop 1.init))[0..].words

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

এটির জন্য সর্বশেষতম সংস্করণ প্রয়োজন Preludeযাটির <>ফাংশনটি বৈশিষ্ট্যযুক্ত ।

                   words    -- split the input string into a list of words
zipWith(\i->     )[0..]     -- zip the elements i of [0..] and the words pairwise
                            -- with the function      
      ... <> ...            --   call the functions with a word and concatenate
                            --   the results. The functions are
        id                  --     id: do nothing
        reverse.drop 1.init --     drop last and first element and reverse
    cycle                   --   repeat infinitely
(!!i)                       -- take the ith elemnt of  

সম্পাদনা করুন: -3 বাইট @ ইউজার 28667, -1 বাইট @ বি কে ধন্যবাদ মেহতা


দেখে মনে হচ্ছে zipWith(\i w->(cycle$id<>reverse.drop 1.init$w)!!i)[0..].wordsকাজও করে।
ব্যবহারকারী 28667

1
\i->(!!i).cycle.(id<>reverse.drop 1.init)সুস্পষ্ট wউল্লেখ (টিআইও)
বি মেহতা

1

স্ট্যাক্স , 9 বাইট

éñ~╗D¡┤Gq

এটি চালান এবং এটি ডিবাগ করুন

আনপ্যাকড, নিরবচ্ছিন্ন এবং মন্তব্য করা হয়েছে, এটি দেখতে এটির মতো দেখাচ্ছে।

j       split into words
{       start block for mapping
  cDrD  copy word; remove first and last character; reverse
  +     concatenate with original word
  i@    modularly (wrap-around) index using map iteration index
m       perform map

এটি চালান


1

পিএইচপি , 77 বাইট

while(ord($w=$argv[++$i]))echo($w.=strrev(substr($w,1,-1)))[~-$i%strlen($w)];

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

  • -3 বাইট কেভিনকে ধন্যবাদ
  • -10 বাইটস টাইটাসকে ধন্যবাদ

1
চমৎকার উত্তর! গলফ এক ছোট জিনিস: আপনি পরিবর্তন করে বন্ধনী এবং এক অতিরিক্ত তৃতীয় বাইট পরিত্রাণ পেতে পারেন foreach(...){$c=...;echo$c[...];}করতে foreach(...)echo($c=...)[...];অনলাইনে এটি ব্যবহার করে দেখুন: 87 বাইট
কেভিন ক্রুইজসেন

আপনি স্বয়ংক্রিয়ভাবে শব্দগুলিতে বিভক্ত হয়ে যুক্তি তালিকাটি ব্যবহার করতে পারেন (-8 বাইট) এবং .=দুটি বাইট সংরক্ষণ while(ord($w=$argv[++$i]))echo($w.=strrev(substr($w,1,-1)))[~-$i%strlen($w)]; করুন
তিতাস

নিস! একটি প্রশ্ন: ~ - $ আমি ($ i-1) হিসাবে একই করি, তাই না?
ব্যবহারকারী 2803033

0

পাওয়ারশেল 208 186 170 বাইট

$args|%{$i=0;-join($_.Split()|%{$l=($b=($a=$_)).Length;if($l-gt2){$b=($a|%{-join$a[($l-2)..1]})}for($j=0;$a.Length-le$i;$j++){$a+=($b,$_)[$j%2]}$a.Substring($i,1);$i++})}

Ungolfed:

$args|%{
   $i=0;
    -join($_.Split()|%{
        $l=($b=($a=$_)).Length;
        if($l-gt2){
            $b=($a|%{-join$a[($l-2)..1]})
        }
        for($j=0;$a.Length-le$i;$j++){
            $a+=($b,$_)[$j%2]
        }
        $a.Substring($i,1);
        $i++
    })
}

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

@(
    "This is a fun task!",
    "Once Upon A Time",
    "There was a man",
    "Who made a task",
    "That was neat",
    "This is a long string to display how the generator is supposed to work"
)|%{$i=0;-join($_.Split()|%{$l=($b=($a=$_)).Length;if($l-gt2){$b=($a|%{-join$a[($l-2)..1]})}for($j=0;$a.Length-le$i;$j++){$a+=($b,$_)[$j%2]}$a.Substring($i,1);$i++})}

1
আপনি এখানে সংক্ষিপ্ত করতে পারে অনেক কিছুই। আপনি পাওয়ারশেলের গল্ফ করার টিপসগুলি দেখেছেন ?
ব্রিটিশবাদী

ধন্যবাদ! আমি পোস্ট করার ঠিক পরে সুইচ ব্যবহার করার কথা ভেবেছিলাম, তবে বাকীটি আমার কাছে এখনও আসেনি।
পিটার ভ্যান্ডিভিয়ার

এছাড়াও এখানে একটি আসল সমস্যা হ'ল আপনি এই স্নিপেটের সত্যই কোথাও ইনপুট গ্রহণ করবেন না। কোনও প্রোগ্রাম বা ফাংশন লিখতে পেরে আমরা বেশ নমনীয়, তবে আপনার অন্তর্নিহিত ইনপুট রয়েছে। প্রথম ধাপ হিসেবে আপনি কেবল আপনার প্রতিস্থাপন পারে ""|%{সঙ্গে $args|%{, কিন্তু আমি মনে করি আপনি এটা গলফ আরো কার্যকরভাবে করতে পারেন খুব;)
briantist

1
এখানে টিআইওতে একটি বিক্ষোভ রয়েছে যা এটি দেখায় যে কীভাবে পরীক্ষার ক্ষেত্রে আর্গুমেন্ট বৈশিষ্ট্যটি ব্যবহার করতে হয় । আপনার কোডের জন্য কোড ব্লক রাখা আপনার টিআইওর সহজ লিঙ্কিং এবং বাইট গণনাগুলি আপনার পোস্টের জন্য ব্যবহার করতে দিন!
ব্রিটিশবাদী

0

জে, 43 বাইট

[:(>{~"_1#@>|i.@#)[:(,}.@}:)&.>[:<;._1' '&,

ungolfed

[: (> {~"_1 #@> | i.@#) [: (, }.@}:)&.> [: <;._1 ' '&,
  • <;._1 ' '&, স্পেসে বিভক্ত
  • (, }.@}:)&.> প্রতিটি শব্দের জন্য, প্রথম এবং শেষ এলমকে মেরে শব্দটিতে যুক্ত করুন
  • #@> | i.@# প্রতিটি শব্দের দৈর্ঘ্যের অবশিষ্ট অংশটিকে তার সূচকে বিভক্ত করুন
  • > {~"_1 ফলাফলটি নিন এবং প্রতিটি শব্দ থেকে এটিকে টানুন।

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

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