Menggunakan tabel berikut ( sumber ) menulis beberapa kode yang mengambil nama dua planet dan mengembalikan jarak di antara mereka:
+-------------------+---------------+
| Planets | Distance (km) |
+-------------------+---------------+
| Mercury -> Venus | 50290000 |
| Venus -> Earth | 41400000 |
| Earth -> Mars | 78340000 |
| Mars -> Jupiter | 550390000 |
| Jupiter -> Saturn | 646270000 |
| Saturn -> Uranus | 1448950000 |
| Uranus -> Neptune | 1627450000 |
| Neptune -> Pluto | 1405380000 |
+-------------------+---------------+
Contoh, input lalu output:
Mercury, Mars
170030000
Neptune, Jupiter
-3722670000
Earth, Earth
0
Perhatikan tanda negatif di sana, karena Jupiter datang sebelum Neptunus. Mereka semua juga bilangan bulat.
Pluto tidak harus dimasukkan (sebagian besar karena orbit aneh yang membuatnya sulit untuk menentukan jarak - jarak yang diberikan adalah perhitungan saya sendiri, tetapi karena Pluto semuanya terkenal sekarang ...).
Dengan jarak antar planet, aku bermaksud mengorbit - aku tidak mengharapkan kencan dan mencari tahu di mana mereka berada.
Ini golf kode, kode terpendek menang.
Mercury, Mars -> 170030000.0
?Jawaban:
CJam,
545144 byteCobalah online di juru bahasa CJam .
Ide
Kami menggunakan fungsi hashing sederhana untuk mengidentifikasi delapan planet. Dengan mempertimbangkan setiap nama sebagai larik titik kode, mengubahnya dari basis 26 ke bilangan bulat dan mengambil modulo 93 hasil kemudian modulo 8, Merkurius , Venus , Bumi , dll. Peta ke 2 , 4 , 0 , 1 , 3 , 5 , 6 dan 7 .
Sekarang, kami memilih titik yang terletak 320.000 km di belakang Neptunus dan menghitung jarak semua delapan planet ke titik itu. Setelah menjatuhkan empat trailing nol dan menata ulang planet-planet sehingga sesuai dengan 8 indeks dari atas, kami mendapatkan array
yang, jika kita menyandikan setiap bilangan bulat di basis 70, menghasilkan yang berikut:
Mengingat dua digit yang berdekatan
(A B)
dapat diganti dengan((A-1) (B+70))
, kita dapat memodifikasi array dari atas sehingga semua bilangan bulat dapat dikodekan sebagai karakter ASCII yang dapat dicetak:Kode
sumber
Python 2,
149147142138128123119 BytesCukup gunakan pencarian sederhana untuk mencari tahu jarak mana yang harus digunakan :) Ini mendefinisikan fungsi anonim, jadi untuk menggunakannya Anda harus memberinya nama.
Terima kasih kepada Sp3000 untuk ide-ide yang menyelamatkan banyak byte!
Diindentakan dengan benar dan sedikit tidak dibiakkan untuk dibaca:
Sebut seperti ini:
sumber
Prolog,
190174151 byteTerima kasih untuk Fatalize untuk bimbingan.
sumber
s(A, B, R)
daripada menulisR
? Tidak ada yang ditentukan untuk output sehingga pengembalian predikat harus baik-baik saja.g
untukg(A,X):-sub_atom(A,2,2,_,B),member(B:X,[rc:0,nu:5029,rt:9169,rs:17003,pi:72042,tu:136669,an:281564,pt:444309]).
dan menghapus semua fakta planet. Ini kurang keren dari=..
tetapi lebih pendek untuk mendapatkan pemetaan nilai kunciJavaScript (ES6),
115110 byteIni adalah fungsi anonim, jadi Anda harus menyimpannya dalam variabel (
f=...; f("Earth", "Mercury")
) atau menggunakannya sebagai ekspresi kurung ((...)("Earth", "Mercury")
.Tali yang berantakan itu adalah dua huruf pertama dari setiap planet, diikuti oleh jarak planet itu dari Merkurius (dibagi 10.000, untuk menghemat ruang). Fungsi batin
g
melakukan hal berikut:k
),k[0]+k[1]
),Ea(\d*)
),1e4
) dan mengembalikan hasilnya.Dengan mengurangi satu jarak Merkurius dari yang lain, kita mendapatkan jarak antar planet.
sumber
btoa
memiliki poin kode di bawah 256, sehingga ISO 8859-1 akan mengkodekan setiap karakter menggunakan byte tunggal.Java,
274272264 byte (termasuk Pluto!)Input output:
Spasi dan tab:
sumber
int
danint[]
pada satu baris jika array datang terakhir: Sepertiint i=0,j=1,k[]={};
10000
dengan1e4
.e > w
Anda dapat memangkas satu karakter menggunakan operator to go:while(e-->w)
yang terdiri dari 12 karakter, dan bukanfor(;e--!=w;)
13.Python, 118 byte
n
adalah fungsi yang mengembalikan jarak dari Merkurius.String
"VeEaMaJuSaUrNe"
adalah dua karakter pertama dari semua nama planet kecuali Merkurius .find
tidak dapat menemukan Merkuri sehingga akan mengembalikan -1. -1/2 masih -1 jadi ini adalah elemen terakhir dalam tuple, yaitu 0.Kode uji sederhana:
sumber
APL,
979585 byteIni menciptakan fungsi diad tanpa nama yang menjadikan planet asal sebagai argumen kiri dan planet tujuan sebagai kanan.
Anda dapat mencobanya secara online !
sumber
J-- , 226 byte
Saya tidak berpikir ini penting karena saya membuat bahasa sementara pertanyaan itu keluar, tapi itu sebagian besar merupakan tes seberapa kecil saya bisa memampatkan kode Java. Ini sepenuhnya dan sepenuhnya didasarkan pada jawaban DeadChex .
Berikut cara menggunakannya:
sumber
Pyth -
5953 byteMengkode jarak dalam unicode codepoints.
Pencarian nama agak keren karena loop sekitar. Terima kasih kepada @Dennis karena menyarankan indeks 14 sebagai pencarian bebas benturan!
Coba di sini online .
sumber
Bash, 140 byte
sumber
CoffeeScript,
183180 byteTidak dijinakkan:
sumber
Ruby, 168 byte
Ini dirancang sebagai skrip untuk dijalankan dari baris perintah, jadi gunakan
ARGV
. Jalankan sebagaisumber
Haskell,
160158157 byteContoh penggunaan:
Cara kerjanya: Saya mendefinisikan tipe data baru di
P
mana nama konstruktor adalah nama-nama planet. Saya juga meletakkannya diEnum
kelas, yaitu saya mendapatkan pemetaan ke bilangan bulat melaluifromEnum
(dalam urutan definisi, dimulai denganMercury
->0
). Bilangan bulat ini dapat digunakan sebagai indeks untuk daftar jarak.Sunting: @Kritzefitz menemukan dua byte untuk disimpan dan @Alchymist satu lagi. Terima kasih!
sumber
fromEnum x
dan menyimpan dua byte.Julia,
206203190 byteIni menciptakan fungsi tanpa nama yang menerima dua string dan mengembalikan integer. Untuk menyebutnya, berikan nama.
Penjelasan + tidak dikumpulkan:
sumber
Jawa,
257228 bytestatic long d(String...s){...}
memecahkan tantangan. Input membutuhkan nama planet untuk mencocokkan nama konstanta enum dengan tepat. Saya suka bagaimana java menyediakan metode konversi string ke enum untuk saya <3Pemakaian:
Z.d("Mercury","Pluto")
kembali5848470000
Z.d("Pluto","Mercury")
kembali-5848470000
Z.d("Uranus","Neptune")
kembali1627450000
Z.d("Mars","Pluto")
kembali5678440000
sumber
C (gcc) makro pra-prosesor, 146 byte
Cobalah online!
sumber