Anda akan diberi nama salah satu dari 20 objek terbesar di Tata Surya. Tugas Anda adalah mengembalikan perkiraan radiusnya, yang dinyatakan dalam kilometer.
Ini adalah tantangan kode di mana skor Anda terdiri dari panjang kode Anda (dalam byte) dikalikan dengan rasio penalti , berdasarkan perkiraan terburuk Anda. Oleh karena itu, skor terendah akan menang .
"As we travel the universe" adalah baris terakhir dari lagu Planet Caravan oleh Black Sabbath , yang juga belakangan diliput oleh Pantera .
Objek Tata Surya
Sumber: Wikipedia
NB: Pangkat diberikan hanya untuk informasi. Input adalah nama objek.
n | Object | Radius (km)
----+----------+-------------
1 | Sun | 696342
2 | Jupiter | 69911
3 | Saturn | 58232
4 | Uranus | 25362
5 | Neptune | 24622
6 | Earth | 6371
7 | Venus | 6052
8 | Mars | 3390
9 | Ganymede | 2634
10 | Titan | 2575
11 | Mercury | 2440
12 | Callisto | 2410
13 | Io | 1822
14 | Moon | 1737
15 | Europa | 1561
16 | Triton | 1353
17 | Pluto | 1186
18 | Eris | 1163
19 | Haumea | 816
20 | Titania | 788
Atau sebagai daftar ramah tempel-tempel:
'Sun', 'Jupiter', 'Saturn', 'Uranus', 'Neptune', 'Earth', 'Venus', 'Mars', 'Ganymede', 'Titan', 'Mercury', 'Callisto', 'Io', 'Moon', 'Europa', 'Triton', 'Pluto', 'Eris', 'Haumea', 'Titania'
696342, 69911, 58232, 25362, 24622, 6371, 6052, 3390, 2634, 2575, 2440, 2410, 1822, 1737, 1561, 1353, 1186, 1163, 816, 788
Nilai Anda
Biarkan menjadi radius yang diharapkan dari objek dan biarkan menjadi jawaban program Anda untuk objek ini.
Kemudian skor Anda didefinisikan sebagai:
di mana adalah panjang kode Anda dalam bytes.
Contoh:
Jika ukuran kode Anda adalah byte dan perkiraan terburuk Anda adalah di Bulan dengan radius diperkirakan km, bukan km, maka skor Anda adalah:
Semakin rendah, semakin baik.
Tajuk yang disarankan untuk jawaban Anda:
Language, 100 bytes, score = 302
Anda dapat menggunakan skrip ini untuk menghitung skor Anda (baris pertama = panjang kode, 20 baris berikutnya = output Anda, dari Sun ke Titania).
Aturan
- Anda dapat mengambil nama objek dalam huruf kecil penuh, huruf besar penuh atau persis seperti yang dijelaskan di atas (case title). Kasing campuran lainnya tidak diperbolehkan.
- Input dijamin menjadi salah satu dari 20 nama yang mungkin.
- Anda dapat mengembalikan bilangan bulat atau mengapung. Dalam kedua kasus, penalti harus dihitung secara langsung dengan nilai-nilai ini (bukan nilai bulat jika float).
- Anda harus mengembalikan nilai positif.
- Program kosong tidak diizinkan.
sumber
7512
untuk semua kasus uji. Saya akan melihat apakah saya terjun ke dalam menciptakan solusi MathGolf dalam waktu dekat, tetapi akan sulit untuk mengalahkan 05AB1E.Jawaban:
PowerShell , 3 byte, skor 3637
Cobalah online!
Sangat naif, membosankan, implementasi; hanya mengembalikan
20000
input apa pun. Eksperimen dengan hal-hal seperti casing-khusus matahari atau menggunakan nilai-nilai floating-point bukannya2
semua menghasilkan skor yang lebih buruk karena panjang kode meningkat cukup untuk mengimbangi setiap keuntungan perbandingan ukuran.sumber
Jelly , 34 byte, skor = 37
Input dalam huruf besar, output adalah kekuatan 1,1 dengan kesalahan paling sedikit.
Cobalah online!
Bagaimana itu bekerja
sumber
Java (JDK) , 90 byte, skor = 97
Cobalah online!
Kredit
String
hardcoding bukan dalamint
array eksplisit ..sumber
(...-7)
: Karakter yang tidak patut(char)0
kosong jadi saya harus menambahkan sesuatu. Saya pertama kali mencoba9
dan8
menjadi satu digit, tetapi9
tentu saja memberikan tab, membutuhkan beberapa\t
(masing-masing 2 byte), dan8
memberikan kesalahan tentang karakter yang tidak terhindar digunakan.*100-700
dan bermain dengan nilai-as-string dan dua angka, tetapi itu adalah yang terbaik, sebenarnya, beberapa nilai dapat mengurangi byte menghitung, tetapi kemudian skor tetap sama. Jadi penentuan posisi acak membuat (salah satu) kasus terbaik;)Bahasa Wolfram
114 103 97 88 8682 byte. skor =114 103 97 89 8783 poinSetidaknya 6 poin disimpan berkat
Dennis
, beberapa lagi berkatlirtosiast
, dan 6 lagi berkatuser202729
.Meskipun Mathematica dapat mengambil data tata surya (serta banyak data astronomi tambahan), beberapa perubahan kecil diperlukan, seperti yang dijelaskan di bawah ini.
Interpreter[#,"AstronomicalObject"]&
akan mengembalikan entitas (yaitu objek yang dapat dihitung mesin) yang terkait dengan istilah yang diwakili oleh#
.EntityValue[AstronomicalObject[],"Radius"]
mengembalikan jari-jari, dalam mil, dari entitas. Dalam kasus "Haumea", nilai, 816.27 (yaitu 507 * 1.61), dikembalikan.Perkalian jari-jari dengan
1.61
mengkonversi dari mil ke km. Nilai desimal, bukan bilangan bulat, bertanggung jawab atas kesalahan kurang dari 1%, bahkan dalam kasus paling ekstrem.[[1]]
mengembalikan besarnya tanpa unit, km. Ini kemudian diubah menjadi#&@@
, menghasilkan hasil yang sama.sumber
Python 3 , skor 95, 95 byte
Cobalah online!
Python 3 , skor 133, 133 byte
Cobalah online!
sumber
Powershell,
150141 byte, skor163153Cobalah online!
Skrip uji:
Keluaran:
Penjelasan:
end of line mode
LF.Contoh:
Powershell, 178 byte, skor 178
sumber
05AB1E , skor
1006660 (1006156 byte )Port of @ OlivierGrégoire 's Java answer , jadi jika Anda menyukai jawaban pertama ini, pastikan untuk menambahkannya juga!
Masukan dalam titlecase.
Verifikasi semua kasus uji.
05AB1E , skor 100 (100 byte )
Masukan dalam huruf kecil penuh. Menghasilkan jari-jari yang tepat, sehingga tidak ada penalti yang ditambahkan.
Verifikasi semua kasus uji.
Penjelasan:
Lihat tip tambang 05AB1E ini (bagian Bagaimana cara mengkompres bilangan bulat besar? Dan Bagaimana mengompresi string bukan bagian dari kamus? ) Untuk memahami bagaimana kompresi digunakan bekerja.
Saya memang membuat alternatif 70-byte yang akan memetakan matahari ke600,000
; [jupiter, saturn] ke60,000
; [uranus, neptune] ke30,000
; [bumi, venus] ke6,000
; [mars, ganymede, titan, mercury, callisto] untuk3,000
; [io, bulan, europa, triton, pluto, eris] ke1,500
; dan [haumea; titania] ke750
. Sayangnya itu mendapat skor 117. Saya akan melihat apakah saya bisa mendapatkan di bawah 100 dengan pendekatan alternatif nanti.sumber
Mathematica, 57 byte, skor =
6258-4 Bytes / skor berkat lirtosiast !
Lakukan saja pencarian Wolfram Alpha untuk radius rata-rata.
sumber
WolframAlpha
fungsi yang digunakan di sedikitnya empat kali ...Jelly , 28 byte, skor = 31
Ini menggunakan hashing yang dapat dikonfigurasi bawaan yang saya tambahkan ke Jelly pada saran @ lirtosiast.
Input dalam titlecase, output adalah kekuatan 1,1 dengan kesalahan paling sedikit.
Cobalah online!
Bagaimana itu bekerja
Jawaban ini hanya terdiri dari dua bagian.
“__ʋ7ṗ“RUu⁽NM\sOSJj[FL‘ḥ
gunakan built-in baru untuk memetakan masing-masing dari 20 input yang mungkin ke 15 bilangan bulat yang berbeda.1.1*
naikkan 1,1 ke daya yang dihitung.“__ʋ7ṗ“RUu⁽NM\sOSJj[FL‘
ḥ
Selanjutnya, kita menghasilkan 64 bilangan bulat 64-bit dengan menerapkan SHAKE256-4096 ke representasi string dari representasi internal
ḥ
argumen kanan, kemudian memotong 4096 bit yang dihasilkan menjadi 64 64-bit potongan.ḥ
Untuk menemukan konfigurasi hash yang sesuai, saya telah menggunakan brute-forcer dalam C yang merupakan bagian dari repo Jelly .
sumber
Python 2 , 155 byte, skor = 155
Cobalah online!
Anehnya baik untuk solusi malas ini ... akan terlihat membaik juga. ;-)
sumber
Japt , 86 byte, skor = 94
Cobalah untuk semua input , Hitung skor , atau Periksa kesalahan tertinggi
Sangat mirip dengan jawaban asli Olivier. Input semua huruf kecil.
Setelah berbagai peningkatan nilai output, kesalahan tertinggi saat ini adalah Venus di atas 4%.
Penjelasan sekarang bahwa segalanya sedikit lebih stabil:
String untuk nama-nama
sujusaurneeavemagatimecaiomoeutrplerha
dikompres menggunakan kompresi bawaan Japt. Angka-angka yang mewakili jari-jari dihitung seperti ini:sumber
Japt,
777675 byte, skor = 75Pass pertama di ini; Saya ingin mencoba solusi penalti 0 untuk memberikan saya dasar untuk bekerja. Akan kembali ke sini besok untuk melihat perbaikan apa yang bisa dilakukan, semoga masih untuk 0 penalti.
Input tidak peka huruf besar-kecil.
Cobalah atau uji semua input
The
"..."
mewakili string yang berisi banyak unprintables. Codepoint adalah:Untuk menawarkan penjelasan cepat: string dipecah menjadi potongan 2 karakter. Kami kemudian mengindeks ke dalam array itu menggunakan bagian dari formula ovs ditambah beberapa pembungkus indeks dan kemudian memetakan 2 karakter ke codepoint mereka.
54 byte, skor = 58
Port solusi Olivier .
Uji semua input
sumber
%24
:-)Ruby , 105 byte, skor 109
Cobalah online!
Jika kita membagi 700.000 dengan jari-jari, kita mendapatkan urutan yang meningkat secara linear (meskipun agak tidak menentu). Peningkatan dalam tabel di bawah ini dapat diperkirakan dengan nilai karakter ASCII. Masalah dengan pendekatan ini adalah membutuhkan input untuk diterjemahkan ke nilai yang memesan nama yang berbeda berdasarkan ukuran.
Masalah kecil adalah bahwa perbedaan antara Eris dan Haumea cukup besar.
~~d
Diperlukan tiga karakter untuk menyandikan kenaikan ini dalam format ASCII saja. String planet-to-index memiliki dua ruang "planet hantu" di dalamnya untuk mengisi indeks.sumber
T-SQL,
203 202 201196 byte, skor =217 216 212208Jeda baris hanya untuk keterbacaan.
Input diambil melalui tabel i yang sudah ada sebelumnya dengan kolom varchar v , sesuai standar IO kami .
Bergabung dengan tabel input ke tabel di-memori pada dua karakter pertama, dan mengembalikan x100 digit yang tersisa.
Memperlakukan "Titan" sebagai kasus khusus menggunakan
IIF
.EDIT : Disimpan 1 byte (dan 1 poin) dengan menggunakan
STUFF
untuk menghapus dua karakter pertama, bukanSUBSTRING
. Terima kasih, t-clausen.dk!EDIT 2 : Saya ingin melihat apa yang akan terjadi jika saya mencoba menyimpan byte lain dengan mengalikan masing-masing nilai pencarian dengan 99 bukannya 100, dan ternyata mengejutkan bahwa itu benar-benar meningkatkan akurasi (dari perkiraan paling tidak akurat) !.
Ini membawa saya ke beberapa uji coba dan kesalahan, dan beberapa tabel data Excel what-if yang mewah, di mana saya menemukan solusi optimal menggunakan pengganda 89 (yang tentu saja mengubah semua nilai yang disimpan).
Jadi, sementara ini menyelamatkan saya hanya satu byte, itu sebenarnya meningkatkan skor saya sebesar 4,6 dari solusi saya sebelumnya.
EDIT 3 : Mencari lebih tinggi daripada lebih rendah, dan menemukan faktor perkalian yang lebih baik , 198 . Nilai tetap cukup akurat sambil memperpendek string yang disimpan oleh beberapa karakter, yang meningkatkan skor saya.
sumber
PowerShell , 203 byte, skor 203
Cobalah online!
Sangat mirip dengan jawaban Olivier, sekarang saya melihatnya, tetapi berkembang secara mandiri.
sumber
Arang , 101 byte, skor = 101
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Ambil karakter 1 dan 11 (secara siklis) dari string input dan gabungkan mereka.
Cari mereka di string yang
SuJiSrUuNtEEVVMrGnTTMcClIIMoEpToPPEiHeTa
dipisah menjadi pasangan karakter.Pisahkan string
m.w'fv&J|\"l|\"e1 c& _c Ca ;e ;* 9a 9C 31 2; 0I .7 ,N ,7 (X (<
menjadi grup tiga karakter dan ambil grup yang sesuai.Dekode hasilnya sebagai angka dasar-95 menggunakan karakter ASCII yang dapat dicetak ditetapkan sebagai digit. Contoh:
Io
Karakter ke 11 adalahI
, jadi kita mencariII
dan menemukan bahwa itu adalah objek terbesar ke-13 dan ukurannya adalah31
yang dipetakan19 * 95 + 17 = 1822
.sumber
Cepat 4 , 225 byte, skor = 241
Mungkin golf lebih banyak (mungkin di daerah "Ga-Me-Ca"?), Tetapi Swift tidak sering digunakan (karena suatu alasan, mungkin.)
dan ungolfed
Cobalah secara Online!
Saya mencoba "ukuran kunci" yang berbeda untuk peta, tetapi tentu saja 1 memiliki banyak bentrokan dan menggunakan tiga karakter tidak memberi saya
i=="Titan" ?2575:
17 karakter, karena ada "Io" untuk dikelola (dan akan membutuhkan lebih dari 3 karakter, Kupikir).sumber
JavaScript (ES6), 152 byte, skor = 163
Ya, ini solusi standar yang cantik, tapi saya tetap menikmati tantangannya!
Skor saya:
Cobalah secara Online!
sumber
SALAH , 152 byte, Skor = 563
Jawaban malas menggunakan panjang kata dan huruf pertama tetapi alasan saya adalah bahwa saya menggunakan bahasa yang aneh
Cobalah online! (salin tempel kode, tekan show lalu jalankan)
Hasil saya:
sumber
C (gcc) , 118 byte, skor = 135
Cobalah online!
Mencetak gol
Kehabisan
Nama objek diubah menjadi hash karakter tunggal melalui proses rumit
yang mengasapi menunjuk ke "Titan" / "Titania" sebagai pelaku utama. Termasuk karakter terakhir dalam hash dianggap, tetapi itu masih membutuhkan
strlen()
dalam C. Kejadian pertama karakter hash dicari dalam string hash / data. Saat ditemukan, karakter berikutnya diambil dan digunakan untuk memperkirakan radius objek yang dimaksud.Karakter data memegang logaritma natural bergeser dan berskala dari jari-jari. Dihasilkan seperti:
Skala dipilih melalui uji coba-dan-kesalahan yang sangat ilmiah, dan pergeseran untuk membawa nilai dalam kisaran ASCII yang dapat dicetak sambil menghindari backslash. Beberapa penataan ulang objek dalam string diperlukan karena beberapa tabrakan / hash data.
sumber
Python 2 , 89 byte, Skor = 234
Cobalah online!
Sebagian besar jawaban yang diposting tampaknya telah menggunakan strategi "encode / decode". Saya bertanya-tanya seberapa baik yang bisa saya lakukan dengan memperkirakan diameter benda langit menggunakan persamaan sederhana. Ini merupakan latihan yang menyenangkan, tetapi penghematan byte moderat lebih dari dibuat untuk hukuman akurasi.
Inti dari solusi ini adalah persamaan estimasi:
di mana x adalah dua kali urutan urutan jari-jari tubuh.
Saya menghasilkan nilai x berdasarkan input string menggunakan modifikasi dari @Erik the Outgolfer's Python 2 solusi. Saya menyimpan beberapa byte pada kodenya dengan menyusun kembali persamaan saya untuk bekerja dengan [2..40] alih-alih [1..20].
Kode untuk menghasilkan pesanan peringkat membutuhkan lebih dari 2/3 dari seluruh solusi. Jika ada yang memiliki cara yang lebih kompak untuk menghasilkan peringkat, solusi ini dapat dipersingkat lebih lanjut. Karena penalti akurasi (sekitar 2,6), skor akan meningkat sedikit.
Menghasilkan Persamaan
Saya menggunakan metode statistik untuk mencari persamaan sederhana untuk memperkirakan ukuran setiap tubuh berdasarkan peringkatnya. Sebagian menindaklanjuti wawasan dalam solusi Ruby @Level River St dan menggeneralisasi, saya menentukan persamaan bentuk:
Bekerja di R, saya menggunakan model linier pada log jari-jari untuk mengembangkan estimasi awal, dan kemudian menggunakan optimasi non-linear, menyemai optimasi dengan hasil model linear, untuk mencari solusi yang meminimalkan fungsi penalti yang ditentukan dalam masalah.
Nilai estimasi A dalam persamaan di atas adalah tujuh digit, jadi saya mencari ekspresi sederhana untuk menghemat beberapa byte. Saya mencari ekspresi bentuk
untuk dua digit x dan 1 digit y (untuk total lima byte, menghemat dua byte, atau sekitar lima poin, diberi penalti) yang tidak terlalu berbeda dari nilai optimal A dan tidak menggembungkan penalti banyak, dan berakhir dengan (dinyatakan tidak dapat dijelaskan):
sumber
TI-BASIC (TI-84), 285 byte, Skor = 285
Program "index in string to list" yang sederhana. Dapat bermain golf lebih lanjut.
Input dalam
Ans
dan merupakan salah satu nama objek dalam huruf besar penuh.Keluaran dalam
Ans
dan secara otomatis dicetak.Contoh:
Penjelasan:
(Radii list dan string nama telah disingkat untuk singkatnya.
...
Digunakan untuk menunjukkan sisa dari daftar / string.)Model Visual:
sumber