একটি কথায় অক্ষরগুলি এলোমেলোভাবে কীভাবে করা যায়


55

কিছু বিতর্কিত কাহিনী অনুসারে , রেডনিগের জন্য একটি কব্জায় লেট্রেসের গন্ধ রাইডনিগের পক্ষে তেমন কিছু নয়, লম্বা লম্বা লম্বা লম্বা লম্বা লম্বা লম্বা লম্বা লম্বা রঙের মেশিনের সাথে।

সুতরাং, মজা করার জন্য, প্রথম এবং শেষ অক্ষরটি স্থানে রেখে কোনও শব্দের সাথে অক্ষরের ক্রমটি র্যান্ডমাইজ করার সবচেয়ে কম কাজ কী হবে?

এটি আমার জাভাস্ক্রিপ্ট সহ ছুরিকাঘাত। সমস্ত সাদা স্থানটি এটি 124 130 টি অক্ষরে সরানো হয়েছে ।

function r(w) {
  var l=w.length-1;
  return l<3?w:w[0]+w.slice(1,l).split("").sort(function(){return Math.random()-.5}).join("")+w[l];
}

খাটো জাভাস্ক্রিপ্ট সর্বদা স্বাগতম।


  • সম্পাদনা করুন: দৈর্ঘ্যের চেক যোগ করা হয়েছে। সংক্ষিপ্ত শব্দের জন্য ফাংশনটি ব্যর্থ হওয়া উচিত নয়।

3
Haskell,, 4 অক্ষর: r=id
থমাস এডিং

2
হ্যাঁ. এটি ইনপুট হিসাবে একই জিনিস ফিরে আসে। অন্য নোটে, আমরা যতিচিহ্ন সম্পর্কে কি করব? আমরা কি কেবলমাত্র বর্ণগুলি নিয়ে গঠিত শব্দগুলিতে কাজ করি?
থমাস এডিং

1
আপনি কী বিষয়ে কথা বলছেন তা ত্রিনিদাত নিশ্চিত নয়, তবে idএটি পরিচয়ের কাজ। আমি এখনও 100 টিরও কম অক্ষরে এই সমস্যার সমাধান হাসাকেল দেখতে চাই।
অ্যারলেন

3
ফলাফলের অভিন্ন বিতরণ প্রয়োজনে স্পেসিফিকেশনটি আপডেট করা উচিত? এটি 4 টি চরিত্রের হাস্কেল সমাধানটিকে অস্বীকার করবে। এটি আপনার উদাহরণ জাভাস্ক্রিপ্ট সমাধানটিকেও অস্বীকার করবে (অভিন্ন নয় এমন ধরণের কাজ করে বদলে যাওয়া)।
থমাস এডিং

2
প্রথম বাক্যটির জন্য +1: এটি ভুল এক্সপি বানান হয়েছে তা বুঝতে আমার কয়েক সেকেন্ড সময় লেগেছে
নেট কোপ্পেনহেভার

উত্তর:


21

হাস্কেল, 4 টি অক্ষর

ট্রিনিথিস প্রস্তাবিত কার্যটি স্পেসিফিকেশনের সাথে মেলে:

s=id

এটি স্ট্রিংটি অপরিবর্তিত রেখে দেয়, এভাবে প্রথম এবং শেষ অক্ষরগুলি স্থানে রাখা এবং অন্যান্য সমস্ত অক্ষরের ক্রমবর্ধন করা

যদি কেউ অনুমতিগুলির সম্ভাব্যতা বিতরণে অসন্তুষ্ট হয়, তবে এখানে আরও ভাল বিতরণ দেওয়ার সমাধান রয়েছে। এটি স্পষ্টতই আরও জটিল:

Haskell,, 110 120 107 টি অক্ষর

import Random
s l=randomRIO(1,length l-2)>>=g.($l).splitAt
g(a:b,c:d)=fmap(a:).s$c:b++d
g(a,b)=return$a++b

এই ফাংশনটি ব্যবহার করে একটি প্রোগ্রামের উদাহরণ:

main = getLine >>= s >>= putStrLn

18
"অনুমতিগুলির সম্ভাব্যতা বিতরণে অসন্তুষ্ট" আমাকে হাসিয়ে তোলে। :)
টমলক

@ রোটার আপনি কিভাবে এই ফাংশনটিকে কল করবেন?
অ্যারলেন

আমি আমার পোস্টে একটি উদাহরণ যুক্ত করেছি।
রোটসর

fmap((a:t!!i:).tail)
FUZxxl

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

19

জে, 26 24 23 টি অক্ষর

