Tiga nomor lainnya
Diberikan tiga angka berbeda dari \$1\$ke \$7\$, menghasilkan tiga angka berbeda lainnya dari \$1\$ke \$7\$, yaitu tidak ada angka yang sama dengan angka aslinya. Kode Anda harus menghasilkan rangkaian keluaran yang berbeda untuk setiap rangkaian masukan yang memungkinkan. Artinya, tidak ada dua masukan yang dapat menghasilkan keluaran yang sama, memperlakukan keduanya sebagai himpunan tidak berurutan. Selain itu, Anda dapat menerapkan pemetaan apa pun yang Anda inginkan.
Secara matematis, Anda diminta memberikan bijection (fungsi satu-ke-satu) \$f:S \to S\$dimana \$S\$terdiri dari himpunan bagian tiga elemen dari \$\{1,2,3,4,5,6,7\}\$, sedemikian rupa \$f(s) \cap s = \emptyset\$untuk setiap \$s\in S\$. Sebagai bijection, pemetaan ini harus dapat dibalik, meskipun Anda tidak harus menyediakan fungsi invers dalam kode Anda.
Berikut adalah 35 kemungkinan tripel ( dipisahkan spasi ).
I / O
Format set tiga elemen fleksibel. Anda dapat mengambil input dalam urutan yang diurutkan sebagai tiga angka atau daftar / larik / tupel tiga elemen, atau sebagai satu set. Namun, Anda tidak boleh meminta masukan yang dipesan dalam urutan tertentu selain diurutkan. Anda mungkin nol indeks.
Anda juga dapat menggunakan urutan tujuh bit yang tiga di antaranya berada. Urutan tujuh bit ini juga dapat direpresentasikan sebagai bilangan desimal, byte, atau karakter.
Keluaran dapat diberikan dalam salah satu format ini, dengan kelonggaran lebih lanjut bahwa keluaran yang dipesan tidak harus diurutkan.
Jawaban
Python 3 , 53 byte
def f(b):c=[*{*range(7)}-b];del c[-sum(b)%4];return c
Cobalah secara online!
-3 byte berkat FryAmTheEggman
-4 byte dengan indeks-nol
-1 byte berkat xnor
Python 3 , 43 byte
lambda s:([*{*range(7)}-s]*4)[-sum(s):][:3]
Cobalah secara online!
Jelly , 9 8 7 byte
7RṚḟṙSḊ
Tautan monadik menerima daftar tiga angka, dari \$[1,7]\$, dalam urutan yang diurutkan yang menghasilkan daftar nomor lain, dari \$[1,7]\$, belum tentu diurutkan.
Cobalah secara online! Atau lihat semua 35 (saya mengurutkan nilai yang dihasilkan untuk perbandingan yang lebih mudah).
Bagaimana?
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]
R , 33 31 byte
Edit: -2 byte dengan menggunakan modulo -4(yang mengembalikan negatif modulo 4)
(1:7)[v<--scan()][sum(v)%%-4-1]
Cobalah secara online!
Menemukan 4 digit dalam 1..7 yang tidak ada dalam input, dan mengecualikan satu digit yang sesuai dengan jumlah input (membungkus sekitar).
Tes tautan TIO yang keluarannya unik untuk setiap masukan, dan menunjukkan keluaran untuk setiap masukan.
(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
Japt , 14 byte
Seperti yang diiklankan sebelumnya , saya sedikit mabuk jadi ini bisa saja salah dan, bahkan jika benar, mungkin bisa bermain golf sedikit.
7õ kU k϶UxÍu4
Cobalah atau lihat (menurut saya) buktinya
Arang , 39 38 34 32 byte
NθI⁻¹²⁷⁺θX²⊟Φ⁷№ETXdhp﹪×℅λX²ι¹²⁷θ
Cobalah secara online! Tautan adalah untuk verbose versi kode. I / O adalah bilangan bulat 7-bit 7..112. Penjelasan: Ordinal string TXdhpmemiliki pola lima bit yang saya pilih secara sewenang-wenang sehingga hasilnya tidak termasuk 1. Mereka kemudian diputar secara siklis sampai ada yang cocok dengan input, di mana saya telah menentukan bit yang dikecualikan. Bit ini kemudian ditambahkan ke input asli, dan akhirnya perbedaan antara 127dan jumlahnya dicetak.
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
Saya secara sewenang-wenang memilih pola lima bit berikut untuk dikecualikan 1tetapi lima pola yang bahkan berbeda secara siklis akan bekerja.
T 1010100
X 1011000
d 1100100
h 1101000
p 1110000
JavaScript (ES6), 66 65 byte
Mengambil masukan sebagai string 3 digit. Mengembalikan string dalam format yang sama.
f=(n,k=i=0)=>++k<8?(~n.search(k)||n*43%399%4==i++?'':k)+f(n,k):''
Cobalah secara online!
05AB1E , 10 byte
7LsKsO(._¨
Cobalah secara online!
Bagaimana?
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]
C (gcc) , 84 83 byte
Menyelamatkan 16 19 23 byte kekalahan berkat pria itu sendiri kucing langit-langit !!!
Menyelamatkan satu byte berkat Neil !!!
p;i;f(m){for(p=i=0;(L"ᨴᘬᤲᔪ"[p]>>i%7&m)-m;p+=++i%7<1);p=(64>>i%7)+m^127;}
Cobalah secara online!
Mengambil masukan sebagai \$3\$bit diatur dalam paling tidak signifikan- \$7\$-bits dari sebuah intdan mengembalikan tiga angka lainnya juga.
Penjelasan (sebelum bermain golf)
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
}
Husk , 9 byte
hṙ_Σ¹`-ḣ7
Cobalah secara online!
Perl 5 , 49 byte
sub{@c=grep!/[@_]/,0..6;splice@c,-sum(@_)%4,1;@c}
Cobalah secara online!
Hanya terjemahan jawaban python dari HyperNeutrino.
Scala , 64 byte
b=>1.to(7).diff(b).zipWithIndex.filter(_._2!=b.sum*3%4)map(_._1)
Cobalah secara online!
Ruby, 38 byte
->s{n=s.sum;(([*1..7]-s)*9)[-n..-n+2]}
Cobalah secara online!
Mencuri jawaban Eric berdasarkan jawaban Jonathan . Saya akan berkomentar kepada Eric, tetapi saya tidak memiliki reputasi yang cukup.
Perbedaan sebenarnya: Menggunakan rentang untuk mendapatkan potongan tiga elemen.
Ruby , 40 byte
->s{(([*1..7]-s)*9).last(s.sum).first 3}
Cobalah secara online!
Port Ruby jawaban Jonathan .
05AB1E , 17 byte
7LIм{3.$IO(._Dg<£
Cobalah secara online!
Ini adalah versi yang lebih panjang dari jawaban Jeli, jadi naikkan suara itu juga.
APL + WIN, 20 byte
Perintah untuk memasukkan vektor bilangan bulat
3↑(-+/¯2↑n)⌽n←(⍳7)~⎕
Cobalah secara online! Terima kasih kepada Dyalog Classic
APL (Dyalog Unicode) , 13 byte SBCS
1∘↓+/⌽(⌽⍳7)∘~
Cobalah secara online!
Ini di atas kereta
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)