Anti-golfscript anti-golf: buat tugas di mana GolfScript atau J dikalahkan oleh (konvensional) bahasa Anda [ditutup]


29

Anda perlu membuat tiga hal:

  1. Pernyataan tugas, T .
  2. Solusi dari tugas dalam bahasa biasanya tidak digunakan untuk bermain golf, A .
  3. Solusi dari tugas dalam bahasa biasanya digunakan untuk bermain golf, B . Jangan mencoba membesar-besarkan B untuk meningkatkan skor, alih-alih berpikir seolah-olah B ditulis oleh pesaing Anda.

Gunakan akal sehat dalam mendefinisikan typically used for golfing, cobalah untuk memaksimalkan kesenangan bagi pengguna lain.

Pengguna lain dapat mengusulkan yang lebih baik B(mungkin termasuk dalam bahasa "golf" lainnya).

Skor adalah (length_in_bytes(B)+5)/(length_in_bytes(A)+5), lebih banyak lebih baik. (Mungkin rumus penilaian harus diubah? ..)

Gagasan utamanya adalah menciptakan tugas di mana bahasa yang biasanya berkinerja baik di codegolf menemui masalah. Ini bisa menjadi kekuatan tiba-tiba dari bahasa yang biasa dalam tugas yang diberikan atau kelemahan tiba-tiba dari beberapa golflang.

Hindari tugas yang menyebutkan bahasa pemrograman tertentu, seperti Input a string and execute it as a Scheme code.


1
Saya kira Anda menjadikan ini sebagai kontes popularitas alih-alih golf kode. Kalau tidak, orang akan mengeluh bahwa itu bukan "kemenangan kode terpendek".
Victor Stafusa

OK, berubah menjadi kontes popularitas. Anda juga dapat menyarankan judul yang lebih baik atau skor yang lebih baik.
Vi.

Saya menganggap pertanyaan saya sebelumnya memenuhi syarat? codegolf.stackexchange.com/questions/18633/... Solusi perl adalah 48 chars sedangkan solusi J adalah 54 chars
user12205

1
Apakah kita bisa menentukan lang B (asalkan bagus dalam bermain golf)? Atau adakah yang bisa mengatakan "ini adalah program dalam bahasa <insert language name> dan ia memiliki solusi panjang yang sangat pendek <n>:"?
Justin

1
BTW beberapa bahasa seperti Perl dapat berada di sisi A dan di sisi B, tergantung pada konteksnya.
Vi.

Jawaban:


14

Pertanyaan saya sebelumnya, Cetak gelombang sinusoidal (vertikal), memenuhi syarat saat ini. Saya mempostingnya di sini sebagai solusi, juga berharap kalian dapat menemukan beberapa solusi yang lebih pendek untuk pertanyaan awal saya.

Seperti yang disyaratkan oleh Vi., Saya akan memposting ringkasan pertanyaan.

Cetak gelombang sinusoidal kontinu yang bergulir secara vertikal pada terminal. Program tidak boleh berhenti dan harus terus-menerus gulir ke bawah gelombang (kecuali sampai SIGINT). Anda mungkin menganggap overflow bukan masalah (yaitu Anda dapat menggunakan loop tak terbatas dengan penghitung yang bertambah, atau rekursi tak terbatas).

Gelombang harus memenuhi properti berikut:

  • Amplitudo = 20 karakter (puncak amplitudo)
  • Periode = 60 hingga 65 baris (termasuk)
  • Output hanya terdiri dari spasi, baris baru dan |
  • Setelah setiap baris output, jeda selama 50 ms

Ada contoh keluaran pada pertanyaan awal saya, tapi saya tidak mempostingnya di sini, karena ini akan membuat jawaban saya sangat panjang. Pertanyaan asli saya dapat dilihat di sini: Mencetak gelombang sinusoidal (vertikal)

ASaat ini terpendek : solusi Perl dengan 48 karakter: https://codegolf.stackexchange.com/a/18655/12205