r=:{.,({~?~@#)&}.&}:,{:

সাধারণ কোড গল্ফ নিয়ম অনুসারে, আপনাকে কোনও নামের সাথে বাক্যটি আবদ্ধ করতে হবে না।
FUZxxl

#?#এর চেয়ে কম একটি ?~@#
চরিত্রটি

15

রুবি, 44 টি অক্ষর

r=->w{w[h=1..-2]=[*w[h].chars].shuffle*"";w}

সংক্ষিপ্ত শব্দের জন্যও কাজ করে, অর্থাত এক, দুটি বা তিনটি অক্ষরবিহীন শব্দগুলি প্রত্যাশিত ফিরে আসে।

সম্পাদনা করুন: ভেন্তেরোর অ্যারে-স্প্ল্যাট ধারণাটি ব্যবহার করে অন্য একটি চর সংরক্ষণ করে।


এটি আসলে ৪৪ টি অক্ষর। আমি অবশেষে আমার নিজের টিউন করে ঠিক একই উত্তরটি নিয়ে এসেছি - এখন আপনার পড়ার পরে আমি একটি অনুলিপি-বিড়ালের মতো অনুভব করছি।
আলেক্সি ইয়ার্তিয়াহো

@ user2316 অবশ্যই আপনি ঠিক বলেছেন। ধন্যবাদ.
হাওয়ার্ড

11

রুবি 1.9, 46 টি অক্ষর

r=->w{w[0]+[*w[1..-2].chars].shuffle*""+w[-1]}

+1 অ্যারে-স্প্ল্যাটের এই ব্যবহারটি আমাকে একটি চরও সংরক্ষণ করেছিল। ভালো বুদ্ধি.
হাওয়ার্ড

আমি রুবি জানি না - এটি আমার রুবি 1.8 এ ব্যর্থ হয়, তাই আমার ধারণা আমার কোনও সংস্করণ কখনই প্রয়োজন? এটি কি 'আমি' এর মতো ইনপুট নিয়ে কাজ করে?
ব্যবহারকারী অজানা

@ ব্যবহারকারী: এটি ঠিক সেখানে "রুবি ১.৯" বলেছেন। ;) - ভেন্টোরো - আমি যে বুদ্ধিমান প্রয়োজনীয়তাগুলি উল্লেখ করতে ভুলে গেছি তার মধ্যে একটি হ'ল এটি শব্দের দৈর্ঘ্য 0 এবং 1 এর জন্য ব্যর্থ হওয়া উচিত নয় দুঃখিত Sorry
টমলক

11

Golfscript

"ফাংশন" হিসাবে (নামযুক্ত কোডব্লক): 20 টি অক্ষর

{1/(\)\{;9rand}$\}:r

স্ট্যাকের শীর্ষতম উপাদানটিতে কাজ করার সময়: 16 টি অক্ষর

1/(\)\{;9rand}$\

এটি খুব ভাল বদলানো নয়, তবে সম্ভবত এই কাজের জন্য ঠিক আছে OK (এটি, এটি "এলোমেলোভাবে দেখায়")) তবুও, আরও দুটি চর ব্যয় করে আপনি প্রতিস্থাপন করে আরও অনেক ভাল পরিবর্তন 9করতে পারবেন 9.?
ইলমারি করোনেন

এটি একক-বর্ণের শব্দের জন্য ব্যর্থ হয় এবং আমিও মনে করি না যে ফাংশনটি স্ট্রিং, স্ট্রিংগুলির অ্যারে, স্ট্রিং (একক স্ট্রিংয়ের বিপরীতে) ফেরত দেওয়ার অনুমতি দেওয়া উচিত।
মার্টিন ইন্ডার

11

সি ++, characters৯ টি অক্ষর ( রেঞ্জ চেক সহ )

string f(string s){if(s.size()>3)random_shuffle(&s[1],&s.end()[-1]);return s;}

সি ++, 8165 টি অক্ষর ( পরিসীমা পরীক্ষা ছাড়াই )

string f(string s){random_shuffle(&s[1],&s.end()[-1]);return s;}

ফলাফল ফেরতের পরিবর্তে রেফারেন্স দিয়ে পাস ব্যবহার করা হলে যে কোনও সমাধান থেকে আরও 10 টি অক্ষর ছাঁটাই হয়

সম্পূর্ণ প্রোগ্রাম, শব্দের একটি স্ট্রিং পড়া এবং এগুলি রূপান্তরিত করা:

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <ctime>
#include <string>

using namespace std;    
string f(string s){if(s.size()>3)random_shuffle(&s[1],&s.end()[-1]);return s;}

int main() {
    std::srand(std::time(0));
    std::string s;
    while(std::cin >> s)
        std::cout << f(s) << " ";
    std::cout << std::endl;
}

মনোবল: ইতিমধ্যে যা আছে তা তৈরি করবেন না। ওহ, এবং ওভারফ্লো চেকগুলি ভাসেসের জন্য।


খুব ভাল, std::random_shuffleএটা আমার কাছে নতুন new বিটিডব্লু আমি মনে করি আপনি #include<string>আপনার সম্পূর্ণ কোডটি ভুলে গেছেন ।
স্কট লোগান 15

1
এরকম কিছু আমার মনে মনে ছিল। দুর্ভাগ্যক্রমে জেএস-এ স্ট্রিং ইন-প্লেস বদলের জন্য কোনও অন্তর্নির্মিত নেই।
তোমালাক

খুব ছোট স্ট্রিং জন্য ব্যর্থ।
ব্যবহারকারী অজানা

এটি সত্য, আপনি একটি দৈর্ঘ্যের চেকটি মিস করছেন (আমিও করেছি)। বিটিডাব্লু @ অরলেনের উত্তরটিও এক নজর দেখার মতো।
টমলক

1
@ ইউজারুননড এটাই আমি বোঝাতে চাইছি "ওভারফ্লো চেক হুজুর জন্য"। তবে ন্যায্য হতে হবে, তাই প্রায় সব অন্যান্য সমাধান।
কনরাড রুডল্ফ

8

পাইথন, 86 টি অক্ষর

import random as r
def f(w):t=list(w[1:-1]);r.shuffle(t);return w[0]+''.join(t)+w[-1]

এবং এটি ব্যবহারের উদাহরণ এখানে:

for x in ["ashley", "awesome", "apples"]:
    print f(x)

এটি আমার প্রথম কোড গল্ফ প্রচেষ্টা। সমস্যা সমাধানের পরে আমি উত্তরগুলি সন্ধান করার সিদ্ধান্ত নিয়েছি এবং এটি আমার অবাক করার মতো কোনও উত্তর নয়। যদিও এটি মজাদার ছিল: ও)

