Cartes à mélanger pour enfants

12

Mélanger un jeu de cartes est difficile pour les enfants, ils doivent donc trouver des moyens d'obtenir un jeu raisonnablement bien mélangé aussi simplement que possible.

Une façon de le faire qui donne des résultats raisonnablement bons est la suivante:

  1. Sortez la carte du dessus et insérez-la au hasard dans le jeu
  2. Retirez la carte du bas et insérez-la à un endroit aléatoire dans le jeu.
  3. Continuez jusqu'à ce que vous pensiez que c'est assez bon.

Notez que vous ne devez jamais insérer une carte en haut ou en bas, elle doit être placée quelque part dans le jeu.


Au lieu de cartes brassage, nous allons lecture aléatoire des caractères alphanumériques: 0-9, A-J, a-j, q-zet Q-Z.

Commencez avec la chaîne ci-dessous et mélangez les caractères comme décrit ci-dessus. Vous pouvez choisir si vous souhaitez continuer à mélanger indéfiniment ou mélanger les cartes à 100 tours (100 cartes du haut et 100 cartes du bas).

0123456789abcdefghijqrstuvwxyzABCDEFGHIJQRSTUVWXYZ

Le défi consiste à afficher les caractères mélangés. Chaque "mélange" (retirer et insérer la carte) prendra entre 0,25 et 0,35 seconde.

Le gif ci-dessous montre un exemple de sortie:

entrez la description de l'image ici


Il s'agit de donc le code le plus court en octets l'emporte.


« Pourquoi ne pas vous au a-tlieu de a-j, q-z? » Parce que cela illustrera des combinaisons de cartes, pas seulement des personnages. Et oui, il y a 5 combinaisons.


Remarque: j'ai décidé de ne plus utiliser la coche sur -challenges. Meta posts pertinents ici et ici .

Stewie Griffin
la source
Comment y a-t-il 5 costumes?
TrojanByAccident
1
@TrojanByAccident Les cinq ensembles sont des cartes (caractères ASCII) en costume sont 0-9, A-J, a-j, q-zet Q-Z, selon la question.
mbomb007
et il y a 50 cartes, pas 52. peut-être que les enfants en ont perdu.
Jasen
@ mbomb007 Je demandais comment il y avait 5 combinaisons de cartes. À moins que je manque quelque chose, il n'y a que des piques, des clubs, des coeurs et des diamants. C'est 4.
TrojanByAccident
2
@TrojanByAccident Ceci n'utilise pas de cartes. Il utilise ASCII au lieu de cartes. Ce sont les cinq combinaisons de l'ASCII. Au lieu de mélanger les cartes, nous mélangerons les caractères alphanumériques
mbomb007

Réponses:

5

JavaScript (ES6), 192 188 185 octets

document.write('<pre id=o>')
s='ABCDEFGHIJQRSTUVWXYZ'
a=[0,...123456789+s.toLowerCase()+s]
setInterval('o.innerText=a.join``;a.splice(Math.random(s^=1)*48+1,0,s?a.pop():a.shift())',250)

Edit: 4 octets enregistrés grâce à @ L.Serné. Sauvegardé 3 octets grâce à @Arnauld.

Neil
la source
Je pense que vous pouvez économiser quelques octets si vous vous déplacez e^=1à l'intérieur des parenthèses vides de l' Math.randomappel. Vous pouvez également remplacer textContent par innerHTML, car vous ne transmettez aucun caractère spécial. Vous pouvez également définir e0 à l'intérieur de l' toLowerCaseappel.
Luke
Tu n'as pas vraiment besoin e. Vous pouvez simplement utiliser s. (Parce que ('some_string'^1) === 1)
Arnauld
4

MATL, 62 58 56 octets

2 octets économisés grâce à @Luis

4Y2'A':'J'tk'Q':'Z'tk&h`48YrQJh&)@o?l&)wb}wO&)]&htD3&XxT

Cette version fonctionnera indéfiniment. Essayez la démo en ligne de MATL Online , un interpréteur en ligne expérimental qui prend en charge la sortie dynamique. Cela fonctionnera pendant 30 secondes (une limite stricte imposée par la version en ligne) s'il n'est pas tué en premier.

Explication

4Y2     % Predefined literal for the characters '0'...'9'
'A':'J' % Create an array of the characters 'A'...'J'
tk      % Duplicate and make lowercase
'Q':'Z' % Create an array of the characters 'Q'...'Z'
tk      % Duplicate and make lowercase
&h      % Horizontally concatenate everything
`       % Do...while loop
  48YrQ % Determine a random integer between 2 and 49 
  Jh&)  % Split the string at the selected location
  @o?   % If this is an odd time through the loop
    l&) % Grab the first character
    wb  % Move it to the middle of the stack of three strings
  }     % Else...
    wO&)% Grab the last character and move it to the middle of the stack
  ]     % End of if statment
  &h    % Horizontally concatenate all strings on the stack
  tD    % Duplicate and display the current string
  3&Xx  % Pause for 0.3 seconds and clear the display
  T     % Push a literal TRUE to the stack to make this an infinite loop
        % Implicit end of while loop
