ง่ายต่อการจดจำตัวเลข


41

ตัวเลขที่จดจำได้ง่าย แต่ในทางทฤษฎีไม่สามารถทำได้ง่าย

ความท้าทายของคุณคือการสร้างโปรแกรม / ฟังก์ชั่นในภาษาใด ๆ ที่สร้างตัวเลขสุ่มอย่างสม่ำเสมอซึ่งตรงกับเกณฑ์เหล่านี้:

  1. ความยาวคือ5 หลัก

  2. มีตัวเลขสองหลักที่ซ้ำกันแยกกันอยู่สองคู่

  3. หนึ่งชุดของตัวเลขที่ซ้ำกันอยู่ที่จุดเริ่มต้นหรือจุดสิ้นสุดและตัวเลขจะอยู่ติดกัน

  4. เลขคี่นั้นล้อมรอบด้วยตัวเลขอีกคู่หนึ่ง

  5. ตัวเลขสองหลักคู่และหมายเลขอื่น ๆ ควรไม่ซ้ำกัน

  6. โปรแกรมของคุณอาจสนับสนุนหมายเลขที่มีเลขศูนย์นำหน้าหรือไม่ขึ้นอยู่กับดุลยพินิจของคุณ หากสนับสนุนเลขศูนย์นำหน้าจะต้องรวมอยู่ในผลลัพธ์: 06088 ไม่ใช่ 6088 หากไม่สนับสนุนเลขศูนย์นำหน้าตัวเลขเช่น 06088 จะไม่ถูกสร้างขึ้นเลย

กรณีทดสอบ

เอาท์พุทที่ยอมรับ:

55373
55494
67611
61633
09033
99757
95944
22808
65622
22161

เอาต์พุตที่ไม่ยอมรับ:

55555
77787
85855
12345
99233
12131
ABCDE
5033

กรณีทดสอบที่ยอมรับได้มากขึ้นสามารถดูได้ที่ลิงค์ pastebinนี้

สิ่งเหล่านี้สร้างขึ้นด้วยโปรแกรมไพ ธ อนนี้:

นำเข้าแบบสุ่ม
สำหรับฉันอยู่ในช่วง (100):

    ถ้า random.randint (0,100)> = 50: # ใส่คู่ที่จุดเริ่มต้นหากเป็นจริง
        temp = [] #working array
        temp.append (random.randint (0,9)) #append เลขสุ่ม
        temp.append (temp [0]) # ผนวกตัวเลขเดิมอีกครั้ง

        x = random.randint (0,9)
        ในขณะที่ x == temp [0]:
            x = random.randint (0,9)
        temp.append (x) # ผนวกตัวเลขที่ไม่ซ้ำอื่น ๆ

        y = random.randint (0,9)
        ในขณะที่ y == temp [0] หรือ y == temp [2]:
            y = random.randint (0,9)
        temp.append (y) # ผนวกตัวเลขที่ไม่ซ้ำกันอื่น ๆ และตัวเลขที่ไม่ซ้ำกันก่อนหน้านี้
        temp.append (x)

    อื่น: #Put แตะคู่ที่สิ้นสุด
        temp = [] #working array  
        temp.append (random.randint (0,9)) #append เลขสุ่ม

        # ในขณะที่ไม่ซ้ำกันลองอีกครั้ง
        x = random.randint (0,9)
        ในขณะที่ x == temp [0]:
            x = random.randint (0,9)
        temp.append (x) # ผนวกตัวเลขที่ไม่ซ้ำอื่น ๆ


        temp.append (temp [0]) # ผนวกตัวเลข 0th เดิมอีกครั้ง


        y = random.randint (0,9)
        ในขณะที่ y == temp [0] หรือ y == temp [1]:
            y = random.randint (0,9)
        temp.append (y) # ผนวกตัวเลขที่ไม่ซ้ำกันอีกสองครั้ง
        temp.append (y)

    tempstr = ""
    สำหรับฉันในอุณหภูมิ:
        tempstr + = str (i)
    พิมพ์ชั่วคราว

นี่คือดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ!