অন্যান্য প্রতিক্রিয়াগুলি দেখার পরে আমি একটি পরিবর্তন করেছি এবং এটি একটি নাম ব্যবহার করার জন্য আমার আমদানির বিবৃতি পরিবর্তন করছিল। ভালো বুদ্ধি. ; O)


এবং এখনও, আপনার সমাধান আমার আগে ভোট দেওয়া! : পি
বুথবি

সংক্ষিপ্ত স্ট্রিংয়ে ব্যর্থ; আমার অজগর উত্তরটি 75 টি অক্ষর হবে যদি এটি সংক্ষিপ্ত স্ট্রিংগুলিতে ব্যর্থ হয় ( from random import*\nf=lambda w:w[0]+''.join(sample(w[1:-1]),len(w)-2)+w[-1])।
ডাঃ জিম্বোব

7

সি (কেএন্ডআর) - 88 86 87 অক্ষর

r(char*s){int m,j,l=strlen(s)-2,i=l;while(--i>0){j=rand()%l+1;m=s[j];s[j]=s[1];s[1]=m;}}

সি তে কোনও বিল্ট-ইন অদলবদল বা সাফাল ফাংশন নেই, তাই আমাকে এটি ম্যানুয়ালি করতে হয়েছিল :(

অবহেলিত আর () সহ নমুনা প্রোগ্রাম:

#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>

// -----------------------------------------------------------------------
r( char *s )
{
    int m, j, l=strlen(s)-2, i=l;

    while (--i>0)
    {
        j = rand() % l + 1;

        m = s[j];
        s[j] = s[1];
        s[1] = m;
    }

}
// -----------------------------------------------------------------------
int main()
{
    char s[] = "anticipated";

    srand( time(0) );
    r( s );
    puts( s );

    return 0;
}

সম্পাদনা : 3 টিরও কম অক্ষর থাকে তখন বাগটি স্থির করে (ব্যবহারকারীরা এটির জন্য পরিচিত হিসাবে পরিচিত!)


1
গ্লিবিসি-তে, (ছিল?) একটি মানহীন লাইব্রেরি ফাংশন রয়েছে strfry
যান্ত্রিক শামুক 23

মজার অভিজ্ঞতা, যদি আমি এটি দিয়ে খাওয়াতে পারিchar s[] = "na"; // not anticipated
অজানা

@ ব্যবহারকারী জানেন: আমি কেবল কোডটি সম্পাদনা করে ঠিক করেছি, বাগটি দেখার জন্য ধন্যবাদ! (আমি সবেমাত্র লুপের শর্তে> ০ যোগ করেছি, "আমার জন্য আরও দু'টি দাম দিতে চাইছি, তবে প্রয়োজন, চরগুলি :))
হ্যারি কে।

1
@ মেকানিক্যাল শামুক: আমি মনে করি স্ট্রাইফ এখনও গ্লাবসি তে আছে।
হ্যারি কে।

7

অজগর, 87 79 75 93 92 অক্ষর (0,1 দৈর্ঘ্যের স্ট্রিং পরিচালনা করে)

from random import*
f=lambda w:w if 4>len(w)else w[0]+''.join(sample(w[1:-1],len(w)-2))+w[-1]

সম্পাদনা: মূলত মনে হয়েছিল স্ট্রিং শব্দের বিভক্ত করার কথা ছিল (যা এটি 128 অক্ষরে হয়েছিল; এখন 87 টি অক্ষরে প্রয়োজন হয়)। আরেগ, আমার বোঝার পড়া খারাপ।

সম্পাদনা 2: ডিএফ থেকে ল্যাম্বদা ফাংশনে ডিএফ থেকে 6 টি অক্ষর সংরক্ষণের জন্য পরিবর্তন করুন। ধরে নিলাম নমুনা ইতিমধ্যে নেমস্পেসে আমদানি করা হয়েছে ( from random import sample) এটি কমিয়ে আনতে পারে। 60)।

3 সম্পাদনা করুন: "লেন (ডাব্লু [1: -1])" (12 অক্ষর) থেকে "লেন (ডাব্লু) -2" (8 টি চর) প্রতি জিনিবলারের চমৎকার পরামর্শ।

সম্পাদনা 4: জেবার্নান্দো একটি চর বাঁচিয়েছিলেন (বিবেচনা করে from random import *দেখেছিলেন এটি সমতুল্য - স্থানটি উপলব্ধি import *করা অপ্রয়োজনীয় নয়); ব্যবহারকারী অজানা w if len(w)<4 else0 এবং 1 চর স্ট্রিং সঠিকভাবে পরিচালনা করতে 19 টি অক্ষর যুক্ত করেছে ।

সম্পাদনা 5: বুথবাইয়ের কোড গল্ফ ট্রিকের জন্য আরও একটি চর সংরক্ষণ করা। if len(w)<4 elseto if 4>len(w)else


তবে, প্রশ্নটি কেবল ইনপুটকে শব্দের একটি স্ট্রিং নয়, একটি শব্দ হিসাবে সংজ্ঞায়িত করে। :)
বেন রিচার্ডস