Suever
la source
4

Perl, 117 octets

@F=(0..9,a..j,"q"..z,A..J,Q..Z);{print"\r",@F;splice@F,++$|+rand(@F-2),0,++$v%2?shift@F:pop@F;select$,,$,,$,,.3;redo}

Pour l'exécuter:

perl -e '@F=(0..9,a..j,"q"..z,A..J,Q..Z);{print"\r",@F;splice@F,++$|+rand(@F-2),0,++$v%2?shift@F:pop@F;select$,,$,,$,,.3;redo}'

Explications:
- @F=(0..9,a..j,"q"..z,A..J,Q..Z)crée le jeu initial et le stocke @F.
- {...;redo}s'exécute ...pour toujours.
- splice@F,++$|+rand(@F-2),0,++$v%2?shift@F:pop@Fsinon, retirez le premier / dernier élément du jeu et insérez-le à une position aléatoire (pendant l'incrémentation $|, de sorte que les impressions ne soient pas mises en mémoire tampon),
- print"\r",@Fimprime le jeu,
- select$,,$,,$,,.3dort pendant 0,3 seconde (Perl ne sleeppeut pas dormir moins de 1 seconde),

Dada
la source
la plage numérique est 0..9, non 1..9, et votre deck initial est également en panne :)
ardnew
@ardnew en effet, merci. J'ai dû être fatigué quand j'ai écrit ce code. C'est réparé quand même :)
Dada
4

Python 3, 199 196 192 192 186 octets

4 octets enregistrés grâce à TuukkaX et 6 octets grâce à FlipTack!

import time,random
s="abcdefghijqrstuvwxyz";s="0123456789"+s+s.upper()
f=0
while 1:print(end="\r"+s);time.sleep(.3);s,e=s[1^f:50-f],s[f and-1];i=random.randint(1,49);s=s[:i]+e+s[i:];f^=1

Utilise la printfonction de Python 3 pour supprimer la nouvelle ligne, plus courte que celle de Python 2 sys.stdout.write.

Utilise une variable flip-flop pour basculer entre le déplacement des cartes du haut et du bas.

Non golfé:

from random import randint
from time import sleep

string = "abcdefghijqrstuvwxyz"
string = "0123456789" + string + string.upper()
flip_flop = 0
while True:
    print("\r"+string,end="")
    sleep(0.3)
    string,char = string[not flip_flop:50-flip_flop], string[flip_flop and -1]
    position = randint(1,49)
    string = string[:position] + char + string[position:]
    f = not f
busukxuan
la source
Serait import random,timeplus court?
FlipTack
@FlipTack Oui, 6 octets de moins, merci!
busukxuan
@ mbomb007 Merci, fait :-)
busukxuan
3

C, 290 285 octets

#include<stdio.h>
#include<time.h>
#define S(s,a,b){int p=rand()%48+1;clock_t c=clock()+300;while(c>clock());int x=d[s];for(int i=s;i a p;)d[i b]=d[i];d[p]=x;printf(d);}
main(){char d[]="0123456789abcdefghijqrstuvwxyzABCDEFGHIJQRSTUVWXYZ\r";srand(time(0));for(;;){S(0,<,++)S(49,>,--)}}

Non golfé:

#include<stdio.h> // variadic(printf) functions without a valid prototype = UB
#include<time.h>  // required for the implementation-defined clock_t type
// note that <stdlib.h> isnt required for srand()/rand() because they are
//  validly declared implicitly
#define S(s,a,b) // macro function
{
    int p=rand()%48+1;     // get a random position within the array
    clock_t c=clock()+300; // get the time 300 milliseconds from now
    while(c>clock());      // wait for that time
    int x=d[s];            // save the s'th character in a tempvar
    for(int i=s;i a p;)    // shift everything in the array from p
        d[i b]=d[i];       // a determines the comparison: </>
                           // b determines the operation: ++/--
    d[p]=x;                // put the tempvar in its new position
    printf(d);             // print the modified string
} // note: the \r at the end makes it so the next printf overwrites it

main() // main entry point
{      // deck to shuffle below
    char d[]="0123456789abcdefghijqrstuvwxyzABCDEFGHIJQRSTUVWXYZ\r";
    srand(time(0)); // seed the random number generator
    for(;;)         // infinite loop
    {
        S(0,<,++)   // shuffle from the start of the deck
        S(49,>,--)  // shuffle from the end of the deck
    }
}
Taylor Hansen
la source
2

