একটি ম্যাপিং পরিবর্তন করুন


9

আমরা মানচিত্রটি কী-মান জোড়ার সেট হিসাবে সংজ্ঞায়িত করি। এই চ্যালেঞ্জের জন্য, আপনাকে প্রতিটি মান নিতে হবে এবং এলোমেলোভাবে বেছে নেওয়া চাবিতে তাদের নিয়োগ করতে হবে।

  • আপনাকে অবশ্যই এলোমেলোভাবে মানগুলি পরিবর্তন করতে হবে এবং ফলস্বরূপ মানচিত্রটি আউটপুট করতে হবে। এর অর্থ হ'ল প্রতিবার আমরা আপনার প্রোগ্রামটি চালানোর সময় আমাদের আলাদা আউটপুট পাওয়ার সুযোগ থাকে
  • মানগুলির প্রতিটি সম্ভাব্য ক্রমটিতে অবশ্যই শূন্যের উপস্থিতির সম্ভাবনা থাকতে হবে।
  • সমস্ত মূল কী এবং মূল মানগুলি অবশ্যই ফলাফলের অ্যারেতে উপস্থিত হবে। বারবার মানগুলি অবশ্যই ফলাফলের অ্যারেতে একই সংখ্যক বার উপস্থিত হতে পারে appear

উদাহরণস্বরূপ, যদি আপনার মানচিত্রটি ছিল:

[0:10, 1:10, 5:5]

নিম্নলিখিত সকলের অবশ্যই উপস্থিত হওয়ার সুযোগ থাকতে হবে:

[0:10, 1:10, 5:5]  (original map)
[0:10, 1:5,  5:10]
[0:10, 1:10, 5:5]  (technically the same map, but I swapped the two tens)
[0:10, 1:5,  5:10]
[0:5,  1:10, 5:10]
[0:5,  1:10, 5:10]

গ্রহণযোগ্য ইনপুট / আউটপুট:

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

এটা একটা , তাই যতটা সম্ভব সংক্ষিপ্ত উত্তর দিন


1
খুব ঘনিষ্ঠভাবে সম্পর্কিত। (পার্থক্যগুলি হ'ল আমার মধ্যে কীগুলি কেবল অ্যারের সূচকগুলি হয় যে আমার সমস্ত অনুক্রমের উপরে আমার অভিন্ন সম্ভাবনা প্রয়োজন এবং আমি বিল্ট-ইনগুলি বারণ করি না))
মার্টিন ইন্ডার

কেভি জোড়গুলি কি ক্রমে [k, v]থাকতে [v, k]হবে বা গ্রহণযোগ্য হবে?
ডেনিস

তাদের থাকা দরকার[k, v]
নাথান মেরিল

আমরা কী কোনও স্থানীয় মানচিত্রটি ইনপুট এবং কী-মান জোড়াগুলির একটি অ্যারে আউটপুট করতে পারি?
স্টিভেন এইচ।

না, ধরণেরগুলি মেলে নেওয়া দরকার।
নাথান মেরিল

উত্তর:



5

ব্র্যাচল্যাগ , 13 12 বাইট

zt@~T,?zh:Tz

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

ইনপুট হিসাবে 2-উপাদানগুলির তালিকার একটি তালিকা আশা করে।

ব্যাখ্যা

z              Zip the input to get a list of keys and a list of values
 t@~T,         Take the list of values, and shuffle it ; call that T
      ?zh      Zip the input to get the list of keys
         :Tz   Zip the list of keys with the list of shuffled values

4

সিজেম, 9 বাইট

{z)mra+z}

ইনপুট কী-মান জোড়ার তালিকা pairs

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

z  e# Zip, to separate keys from values.
)  e# Pull off values.
mr e# Shuffle them.
a+ e# Append them to the array again.
z  e# Zip, to restore key-value pairs.

বিকল্প সমাধান, একই বাইট গণনা:

{[z~mr]z}

খুব নিশ্চিত যে এটি বেশিরভাগ ভাষায় জিপ: p
ফ্যাটালাইজ হ'ল 18:56


3

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

এই বিকল্পটি ব্যবহার করে: আপনি যদি একটি অ্যারে বা কোনও মানচিত্র ইনপুট করেন তবে আপনি ফিরে আসার পরিবর্তে আসল অবজেক্টটি পরিবর্তন করতে পারেন । ইনপুট একটি অভিধানের মতো আক্ষরিক {0: 10, 1: 10, 5: 5}

