อีกสามหมายเลข

Oct 09 2020

ให้สามตัวเลขที่แตกต่างจาก\$1\$ถึง\$7\$ส่งออกตัวเลขที่แตกต่างกันสามตัวจาก\$1\$ถึง\$7\$นั่นคือไม่มีตัวเลขที่เหมือนกันกับตัวเลขเดิม รหัสของคุณต้องสร้างชุดเอาต์พุตที่แตกต่างกันสำหรับชุดอินพุตที่เป็นไปได้แต่ละชุด นั่นคือไม่มีอินพุตสองตัวที่สามารถสร้างเอาต์พุตเดียวกันได้โดยถือว่าทั้งสองเป็นชุดที่ไม่ได้เรียงลำดับ นอกเหนือจากนั้นคุณสามารถใช้การแมปอะไรก็ได้ที่คุณต้องการ

ในทางคณิตศาสตร์มากขึ้นคุณจะถูกขอให้ระบุ bijection (ฟังก์ชันหนึ่งต่อหนึ่ง) \$f:S \to S\$ที่ไหน\$S\$ประกอบด้วยชุดย่อยสามองค์ประกอบของ\$\{1,2,3,4,5,6,7\}\$เช่นนั้น\$f(s) \cap s = \emptyset\$สำหรับทุกๆ\$s\in S\$. ในฐานะที่เป็น bijection การแมปนี้จะต้องกลับด้านได้แม้ว่าคุณจะไม่ต้องระบุฟังก์ชันผกผันในโค้ดของคุณก็ตาม

นี่คือ 35 triples ที่เป็นไปได้ (เขียนเว้นวรรค )

I / O

รูปแบบของชุดองค์ประกอบทั้งสามมีความยืดหยุ่น คุณสามารถรับอินพุตตามลำดับที่จัดเรียงเป็นตัวเลขสามตัวหรือรายการสามองค์ประกอบ / อาร์เรย์ / ทูเพิลหรือเป็นชุด อย่างไรก็ตามคุณอาจไม่ต้องการอินพุตที่สั่งซื้อในลำดับที่เจาะจงนอกเหนือจากการจัดเรียง คุณอาจเป็นศูนย์ดัชนี

คุณยังสามารถใช้ลำดับของเจ็ดบิตที่สามอยู่ ลำดับเจ็ดบิตนี้สามารถแสดงเป็นตัวเลขทศนิยมไบต์หรืออักขระ

สามารถกำหนดเอาต์พุตในรูปแบบใดก็ได้เหล่านี้โดยค่าเผื่อเพิ่มเติมที่ไม่ต้องเรียงลำดับเอาต์พุต

คำตอบ

12 HyperNeutrino Oct 09 2020 at 19:46

Python 3 , 53 ไบต์

def f(b):c=[*{*range(7)}-b];del c[-sum(b)%4];return c

ลองออนไลน์!

-3 ไบต์ขอบคุณ FryAmTheEggman
-4 ไบต์โดยศูนย์ดัชนี
-1 ไบต์ขอบคุณ xnor

11 JonathanAllan Oct 09 2020 at 22:26

Python 3 , 43 ไบต์

lambda s:([*{*range(7)}-s]*4)[-sum(s):][:3]

ลองออนไลน์!

8 JonathanAllan Oct 09 2020 at 21:39

เจลลี่ ,  9 8  7 ไบต์

7RṚḟṙSḊ

monadic Link ยอมรับรายการตัวเลขสามตัวจาก\$[1,7]\$ตามลำดับที่ให้รายการตัวเลขอื่น ๆ จาก\$[1,7]\$ไม่จำเป็นต้องเรียงลำดับ

ลองออนไลน์! หรือดูทั้งหมด 35 (ฉันเรียงลำดับค่าผลลัพธ์เพื่อการเปรียบเทียบที่ง่ายขึ้น)

อย่างไร?

7RṚḟṙSḊ - Link: list A                   e.g.  [2,4,7]
7R      - seven range                          [1,2,3,4,5,6,7]
  Ṛ     - reverse                              [7,6,5,4,3,2,1]
   ḟ    - filter discard (A) -> B              [6,5,3,1]
     S  - sum (A)                              13
    ṙ   - rotate (B) left by (that)            [5,3,1,6]
      Ḋ - remove the leftmost                  [3,1,6]
7 DominicvanEssen Oct 10 2020 at 12:24

R , 33 31 ไบต์

แก้ไข: -2 ไบต์โดยใช้โมดูโล-4(ซึ่งส่งคืนค่าลบของโมดูโล4)

(1:7)[v<--scan()][sum(v)%%-4-1]

ลองออนไลน์!