1
@ সিডরান 32: ধন্যবাদ, আমার খারাপ। আমি সবেমাত্র লক্ষ্য করেছি (পুনরায় পড়ার সময়) এবং তারপরে আপনার মন্তব্যটি দেখেছি; মুছে ফেলা - সম্পাদিত - এবং মুছে ফেলা হয়নি।
ডাঃ জিমবব

আইডিয়া - আপনি এটি করে 3 টি চর ছাঁটাতে পারেন .... ডিফ এফ (ডাব্লু): জে = ডাব্লু [1: -1]; প্রত্যাবর্তন w [0] + ''। join (r.sample (j, len (j))) + w [-1]
অ্যারেডেম

@ আরএমকেনজি: ভালো ধারণা। যাইহোক, লাম্বদা ফাংশনটি (6 টি অক্ষর সংরক্ষণ করা) ছাঁটাই করার পরে আপনার মন্তব্যটি ঠিক আগে দেখার আগে, আমি আর আপনার মধ্যবর্তী ভারগুলি সংজ্ঞায়নের পদ্ধতিটি আর করতে পারি না।
ডাঃ জিম্বোব

3
len(w)-2এর বদলে len(w[1:-1])?
gnibbler

6

সি ++, 111 97 টি অক্ষর

std::string f(std::string s){for(int i=s.size()-1;i>1;std::swap(s[rand()%i+1],s[--i]));return s;}

যারা এটি পরীক্ষা করতে চান তাদের জন্য এখানে একটি সম্পূর্ণ প্রোগ্রাম:

#include<string>
#include<iostream>

std::string f(std::string s){for(int i=s.size()-1;i>1;std::swap(s[rand()%i+1],s[--i]));return s;}

int main(){
    for(int i = 0; i<100; ++i)
    std::cout<<f("letters")<<std::endl;
}

সম্পাদন করা

উপলব্ধি করা হয়েছে যে উভয় অদলবদল সূচিগুলি এলোমেলো করার দরকার নেই, একটি ভেরিয়েবল এবং আরও কয়েকটি অক্ষর সংরক্ষণ করেছে।


চমৎকার। বেশিরভাগ সমাধান খুব ছোট ইনপুটতে ব্যর্থ হয়। আপনার না।
ব্যবহারকারী অজানা

6

পিএইচপি (68 টি অক্ষর)

$r=preg_replace('/^(\w)(\w+)(\w)$/e','$1.str_shuffle($2).$3',trim($w));

ছোট (60 টি অক্ষর)

$r=preg_replace('/(.)(.+)(.)/e','$1.str_shuffle($2).$3',$w);

+1 খুব সুন্দর। :) আপনি ট্রিমটি (), আসলে ফেলে দিতে পারেন এবং রিজেক্সে আপনি অ্যাঙ্করগুলি সরিয়ে এবং এর .পরিবর্তে ব্যবহার করতে পারেন \w
Tomalak