from random import*
D=input()
k=D.keys()
shuffle(k)
D=dict(zip(k,D.values()))

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

এই এসও উত্তর থেকে অনুপ্রেরণা নেওয়া ।


2

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

পাইথনের স্থানীয় অভিধান কাঠামো ব্যবহার করে।

একটি বাইট সংরক্ষণের জন্য @ mbomb007 ধন্যবাদ

from random import*
def f(d,o={}):
 i=list(d.values());shuffle(i)
 for k in d.keys():o[k]=i.pop()
 return o

আইডিয়ন!


আমদানিটি ফাংশনের আগে রাখুন এবং ব্যবহার করুন from random import*
mbomb007

সরান .keys()। কীগুলির উপর একটি অভিধান পুনরাবৃত্তি করে te return dict(zip(d, i))লুপের পরিবর্তে ব্যবহার করুন ।
জোনাস শোফার

2

পার্ল, 35 বাইট

এর জন্য +2 অন্তর্ভুক্ত -0p

প্রতিটি কী / মান একটি STDIN লাইনে স্থান দ্বারা পৃথক করুন

shuffle.pl
1 5
3 8
9 2
^D

shuffle.pl:

#!/usr/bin/perl -p0
@F=/ .*/g;s//splice@F,rand@F,1/eg

1

গণিত, 32 বাইট