5
ฉันขอแนะนำ "ผลลัพธ์ที่เป็นไปได้ (ความน่าจะเป็น> 0)" และ "ผลลัพธ์ที่เป็นไปไม่ได้ (ความน่าจะเป็น = 0)" แทนที่จะเป็น "Truthy" และ "Falsy" - นี่ดูเหมือนจะสอดคล้องกับสิ่งที่ฉันคิดว่า )
Khuldraeseth na'Barya

9
เราต้องพิมพ์ผลลัพธ์เช่น 09033 ด้วยศูนย์นำหน้าหรือไม่?
xnor

3
หากความน่าจะเป็นชุดคุณสามารถระบุได้ในคำถาม โดยค่าเริ่มต้นrandomไม่ได้หมายความอย่างสม่ำเสมอดังนั้น
Jo King

3
อาจเพิ่ม 99233 เพื่อให้เข้าใจได้
l4m2

3
ยินดีต้อนรับสู่ PPCG! ความท้าทายแรกที่ดี
Jonathan Allan

คำตอบ:


21

05AB1E , 11 ไบต์

žh.r3£ûÁÂ)Ω

ลองออนไลน์!

คำอธิบาย

žh            # push "0123456789"
  .r          # random shuffle
    3£        # take the first 3
              # EX: 152
      û       # palendromize
              # EX: 15251
       Á      # rotate right
              # EX: 11525
        Â)    # pair with its reverse
              # EX: [11525, 52511]
          Ω   # pick one at random

ฉันสงสัยว่า Emigna ฮ่า ... เห็นคำตอบยอดนิยม +1
Magic Octopus Urn

9

CJam (16 ไบต์)

YmrG*98+ZbA,mrf=

การสาธิตออนไลน์

หมายเหตุ: ฉันสันนิษฐานว่าโดย OP "เฉพาะ" จริงๆหมายถึง "ชัดเจน"

นอกจากนี้สำหรับ 16 ไบต์:

98ZbA,mrf=W2mr#%
98ZbA,mrf=_W%]mR

การผ่า

Ymr    e# Select a random number from [0 1]
G*98+  e# Multiply by 16 and add 98 to get 98 or 114
Zb     e# Base conversion in base 3 to get [1 0 1 2 2] or [1 1 0 2 0]
A,mr   e# Shuffle the numbers from 0 to 9
f=     e# Map "select the item at this index"

ตัวแปรอื่นสร้างโดยใช้[1 0 1 2 2]แล้วเลือกผลลัพธ์หรือย้อนกลับ


9

Perl 5 , 81 63 56 ไบต์

ลดขนาด 7 ไบต์ด้วยแรงบันดาลใจจาก @DomHastings

การสร้างตัวเลขจากรูปแบบที่เหมาะสม

@q{0..9}++;say+(keys%q)[.5>rand?(2,2,0,1,0):(0,1,0,2,2)]

ลองออนไลน์!


Perl 5 , 89 ไบต์

เลือกสุ่มตัวเลข 5 หลักจนกว่าจะพบหมายเลขที่ตรงกับเกณฑ์

$_=sprintf'%05d',0|rand 1E5until(/(.)\1(.)(.)\2/||/(.)(.)\1(.)\3/)&&$1-$2&$2-$3&$1-$3;say

ลองออนไลน์!


เคล็ดลับที่ดีโดยใช้ปุ่มแฮชสำหรับการสุ่ม! ฉันคิดว่านี่เทียบเท่ากับ -8 ถึงแม้ว่าฉันอาจจะไม่ได้รับคดีขอบ ... ลองออนไลน์!
Dom Hastings

1
การแฮชแบบสุ่ม ยอดเยี่ยม! สั้นกว่า
Ton Hospel

คำถามคือว่าtime%2สุ่มอย่างเพียงพอหรือไม่เนื่องจากอยู่ภายใต้การควบคุมของผู้ใช้
Xcali

@ Xcali ดูเหมือนจะเป็นฉันทามติที่ดีตราบเท่าที่คุณใช้เพียงครั้งเดียวดังนั้นฉันคิดว่าคุณควรจะดี
FryAmTheEggman