@ তোমালাক প্রস্তাবিত আমি পার্লে এই সমাধানটি পুনরায় লেখার চেষ্টা করছি। তার পরামর্শ সহ, আমি এটি পেয়েছি: use List::Util 'shuffle';sub r{$_[0]=~m/(.)(.+)(.)/;$1.join('',shuffle split//,$2).$3;}এটি 87 টি অক্ষর । ব্যবহারের রেখা ছাড়াই এটি 62 টি অক্ষর
বেন রিচার্ডস

আপনি কি এই কাজের একটি ডেমো সরবরাহ করতে পারেন? কারণ আমি পারছি না ...
স্টিভ রবিনস

6

পার্ল - 96 (বা 71) অক্ষর 84 (বা 59) অক্ষর

পার্লের সাথে এটিই আমি এসেছি। এটি করার কয়েকটি পৃথক উপায়ে গিয়েছিলেন তবে আমি এখন পর্যন্ত .৯ টি চরিত্রের মধ্যে যা ভাবতে পারি তার থেকে এটি সংক্ষিপ্ত বলে মনে হয়েছিল।

use List::Util 'shuffle';sub r{($b,@w)=split//,$_[0];$e=pop(@w);return$b.join('',shuffle@w).$e;}

যদিও, আপনি যদি 'ব্যবহার' লাইনটি কেটে ফেলেন (যা আমি বিশ্বাস করি যা বৈধ, যেহেতু অন্যরা তাদের সি প্রোগ্রামগুলিতে # লাইন অন্তর্ভুক্ত করেন) আমি এটিকে আরও 71 টি অক্ষরে কেটে রাখতে পারি :

sub r{($b,@w)=split//,$_[0];$e=pop(@w);return$b.join('',shuffle@w).$e;}

সম্পাদনা করুন এটি প্রস্তাবিত হয়েছিল যে আমি @ টোবিয়াস পদ্ধতিটি বাস্তবায়নের চেষ্টা করব। এইভাবে আমি এটি 84 টি অক্ষরে নেমে এসেছি বা ব্যবহারের রেখাটি, 59 টি অক্ষর মুছে ফেলেছি :

use List::Util 'shuffle';sub r{$_[0]=~m/(.)(.+)(.)/;$1.join'',shuffle split//,$2.$3}

2
আপনার সংস্করণটি সংক্ষিপ্ত করে 87:use List::Util 'shuffle';sub r{($b,@w)=split//,$_[0];$e=pop@w;join'',$b,(shuffle@w),$e}
এমবিএক্স

1
@ sidran32 আপনি পার্লকে কেবলমাত্র তুলনার জন্য @ টোবিয়াসের উত্তরের বৈকল্পিক প্রয়োগ করতে পারেন ?
তোমালাক

@ তোমালাক অবশ্যই, আমি এটি চেষ্টা করে দেখব।
বেন রিচার্ডস

1
আপনার রেজেক্স সংস্করণটি 3 অক্ষর দ্বারা সংক্ষিপ্ত করে use List::Util 'shuffle';sub r{$_[0]=~m/(.)(.+)(.)/;$1.join'',shuffle split//,$2.$3}
রেখেছে

খুশী হলাম। আমি স্বচ্ছতার জন্য প্রথম বন্ধনীর সাহায্যে হিপিং ব্যবহার করতে অভ্যস্ত। গল্ফ করার সময় খারাপ অভ্যাস। : পি
বেন রিচার্ডস

5

রুবি, 77 75 টি অক্ষর

def r(s);f=s.size-2;1.upto(f){|i|x=rand(f)+1;t=s[i];s[i]=s[x];s[x]=t};s;end

কিছুটা কম ভার্বোজ ভাষায় আমার স্কেলার সমাধান। আমি কোনও উপায়ে রুবি বিশেষজ্ঞ নই, সম্ভবত উন্নতির জন্য এখানে আরও জায়গা রয়েছে।


কি দারুন. আপনার স্কেলার সমাধান হিসাবে 'আমি' দিয়ে কাজ করে।
ব্যবহারকারী অজানা

5

রুবি 1.9, 77 48 46 44 অক্ষর

r=->w{w[h=1..-2]=[*w[h].chars].shuffle*"";w}

দাবি অস্বীকার: আমি সর্বোচ্চ র‌্যাঙ্কিং উত্তরের ভিত্তিতে এটি টিউন করেছি - পরে ঠিক একই উত্তরটি লক্ষ্য করেছি। আপনি যে ইতিহাসটি আমি আমার মূল ধারণার প্রতি সত্য রেখেছি তা যাচাই করতে পারেন তবে রুবি ১.৮ থেকে ছোট ল্যাম্বডাসের জন্য রুবি ১.৯ এ পরিবর্তন করেছেন এবং shuffle

যদি খালি শব্দের অনুমতি দেওয়া হয় তবে 56 টি অক্ষর

r=->w{w.empty?||w[h=1..-2]=[*w[h].chars].shuffle*"";w}

স্প্যানিশ 'আমি' কেউ প্রত্যাশা করে না।
ব্যবহারকারী অজানা

0 বা 1 টি চিঠি
দিয়েও

5

পাইথন 3, 94 93 91 টি অক্ষর

একটি ভিন্ন কৌশল ব্যবহার করে। পাইথন 2 এও কাজ করতে পারে।

from random import*
s=lambda x:x[0]+''.join(sample(x[1:-1],len(x)-2))+x[-1]if x[0:-1]else x

... if x[0:-1] else xদেয় xযদি তার দৈর্ঘ্য 1 (অন্যথায় এটি সদৃশ হবে)। ফাংশনটি এর মাধ্যমে 0 এবং 1 দৈর্ঘ্যের স্ট্রিংয়ের জন্য কাজ করে।

sample()থেকে https://stackoverflow.com/questions/2668312/shuffle-string-in-python/2668366#2668366

যেহেতু এটা এক অভিব্যক্তি, আমরা একটি ব্যবহার করতে পারেন lambda(দূর return, def, এবং একটি প্রথম বন্ধনী এর একটি জোড়া)।

সম্পাদনা: from random import* অন্যান্য পাইথন জমা দেওয়ার পরে 1 টি অক্ষর সংরক্ষণ করতে।


আমি জানি আমি এখানে এত দেরি করেছি, তবে কি x[0:-1]হয়ে উঠতে পারে x[:-1]?
জাকারি

4

জাভাস্ক্রিপ্ট - 118 122 অক্ষর

সংক্ষিপ্ত জাভাস্ক্রিপ্ট - ১১৮ টি অক্ষর নেই কোনও সাদা স্থান নেই। ওপি হিসাবে প্রায় একই অ্যালগরিদম ব্যবহার করে, তবে কম শৃঙ্খলাবদ্ধতার সাথে। আমি প্রচুর পুনরাবৃত্তি চেষ্টা করেছিলাম এবং কিছুটা পুনরাবৃত্তি করার চেষ্টা করেছি, তবে তারা সকলেই কোনও না কোনও উপায়ে ঝাঁকুনির দিকে ঝুঁকে পড়ে।

function s(w)
{
    w = w.split('');
    var a = w.shift(),
        z = w.pop();
    return z?a + (w.sort(function() { return Math.random() - .5}).join('')) + z:a;
}

'আমি-পরীক্ষায় উত্তীর্ণ হয় না।
ব্যবহারকারী অজানা

@ রায়ান return z?a+...+z:w;একটি অন্তর্নিহিত দৈর্ঘ্যের চেক হিসাবে ব্যবহার করা হবে যাতে। নীরব ধারণাটি ছিল যে ফাংশনটি কেবল "বৈধ" শব্দগুলি গ্রহণ করবে।
টমলাক

ভাল পয়েন্ট, যে ডাব্লু পরিবর্তিত হয়েছে ছাড়া, সুতরাং আমি ত্রৈমাসিকের aমধ্যে ব্যবহার করতে হবে else। সম্পাদিত, এবং 122 টি পর্যন্ত চরিত্র।
রায়ান কিনাল

@ রায়ান: আমার বিশ্বাস aদ্বি-অক্ষরের ইনপুটটির জন্য ভুল হবে। : - next পরের বারে আমি আরও যত্ন সহকারে প্রয়োজনীয়তাগুলি লাইন করব।
তোমালাক

আমি আসলে মনে করি না। zশব্দটি যদি একটি বর্ণ (বা তার চেয়ে কম) হয় কেবল তখনই সংজ্ঞায়িত হবে।
রায়ান কিনাল 4'11

4

ডি, 62 অক্ষর

import std.random;void s(char[] s){randomShuffle(s[1..$-1]);}

ঠিক আছে আমি সত্যিকারের স্ট্রিংয়ের পরিবর্তে একটি সাধারণ চর অ্যারে দিয়ে প্রতারণা করেছি (যা স্থাবর চর [] সুতরাং স্থানের কোনও পরিবর্তন নেই)

দৈর্ঘ্য পরীক্ষা করে সম্পাদনা করতে আরও 14 টি প্রয়োজন

import std.random;void s(char[] s){if(s.length>1)randomShuffle(s[1..$-1]);}

এবং এটি 'আমি' এর মতো ইনপুটটির জন্য কী ফিরিয়ে দেয়?
ব্যবহারকারী অজানা

ফলাফলটি ফিরিয়ে দেওয়া ভাল (= তুলনামূলক ভাল) হবে।
কনরাড রুডল্ফ

@ ব্যবহারকারী একটি পরিসীমা ত্রুটি। @ কনরাড যা প্রয়োজন হবে return s;এবং ফেরত টাইপ করুন আরও 11 টি চর
রাচেট ফ্রিক

@ratchet আপনি কি পুরো প্রোগ্রামটি পোস্ট করতে পারেন, দয়া করে? বিটিডাব্লু, আপনি কেন গণনা করছেন তা আমি বুঝতে পারছি import std.random;না, এবং কেবল ফাংশনটি নয়।
অ্যারলেন

আমি অনুমান করছি যে স্থানটি char[] s(এটি তৈরি করতে char[]s) বাদ দিয়ে আপনি 1 বাইট সঞ্চয় করতে পারবেন তবে আমি বছরের পর বছর ডি ব্যবহার করিনি।
টিম Čas

4

পিএইচপি 5.3 (60 অক্ষর)

$r=!$w[2]?:$w[0].str_shuffle(substr($w,1,-1)).substr($w,-1);

56 টি চরগুলিতে উন্নত হয়েছে এবং 5.3 সংস্করণটির আর প্রয়োজন নেই:

$r=substr_replace($w,str_shuffle(substr($w,1,-1)),1,-1);

অন্যান্য পিএইচপি উত্তরের জন্য +1 দুর্দান্ত বিকল্প। সংক্ষিপ্ত নয়, তবে কোনও রেইজেক্স একটি প্লাস নয়।
তোমালাক

একটি সংক্ষিপ্ত সমাধান সহ আপডেট হয়েছে যার সংস্করণ
5.3- র

পুরানো সংস্করণটি সঠিক নয়: trueসংক্ষিপ্ত স্ট্রিংয়ের জন্য ফিরে আসে ।
তিতাস

3

পার্ল - ১১১ টি অক্ষর (কোনও লাইব্রেরির ফাংশন ব্যবহার না করে)

sub r{($f,@w)=split//,shift;$l=pop@w;while(@w){if(rand(9)>1){push@w,shift@w}else{push@t,pop@w}}join'',$f,@t,$l}

ব্যবহার :

$in="randomizethis";
$out = &r($in);
print "\nout: $out";
sub r{($f,@w)=split//,shift;$l=pop@w;while(@w){if(rand(9)>1){push@w,shift@w}else{push@t,pop@w}}join'',$f,@t,$l}

3

পাইথন

এটি 90 89 112 অক্ষরের অজগর!

সম্পাদনা 1: এবার একটি ফাংশন হিসাবে!

(ধন্যবাদ gnibbler)

সম্পাদনা 2: এখন ছোট শব্দগুলি পরিচালনা করে

(ধন্যবাদ ব্যবহারকারী অজানা)

import random as r
def q(s):
 a=list(s)
 b=a[1:-1]
 r.shuffle(b)
 if len(s)<4:
  return s
 return a[0]+''.join(b)+a[-1]

এমনকি যদি আপনি
অনুমানটি


1
এলোমেলো মডিউলটি আমার মতো নাইটক্লাবের মতো ... আমরা দুজনেই ঠিক জায়গায় বদলে যাচ্ছি! :)
অ্যান্ডব্রুডু

'আমি' এর মতো ইনপুটটির জন্য কাজ করে না; 'II' ফেরত দিন।
ব্যবহারকারী অজানা

ধন্যবাদ! এটি এখন সংক্ষিপ্ত শব্দগুলি পরিচালনা করে তবে কিছুটা দীর্ঘ হয় :)
অ্যান্ডব্রু

3

স্কালা, 135 139 142 156 টি অক্ষর

def r(s:String)={var(x,o,t,f)=(0,s.toArray,' ',s.size-2)
for(i<-1 to f){t=o(i)
x=util.Random.nextInt(f)+1
o(i)=o(x)
o(x)=t}
o.mkString}

-7: সরানো ': স্ট্রিং' (রিটার্নের ধরণের অনুমান করা যেতে পারে)
-7: সরানো 'রিটার্ন' (শেষ প্রকাশটি প্রত্যাবর্তনের মান)
-3: ফিচার্ড s.size-2আউট
-4: toCharArray->toArray


অভিনব পাইথনের চরিত্রগুলি ছাড়াই 'আমি' এবং 'ভার্ওয়ারফেল' নিয়ে কাজ করে। :) তবে 'সমাধান' ব্যবহার করে আমার সমাধানটি কিছুটা খাটো।
ব্যবহারকারী অজানা

@ ব্যবহারকারীর অজানা সম্পাদনাগুলির জন্য ধন্যবাদ :-)
গ্যারেথ

3

পাইথন, 86 টি অক্ষর

স্লানিগিগ নিরাপদ, সুতরাং কোনও বৌডস সিখেন্সিগ নেইকার্সি নেই। সমস্ত লেগটনের উপর উইকরোস ros

from random import*
def f(x):x=list(x);t=x[1:-1];shuffle(t);x[1:-1]=t;return''.join(x)

3

সি ++ 11: - 68 66 টি অক্ষর

auto f=[&](){if(s.size()>2)random_shuffle(s.begin()+1,s.end()-1);};

সম্পূর্ণ প্রোগ্রাম:

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main(int argc, char* argv[]){

  string s = "SomestrinG";
  auto f=[&](){if(s.size()>2)random_shuffle(s.begin()+1,s.end()-1);};

  f();
  cout << s << endl;
  return 0;
}

ইনপুট স্ট্রিংয়ে কি হার্ড কোডিং আইনসম্মত?
টমাস এডিং

@ ত্রিনিদিস আমি ভেবেছিলাম আমরা কেবল ফাংশন নিয়েই উদ্বিগ্ন। প্রোগ্রামটি কেবল ফাংশনটি কীভাবে ব্যবহার করতে হয় তা দেখায়। নির্বিশেষে, কঠোরভাবে ইনপুট কোডিং না করা এই ক্ষেত্রে কোনও পার্থক্য আনবে না; শুধু যোগstring s; cin >> s;
Arlen

3

রুবি 1.9, 43 টি অক্ষর

R = W [0] [* W [1 ..- 2] .chars] .shuffle.join + W [-1]

1 টি অক্ষরের দৈর্ঘ্যের স্ট্রিংগুলির (এখনও সেই অক্ষরটির নকল করে) কাজ করে না এবং খালি স্ট্রিংয়ের জন্য ব্যর্থ হয়।



3

আর, 104 (126)

f=function(w){s=strsplit(w,"")[[1]];paste(c(s[1],sample(s[2:(length(s)-1)]),s[length(s)]),collapse="")}

ব্যবহার:

for (i in 1:10) print(f("parola"))
[1] "plraoa"
[1] "prolaa"
[1] "praola"
[1] "parloa"
[1] "plaora"
[1] "palroa"
[1] "porlaa"
[1] "ploraa"
[1] "porlaa"
[1] "ploraa"

নীচের ফাংশন 3 এর চেয়ে কম দৈর্ঘ্যের শব্দগুলির সাথে কাজ করে:

f=function(w){s=strsplit(w,"")[[1]];ifelse(length(s)<3,w,paste(c(s[1],sample(s[2:(length(s)-1)]),s[length(s)]),collapse=""))}

f("pl")
[1] "pl"
f("a")
[1] "a"

কাজের অংশটি ছিল প্রথম এবং শেষ বর্ণগুলি সরানো নয়।
তোমালাক

@ তোমালাক স্থির!
পাওলো

এটি 3 দৈর্ঘ্যের নীচে শব্দ দিয়ে কাজ করে?
তোমালাক

@ তোমালাক এখন ঠিক হওয়া উচিত! সংশোধনের জন্য ধন্যবাদ!
পাওলো

3

পাইথন, ১০২ টি অক্ষর

def f(x):t=list(x)[1:-1];k='';exec'k+=t.pop(id(7)%len(t));'*len(t);return[x[0],x[0]+k+x[-1]][len(x)>1]

আমদানি নেই! 1 অক্ষর এবং উপরের শব্দগুলির জন্য কাজ করে। এটি আমার প্রথম গল্ফ এন্ট্রি এবং আইডি (অবজেক্ট) ব্যবহারের ধারণার জন্য নন-ডিস্ট্রিমেন্টিক আউটপুট উত্পাদন করতে আমি শর্টেস্ট কোড থেকে ব্লু আইডবাইস্টের এন্ট্রি দ্বারা অনুপ্রাণিত হয়েছি ।


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


3

আর, 95 92 91 টি অক্ষর

f=function(w,a=el(strsplit(w,'')),b=length(a))cat(a[1],sample(a[c(1,b)],b-2),a[b],sep="")

A এবং b কে ফাংশন প্যারামিটার হিসাবে গণনা করতে আর এর অলস মূল্যায়নের ব্যবহার করে পরে পুনরায় ব্যবহারের মাধ্যমে স্থান সাশ্রয় করে। অন্যান্য আর উত্তরগুলির মতো নয় এটি সমস্ত শব্দের জন্য> 1 দীর্ঘ দীর্ঘ। নীচে উদাহরণ:

> f("hippopotamus")
hpuoopaitmps

> f("dog")
dog

> f("az")
az

সম্পাদনা: unlist()সঙ্গে প্রতিস্থাপন[[]] [[1]] এল () এর মাধ্যমে প্রতিস্থাপন করা হয়েছে


2

ডি: 55 টি অক্ষর

void f(T)(T s){if(s.length>2)randomShuffle(s[1..$-1]);};

সম্পূর্ণ প্রোগ্রাম:

import std.stdio, std.random, std.conv;

void f(T)(T s){if(s.length>2)randomShuffle(s[1..$-1]);};

void main(){

  char[] s = to!(char[])("SomestrinG");

  f(s);
  writeln(s);
}

আমার মনে হচ্ছে else sঅংশটি অনুপস্থিত?
টমলক

1
@ তোমালাক না, এটি নেই, কারণ এর কোনও প্রয়োজন নেই। যদি স্ট্রিং 2 বা তার কম দৈর্ঘ্যের হয়, তবে আমরা এটিকে একা রেখে দেই। এছাড়াও, randomShuffle()জায়গায় আছে।
অ্যারেল

বাহ, ডি প্রতিযোগিতামূলক হচ্ছে। আমি মনে করি আইআইআরসি randomShuffle(s[1..$-1])হতে পারে s[1..$-1].randomShuffle(যদি না এটি পোস্টের চেয়ে পুরনো ডি সংস্করণে থাকে)
জাকারিয়া

2

এরলং, 188 172 132 চর

f([H|C=[_|_]])->T=[lists:last(C)],[H|s(C--T,T)];f(X)->X. s([],N)->N;s(D,N)->E=[lists:nth(random:uniform(length(D)),D)],s(D--E,E++N).

আমি এখনও এরলং শিখছি তাই এই সংক্ষিপ্তটি তৈরির কোনও পরামর্শ প্রশংসাযোগ্য।

পূর্ণ কোড (স্ট্রিং_শ্যাফেল মডিউল):

-module(string_shuffle).
-export([f/1]).

f([H|C=[_|_]])->
    T=[lists:last(C)],
    [H|s(C--T,T)];f(X)->X.
f(X)->X.

s([],N)->N;
s(D,N)->
    E=[lists:nth(random:uniform(length(D)),D)],
    s(D--E,E++N).

সম্পাদন করা

শ্যাফলের অংশটি আলাদা আলাদা ফাংশন হিসাবে নিয়ে গেছে যার তালিকার মাথা এবং লেজকে প্রায় পাস করার দরকার নেই।

সম্পাদনা 2

এক মুছে ফেলার জন্য পুনর্গঠিত fফাংশন নিদর্শন মাত্র দুটি প্যারামিটার পরিবর্তন মেনে নিতে এলোমেলো ফাংশন পরিবর্তন lists:deleteজন্য --[], একটি অদলবদল lists:reverseএকটি আহ্বানlists:last

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