Çocuklar kartları karıştırma


12

Bir kart destesini karıştırmak çocuklar için zordur, bu nedenle mümkün olduğunca basit bir şekilde karıştırılmış bir desteyi elde etmenin yollarını bulmaları gerekir.

Makul derecede iyi sonuçlar veren bunu yapmanın bir yolu:

  1. Üst kartı çıkarın ve desteye rastgele bir yer yerleştirin
  2. Alt kartı çıkarın ve destede rastgele bir yere yerleştirin
  3. Yeterince iyi olduğuna inanana kadar devam edin.

Eğer üst veya alt bir kart takın gelmeyeceğini Not bir yere yerleştirilmelidir içinde güvertede.


Bunun yerine kartların dağıtılması nedeniyle, alfanümerik karakterleri karıştırmak edeceğiz: 0-9, A-J, a-j, q-zve Q-Z.

Aşağıda gösterilen dize ile başlayın ve karakterleri yukarıda açıklandığı gibi karıştırın. Sonsuz karıştırmaya devam etmek isteyip istemediğinizi veya kartları 100 mermi (üstten 100 kart ve alttan 100 kart) karıştırmak isteyip istemediğinizi seçebilirsiniz.

0123456789abcdefghijqrstuvwxyzABCDEFGHIJQRSTUVWXYZ

Zor olan, karıştırılan karakterleri göstermektir. Her bir "karıştırma" (kartı çıkarma ve takma) 0,25 ile 0,35 saniye arasında sürecektir.

Aşağıdaki gif bir örnek çıktı göstermektedir:

resim açıklamasını buraya girin


Bu yani bayt en kısa kodu kazanır.


"Neden yok a-tyerine a-j, q-z?" Çünkü bu sadece karakterleri değil, kart takımlarını da gösterecektir. Ve evet, 5 takım var.


Not: zorlukları üzerindeki onay işaretini kullanmayı bırakmaya karar verdim . Burada ve burada alakalı meta yayınlar .


Nasıl 5 takım var?
TrojanByAccident

1
@TrojanByAccident beş set takım tarafından kartları (ASCII karakterleri) vardır vardır 0-9, A-J, a-j, q-zve Q-Z, soruya göre.
mbomb007

ve 50 kart var, 52 değil. Belki de çocuklar biraz kaybetti.
Jasen

@ mbomb007 5 kartın nasıl olduğunu soruyordum. Bir şeyi kaçırmadıkça, sadece Maça, Kulüp, Kalp ve Elmas var. Bu 4.
TrojanByAccident

2
@TrojanByAccident Bu kart kullanmaz. Kartlar yerine ASCII kullanır. Bunlar ASCII'nin beş kıyafeti. Kartları karıştırmak yerine alfasayısal karakterleri karıştırırız
mbomb007

Yanıtlar:


5

JavaScript (ES6), 192 188 185 bayt

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)

Düzenleme: @ L.Serné sayesinde 4 bayt kaydedildi. @Arnauld sayesinde 3 bayt kaydedildi.


Sanırım aramanın e^=1boş parantezlerinin içine girerseniz birkaç bayt kaydedebilirsiniz Math.random. Ayrıca herhangi bir özel karakter geçirmediğiniz için textContent öğesini innerHTML olarak değiştirebilirsiniz. Ayrıca aramanın eiçinde 0 olarak ayarlayabilirsiniz toLowerCase.
Luke

Gerçekten ihtiyacın yok e. Sadece kullanabilirsiniz s. (Çünkü ('some_string'^1) === 1)
Arnauld

4

MATL, 62 58 56 bayt

@Luis sayesinde 2 bayt tasarruf edildi

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

Bu sürüm süresiz olarak çalışacaktır. Dinamik çıktıyı destekleyen deneysel bir çevrimiçi yorumlayıcı olan MATL Online'da çevrimiçi demosunu deneyin . Bu, ilk önce öldürülmezse 30 saniye (çevrimiçi sürüm tarafından uygulanan kesin bir sınır) çalışır.

açıklama

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

4

Perl, 117 bayt

@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}

Çalıştırmak için:

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}'

Açıklamalar:
- @F=(0..9,a..j,"q"..z,A..J,Q..Z)ilk desteyi oluşturur ve içinde saklar @F.
- sonsuza kadar {...;redo}yürütür ....
- splice@F,++$|+rand(@F-2),0,++$v%2?shift@F:pop@Falternatif olarak ilk / son elemanı güverteden çıkarın ve rastgele bir konuma yerleştirin (artırırken $|, baskılar arabelleğe alınmaz),
- print"\r",@Fdesteyi yazdırır,
- select$,,$,,$,,.30.3 saniye uyur (Perl'ler sleepdaha az uyuyamaz) 1 saniye),


sayısal aralık 0..9değil 1..9, ve ilk
desteniz

@ardnew, teşekkürler. Bu kodu yazarken yorgun olmalıydım. Yine de düzeltildi :)
Dada

4

Piton 3, 199 196 192 186 bayt

TuukkaX sayesinde 4 bayt, FlipTack sayesinde 6 bayt!

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

Yeni printsatırın bastırılması için Python 3'ün işlevini Python 2'lerden daha kısa kullanır sys.stdout.write.

Üst ve alt kartları hareket ettirmek için bir flip-flop değişkeni kullanır.

Ungolfed:

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

Daha import random,timekısa olur mu?
FlipTack

@FlipTack Evet, 6 bayt daha kısa, teşekkürler!
busukxuan

@ mbomb007 Teşekkürler, bitti :-)
busukxuan

3

C, 290285 bayt

#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,>,--)}}

Ungolfed:

#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
    }
}

2

Swift, 288 bayt

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)
}

Swift'te golf yapmak her zaman zor bir iştir, çünkü satış noktalarından biri ifade gücüdür.


2

Yakut ( 138119 Bayt)

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}

@PaulPrestidge kadar kısa değil ama en azından anlıyorum .. Ayrıca yakutun harika bir sonsuz tünel gibi olduğunu öğrenmek harika!


1

Yakut, 111 101 karakter

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}

Sonsuz döngüler.


1

Erişte , rakipsiz 41 bayt

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

Dene:)

Nasıl çalışır

"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>


Bu neden rekabet etmiyor?
Stewie Griffin

@StewieGriffin Ben meydan okuma sonra kadar js ayrıştırıcısı yayın kesinleştirmek vermedi. Tüm işlevsellik bundan önce vardı, ama Noodel'in rekabet etmesine izin vermemin doğru olup olmadığını bilmiyordum . Böylece, güvenli yolu
seçtim

@ mbomb007, düzelttiğiniz için teşekkür ederiz. Üstüne yerleştirildiğinin farkında değildim.
tkellehe

0

bash, 170 bayt

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

burada '^' (ilk satırda) ctrl-mşunları temsil eder : ctrl-v entereditörünüzün nasıl çalıştığına göre (editörünüzün çalıştığı varsayılarak) komut satırına veya editör olarak girilir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.