Tujuan dari Rosetta Stone Challenge adalah menulis solusi dalam bahasa sebanyak mungkin. Pamerkan multibahasa Anda dalam pemrograman!
Tantangan
Tantangan Anda adalah mengimplementasikan program yang akan memasukkan daftar angka dan menampilkan aturan yang digunakan untuk menghasilkan setiap angka berurutan dalam seri, sebanyak mungkin bahasa pemrograman . Anda diperbolehkan menggunakan segala jenis fungsi perpustakaan standar yang dimiliki bahasa Anda, karena ini sebagian besar adalah karya bahasa.
Apa itu "seri?"
Serangkaian adalah daftar bilangan bulat yang dipesan. Setiap angka berurutan dalam seri dapat dihasilkan dengan menerapkan aturan sederhana ke nomor sebelumnya dalam seri. Dalam tantangan ini, aturan terdiri dari mengalikan angka dengan konstanta, dan kemudian menambahkan konstanta kedua. Kedua konstanta dapat berupa bilangan bulat apa saja. Tujuan dari tantangan ini adalah untuk menghasilkan dua konstanta tersebut.
Untuk seri 2 5 11
, aturannya dapat ditulis sebagai 2 1
. Ini berarti bahwa setiap angka adalah angka sebelumnya, kali 2, ditambah 1. Fakta penting adalah bahwa sebagian besar seri memiliki tepat satu aturan. Beberapa seri memiliki jumlah tak terbatas atau tidak sama sekali, tetapi Anda tidak harus berurusan dengan ini.
Memasukkan
Input akan berupa daftar tiga bilangan bulat yang berbeda yang merupakan angka dalam urutan. Angka-angka dapat berupa spasi, koma, atau dibatasi baris baru, tetapi harap tentukan yang mana. Saya akan fleksibel pada batasan ini karena bahasa tertentu mungkin memiliki batasan input. Berikut adalah empat contoh input:
0 7 14
2 5 11
2 0 -4
5 -19 77
Keluaran
Output akan berupa dua bilangan bulat yang mewakili aturan yang digunakan untuk menghasilkan seri. Angka pertama akan menjadi konstanta multiplikatif, sedangkan angka kedua adalah konstanta aditif. Format output dapat berupa spasi, koma, atau dibatasi baris baru. Saya fleksibel pada batasan ini juga. Berikut adalah contoh output yang sesuai:
1 7
2 1
2 -4
-4 1
Kriteria Kemenangan yang Objektif
Adapun kriteria kemenangan yang objektif, ini dia: Setiap bahasa adalah kompetisi terpisah untuk siapa yang dapat menulis entri terpendek, tetapi pemenang keseluruhan adalah orang yang memenangkan sebagian besar sub-kompetisi ini. Ini berarti bahwa seseorang yang menjawab dalam banyak bahasa yang tidak biasa dapat memperoleh keuntungan. Code-golf sebagian besar tiebreak ketika ada lebih dari satu solusi dalam bahasa: orang dengan program terpendek mendapat pujian untuk bahasa itu.
Aturan, Batasan, dan Catatan
Program Anda dapat ditulis dalam bahasa apa pun yang ada sebelum 9 April 2012. Saya juga harus bergantung pada komunitas untuk memvalidasi beberapa tanggapan yang ditulis dalam beberapa bahasa yang lebih tidak umum / esoterik, karena saya tidak mungkin dapat menguji mereka.
Papan Peringkat Saat Ini
Bagian ini akan diperbarui secara berkala untuk menunjukkan jumlah bahasa dan siapa yang memimpin di setiap bahasa.
- AWK (32) - mellamokb
- bash (31) - Peter Taylor
- Befunge (29) - Howard
- bc (39) - kernigh
- brainfuck (174) - CMP
- C (78) - l0n3_shArk
- C ++ (96) - leftaroundabout
- Common Lisp (88) - kernigh
- Kapel Cray (59) - Kyle Kanos
- csh (86) - kernigh
- Cuda (301) - leftaroundabout
- dc (30) - kernigh
- DOS BATCH (54) - mellamokb
- Elemen (27) - Howard
- es (95) - kernigh
- Factor (138) - kernigh
- Felix (86) - kirbyfan64sos
- Fortran (44) - Kyle Kanos
- Go (101) - Howard
- GolfScript (16) - Howard
- Golflua (44) - Kyle Kanos
- Haskell (35) - leftaroundabout
- J (23) - Gareth
- Jawa (141) - Howard
- JavaScript (47) - mellamokb
- Julia (71) - ML
- Lua (51) - Howard
- Merkuri (319) - leftaroundabout
- MoonScript (48) - kirbyfan64sos
- Nimrod (146) - leftaroundabout
- Burung Hantu (22) - res
- Pascal (88) - leftaroundabout
- Perl (57) - Gareth
- PHP (61) - mellamokb
- PicoLisp (72) - kernigh
- Piet (56) - ML
- PostScript (61) - Howard
- Python (40) - Howard
- Q (36) - tmartin
- QBasic (34) - mellamokb
- R (50) - res
- Ruby (44) - Howard
- Scala (102) - Gareth
- SQL (57) - Aman ZeeK Verma
- TI-83 BASIC (25) - mellamokb
- Mesin Daftar Tidak Terbatas (285) - Paxinum
- VBA (57) - Gaffi
- Spasi (123) - res
- zsh (62) - kernigh
Peringkat Pengguna Saat Ini
Peringkat yang sama diurutkan berdasarkan abjad.
Howard (9): Befunge (29), Elemen (27), Go (101), GolfScript (16), Java (141), Lua (51), PostScript, (61) Python, (40) Ruby (44)
kernigh (8): bc (39), Common Lisp (88), csh (86), dc (30), es (95), Factor (138), PicoLisp (72), zsh (62)
leftroundabout (6): C ++ (96), Cuda (301), Haskell (35), Mercury (319), Nimrod (146), Pascal (88)
mellamokb (6): AWK (32), DOS BATCH (54), JavaScript (47), PHP (61), QBasic (34), TI-83 BASIC (41)
Gareth (3): J (23), Perl (57), Scala (102)
Kyle Kanos (3): Cray Chapel (59), Fortran (44), Golflua (44)
res (3): Owl (22), R (50), Whitespace (123)
kirbyfan64sos (2): Felix (86), MoonScript (48)
ML (2): Julia (71), Piet (56)
Aman Zeek verma (1): SQL (57)
CMP (1): brainfuck (174)
Gaffi (1): VBA (57)
l0n3_shArk (1): C (78)
Paxinum (1): Mesin Daftar Tidak Terbatas (285)
Peter Taylor (1): bash (31)
tmartin (1): Q (36)
sumber
code-golf
dancode-challenge
tag.Jawaban:
GolfScript, 16 karakter
Input diberikan sebagai daftar yang dipisahkan oleh ruang.
JavaScript, 56 karakter
Input diberikan saat diminta.
Ruby, 44 karakter
Input di sini diberikan sebagai daftar yang dipisahkan koma.
Python, 40 karakter
Input sekali lagi dipisahkan dengan koma.
Jawa, 141 karakter
Input dipisahkan oleh baris baru.
Lua, 51 karakter
Input dipisahkan oleh baris baru.
Pergi, 101 karakter
Input dipisahkan oleh baris baru.
Fortran, 90 karakter
Input dipisahkan oleh baris baru.
Di luar, 29 karakter
PostScript, 61 karakter
Burung hantu, 23 karakter
Input dipisahkan oleh baris baru.
Elemen , 27 karakter
Input dipisahkan oleh baris baru.
sumber
Brainfuck - 174
Piet - 82?
Tidak yakin bagaimana mengukur golf kompetitif di sini. Aku akan pergi dengan ukuran gambar total (dalam codels) Tambang 41x2:
Befunge - 34
Inggris - 278
Tidak yakin apakah ini diperhitungkan, tetapi saya pikir saya akan mencobanya. Sangat sulit untuk menggambarkan bahkan suatu algoritma sederhana secara akurat. Agak berharap bahasa Inggris mendukung semacam simbol pengelompokan untuk menetapkan prioritas.
sumber
D:\Software\Programming\Piet\npiet-1.3a-win32>npiet series2.png
? 5
? -19
? 77
05
Solusinya harus-4 1
QBasic, 42
Membutuhkan input dengan koma, output dengan spasi (apakah ini oke?)
Merkuri, 319
Haskell,
8581Sekarang input dengan spasi, output dengan baris baru.
C, 80
C ++, 96
Nimrod, 146
Input dengan baris baru, koma output.
Yang ini tidak masuk hitungan, tapi saya rasa masih cocok:
Teorema matematika, 713 karakter LaTeX
Sementara kita sedang menulis
:=
definisi ...Pascal,
9088Cuda, 301
sumber
m
dan menggunakan kembalic
, dan dua lainnya dengan menggunakanc-=b;c/=b-a;
alih-alihc=(c-b)/(b-a);
.scanf()
string format.AWK, 35 karakter
2 0 -4
bc, 39 karakter
z=f(2, 0, -4)
bc
ekspresi. Setelahbc
membaca file sumber, ia membaca input standar. Inilah sebabnya mengapa input harus terlihat seperti pemanggilan fungsi.bc
, yang membutuhkan baris baru setelah{
.Gangguan Umum, 88 karakter
2 0 -4
csh, 86 karakter
2 0 -4
csh
adalah satu-satunya bahasa yang saya hitung baris baru di akhir file. Ini karenacsh
tidak pernah menjalankan perintah terakhir kecuali ada baris baru.set i=($<)
tidak berfungsi, karena$<
tidak memiliki pemisahan kata.dc, 30 karakter
2 0 _4
mana_
garis bawah.es, 95 karakter
2 0 -4
es
adalah cangkang yang bisa dikembangkan oleh Paul Haahr dan Byron Rakitzis.Faktor, 138 karakter
2 0 -4
PicoLisp,
7472 karakter2 0 -4
a(read)b(read)c(read)
ker read a(r)b(r)c(r)
.TI-83 BASIC,
6361 karakter2
ENTER0
ENTER¯4
ENTER, di mana¯
minus unary kalkulator.→
(panah kanan) dihitung sebagai U + 2192. Misalnya, kalkulator dihitungInput A
sebagai 2 karakter, tetapi saya hitungInput A
sebagai 7 karakter. Saya juga menghitung:
1 karakter.zsh, 62 karakter
2 0 -4
sumber
AWK (32)
Demo: http://ideone.com/kp0Dj
bash (38)
Demo: http://ideone.com/tzFi8
DOS / BATCH (54
55)Mengambil parameter sebagai daftar argumen yang dipisahkan oleh ruang.
Jawa (143
185)JavaScript (48
6167)Demo: http://jsfiddle.net/BT8bB/6/
PHP (61
77)Demo: http://ideone.com/CEgke
QBasic (34)
TI-83 Basic (25
41)Ya, tanda kurung yang tepat hilang dengan sengaja. Ini adalah teknik optimisasi terkenal yang menutup tanda kurung sebelum operasi STO tidak diperlukan dalam pemrograman Dasar TI-83.
sumber
p
tidak terdefinisi. Apakah spesifikasi JS mengatakan bahwa argumen fungsi harus dievaluasi sebelum fungsi diselesaikan?Ruang kosong, 123
I / O dipisahkan oleh baris baru. (Untuk mendapatkan kode sumber, masukkan mode edit dan salin spasi putih di antara tag preformat; atau, lihat online contoh di Ideone .)
Penjelasan, di mana S, T, L mewakili Space, Tab, Linefeed:
R, 50
I / O dipisahkan oleh ruang.
Burung hantu
--- 22 ---
I / O dipisahkan oleh baris baru.
--- 19 --- (jika versi ini diperbolehkan; tapi saya rasa ini curang, karena \ adalah kode yang dapat dieksekusi):
I / O dipisahkan oleh ruang. Penggunaan baris perintah:
owl prog 5 19\ 77
(\ bertindak sebagai minus unfix postfix dalam Owl).sumber
J, 23 karakter
Pemakaian:
Angka negatif diwakili oleh garis bawah pada J.
PHP, 88 karakter
Scala, 102 karakter
Perl, 57 karakter
Membutuhkan opsi '-p', yang telah saya tambahkan 2 karakter. Mengasumsikan bahwa input tersebut valid untuk menyimpan beberapa karakter.
Semua jawaban saya menggunakan angka yang dipisahkan oleh spasi.
sumber
1!:1]3
di sebelah kanan ekspresi akan membaca input dari STDIN. Saya pikir telah ada diskusi tentang meta atau dalam komentar untuk beberapa jawaban atas apakah ini harus diizinkan atau tidak. Saya agak ambivalen - Saya menikmati mencari tahu bagaimana mendapatkan J untuk melakukan apa yang saya inginkan di ruang terkecil, saya akan mengambil penalti 6 karakter untuk input dari STDIN jika itu yang semua orang inginkan.(],1{x-0{x*])%~/2-/\x=:".1!:1]1
tampaknya ok dalam mode konsol.)($a=($_[1]-pop)/($_[0]-$_[1])).$/.($_[1]-$_[0]*$a)
PHP,
74,72, 69Ketika input diteruskan sebagai argumen:Sekarang, seperti yang disarankan @mellamokb, menggunakan $ n = $ argv:C,
77, 78^ tidak berfungsi, inilah masalahnya: [terima kasih kepada @ugoren karena telah memberitahukannya]sumber
fscanf
danscanf
tanpa spasi. Luar biasa!$argv
, yaitu$n=$argv
di awal?scanf
harus dilakukan terlebih dahulu,d=..
lalub-d*a
?VBA, 57 karakter
( Ini pada dasarnya sama dengan fungsi 'BASIC' lainnya, tapi saya belum melihat kiriman VBA di sana. )
sumber
Debug.?y;b-a*y
bash (42 karakter)
Pesta murni:
bash (31 karakter)
Keluar ke sesuatu yang lain:
(Berdasarkan implementasi OWL Howard )
sumber
Ini adalah kode (tidak dioptimalkan) untuk mesin register yang belum di-unimited, dijelaskan di sini: http://www.proofwiki.org/wiki/Definition:Unlimited_Register_Machine
Input harus dalam register 1,2 dan 3, dan output akan di register 1, 2 setelah program selesai. Nomor non-negatif dan non-integer tidak ditangani, tetapi input 0,7,14 dan 2,5,11 ditangani dengan benar.
Zero[8] Trans[2,11] Jump[3,11,7] Succ[11] Succ[8] Jump[11,11,3] Zero[5] Trans[1,12] Jump[2,12,13] Succ[12] Succ[5] Jump[12,12,9] Zero[17] Trans[8,13] Jump[13,17,25] Zero[16] Trans[5,14] Jump[13,14,22] Succ[14] Succ[16] Jump[14,14,18] Succ[9] Trans[16,13] Jump[17,17,15] Zero[6] Zero[20] Jump[9,6,40] Zero[7] Trans[1,21] Jump[20,7,36] Succ[21] Trans[21,19] Trans[19,21] Succ[7] Jump[7,7,30] Trans[21,18] Trans[18,20] Succ[6] Jump[6,6,27] Trans[20,4] Zero[10] Trans[4,15] Jump[2,15,47] Succ[15] Succ[10] Jump[15,15,43] Trans[9,1] Trans[10,2]
Sunting: dengan menghapus tanda kurung, dan memperpendek nama instruksi:
URM 285
Z8 T2,11 J3,11,7 S11 S8 J11,11,3 Z5 T1,12 J2,12,13 S12 S5 J12,12,9 Z17 T8,13 J13,17,25 Z16 T5,14 J13,14,22 S14 S16 J14,14,18 S9 T16,13 J17,17,15 Z6 Z20 J9,6,40 Z7 T1,21 J20,7,36 S21 T21,19 T19,21 S7 J7,7,30 T21,18 T18,20 S6 J6,6,27 T20,4 Z10 T4,15 J2,15,47 S15 S10 J15,15,43 T9,1 T10,2
sumber
DOS-BATCH, 98
Input dalam baris terpisah
Bash, 51
Contoh:
sh prog.sh 2 0 -4
(argumen yang dipisahkan spasi)Perl, 84
Jawa, 297
Input yang dipisahkan ruang, output yang dipisahkan ruang.
SQL, 57
Ini adalah entri yang menyedihkan, tetapi 'hanya' menyelesaikan tujuannya. Permintaan mengikat input pada saat runtime 1,2,3 adalah variabel dalam urutan input.
sumber
bash
solusi Anda , saya hanya ingin menyarankan Anda bisa menghapus semua ruang ekstra dan menyimpan 6 karakter.T, 36
pemakaian
sumber
Fortran 44
Input akan berada dalam satu baris (koma atau spasi terpisah)
Kapel Cray 59
Input akan berada pada satu baris, tidak ada baris baru (tambahkan 2 karakter untuk itu dengan menggunakan
writeln
menggantikanwrite
).Golflua 44
Input batas baru, keluaran terbatas ruang
sumber
Julia, 71 karakter
Input dan output yang dibatasi ruang.
i,j,k=int(split(readline(STDIN)));println("$(l=div(k-j,j-i)) $(j-i*l)")
Contoh input dan output:
Piet,
866056 codels (14x4), ukuran codel 10 untuk visibilitas yang lebih baikSaya benar-benar bisa mengecilkan jumlah codels sebesar 35%. Saya tidak mengharapkan hasil yang baik. Mengkode program ini ke belakang, seperti yang saya harapkan, cukup berhasil. Saya ragu bisa lebih pendek dari ini, tetapi saya akan sangat tertarik jika ada yang bisa menemukan solusi yang lebih kecil.
Tantangannya tidak menyatakan apakah program harus berhenti setelah menunjukkan hasilnya, jadi program terkecil saya (56 codel) harus valid. Itu hanya loop kembali ke awal setelah menunjukkan hasilnya, meminta triplet bilangan bulat baru. Karena pengemasan yang ketat tidak ada tempat untuk output dari dua karakter baris baru, tetapi itu tidak masalah dengan npiet interpreter, karena selalu mencetak '?' jika menunggu input.
Ada dua ukuran yang mungkin untuk membangun versi berulang, tetapi versi yang berjalan hanya sekali hanya mungkin dalam program yang setidaknya 64 codels (16x4) besar. Versi di bawah ini menunjukkan alasannya. Mungkin juga menarik bagi mereka yang akrab dengan Piet.
Versi 56 codel terakhir, yang paling padat, dengan loop :
Versi kedua (60 codel), dengan satu lingkaran
Jika versi 56 codel melanggar aturan, di sini adalah versi 64 codel final, hanya berjalan sekali :
Versi pertama saya (86 codels)
Input dan output dibatasi baris baru.
Contoh input dan output:
Untuk versi yang diulang, tampak sedikit lebih buruk:
Saya memilih baris baru sebagai pembatas karena pengkodean ASCII 10 (\ n) jelas hanya membutuhkan 7 codels, dibandingkan dengan ASCII 32 () yang membutuhkan 8 codel atau bahkan ASCII 40 (,) yang membutuhkan 9 codel.
Pengodean mundur dari hasil ke input pertama adalah cara yang bagus untuk mengurangi penggunaan codel untuk operasi ROL. Urutan tumpukan di awal dan di akhir diketahui, sisanya mudah dilakukan dengan tangan.
Ini adalah versi teks dari program 64 codel (dengan stack), dalam tulisan singkat saya. Program yang lebih pendek tidak berhenti tetapi kembali ke awal.
sumber
MoonScript (48 karakter, input batas baru, keluaran terbatas ruang)
Felix (86 karakter, input terbatas baru, keluaran terbatas koma)
Julia (84 karakter, input batas ruang, keluaran batas ruang)
sumber
julia file.jl
memberikan kesalahan yang sama?