8

Python 2 , 80 ไบต์

from random import*
a,b,c=sample(range(10),3)
print[a,a,b,c,b][::choice((-1,1))]

ลองออนไลน์!

ส่งออกรายการตัวเลข

Python 2 , 83 ไบต์

from random import*
a,b,c=sample('0123456789',3)
print(a*2+b+c+b)[::choice((-1,1))]

ลองออนไลน์!

ผลลัพธ์คือตัวเลข


หากค่าเริ่มต้นเป็นแบบแผนที่ไม่สม่ำเสมอ (คำถามไม่ได้ระบุไว้) คุณสามารถบันทึกไบต์โดยสุ่มตัวอย่างการย้อนกลับได้เช่นกัน: ลองออนไลน์! แก้ไข: ไม่เป็นไรฉันเห็นความสม่ำเสมอถูกแก้ไขในสเป็ค ฉันสงสัยว่าวิธีการนี้ยังสามารถกู้คืนได้หรือไม่
xnor

7

APL (Dyalog Unicode) , 22 21 20 18 17 ไบต์

(3∨?2)⌽1↓,∘⌽⍨3?10

ลองออนไลน์!

ถ้าเป็นที่ยอมรับในการส่งออกตัวเลขที่มักจะอยู่ในรูปแบบเดียวกันนี้สามารถลงไป 12 ไบต์ทั้งหรือ1⌽1↓,∘⌽⍨3?103⌽1↓,∘⌽⍨3?10

บันทึกไบต์โดยการลบสิ่งที่ไม่จำเป็นออก

บันทึกเป็นไบต์ด้วย H.PWiz แล้วจึงเพิ่มอีก 2 ไบต์เนื่องจากคำแนะนำ

บันทึกเป็นไบต์ด้วย ngn

ฟังก์ชั่นจะถือว่า⎕IO←0( I ndex O rigin)


อย่างไร?

(3∨?2)⌽1↓,∘⌽⍨3?10  Anonymous function.
              3?10   Deal 3 (distinct) random numbers from 0 to 9. (Assume 1 2 3)
                   Use that as both arguments for:
          ,∘⌽       Rotate (⌽), then concatenate (,).
                    Yields 3 2 1 1 2 3.
        1          Drop the first element. Our vector is now 2 1 1 2 3
                   Rotate the vector to the left using as argument:
(  ?2)              Roll 0 or 1 and...
 3                 Do the GCD between 3 and the result. (30=3; 31=1.)
                    This yields either 1 1 2 3 2 or 2 3 2 1 1.

ไม่สามารถรับข้อมูลได้
drham

@drham ไม่มีฟังก์ชั่นการป้อนข้อมูล ในกรณีนี้ข้อมูล TIO จะใช้ในการเรียกใช้ฟังก์ชันInput gนอกจากนี้ยังg←ไม่นับเป็นจำนวนไบต์เนื่องจากไม่จำเป็นต้องใช้เพื่อเรียกใช้ฟังก์ชันเท่านั้น
J. Sallé

ความจริงที่gถูกเรียกในส่วนอินพุตเป็นเพียงความ
แปลกประหลาด

(4∨?2)ประหยัด byte มากกว่า1 4[?2]
H.PWiz

1
คุณยังสามารถบันทึกไบต์ด้วยการไม่กำหนดfและใช้รถไฟ ฉันจะทิ้งคุณไว้ :) :)
H.PWiz

6

Java 8, 145 136 125 119 ไบต์

v->{String r;for(;!(r=(int)(Math.random()*1e5)+"").matches("((.).?\\2){2}")|r.chars().distinct().count()<3;);return r;}

-9 ไบต์ขอบคุณ@ OlivierGrégoire
-11 ไบต์ขอบคุณที่@RickHitchcock
-6 ไบต์ขอบคุณที่@Nevay

คำอธิบาย:

ลองออนไลน์