ค้นหาตัวเลข 4 หลักใน 1..7 ที่ไม่ได้อยู่ในอินพุตและไม่รวมตัวเลขที่ตรงกับผลรวมอินพุต (การพันรอบ)

การทดสอบลิงก์ TIO ที่เอาต์พุตไม่ซ้ำกันสำหรับแต่ละอินพุตและแสดงเอาต์พุตสำหรับทุกอินพุต

(1:7)                   # vector of digits 1..7
     [          ]       # select elements
         -scan()        # excluding (negative indexes) input
      v<-               # and define v as (negative) input
                        # (so up to here we have the 4 elements that aren't in the input)  
     [              ]   # from these, select elements
      -                 # excluding (negative index)
       (sum(v)%%4+1)    # the sum of input, modulo 4, plus 1
5 Shaggy Oct 09 2020 at 21:24

Japt , 14 ไบต์

ตามที่โฆษณาไว้ก่อนหน้านี้ฉันเป็นคนขี้เหนียวเล็กน้อยดังนั้นสิ่งนี้อาจผิดพลาดได้และแม้ว่าจะถูกต้องก็อาจจะตีกอล์ฟได้เล็กน้อย

7õ kU k϶UxÍu4

ลองหรือดู (สิ่งที่ฉันคิดว่าเป็น) การพิสูจน์

5 Neil Oct 09 2020 at 21:47

ถ่าน , 39 38 34 32 ไบต์

NθI⁻¹²⁷⁺θX²⊟Φ⁷№ETXdhp﹪×℅λX²ι¹²⁷θ

ลองออนไลน์! ลิงก์คือรหัสเวอร์ชันที่ละเอียด I / O 7..112เป็นจำนวนเต็ม คำอธิบาย: เลขของสตริงมีรูปแบบห้าบิตซึ่งเราได้เลือกโดยพลการที่จะเป็นเช่นนั้นไม่รวมผลTXdhp 1จากนั้นจะหมุนเป็นวัฏจักรจนกว่าจะตรงกับอินพุตซึ่ง ณ จุดนั้นฉันได้กำหนดบิตที่ยกเว้น จากนั้นบิตนี้จะถูกเพิ่มลงในอินพุตต้นฉบับและในที่สุดความแตกต่างระหว่าง127และผลรวมจะถูกพิมพ์ออกมา

Nθ                                  Cast input to integer
             ⁷                      Literal 7
            Φ                       Filter on implicit range
                TXdhp               Literal string `TXdhp`
               E                    Map over characters
                        λ           Current character
                       ℅            Ordinal
                      ×             Multiplied by
                          ²         Literal 2
                         X          Raised to power
                           ι        Outer index
                     ﹪              Modulo
                            ¹²⁷     Literal 127
              №                     Count (i.e. contains)
                               θ    Input
           ⊟                        Pop matching value
          ²                         Literal 2
         X                          Raised to that power
       ⁺                            Added to
        θ                           Input
   ⁻                                Subtracted from
    ¹²⁷                             Literal 127
  I                                 Cast to string
                                    Implicitly print

ฉันเลือกรูปแบบห้าบิตต่อไปนี้โดยพลการเพื่อยกเว้น1แต่รูปแบบที่แตกต่างกันห้าแบบใด ๆ ก็ตามจะใช้ได้

T   1010100
X   1011000
d   1100100
h   1101000
p   1110000
4 Arnauld Oct 09 2020 at 20:00

JavaScript (ES6),  66  65 ไบต์

รับอินพุตเป็นสตริง 3 หลัก ส่งคืนสตริงในรูปแบบเดียวกัน

f=(n,k=i=0)=>++k<8?(~n.search(k)||n*43%399%4==i++?'':k)+f(n,k):''

ลองออนไลน์!

3 JonathanAllan Oct 09 2020 at 23:32

05AB1E , 10 ไบต์

