Selamat datang di tantangan kode-golf pertama saya! :) Ayo langsung saja ke dalamnya.
Tantangan:
Diberi dua vektor floating point, O (asal) dan T (target), Anda harus membuat program untuk mencetak nilai L dan R ke STDOUT.
- O adalah salah satu sudut alun-alun
- T adalah salah satu sudut alun-alun yang terletak berhadapan dengan O
- L adalah titik 2D (sudut) yang menandai titik lain dari kuadrat tidak lengkap
- R adalah titik 2D (sudut) yang berlawanan dengan L
Aturan
- Nilai O dan T harus dibaca dari STDIN (lihat contoh input).
- Sekali lagi, nilai L dan R harus dicetak ke STDOUT.
Penilaian dan bonus
- Hitung byte dari program Anda.
- Jika program Anda menggambar garis yang menghubungkan antara O ke L ke T ke R , kurangi 15 byte dari jumlah byte.
Contohnya
Baris pertama mencakup input (kurung kuadrat pertama untuk O dan kurung berikutnya untuk T ) dan jalur lain mewakili output yang diharapkan.
- [0, 0] [3, 3] Diharapkan: [0, 3] [3, 0]
- [0, 0] [-2, -2] Diharapkan: [-2, 0] [0, -2]
- [1, -1] [4, 2] Diharapkan: [1, 2] [4, -1]
- [0, -1] [0, 1] Diharapkan: [-1, 0] [1, 0]
PEMBERITAHUAN : input dan output bisa menjadi titik mengambang!
Informasi penting!
- Nilai O dan T dapat diambil dalam format apa pun, asalkan berasal dari STDIN (mis. Di dalam [] atau () ...), gunakan format apa pun yang Anda inginkan.
- L dan R dapat dicetak dalam urutan apa pun.
- Ingat: ketika (O-> L-> T-> R-> O) terhubung, masing-masing pihak harus memiliki panjang yang sama!
Kemenangan
- Ini adalah kode-golf sehingga jawaban byte paling sedikit menang!
- Jawaban pemenang akan diterima pada hari Minggu 15.11.2015 20: 00-22: 00 (waktu Finlandia) (Jika saya tidak salah, tanggal tersebut ditulis seperti 11.15.2015 di AS, jangan bingung).
Selamat bermain golf!
Jawaban:
Serius , 11 byte
Port jawaban TI-BASIC saya. Menghitung
mean(X)+i*(X-mean(X))
.Penjelasan:
Masukan sebagai daftar dua bilangan kompleks:
[1-1j,4+2j]
, dan output dalam format yang sama:[(4-1j), (1+2j)]
.sumber
æ
daftar mean, dan menyebabkanî
(multiply-by-i) untuk membuat vektor, memungkinkan solusi 9-byte yang tidak bersaing. Serius mulai menjadi bahasa yang sangat baik.Σ
2 byte?Σ
memiliki titik kode 0xF4.Serius , 25 byte
,i││-++½)+-+½)++-½)±+++½)
Mengambil input sebagai daftar:
[x1,y1,x2,y2]
Strategi yang sama dengan jawaban Python saya, tetapi dalam Serius!
Penjelasan:
Cobalah online
sumber
TI-BASIC, 16 byte
Untuk kalkulator TI-83+ atau 84+ seri.
Kecuali saya salah paham, OP mengatakan mereka baik-baik saja dengan mengambil input dan output sebagai angka yang kompleks. Di
i
sini adalah unit imajiner, bukan variabel statistik.TI-BASIC memiliki
mean(
fungsi, tetapi mengganggu itu tidak bekerja dengan daftar yang kompleks, melemparERR:DATA TYPE
.Masukkan formulir
{1-i,4+2i}
untuk[[1,-1],[4,2]]
. Output dalam bentuk{4-i 1+2i}
untuk[[1,2][4,-1]]
.sumber
Matlab,
5145464542 byteSekarang inputnya diharapkan dalam satu vektor kolom:
[x0;y0;x1;y1]
(ouput dalam format yang sama) Saya baru saja memodifikasinya menjadi program lengkap.Atau sebagai alternatif
Solusi lama:
Input mengharapkan vektor kolom, mis
f([0;0],[3;3])
Ini juga mengembalikan dua vektor kolom (sebagai matriks 2x2).
sumber
Japt,
2928 byteJapt adalah versi singkat dari Ja vaScri pt . Penerjemah
Perhatikan bahwa fungsi panah memerlukan browser yang sesuai dengan ES6, seperti versi Firefox yang lebih baru. Input masuk sebagai array 4-item, mis
[1,-1,4,2]
.Bagaimana itu bekerja
Bagaimana itu golf
Saya pertama kali mencoba menyalin pendekatan Python @ Mego. Ini meninggalkan saya dengan monster 48 byte ini:
(Catatan: input saat ini tidak boleh dibungkus dalam array.)
Karena masing-masing item ini perlu dibagi 2, lebih pendek untuk memetakan seluruh larik dengan
mY=>Y/2
:Sekarang apa? Nah, array sekarang hanya menambahkan tiga input dan mengurangi yang keempat, mengikuti pola
1,2,3,0
. Jadi, kita bisa mengemas input ke dalam array, kemudian menambahkannya bersama-sama, bagi dengan 2, dan kurangi item yang diperlukan:Bagus, menyimpan satu byte! Tetapi apakah mungkin untuk mengecilkan array di awal? Mari kita coba mengemasnya menjadi string, kemudian membaginya kembali menjadi array dengan
a
:Lihat itu, byte lain disimpan. Tetapi apakah ada cara yang lebih baik? Kita bisa menggunakan fakta bahwa
[1,2,3,0] ≡ [1,2,3,4] mod 4
:Dua byte lagi! Sekarang kita pergi ke suatu tempat. Tapi itu
Ug0 +Ug1 +Ug2 +Ug3
memonopoli banyak ruang. Bagaimana jika kita mengurangi array dengan tambahan?Wow, itu sangat membantu! Sekarang kita turun ke 29 byte. Dan terima kasih kepada @ ן nɟuɐɯɹɐ ן oɯ, saya bahkan bisa melakukan pengurangan byte lain. Tetapi jika kita bisa menggunakan built-in untuk menjumlahkan array, itu akan jauh lebih pendek:
19 byte! Luar biasa! Sayangnya, Japt belum memiliki built-in seperti itu. Saya akan menambahkan ini ketika saya mendapat kesempatan. Saran diterima, baik untuk program atau bahasa!
Nah, pada v1.4.4, saya telah mengimplementasikan beberapa fitur ke dalam Japt daripada yang saya rencanakan sebelumnya. Dimulai dengan paket asli untuk versi yang lebih pendek:
Pertama kita perlu mengubah beberapa hal: Fungsi didefinisikan dengan
{
, dan fungsi penjumlahannya adalahx
. Versi ini berfungsi apa adanya:Sekarang,
@
adalah singkatan untukXYZ{
, memungkinkan kita untuk menyimpan byte dengan beralih dariZ
keX
. Juga,£
merupakan jalan pintas untukm@
, menyimpan byte lain:Baru-baru ini saya mengimplementasikan fitur di mana
U
pada awal program biasanya dapat ditinggalkan. Namun, karena kesalahan implementasi, ini juga berfungsi dengan fungsi:Akhirnya,
g
fungsi sekarang membungkus jika indeks melewati akhir string, memungkinkan kita untuk menghapus%4
total 13 byte :Dan saya pikir 19 luar biasa ;-) Uji secara online!
sumber
eval(U.join`+`)
.eval
setara, itu sebenarnya menghemat satu byte!Javascript (Node.js / ES6), 154 byte
Mendapatkan stdin adalah bagian kode yang lebih panjang. Input harus dipisahkan dengan koma:
sumber
ngn APL, 21 byte
Ini mengambil input sebagai pasangan bilangan kompleks (misalnya,
1J¯1 4J2
) dan mencetak output dengan cara yang sama (misalnya,4J¯1 1J2
). Cobalah online di demo ngn / apl .sumber
1 ¯1
untuk input0J¯1 0J1
, yang merupakan jawaban yang benar. Apa yang kamu dapatkanPyth, 12 byte
Ini mengambil input sebagai pasangan bilangan kompleks (misalnya,
1-1j, 4+2j
) dan mencetak output sebagai array (misalnya,[(4-1j), (1+2j)]
). Cobalah online.sumber
𝔼𝕊𝕄𝕚𝕟, 29 karakter / 43 byte
Try it here (Firefox only).
sumber
CJam, 30 byte
Cobalah online
Ini mengambil input sebagai daftar daftar, misalnya untuk contoh terakhir:
Penjelasan:
sumber
Prolog, 118 byte
Sedikit lebih mudah dibaca:
Untuk memulai program:
Input contoh ketika sudut yang diketahui adalah [1, -1] [4, 2]:
[1, -1,4,2]
Contoh output, di mana X dan Y akan berisi sudut yang tidak diketahui:
X = [1.0, 2.0],
Y = [4.0, -1.0]
Cobalah secara online di sini
Edit: Diubah untuk membaca input dari STDIN
sumber
Python 3, 102 byte
Masukan diambil dalam bentuk
x1 y1 x2 y2
, pada satu baris.Cobalah online
sumber
Python 2, 56 byte
Input bisa
x1,y1,x2,y2
atau(x1,y1,x2,y2)
sumber