Rosetta Stone Code Tantangan adalah tantangan di mana Anda harus menyelesaikan tugas dalam bahasa sebanyak mungkin.
Tantangan
Anda akan diberikan dua angka, n
dan s
, dalam daftar sebagai input. The n
akan menjadi nomor Anda harus menghitung sampai. n
akan berupa angka dari 2 hingga 10.000. s
akan menjadi angka yang Anda lewati saat menghitung hingga n
. s
akan dari 1 hingga n
/ 2 (setengah dari n
). Jika n
600, s
tidak bisa lebih besar 300. Anda harus menampilkan semua angka hingga n
melewati dengan s
mulai dengan 1. Setiap nomor output harus berada pada baris baru, pada baris yang sama dipisahkan oleh spasi, atau dalam daftar.
Twist
Untuk Tantangan Kode Batu Rosetta ini, setiap cuplikan tempat Anda menulis program harus memiliki panjang yang sama. yaitu: Jika program Python Anda memiliki 56 karakter, maka program Java Anda juga harus 56 karakter. Spasi dan komentar tidak dihitung sebagai karakter. Nama variabel / fungsi tidak boleh lebih dari 10 karakter. Ingat, ini juga kode golf, jadi usahakan agar kode Anda singkat.
Contoh
Memasukkan
[100, 7]
Keluaran
1
8
15
22
29
36
43
50
57
64
71
78
85
92
99
Catatan: Output bisa dalam satu baris dipisahkan oleh spasi atau format daftar
Kriteria Kemenangan
Pemenang akan ditentukan oleh rumus ini:
numberOfLanguages/codeSize
codeSize
bukan ukuran kode total tetapi ukuran kode rata-rata cuplikan.
Pengguna dengan skor tertinggi akan menang. yaitu: Jawaban dengan 4 bahasa dan ukuran 31 byte akan memenangkan jawaban dengan 7 bahasa dan ukuran 80 byte. Pemenang akan dipilih pada pukul 2:00 UTC pada tanggal 9 Maret 2015.
Papan angka
Semua skor dibulatkan ke seperseribu terdekat
Maltysen - 14 bahasa / 24 karakter = 0,583 ---- Pemenang
mbomb007 - 15 bahasa / 29 karakter = 0,517
Jakube - 5 bahasa / 11 karakter = 0,455
Teun Pronk - 4 bahasa / 51 karakter = 0,078
captncraig - 1 bahasa / 56 karakter = 0,018
sumber
NumberOfLanguages / CodeSize
?Jawaban:
14 Bahasa - 24 byte = 0,58333333333
**Telapak tangan**. Saya lupa untuk tidak menghitung spasi dalam jawaban Python saya. Jadi saya 24 byte sekarang.
Belajar tentang banyak bahasa baru dari tantangan ini, yang mungkin akan saya gunakan dalam golf. Situs yang sangat membantu saya menemukan bahasa-bahasa ini adalah http://www.tutorialspoint.com/codingground.htm . Hanya saja, jangan berharap program saya berjalan di dalamnya, itu membutuhkan format program lengkap, dan saya hanya menggunakannya untuk belajar tentang bahasa dan menggunakan REPL lain untuk menjalankannya.
1. Pyth :
Pyth tidak memiliki fungsi rentang demi langkah seperti python, jadi saya menggunakan rentang reguler dan
memotong(terima kasih @Jakube) menggunakan operator mod di atasnya.Menentukan fungsi g (hingga, langkah)
2. Naskah Golf:
Ini adalah program skrip golf pertama saya. Mungkin bukan cara terbaik untuk melakukannya.
3. Bash Utils:
Menggunakan perintah seq yang memiliki param INCREMENT.
4,5. Python, Sage :
Kode penjelasan sendiri.
Sage adalah bahasa berdasarkan Python yang digunakan untuk hal-hal matematika.
6. Mathematica:
Sekali lagi, cukup jelas.
7. Matlab:
Menggunakan notasi rentang Matlab dan mendefinisikan fungsi anonim.
8. Livescript:
Seperti Coffeescript, ini adalah turunan JS. Memiliki sintaks rentang keren. Notasi panah lagi.
9. Erlang:
Belajar erlang hanya untuk ini. Cukup jelas, mendefinisikan fungsi r.
10. F #:
Agak jelas, definisi fungsi F # seperti variabel.
11. Haskell:
Notasi rentang Haskell telah Anda berikan dua yang pertama dalam rentang untuk kenaikan, dan bukan kenaikan eksplisit.
12. R:
Bahasa yang sangat keren, meskipun definisi fungsi sedikit bertele-tele.
13. Julia:
Mengagumkan bahasa, akan menggunakan untuk bermain golf di masa depan.
14. CJam:
Seperti jawaban skrip golf lama saya kecuali dengan input parsing dan padding.
sumber
Mmhdcr1GH100 7
tidak bekerja seperti yang saya pikir akan terjadi.M
mendefinisikan fungsig
, yang harus Anda panggil terlebih dahulu. CobaMmhdcr1GHg100 7
.%
adalah hal yang sama dengan python[::a]
. Tidak perlu memotong. Dan saya cukup yakin jangkauan Anda harus termasukG
, misalnya menggunakanr1hG
.7
. Negatif sepertinya tidak benar.23 bahasa, 15 karakter = 1,5333333
sumber
jrojcoq-]m[m]uN
akan menjadi Versi Burlesque yang menampilkan angka dan tidak mendorong data dummy ke stack hanya untuk pop lagi.5 bahasa 11 karakter = 0,4545
Mengambil tantangan ini sebagai kesempatan untuk memeriksa beberapa bahasa baru (CJam, Burlesque, zsh, gs2). Pertama kali saya bekerja dengan bahasa-bahasa ini.
Metode di balik pembuatan output berbeda di hampir setiap bahasa. Hanya metode CJam dan gs2 yang identik. Keempat metode tersebut adalah, membuat rentang [1, 100] dan mengirisnya dengan modulo (CJam dan gs2), membuat kisaran [1, ..., 100] dan memfilter untuk elemen yang 1 mod 7 (Pyth), membuat kisaran [1, ..., 100], membaginya menjadi potongan len 7 dan menggunakan elemen pertama dari setiap potongan (Burlesque), dan membuat urutan langsung (zsh).
Saya mencoba merancang setiap program sedemikian rupa, sehingga terlihat golf untuk seseorang, yang tidak terbiasa dengan bahasa.
sunting 1: ditambahkan Burlesque, 2 bahasa sebelumnya dengan 10 karakter = 0,2
sunting 2: tambah gs2, 3 bahasa sebelumnya dengan 11 karakter = 0,2727
sunting 3: tambah zsh, 4 bahasa sebelumnya dengan 11 karakter = 0,3636
CJam
Uji secara online dengan input
100 7
.Bahan tertawaan
Selain zsh, ini adalah satu-satunya program golf. Burlesque cukup mengagumkan, ia memiliki berbagai fungsi yang sangat besar, seperti
ro
. Sayangnya tidak ada yang seperti[::a]
operator pengiris Python .Tidak ada penerjemah online, tetapi Anda bisa mendapatkan Burlesque di sini . Karena Burlesque tidak mendukung fungsi atau IO, Anda harus meletakkan nilai ke tumpukan terlebih dahulu
100 7 jrojcoq-]m[
GS2
Yap, ini hanya 11 karakter. Dalam gs2 setiap byte memiliki arti yang berbeda. Tetapi karena menulis dalam byte cukup sulit dan tidak menyenangkan, Anda juga dapat menulis dalam mnemonik, yang dapat Anda kompilasi dengan kode gs2 yang sebenarnya. Kode gs2, yang dieksekusi adalah
atau sebagai hex-dump:
Fakta menyenangkan: Saya tidak menulis dalam mnemonik, tetapi secara langsung angka-angka dari hex-dump.
Anda dapat mengujinya dengan mengunduh kompiler . Kompilasi file mnemonics dengan
python gs2c.py < mnemonics.txt > compiled
atau cukup salinW@!'."B !4+
ke file yang bernamacompiled
lalu jalankan denganecho 100 7 | python gs2.py compiled
.Mnemonik cukup bisa dijelaskan sendiri, tapi inilah yang terjadi di stack.
Btw, 8 byte mungkin, bahkan mungkin lebih sedikit.
sunting: Saya bercabang gs2, sedikit memanipulasi perintah dan membuat permintaan tarikan, yang sudah digabung. Jadi sekarang tugas dapat dilakukan dengan 6 byte :,
read-nums extract-array swap range1 mod unlines
yang diterjemahkan menjadi57 0e 42 2f 34 2b
, yang bahkan lebih baik daripada pyth optimal.zsh
Ini mendefinisikan fungsi
f
, yang menciptakan urutan. Untuk menggunakannya di Windows, saya menginstal babun shell, di mana Anda cukup mengetik perintah ini. Cukup tulisf() seq 1 $2 $1
dan di baris berikutnyaf 100 7
.Pertama saya mencoba menulis ini di Bash, tetapi di sana Anda harus menulis di
()
sekitar blok kode, sepertif() ( seq 1 $2 $1 )
. Jadi saya beralih ke zsh.Pyth
Ini sangat menyakitkan, karena tentu saja saya melihat golf 7 byte yang jelas. Anda dapat mengujinya secara online dengan input
100, 7
.sumber
100ro7en?i
yang menghasilkan{8 15 22 29 36 43 50 57 64 71 78 85 92 99}
. Anda bahkan bisa lebih pendek dengan menggunakan7mo14.+?i
.[::a]
perintah di Python.EveryNth([1,2,3,4,5,6,7,8, 9], 3)
kembali[3, 6, 9]
dan tidak[1,4,7]
, seperti itu diperlukan dalam tantangan ini.en
Karya - karya yang berbeda dari yang diharapkan dari bahasa lain. Saya mengutuk hari saya menerapkannya dengan cara ini: D. Solusi umum untuk itu baik menggunakanmo
I yang disebutkan di atas atau dengan menggunakanco
seperti9ro3co)-]
yang menghasilkan{1 4 7}
. PS: Saya memiliki juru bahasa online pada masa lalu tetapi hoster baru saya tidak mendukung CGI lagi tapi saya mungkin bisa meyakinkan seseorang yang memiliki Server dengan dukungan CGI untuk menjadi tuan rumah lagi penerjemah online :)15 bahasa, 29 karakter = (15/29) ≈ 0,517
Saya telah memperbaiki semua kode saya sejauh ini. Sekarang saya sedang mencari bahasa lain.
1. Python (24 golf)
2.> <> (Ikan) - (19+ junk chars)
Program ini mengasumsikan bahwa jumlah dan ukuran langkah ada di tumpukan sebelumnya, didorong dalam urutan itu. Menggunakan
ao
untuk mencetak baris baru di antara angka-angka.Penjelasan (kode, susun setelah kode sebelumnya dijalankan, komentar):
3. APL (19 golf)
Golf . Rekatkan ke sini: http://ngn.github.io/apl/web/
Sebut seperti ini:
7 f 100
. Ini menciptakan array dari 1 ke n, mengalikan setiap elemen dengan s, menambahkan satu ke setiap elemen, lalu mengambil elemen ceil pertama (n / s).4-7. Haskell , Clean , Curry , Frege (14 golf - spasi tidak dihitung)
Program ini berlaku di Haskell, Clean, Curry, dan Frege.
Golf. Jalankan di sini: https://ideone.com/Ii0pgP
8. Scotch (15 golf)
9. Jaskell (24 golf ) - Dibangun berdasarkan dokumentasi.
Memfilter daftar tempat modul lainnya adalah 1.
10. CoffeeScript (25 golf ) Jalankan di sini
11. R (25 golf) Jalankan di sini: http://www.r-fiddle.org/#/fiddle?id=k3vRnCOW&version=2
12. Cobra (26 golf)
13. S-Lang (28 bermain golf)
14. Boo (29)
Tidak yakin apakah fungsi rentang dapat mengambil 3 parameter ...
15. Funge-98 (29, ada yang bisa membantu bermain golf?)
Sedekat saya bisa ke program> <> saya. Karena tidak ada instruksi stack "rotate", saya harus menggunakan "put" dan "get". Befunge benar-benar membutuhkan beberapa instruksi rotasi / shift tumpukan, atau bahkan instruksi "over".
Penjelasan:
TIDAK MENGGUNAKAN SAAT INI, JUGA LAMA - Skor saya ditingkatkan dengan tidak memasukkan ini.
Ruby (35) Jalankan di sini: http://ideone.com/yFZELR
PowerShell (38)
Perl (39) Jalankan di sini: https://ideone.com/HGoleN
sumber
i
, yang mendorong karakter. Selain itu, sementara kita membahas topik tentang hal-hal lain, apakah program dapat mogok setelah berhasil menyelesaikan hasilnya (dengan membuka tumpukan kosong)?seq.int()
. Kerjanya sama sepertirange
di Python. Maka Anda bisa mendapatkannya ke 29.4 bahasa 51 karakter = (4/51) = 0,0784313725490196
Tidak tahu berapa banyak angka setelah koma yang Anda inginkan jadi saya akan membiarkannya seperti ini.
Semua cuplikan berukuran 51 karakter saat Anda menghapus semua spasi putih.
Bekerja pada kode yang lebih banyak dan lebih pendek tetapi ini adalah awal.
Catatan
Jawaban awal
Diserahkan Python (3.4), Lua (5.1) dan Javascript.
Nilai: 3/51 = 0,0588235294117647
Perbarui 1
Ditambahkan
Skor Ruby : 4/51 = 0,0784313725490196.
Python 3.4
Lua 5.1
Javascript
Rubi
sumber
di _reque(s) _reque(n) gl a=1 while $a<=$n{ di $a gl a=$a+$s }
1 bahasa - 56 karakter = 0,01785714285
piet (2x28) -
sumber