7LsKsO(._¨

ลองออนไลน์!

อย่างไร?

7LsKsO(._¨ - (push the input)      e.g.: [2,4,7]
7          - push 7                      7,[2,4,7]
 L         - range                       [1,2,3,4,5,6,7],[2,4,7]
  s        - swap top two of the stack   [2,4,7],[1,2,3,4,5,6,7]
   K       - push a without bs           [1,3,5,6]
    s      - swap top two of the stack   [2,4,7],[1,3,5,6]  (implicit input swapped in)
     O     - sum                         13,[1,3,5,6]
      (    - negate                      -13,[1,3,5,6]
       ._  - rotate a left by b          [6,1,3,5]
         ¨ - remove rightmost            [6,1,3]
           - implicit print top of stack [6,1,3]
3 Noodle9 Oct 11 2020 at 23:06

C (gcc) , 84 83 ไบต์

บันทึกมหันต์16 19 23 ไบต์ด้วยตัวเองเพดานแคท !!!
บันทึกไบต์ขอบคุณนีล !!!

p;i;f(m){for(p=i=0;(L"᰸ᨴᘬᤲᔪ"[p]>>i%7&m)-m;p+=++i%7<1);p=(64>>i%7)+m^127;}

ลองออนไลน์!

รับข้อมูลเป็น\$3\$บิตที่ตั้งค่าเป็นค่าความสำคัญน้อยที่สุด - \$7\$- บิตของintและส่งกลับตัวเลขอีกสามตัวในทำนองเดียวกัน

คำอธิบาย (ก่อนเล่นกอล์ฟ)

f(m){                                  // function taking an integer with  
                                       // 3 bits set in its 7 lsb  
                                       // representing the 3 input numbers  
     for(                              // loop over  
         p=L"ᔪᘬᤲᨴ᰸"                     // a sequence of 5 int values:
                                       //   5418,5676,6450,6708,7224
                                       // that are the 5 unique patterns of    
                                       // 3 set bits per 7 bits shifted and
                                       // repeated over 13 bits so that their  
                                       // 7th bit is unset:  
                                       //   5418 = 1010100101010
                                       //   5676 = 1011000101100  
                                       //   6450 = 1100100110010  
                                       //   6708 = 1101000110100  
                                       //   7224 = 1110000111000
                    ;;++p)             // no need to test for stopping  
                                       // since we must match one  
       for(i=7;i--;)                   // loop over shift values from 6 to 0    
         if((*p>>6-i&m)==m)            // if a shifted 7-bit slice of one of  
                                       // our patterns matches m we've found  
                                       // the correct bit to exclude from m's  
                                       // 4 unset bits
            return(1<<i)+m^127;        // add that bit to m and flip the 7   
                                       // lsb so the 3 other unset bits are  
                                       // now set to represent the 3 return
                                       // values  
 }
2 Razetime Oct 10 2020 at 04:02

แกลบ 9 ไบต์

hṙ_Σ¹`-ḣ7

ลองออนไลน์!

2 KjetilS. Oct 10 2020 at 22:03

Perl 5 , 49 ไบต์

sub{@c=grep!/[@_]/,0..6;splice@c,-sum(@_)%4,1;@c}

ลองออนไลน์!

เพียงแค่แปลคำตอบ python จาก HyperNeutrino

2 TomerShetah Oct 11 2020 at 17:19

Scala 64 ไบต์

b=>1.to(7).diff(b).zipWithIndex.filter(_._2!=b.sum*3%4)map(_._1)

ลองออนไลน์!

2 ellcs Oct 12 2020 at 17:41

ทับทิม 38 ไบต์

->s{n=s.sum;(([*1..7]-s)*9)[-n..-n+2]}

ลองออนไลน์!

ขโมยคำตอบของเอริคซึ่งขึ้นอยู่กับคำตอบของโจนาธาน ฉันจะแสดงความคิดเห็นกับเอริค แต่ฉันไม่มีชื่อเสียงมากพอ

ความแตกต่างที่แท้จริง: การใช้ช่วงเพื่อให้ได้ชิ้นส่วนสามองค์ประกอบ

1 EricDuminil Oct 10 2020 at 16:23

ทับทิม 40 ไบต์

->s{(([*1..7]-s)*9).last(s.sum).first 3}

ลองออนไลน์!

พอร์ตทับทิมของโจนาธานตอบ

Lyxal Oct 09 2020 at 22:55

05AB1E , 17 ไบต์

7LIм{3.$IO(._Dg<£

ลองออนไลน์!

เป็นคำตอบ Jelly เวอร์ชันที่ยาวกว่ามากดังนั้นควรโหวตให้คะแนนด้วย

Graham Oct 10 2020 at 18:05

APL + WIN 20 ไบต์

พร้อมต์สำหรับการป้อนเวกเตอร์ของจำนวนเต็ม

3↑(-+/¯2↑n)⌽n←(⍳7)~⎕

ลองออนไลน์! ขอบคุณ Dyalog Classic

Ven Oct 12 2020 at 14:55

APL (Dyalog Unicode) , 13 ไบต์SBCS

1∘↓+/⌽(⌽⍳7)∘~

ลองออนไลน์!

นี่คือด้านบนของรถไฟ

1∘↓+/⌽(⌽⍳7)∘~
      (⌽⍳7)∘~ ⍝ Right side of the atop
        ⍳7    ⍝ Range
       ⌽      ⍝ Reverse
           ∘  ⍝ Composed with...
            ~ ⍝ ...without (to remove our arguments)
     ⌽        ⍝ Rotated by...
   +/         ⍝ ...the sum of the arguments
1∘↓           ⍝ Left side of the atop
1∘↓           ⍝ Drop leftmost (drop curried with 1)