v->{            // Method with empty unused parameter and String return-type
  String r;     //  Result-String
  for(;!(r=(int)(Math.random()*1e5)+"")
                //  Generate a random number in the range [0; 100000) and set it to `r`
        .matches("(.).*\\1(.).*\\2")
                //   And continue doing this as long as it doesn't match the regex above,
       |r.chars().distinct().count()<3;);
                //   or doesn't have three distinct digits
  return r;}    //  Return the result


@ OlivierGrégoireคุณโพสต์สิ่งนี้ในความท้าทายที่ถูกต้องหรือไม่ .. : S มันดูคุ้น ๆ แต่ก็ไม่ใช่ความท้าทายนี้แน่ ๆ ..
Kevin Cruijssen

สิ่งเล็กน้อยที่ทำลายลิงค์ของฉัน ... ยังไงนี่คือกอล์ฟ:v->{String r="";for(;!r.matches("(.)\\1(.).\\2|(.).\\3(.)\\4")|r.chars().distinct().count()!=3;r=(int)(Math.random()*1e5)+"");return r;}
Olivier Grégoire

1
ฉันคิดว่า regex ของคุณสามารถย่อให้สั้นลงได้เพื่อ(.).*\\1(.).*\\2ประหยัด 11 ไบต์
Rick Hitchcock

1
119 bytes:v->{String r;for(;!(r=(int)(Math.random()*1e5)+"").matches("((.).?\\2){2}")|r.chars().distinct().count()<3;);return r;}
Nevay

5

เยลลี่ 23 ไบต์

