Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users
Tabletop RPGs
Tabletop RPGs
tag:snake search within a tag
answers:0 unanswered questions
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
votes:4 posts with 4+ votes
created:<1w created < 1 week ago
post_type:xxxx type of post
Search help
Notifications
Mark all as read
Challenges

Shuffle a subset of a list

+5
−0

Idea shamelessly stolen from caird and rak1507

Shuffle a subset of a list of unique, positive integers with uniform randomness, given the indices of that subset. For example, given the list $[A, B, C, D, E, F, G, H]$ and the indices $[0, 3, 4, 5, 7]$ (0-indexed), you would extract the list $[A, D, E, F, H]$, shuffle it, and insert the shuffled elements back according to the list of indices. Some possible results of this are (elements that stayed in place are bolded) $$[H, \textbf{B}, \textbf{C}, D, A, E, \textbf{G}, F]$$ $$[A, \textbf{B}, \textbf{C}, D, E, F, \textbf{G}, H]$$ $$[F, \textbf{B}, \textbf{C}, E, A, H, \textbf{G}, D]$$.

Rules

  • Every possible rearrangement of the list should have a non-zero chance of being chosen.
  • You may use zero- or one-indexing, but please specify which you use.
  • The indices in the input are guaranteed to be unique and valid.
  • This is code golf, so least number of bytes wins.

Test cases

All of these examples use 0-indexing.

List
Indices
Possible output

[1,2,3,4,5,6,7]
[0,1,2,3,4,5,6]
[2,3,6,1,0,4,5], etc.

[1,2,3,4,5,6,7]
[0,2,4,6]
[3,2,7,4,5,6,1], etc.

[93,6,10,1,200,41,78,31,34,27]
[0,3,4,8,9]
[1,6,10,27,93,41,78,31,200,34], etc.
Why does this post require moderator attention?
You might want to add some details to your flag.
Why should this post be closed?

0 comment threads

4 answers

+2
−0

Jelly, 7 bytes

œPżịẊ¥F

Try it online!

Takes the 1-indexed indices on the left and the list on the right

How it works

œPżịẊ¥F - Main link. Takes I on the left and L on the right
œP      - Partition L after the indices in I, removing the borders
     ¥  - Group the previous 2 links as a dyad f(I, L):
   ị    -   Get the elements of L at the indices in I
    Ẋ   -   Shuffle uniformly
  ż     - Zip
      F - Flatten
Why does this post require moderator attention?
You might want to add some details to your flag.

0 comment threads

+2
−0

JavaScript (Node.js), 75 68 bytes

-7 bytes thanks to Hakerh400

(a,b)=>b.map(i=>[a[i],a[j]]=[a[j=b[Math.random()*b.length|0]],a[i]])

Try it online!

Basic random swap algorithm. Unfortunately, JavaScript doesn't have a built in shuffle function.

Why does this post require moderator attention?
You might want to add some details to your flag.

1 comment thread

General comments (3 comments)
+1
−0

Japt, 17 bytes

ô@VøYÃíUgV öx)c f

Try it

Japt, 17 bytes

ô@VøYÃíUgV öx)c f

Try it

ô@VøYÃíUgV öx)c f     :Implicit input of arrays U=integers & V=indices
ô                     :Split U on elements ...
 @                    :That return true when their indices are passed through the following function as Y
  VøY                 :  Does V contain Y?
     Ã                :End split
      í               :Interleave with
       UgV            :  Elements in U at indices in V
           öx         :  Random permutation
             )        :End interleave
              c       :Flatten
                f     :Filter
Why does this post require moderator attention?
You might want to add some details to your flag.

0 comment threads

+1
−0

APL(Dyalog Unicode), 13 bytes SBCS

{⍵[?⍨≢⍵]}@⎕⊢⎕

Try it on APLgolf!

A tradfn submission which takes both lists on STDIN, second input is 1-indexed.

Why does this post require moderator attention?
You might want to add some details to your flag.

0 comment threads

Sign up to answer this question »

This community is part of the Codidact network. We have other communities too — take a look!

You can also join us in chat!

Want to advertise this community? Use our templates!

Like what we're doing? Support us! Donate