{#,RandomSample@#2}&@@(#)&

ইনপুট কী-মান জোড়ার তালিকা pairs এটি ম্যাথামেটিকার ট্রান্সপোজেশন অপারেটর, এবং RandomSampleএকটি তালিকাটি এলোমেলো করতে ব্যবহার করা যেতে পারে।


1

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

<?= serialise(array_combine(array_keys($a=unserialize($argv[1])),shuffle($a)?$a:0));

সিরিয়ালযুক্ত অ্যারে হিসাবে ইনপুট নেয়, একই আউটপুট দেয়।


1

ক্লোজার, 40 34 বাইট

#(zipmap(keys %)(shuffle(vals %)))

এম (মানচিত্র) থেকে কীগুলি এবং মানগুলি নিয়ে যায়, মানগুলিকে বদলে দেয় এবং এগুলিকে একটি মানচিত্রে জিপ করে তোলে।


ম্যাক্রো ফাংশনটি ব্যবহার করুন: # (জিপম্যাপ (কীগুলি%) (শিফেল (ভ্যালস%)))
ম্যাটপুটনাম

0

পাওয়ারশেল ভি 2 +, 52 বাইট

param($a)$a|%{$_[1]}|sort {random}|%{$a[$i++][0],$_}

টিপলসের অ্যারে হিসাবে ইনপুট নেয়, যা হ্যাশ ব্যবহারের চেয়ে উল্লেখযোগ্যভাবে ছোট (যার প্রয়োজন হবে .GetEnumerator()এবং কী কাজ করতে হবে না)।

আমরা ইনপুট অ্যারে লুপ করি |%{...}, প্রতিটি পুনরাবৃত্তি দ্বিতীয় উপাদানটি বের করে $_[1]। সেগুলি বাছাই করার কী হিসাবে পাইপ করা Sort-Objectহয় {Get-Random}। এই থেকে একটি র্যান্ডম ওজন নির্ধারণ করবে 0করার [Int32]::MaxValueবাছাই জন্য প্রতিটি উপাদানে। এগুলিকে অন্য লুপে পাইপ দেওয়া হয় |%{...}, প্রতিটি পুনরাবৃত্তির সাথে টিউপলের সাথে সম্পর্কিত প্রথম উপাদানটির এবং তার বাছাই করা সংখ্যার টুপল আউটপুট হয়।

উদাহরণ

এখানে উদাহরণগুলির -join','টিউপল আউটপুটটিতে অতিরিক্ত রয়েছে তাই এটি কনসোলে আরও ভাল দেখানো হয়েছে, কারণ বহুমাত্রিক অ্যারেগুলির জন্য ডিফল্ট আউটপুটটি পড়া শক্ত।

PS C:\Tools\Scripts\golfing> .\shuffle-a-mapping.ps1 ((0,10),(1,10),(5,5))
0,10
1,5
5,10

PS C:\Tools\Scripts\golfing> .\shuffle-a-mapping.ps1 ((0,10),(1,10),(5,5))
0,10
1,10
5,5

PS C:\Tools\Scripts\golfing> .\shuffle-a-mapping.ps1 ((1,1),(2,2),(3,3),(4,4),(5,5))
1,2
2,4
3,3
4,5
5,1

এটি কোনও সংশোধন ছাড়াই অ-পূর্ণসংখ্যার মানগুলির জন্য কাজ করে।

PS C:\Tools\Scripts\golfing> .\shuffle-a-mapping.ps1 (('one','one'),('two','two'),('three','three'),('four','four'))
one,four
two,three
three,two
four,one

0

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

a=>a.map((_,i)=>[i,Math.random()]).sort((a,b)=>a[1]-b[1]).map(([i],j)=>[a[j][0],a[i][1]])

0

পার্ল 6 , 28 বাইট

{%(.keys.pick(*)Z=>.values)}

ইনপুট একটি হল হ্যাশ
(ক সঙ্গে টেকনিক্যালি কোনো মান .keysপদ্ধতি এবং একটি .valuesপদ্ধতি কাজ করবে, কিন্তু আউটপুট একটি হল হ্যাশ )

ব্যাখ্যা:

# bare block lambda with implicit parameter 「$_」
{

  # turn the list of key => value Pairs into a Hash
  %(
      # get the keys from 「$_」 ( implicit method call on 「$_」 )
      .keys

      # get all of the keys in random order
      .pick(*)

    # zip using 「&infix:« => »」 the Pair constructor
    Z[=>]

      # the values from 「$_」 ( implicit method call on 「$_」 )
      .values
  )
}

হ্যাশ অবজেক্টের ধরণের মতো অন্যের জন্য নির্মিত এমন একটি রূপটি হ'ল:

{.WHAT.(.keys.pick(*)Z=>.values)}

.WHAT একটি বস্তুর উপর টাইপ ফেরৎ।


0

আর, 47 (28) বাইট

পার্টিতে কিছুটা দেরি হলেও যদিও আমি বিল্টিন ব্যবহার করে আর-তে একটি সমাধান পোস্ট করব।

সর্বনিকটবর্তী বস্তু আর কী / মান ম্যাপিং সহ একটি বিন্যাস করার জন্য একটি থাকে list। নিম্নলিখিত ফাংশনটি listকোনও ইনপুট হিসাবে একটি জিনিস নেয় এবং তার মানগুলি পরিবর্তিত করে একটি তালিকা আউটপুট করে।

function(x)return(setNames(sample(x),names(x)))

ব্যাখ্যা

অন্তর্নির্মিত setNames()একটি R-vectorনামের ইনপুট করে বস্তুগুলিকে নাম নির্ধারণ করতে পারে । অত: পর, প্রথম এলোমেলো listদ্বারা sample()যা জোড়া shuffles, এবং তারপর ব্যবহার মূল অর্ডার নাম বরাদ্দ names()

উদাহরণ:

z  <- list(fish = 1, dog = 2, cat = 3, monkey = 4, harambe = 69)

f=function(x)return(setNames(sample(x),names(x)))
f(z)

$fish
[1] 3

$dog
[1] 1

$cat
[1] 2

$monkey
[1] 69

$harambe
[1] 4

যদি xসংজ্ঞায়িত হিসাবে ধরে নেওয়া হয় তবে ফাংশন মোড়ানোর কোনও প্রয়োজন নেই এবং প্রোগ্রামটি 28 বাইটে হ্রাস পাবে।

setNames(sample(x),names(x))

0

জাভা 7, 156 বাইট

import java.util.*;void c(Map m){List t=new ArrayList(m.values());Collections.shuffle(t);Iterator i=t.iterator();for(Object k:m.keySet())m.put(k,i.next());}

Ungolfed:

void c(Map m){
  List t = new ArrayList(m.values());
  Collections.shuffle(t);
  Iterator i = t.iterator();
  for(Object k : m.keySet()){
    m.put(k, i.next());
  }
}

পরীক্ষার কোড:

এখানে চেষ্টা করুন।

import java.util.*;
class M{
  static void c(Map m){List t=new ArrayList(m.values());Collections.shuffle(t);Iterator i=t.iterator();for(Object k:m.keySet())m.put(k,i.next());}

  public static void main(String[]a){
    for(int i=0;i<10;i++){
      Map m=new HashMap();
      m.put(0, 10);
      m.put(1, 10);
      m.put(5, 5);
      c(m);
      System.out.println(m);
    }
  }
}

সম্ভাব্য আউটপুট:

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