⁵Ḷṗ3⁼Q$ÐfXµḢ;`;ŒBW;U$µX

ลองออนไลน์!


ดีฉันจะ
โหวต

7
@drham :) ขอบคุณ คุณควรจะสามารถทำได้ในไม่ช้าเมื่อสมาชิกที่ตื่นตัวส่วนใหญ่ตื่นขึ้นมาคำถามของคุณอาจจะได้รับการโหวตมาก ความท้าทายแรกที่ดีและยินดีต้อนรับสู่ PPCG โดยวิธี!
HyperNeutrino

5

เจลลี่ , 12 11 ไบต์

ØDẊ⁽0yṃ,U$X

ลองออนไลน์!


คำอธิบาย


ØDẊ⁽0yṃ,U$X    Niladic link, generate a random string.
ØD             List of digits, ['0','1','2',...,'9'].
  Ẋ            Random shuffle.
   ⁽0y         Number 13122.
      ṃ        Base decompression. (*)
       ,U$     Pair with its upend (reverse).
          X    Choose one (it or its reversed) randomly.

(*)อาร์กิวเมนต์ที่ถูกต้องคือรายการ['0','1','2',...,'9']สุ่มแบบสุ่มมี 10 องค์ประกอบ ดังนั้นตัวเลข13122จะถูกแปลงเป็นฐาน bijective 10 ( [1,3,1,2,2]) และดัชนีลงในรายการ (ดังนั้นถ้าเป็นรายการlค่าส่งคืนของอะตอมคือ[l[1],l[3],l[1],l[2],l[2]]ที่ซึ่ง Jelly ใช้การทำดัชนีแบบ 1 ฐาน)


(ความคิดเดียวกันกับคำตอบ 05AB1E เกิดขึ้นโดยอิสระ)
user202729

... 05AB1E ได้รับ 6 upvotes เพราะสามารถผูก Jelly ได้ Jelly เพียงรับ upvotes 2 อันเพราะไม่สามารถชนะ 05AB1E ได้?
user202729

2
ฉัน upvote คำตอบของคุณ -> SPEECH 100 <---
L_Church

4

JavaScript (ES6), 79 ไบต์

f=([,,d,a,b,c]=[...Math.random()+f])=>a-b&&a-c&&b-c?d&1?a+a+b+c+b:b+c+b+a+a:f()

ลองออนไลน์!

อย่างไร?

Math.random()ให้ลอยสุ่ม[0..1) เราใช้+fเพื่อบังคับขู่เข็ญให้เป็นสตริง เราไม่สนใจศูนย์นำและจุดทศนิยมโดยการทำ[,,( destructuring มอบหมายของตัวละครสองตัวแรกที่จะไม่มีอะไร) และเก็บครั้งแรก 4 หลักทศนิยมเข้าไปd , , และค

หาก, และ 3 เลขที่แตกต่างกันเราสร้างผลลัพธ์สุดท้ายในAABCBหรือBCBAAรูปแบบ (ใช้ความเท่าเทียมกันของdในการตัดสินใจ) มิฉะนั้นเราจะลองอีกครั้งจนกว่าจะหมด

ในเหตุการณ์ที่ไม่น่าจะเป็นไปได้สูงในการMath.random()คืนค่าโดยไม่มีตำแหน่งทศนิยมเพียงพออย่างน้อยcจะถูกตั้งค่าเป็นอักขระที่ไม่ใช่ตัวเลขบังคับให้การทดสอบล้มเหลวและการเรียกซ้ำเกิดขึ้น หากa , bและcเป็นจำนวนเต็มที่ถูกต้องดังนั้นdจะรับประกันว่าเป็นจำนวนเต็มที่ถูกต้องเช่นกันดังนั้นจึงไม่จำเป็นต้องทดสอบ


ทั้งสองสามารถเป็น&& &นอกจากนี้[,,a,b,c,d]ทำงานอย่างไร ฉันไม่เคยเห็นอินพุตเช่น[,,เคย
Kevin Cruijssen

1
@KevinCruijssen ค่าที่เหมาะสมและจะล้มเหลวเช่นสำหรับเนื่องจากa=4, b=2, c=1 4-2&4-1&2-1 == 2&3&1 == 0ฉันได้เพิ่มคำอธิบายสั้น ๆ เกี่ยวกับการกำหนดตัวแปร
Arnauld

อ่าแน่นอน ฉันพยายาม&&ที่จะ&ใน TIO และให้ผลที่ถูกต้องดังนั้นฉันคิดว่ามันเป็นไปได้ ไม่ทราบว่า&แทนที่จะ&&กรองเอาท์พุทที่ถูกต้องเป็นอย่างอื่น และขอขอบคุณสำหรับคำอธิบายเพิ่มเติมเกี่ยวกับการมอบหมายการทำลายล้างที่ไม่เคยเห็นมาก่อน
Kevin Cruijssen

นี่มันยอดเยี่ยมเพียง +1
Luis felipe De jesus Munoz


2

Dirty , 33 ไบต์

ใช้--numeric-outputแฟล็กเพื่อให้สามารถอ่านได้มิฉะนั้นจะส่งเอาต์พุตสตริงของอักขระควบคุมที่มีโค้ด - จุดที่สอดคล้องกับหลัก

10⭧[1w#%D⅋№3⤱≠1ẅ&]1wẂ⭿⭣1u∅#1∧◌ŪW‼

ลองออนไลน์!

อธิบาย:

10⭧              put 10 on the right stack
[1w#%D⅋№3⤱≠1ẅ&] loop until there are 3 distinct positive numbers below 10 in the top stack
1wẂ              clean-up the right and top stacks
⭿               copy the top and bottom of the top stack to each-other
⭣                swap the first two elements of the top stack
1u               rotate the top stack by 1
∅#1∧◌ŪW          reverse the top stack half of the time
‼                print the top stack

2

ถ่าน 34 ไบต์

≔‽χθ≔‽Φχ⁻ιθη↑I⟦θθη‽Φχ×⁻ιθ⁻ιηη⟧¿‽²‖

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย:

  χ                                 Predefined variable 10
 ‽                                  Random element from implicit range
≔  θ                                Assign to variable `q`
       χ                            Predefined variable 10
      Φ                             Filter on implicit range
         ι                          Current value
          θ                         Variable `q`
        ⁻                           Subtract
     ‽                              Random element
    ≔      η                        Assign to variable `h`
                    χ               Predefined variable 10
                   Φ                Filter on implicit range
                       ι  ι         Current value
                        θ           Variable `q`
                           η        Variable `h`
                      ⁻  ⁻          Subtract
                     ×              Multiply
                  ‽                 Random element
               θθ                   Variable `q`
                 η          η       Variable `h`
              ⟦              ⟧      Wrap 5 values into array
             I                      Cast array elements to string
            ↑                       Make array print horizontally
                                ²   Literal 2
                               ‽    Random element from implicit range
                              ¿     If
                                 ‖  Reflect

2

เรติน่า 40 ไบต์


10*
Y`w`d
V?`
Lv$7`.(.)
$1$<'$'
O?`...?