print$"x(25+20*sin).'|
';$_+=.1;`sleep .05`;do$0

BSaat ini terpendek : solusi J dengan 54 karakter: https://codegolf.stackexchange.com/a/18649/12205

($:+&0.1[6!:3@]&0.05[2:1!:2~' |'#~1,~[:<.20*1+1&o.)0  




Saat ini, skor jawaban ini adalah 1,113 (skor sangat rendah)


Skor saat ini sesuai dengan rumus saat ini adalah sekitar 1,113
Vi.

@ Vi. haruskah saya menghapus jawaban ini atau haruskah saya menunggu beberapa saat dan melihat apa yang terjadi? Jika yang terakhir, berapa lama saya harus menunggu?
user12205

Pernyataan menyatakan byte, bukan karakter. Dikonversi ke UTL-8, solusi APL dibuat 61 byte (70 untuk UTF-16).
Vi.

2
Anda mengklaim bahwa Perl bukan bahasa yang biasanya digunakan untuk bermain golf, tetapi bahasa itu yang pertama kali dikaitkan dengan kata golf ! Ruby, pada usia 56, terlihat seperti bahasa nyata A dalam jawaban saat ini untuk pertanyaan Anda.
Peter Taylor

8

Tambahkan dua angka

Dapatkan dua angka dari STDIN, dan tambahkan bersama. Anda harus mendukung angka floating point, jadi 0,5 + 1,5 harus sama dengan 2.

Perl 5 (dengan -E)

say<>+<>

GolfScript

n%'+'*'"#{
}"'n/\*~

Skor dihitung sebagai (24+5)/(8+2+5) = 1.9(3). -Ejuga dihitung sebagai byte program.
Vi.

Komentar yang sama seperti yang saya sampaikan kepada ace: Anda mengklaim bahwa Perl bukan bahasa yang biasanya digunakan untuk bermain golf, tetapi bahasa yang pertama kali dikaitkan dengan kata golf !
Peter Taylor

Dan program GolfScript Anda tidak berfungsi. Suatu program kerja akan berada di n%'+'*'"#{ }"'n/\*~mana karakter di antara keduanya {}adalah baris baru literal (tidak didukung dalam komentar).
Peter Taylor

@PeterTaylor, Dibandingkan dengan GolfScript, Perl adalah bahasa "biasa"; dibandingkan dengan Jawa, itu adalah bahasa "golf".
Vi.

1
J untuk ini adalah tidak terlalu buruk, benar-benar: +/".1!:1,~1. APL mungkin akan lebih kecil lagi.
algoritme


7

Skor 48/37 atau 1. (297)

T: tuliskan cuplikan kode yang mengakhiri program setelah tepat satu jam (sedekat mungkin, seperti dalam sedetik) berjalan. Jangan khawatir tentang pengecualian, mereka bisa tidak tertangani.

A: Java (32)

Thread.sleep(3600000);int a=1/0;

B: untuk Befunge 98, membutuhkan sidik jari TIME (43)

"EMIT"4(HMS00p01p02p#;gS-!01gM-!H-!++3-!j;@

Ini membutuhkan Hour, Minute, dan Second pada saat berlari, dan menempatkan pada sel 02, 01, dan 00. Kemudian, ia melompati ;bagian kedua. Bagian kedua berfungsi sebagai berikut:

g          get the value at 00
"EMIT"4(S) get the current time in seconds
-!         subtracts the values and changes a 0 to 1, anything else to 0

sama untuk Menit dan Jam.

++  sums up the values
3-! i the sum is 3, we get a 1, otherwise, we get a 0.
j   jump over the next that many cells
;   skip code execution until the next ;
@   end program

Perhatikan bahwa Befunge secara otomatis akan kembali ke awal baris ketika akhir baris tercapai.


Seperti yang bisa kita lihat, Befunge tidak bagus dalam hal menunggu waktu tertentu. Namun, Java tidak buruk.


9
APL:⎕DL 3600
marinus

14
Java biasanya dibaca sebagai class Main{public static void main...
Vi.

3
@ Vi. lihat "cuplikan kode". Pada dasarnya, ini membutuhkan kode yang benar-benar berfungsi, tidak lebih dari itu.
Justin

2
Saya tidak tahu Befunge, tetapi cuplikan Java tidak "mengakhiri program" seperti yang dipersyaratkan oleh spesifikasi. Itu akan membutuhkan System.exit(0);atau membungkus tidur Anda dalam suatu mainmetode.
Peter Taylor

3
@DoorknobofSnow Gagal mengkompilasi:error: not a statement
Bob

5

Keluarkan file teks tertentu (498.388888 poin)

Keluaran tujuannya ada di sini .

Skrip Python 3.4.3 untuk mencetaknya adalah 49 byte:

for b in dir(__builtins__):print(eval(b).__doc__)

Program CJam naif sama dengan output tujuan, dengan membungkus string output "..."dan melarikan diri masing "- masing yang terjadi di dalamnya, akan menjadi 26908 byte.


Sangat pintar, meskipun mungkin bertentangan dengan batasan "bahasa spesifik" (yang tidak jelas, harus diakui).
BMac

Aturan terdekat adalah "hindari menyebutkan bahasa tertentu". Python tidak disebutkan, tetapi jelas berarti.
Vi.

Ya, jawaban ini sedikit tidak jelas, saya hanya ingin menunjukkan bahwa aturannya adalah lereng yang licin. Bayangkan jika saya telah "membuat" keluaran lebih banyak - katakanlah, mengambil checksum SHA1 dari setiap dokumen - akan sangat aneh untuk mengklaim "sekelompok angka hex yang kacau ini terlalu spesifik bahasa" :)
Lynn

Jika saya ingin melakukan jawaban yang lebih "adil", saya mungkin akan menggunakan Mathematica. Anda dapat melakukan banyak hal yang sangat spesifik domain di dalamnya yang akan membutuhkan ribuan byte CJam / Pyth / apa pun. Tapi sayangnya, saya tidak tahu bahasanya.
Lynn

Tautan ke keluaran sudah mati.
pppery

4

Katakan "Halo dunia!" (50/26 ≈ 1.92)

Perlihatkan kotak pesan untuk mengatakan "Halo dunia!"

JavaScript

alert('Hello world!')

Di browser dengan dukungan untuk DOM Level 0+.

Perl

use Win32;Win32::MsgBox('Hello world!','',48)

Berjalan di ActivePerl dengan Win32 :: GUI.


alertsecara inheren bukan bagian dari JS, dan program GolfScript hanyalah sebuah komentar.
Peter Taylor

Saya telah mengubah jawaban untuk menggunakan Perl sederhana.
Sikat gigi

3

Keluaran "Halo dunia!" sampai pengguna menekan "q", 1.842 105/44 = 2.386

  1. Cetak "Halo dunia!" (termasuk baris baru).
  2. Pengguna menekan tombol, yang tidak digaungkan ke layar.
  3. Ulangi sampai tombol ditekan "q".

QBasic ( 52 39 karakter)

1?"Hello world!":IF"q"<>INPUT$(1)THEN 1

Sejak memposting jawaban asli saya, saya menemukan bahwa saya dapat mematikan autoformatting di QB64. : ^ D Dengan nomor baris dan ?pintasan untuk PRINT, ini terlihat seperti ekspresi ternary dalam bahasa mirip-C.

Versi pertama:

PRINT "Hello world!"
IF INPUT$(1) <> "q" THEN RUN

Perl 5 (100 karakter)

while("q"ne$e){print"Hello world!\n";system"stty cbreak -echo";$e=getc;system"stty -cbreak echo";}

Di atas hanya akan bekerja pada sistem UNIX (tertentu?) (Diuji pada Ubuntu 12.04). Mungkin saja seseorang dapat melakukan cross-platform dan mendapatkannya hingga 91 karakter menggunakan modul Term :: ReadKey , tapi saya belum mengujinya:

use Term::ReadKey;while("q"ne$e){print"Hello world!\n";ReadMode 3;$e=ReadKey 0;ReadMode 0;}

1

Halo, dunia (3 1/3 poin)

Tulis program yang menampilkan Hello World..

HQ9 + (1 karakter)

Ini bukan bahasa "biasanya digunakan untuk bermain golf", jadi saya percaya ini cocok di sini. Bekerja dalam interpreter ini, dengan cara .

H

GolfScript (15 karakter)

Saya ragu itu bisa menjadi lebih pendek, bahkan jika itu GolfScript.

"Hello World."

8
Saya tidak berpikir HQ9+cocok sebagai bahasa A. Ini dirancang untuk trik / teka-teki / kesenangan. Brainfuck / Unlambda / bahasa esoterical lain juga tampaknya tidak sesuai sebagai A .
Vi.

@ Vi .: Tapi itu tidak biasanya digunakan untuk bermain golf.
Konrad Borowski

4
Anda dapat hovewer mencoba menggunakan HQ9+sebagai B bahasa dan mengalahkan itu oleh Java atau seperti ...
Vi.

7
Sepertinya ada hierarki: Dibandingkan dengan Jawa, Perl adalah golflang. Dibandingkan dengan Perl, GolfScript adalah golflang. Dibandingkan dengan GolfScript, HQ9 + adalah golflang ...
Vi.

@ Vi .: Saya hati-hati memeriksa deskripsi tugas Anda. HQ9 + tidak pernah digunakan untuk bermain golf, kecuali untuk dua tugas khusus - "99 botol", dan "Halo, dunia". Kecuali Anda dapat menunjukkan beberapa tugas lain di mana HQ9 + menang dengan bahasa pemrograman lain, saya masih berpikir itu sesuai dengan definisi, bahkan jika itu menyalahgunakannya (hei, ini adalah kontes popularitas ). HQ9 + sama sekali tidak digunakan untuk hal-hal golf yang tidak terkait dengan dua tugas itu. Jadi, ini biasanya tidak digunakan untuk bermain golf. Yang kedua jelas dirancang untuk CodeGolf - itu GolfScript.
Konrad Borowski

0

Keluaran "Halo dunia!", 33/97 = 2.94

Tulis program yang menampilkan Hello world!

Arduino atau GML

Serial.print("Hello world!")

atau

show_message("Hello world!")

Keduanya 28 karakter.

GTB

Saya menggunakan GTB untuk bermain golf banyak (terutama karena saya membuatnya sendiri, dan itu Turing lengkap). Sayangnya, hanya ada dukungan terbatas untuk huruf kecil (karena kalkulator TI-84 tidak dapat mengatasinya). Ini mungkin program GTB terpendek yang dapat menampilkan Hello world!

S;"lower",1,1)→_~"H"+S;"expr(",1,1)+_+_+S;"cos(",2,1)+" W"+S;" or ",2,2)+_+S;" and ",4,1)+"!

92 karakter.


Apakah versi GTB juga mengeluarkannya ke port serial?
Vi.

Apakah versi GTB sengaja digembungkan dengan berbagai coss dan exprsatau tidak benar-benar hanya bisa mengeluarkan sesuatu secara teratur? Atau "karakter sebenarnya bukan string literal dan membingungkan saya ...
Vi.

@ Vi. Itu tidak membengkak sama sekali ... ia harus menghapus e dari expr, dua l dari yang lebih rendah, o dari cos, atau dari atau, l dari yang lebih rendah, dan d dari dan.
Timtech

'Pengguna lain dapat mengusulkan B yang lebih baik (mungkin termasuk dalam bahasa "golf" lainnya). '--- izinkan saya mencoba skrip golf:"Hello world!"
John Dvorak

@ JanDvorak Anda mungkin benar.
Timtech
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.