Swift, 288 octets

import Darwin
var o=Array("0123456789abcdefghijqrstuvwxyzABCDEFGHIJQRSTUVWXYZ".characters)
while true{
print(String(o),terminator:"\r")
fflush(__stdoutp);{o.insert(o.removeLast(),at:$0())
o.insert(o.removeFirst(),at:$0()+1)}({Int(arc4random_uniform(UInt32(o.count-1)))})
usleep(300000)
}

Le golf à Swift est toujours un défi, car l'un de ses arguments de vente est l'expressivité.

Silvan Mosberger
la source
2

Rubis ( 138119 octets)

f=0;a=[*0..9,*?a..?j,*?q..?z,*?A..?J,*?Q..?Z];loop{$><<a*''+?\r;a.insert(rand(48),f>0? a.shift : a.pop);f^=1;sleep 0.3}

Pas aussi court que @PaulPrestidge mais au moins je le comprends .. Aussi super d'apprendre que le rubis est comme un tunnel sans fin de génial!

viande en pot7
la source
1

Rubis, 111 101 caractères

s=[*0..9,*?a..?j,*?q..?z,*?A..?J,*?Q..?Z,?\r]*''
loop{$><<s;s[1+rand(48),0]=s.slice!$.^=-2;sleep 0.3}

Boucles infiniment.

Paul Prestidge
la source
1

Noodel , non compétitif 41 octets

"Q…Z"A…J"q…z"a…j"0…9⁵⁺ḷçṛ47⁺1ɱɲOṃḃɲ49ḅṙḍq

Essayez-le :)

Comment ça fonctionne

"Q…Z"A…J"q…z"a…j"0…9⁵⁺                    # Creates the string literal to be shuffled.
                      ḷçṛ47⁺1ɱɲO      ṙḍq # The main "infinite" loop that applies the animation.
                                ṃḃɲ49ḅ    # Sub-loop that acts like an if-statement that only runs every odd iteration of the loop.

"Q…Z                                      # Pushes the string literal "QRSTUVWXYZ".
    "A…J                                  # Pushes the string literal "ABCDEFGHIJ".
        "q…z                              # Pushes the string literal "qrstuvwxyz".
            "a…j                          # Pushes the string literal "abcdefghij".
                "0…9                      # Pushes the string literal "0123456789".
                    ⁵⁺                    # Add the five strings on the stack to make one string.
                      ḷ                   # Unconditionally loop the following code.
                       ç                  # Copy what is on the top of the stack, clear the screen, and then print the copy.
                        ṛ47               # Create a random integer from 0 to 47.
                           ⁺1             # Increment the number to get 1 - 48 such that will not be the top or bottom of the deck.
                             ɱ            # Push the number of times that the unconditional loop has ran.
                              ɲO          # Consume the counter and push on zero if is even and one if is odd.
                                ṃ         # Conditional loop that only passes if the top of the stack is truthy (if the counter is odd).
                                 ḃ        # Throws away the top of the stack.
                                  ɲ49     # Pushes the literal 49 in order to represent the top of the deck.
                                     ḅ    # Ends the conditional loop.
                                      ṙ   # Relocate an element in the string by using the two numbers on the stack (either 0 or 49 to the random number).
                                       ḍq # Delay for a quarter of second. (End of unconditional loop)

<div id="noodel" code='"Q…Z"A…J"q…z"a…j"0…9⁵⁺ḷçṛ47⁺1ɱɲOṃḃɲ49ḅṙḍq' input="" cols="50" rows="2"></div>

<script src="https://tkellehe.github.io/noodel/release/noodel-0.0.js"></script>
<script src="https://tkellehe.github.io/noodel/ppcg.min.js"></script>

tkellehe
la source
Pourquoi est-ce non compétitif?
Stewie Griffin
@StewieGriffin Je n'ai finalisé la sortie de l'analyseur js qu'après le challenge. Toutes les fonctionnalités existaient avant cela, mais je ne savais pas si c'était correct pour moi de permettre à Noodel d'être compétitif. Donc, j'ai pris la route sûre :)
tkellehe
@ mbomb007, merci d'avoir corrigé cela. Je ne savais pas qu'il était placé au-dessus.
tkellehe
0

bash, 170 octets

r(){((r=RANDOM%48+1));echo -n $c^;sleep .3;}
c=0123456789abcdefghijqrstuvwxyzABCDEFGHIJQRSTUVWXYZ
while r
do
c=${c:1:r}${c:0:1}${c:r+1}
r
c=${c:0:r}${c:49}${c:r:-1}
done

ici '^' (sur la première ligne) représente ctrl-m: entré sur la ligne de commande en tant que ctrl-v enterou dans un éditeur selon le fonctionnement de votre éditeur (en supposant que votre éditeur fonctionne)

Jasen
la source