ลองออนไลน์!

สามารถพิมพ์สตริงด้วยเลขศูนย์นำหน้า

คำอธิบาย


10*

เริ่มต้นสายอักขระถึง 10 ขีดล่าง

Y`w`d

วนคำตัวอักษรเป็นตัวเลข มันแปลกไปหน่อย wและdสั้นสำหรับสตริงดังต่อไปนี้ตามลำดับ:

w: _0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
d: 0123456789

การทับศัพท์แบบวนรอบหมายความว่าอันดับแรกทั้งสองสตริงจะถูกทำซ้ำตามความยาวของ LCM:

_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_012345...
0123456789012345678901234567890123456789012345678901234567890123456789...

เนื่องจากความยาวสตริง 53 และ 10 เป็น coprime สำเนาแต่ละชุด_จึงถูกจับคู่กับตัวเลขที่แตกต่างกัน และตอนนี้วงจรทับศัพท์จะเข้ามาแทนที่ฉัน TH คัดลอกของ_กับฉันจับคู่ TH ในรายการที่ขยายตัว ดังนั้นเราจึงลงท้ายด้วยสตริงต่อไปนี้:

0369258147

ทั้งหมดนี้เพื่อบันทึกไบต์เดียวบนสตริงตัวอักษร0369258147ดังนั้นฉันเดาเลยเหรอ? : D

อย่างไรก็ตามตอนนี้เรามีตัวเลขทั้งหมด 10 หลักแล้ว

V?`

นี่เป็นการสับตัวเลข ดังนั้นตัวเลขสามหลักแรกจะเป็นการสุ่มเลือกตัวเลขสามหลักที่แตกต่างกันอย่างสม่ำเสมอ

Lv$7`.(.)
$1$<'$'

เราตรงกับสตริงและทำให้มันกลายเป็น...ABC BABCCวิธีที่เราทำมันค่อนข้างบ้าและประหยัดได้เพียงหนึ่งไบต์เมื่อเปรียบเทียบกับวิธีที่ตรงไปตรงมามากขึ้น อันดับแรกเราจับคู่อักขระที่ทับซ้อนกันทั้งหมด( v) จับภาพตัวที่สอง ( .(.)) จากนั้นเราก็เก็บเฉพาะการจับคู่ที่ 8 ( 7, zero-based) ซึ่งเป็นในAB ...ABCจากนั้นเราจะแทนที่ ( $) ด้วย: B( $1), ABC( $<'ซึ่งเป็นคำต่อท้ายของตัวแยกการจับคู่ที่ด้านซ้ายของการแข่งขัน) C( $'ซึ่งเป็นคำต่อท้ายของการแข่งขันนั้น)

O?`...?

สุดท้ายเราจับคู่ทั้ง 3 หรือ 2 ตัวอักษรและสุ่มจับคู่ให้เราอย่างใดอย่างหนึ่งBABCCหรือCCBABแบบสุ่ม


2

R , 78 ไบต์

z=sample(0:9,3)[c(2,1:3,3)];cat(paste(`if`(runif(1)>.5,z,rev(z)),collapse=''))

ลองออนไลน์!

sampleเลือก 3 ค่าสุ่มจาก0:9ซึ่งวางในเวกเตอร์ดังนี้: a b a c c. ตอนนี้เรามีโอกาส 50/50 ที่จะกลับเวกเตอร์นี้แล้วต่อกันและพิมพ์


ดีมาก! 62 ไบต์ ; ดูเหมือนว่าคุณฝึกไปนิดนึง)
จูเซปเป้

ฉันดูการใช้rtงาน แต่ด้วยเหตุผลบางอย่างฉันคิดว่ามันนานกว่านี้ ....
JAD

และ(อย่างที่ไม่มีการค้นหาก็ดี :)
JAD

@Giuseppe asnwer ของคุณสามารถเล่นกอล์ฟได้ไกลถึง 55 ไบต์ ... TIO
JayCe

2

PHP, 73 72 66 ไบต์

<?=strtr(rand()%2?AABCB:BCBAA,ABC,join(array_rand(range(0,9),3)));

แก้ไข: 66 ไบต์ขอบคุณคำแนะนำของ @David

ลองออนไลน์!


คุณสามารถรับได้ถึง 65 ด้วยสิ่งนี้:<?=strtr(rand()%2?AABCB:BCBAA,ABC,rand(0,9).rand(0,9).rand(0,9));
Davіd

@David น่าเสียดายที่โซลูชันของคุณละเมิดกฎ 5 อาจเป็นเช่นrand(0,3).rand(4,6).rand(7,9)นั้น แต่อีกครั้งไม่ใช่ "สุ่มอย่างสม่ำเสมอ" Btw ฉันไม่คุ้นเคยrand()%2ดังนั้นความคิดเห็นของคุณช่วยให้ฉันปรับปรุงโซลูชันของฉันได้เล็กน้อย
retrowaver

1
อ่าใช่คุณพูดถูก ฉันไม่เห็นกฎนั้น ฉันมีหนึ่งที่ทำงานตอนนี้ที่66<?=strtr(rand()%2?AABCB:BCBAA,ABC,join(array_rand(range(0,9),3)));ไบต์: คุณสามารถทดสอบว่าarray_randพารามิเตอร์ตัวที่สองของส่งกลับผลลัพธ์ที่ไม่ซ้ำกันที่นี่เท่านั้น (ทดสอบมากกว่า 10,000 ซ้ำ)
Davіd

@ David ขอบคุณเพิ่งอัพเดตโพสต์ของฉัน!
retrowaver

1

สีแดง , 147, 146 125 ไบต์

func[][b: copy[]d:[1 1 2 3 2]if 1 = random 2[d: reverse d]while[4 > length? b][alter b(random 10)- 1]foreach a d[prin b/(a)]]

ลองออนไลน์!

Ungolfed:

f: func[] [                       function with no arguments
    b: copy []                    an empty list
    d: [1 1 2 3 2]                preset digits at positons
    if 1 = random 2 [             generate 1 or 2 
        d: reverse d]             based on this choose to reverse the positions list
    while [4 > length? b] [       while we haven't chosen 3 different digits
        alter b (random 10) - 1   pick a random digit, if it's not in the list already
                                  append it to the list, otherwise remove it
    ]
    foreach a d [                 for each position
       prin b/(a)]                print the corresponding digit 
]



1

Python 3 + จำนวน, 69 ไบต์

from pylab import*
r=choice
i=r(2)
print(r(10,3,0)[[1-i,0,1,2,-1-i]])

คำอธิบาย

from pylab import*     
r=choice               # `choice` takes a range, number of samples, and wether repetition is allowed
i=r(2)                 # Single value in [0,1] to specify if repeated digits come on right or left
print(r(10,3,0)[[1-i,0,1,2,-1-i]])    # Construct output using index list and 3 random integers


0

J , 35 ไบต์

[:u:48+[:|.^:(?&2:)2 2 1 0 1{3?10"_

ลองออนไลน์!

ฉันแน่ใจว่ามันสามารถตีกอล์ฟได้ไกลกว่านี้มาก

คำอธิบาย:

  3?10             - generates 3 different digits
7 0 3

  2 2 1 0 1{       - constructs a list using digits positions 0, 1 and 2

  2 2 1 0 1{3?10   
3 3 0 7 0

  |.^:(?&2:)       - generates 0 or 1 and if 1, reverses the list 

  |.^:(?&2:)2 2 1 0 1{3?10
0 7 0 3 3

   u:48+              - converts to char by adding 48 to each digit
   u:48+|.^:(?&2:)2 2 1 0 1{3?10
07033
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.