Berlaku Sepanjang Masa


24

Terinspirasi oleh pertanyaan ini pada SO , tugas Anda adalah menghasilkan program yang valid dalam (setidaknya) dua versi utama bahasa pilihan Anda yang menghasilkan keluaran berbeda.

Aturan

  • Bahasa apa pun yang memiliki lebih dari satu versi utama dapat digunakan.
    • Untuk keperluan tantangan ini, saya akan menyarankan "versi utama" adalah di mana angka pertama dalam perubahan nomor versi.
      • PHP 4 dan PHP 5 berbeda, PHP 5.3 dan PHP 5.4 tidak.
    • Namun, karena saya tidak tahu skema versi untuk semua bahasa, jika Anda dapat berdebat dengan cukup baik, saya yakin komunitas akan menentukan apakah Anda adil dalam menentukan "versi utama" sendiri.
  • Kode harus dikompilasi dan dijalankan dengan flag dan input yang sama setiap kali
    • Kecuali untuk mengubah versi bahasa jika ini terkait
  • Kesalahan tidak dihitung sebagai keluaran dan jawaban yang menghasilkan kesalahan didiskualifikasi (alih-alih keluaran kesalahan diabaikan)
  • Program tidak boleh mengambil input selain yang diperlukan untuk membuatnya berjalan.
  • Untuk setiap versi yang diberikan, output harus selalu sama
  • Maksudnya adalah bahwa perubahan tersebut harus menjadi konsekuensi dari perubahan dalam spesifikasi bahasa daripada spesifikasi VM atau metadata lingkungan

Mencetak gol

  • jenis mencetak panjang, jadi +1untuk setiap karakter / byte
  • -1untuk setiap perbedaan karakter dalam panjang output.
    • misalnya output Versi 1 abcde(5 karakter), output Versi 2 123abc(6 karakter) =-1

Peraturan Lainnya

  • Pengecualian standar berlaku - tidak ada program eksternal, permintaan web dll.
  • Program Anda harus berakhir (dalam 2 detik)
  • Skor terendah menang.

Skor "Lebih Baik"

Simpan jawaban asli Anda, demi keadilan, saya akan menandai pemenang berdasarkan aturan asli.

Karena skor awal saya rusak secara fundamental, mengapa tidak mencetak ulang / coba lagi dengan sistem penilaian berikut:

  • jenis mencetak panjang, jadi +1untuk setiap karakter / byte
  • +1untuk setiap perbedaan karakter dalam panjang output
    • abcdedan 123456->+1
  • -1untuk setiap perbedaan karakter unik dalam output (dibatasi hingga panjang keluaran terpendek)
    • abcdedan 123456->-5
    • 12345dan 123456->-1
    • 12345dan 123455->0
  • Skor paling dekat dengan zero win
  • Dalam hal tie break kedua, skor sederhana menang.

Catatan: di Ruby, angka pertama adalah zaman , itu menandakan peristiwa besar dalam sejarah Ruby, bukan nomor versi (0-> 1 adalah rilis awal, 1-> 2 adalah ulang tahun ke 20 Ruby). Angka utama adalah angka kedua . Jadi, Ruby 1.8-> 1.9 akan melewati rilis besar.
Jörg W Mittag

1
Saya pikir skor baru terlalu berbeda dari yang asli, ini bisa dibilang pertanyaan baru
Tal

Saya akan mengatakan contoh PHP dapat diperdebatkan, 5.4 memiliki beberapa fitur dasar yang dapat digunakan pada 5.3 (ciri, [] array, array dereferencing). Itu akan menjadi PHP6, tetapi kemudian memutuskan untuk menyimpan 6 ke sesuatu yang lebih radikal sebagai string unicode secara default IIRC
Einacio

2
Apa perbedaan karakter yang unik? Jika saya output zzzzdan aaaa, apakah itu memberi saya -4? Seperti itulah rasanya bagi saya.
Justin

1
Jadi, dengan anggapan bahwa program dapat mendeteksi versi mana yang dijalankan, pemenangnya adalah siapa yang dapat menampilkan karakter terbanyak dalam dua detik? Saya pikir pertanyaan ini akan lebih baik sebagai kontes popularitas untuk mendorong orang menemukan bug bahasa yang menarik dan halus.
Cephalopod

Jawaban:


39

Jawaban revisi untuk sistem penilaian "lebih baik"

C89 / C99, Nilai: 0

Program saya panjangnya 52 karakter dan menggunakan mekanisme yang sama seperti pada jawaban asli saya untuk mencapai hasil yang berbeda. Ini berfungsi karena C89 tidak memperlakukan //sebagai komentar:

i=32;main(){putchar(i+++0//**/
+52)&&i<84&&main();}

Hasil:

$ ./diff2c89
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRS
$ ./diff2c99
TUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂Çüéâäàåç
$ ./diff2c99 | wc
      0       1      52
$ ./diff2c89 | wc
      0       1      52
$ wc diff2.c
      1       2      52 diff2.c

Jawaban lama:

C89 / C99, Nilai: -Infinity?

Saya tidak sepenuhnya yakin apakah program ini tidak melanggar aturan, tetapi tidak apa-apa. Program ini mengeksploitasi fakta bahwa di C89 //bukan komentar yang valid tetapi /* ... */.

Menggunakan trik komentar, fungsi lain dijalankan. Dalam C89 fungsi hanya mencetak "trolololol..."sampai tumpukan meluap (jadi mungkin selesai dalam 2 detik).

f1(){printf("ol");f1();}
f2(){printf("oll");}
main(){
    printf("tr");
    void (*f[])() = {f1,f2};
    f[0 //* trollololol */
      +1]();
}

C99

$ ./diffc99
troll

C89

$ ./diffc89
trolololololololololololololololololololololololololololololololololololololololololo
lolololololololololololololololololololololololololololololololololololololololololol
ololololololololololololololololololololololololol ....

1
Saya juga tidak yakin apakah itu melanggar aturan, tetapi saya menyukainya :)
Tal

9
Menurut "aturan yang lebih baik", Scores closest to zero winjadi ini sebenarnya sangat jauh dari nol.
user80551

1
Pengindeksan array fungsi pointer oleh divisi atau tambahan tergantung pada definisi komentar standar C ... indah.
Desty

16

Python - 10 poin lebih sedikit dari jawaban terbaik berikutnya

print(range(100))

Dalam Python 2, ini akan mencetak seluruh daftar bilangan bulat dari 0 hingga 99.

Dalam Python 3, rangeadalah generator dan hanya akan mencetak "range (0,100)".

Melihat saya tidak pernah mengalami batasan ukuran angka di Python, saya bisa mengganti angka 100 dengan angka yang jauh lebih besar (2 ** 1000, misalnya) dan berakhir dengan perbedaan yang hampir tak terbatas dalam output.

Diedit untuk mencerminkan fakta bahwa, walaupun saya bisa mendapatkan skor yang sangat rendah untuk tujuan praktis apa pun, saya tidak dapat mencapai tak terbatas yang sebenarnya dengan program yang berakhir di bawah 2 detik

Untuk sistem penilaian tie-breaker yang diperbarui, saya akan mengirimkan:

print(range(4))

Keluaran:

Python 2: [0, 1, 2, 3]

Python 3: range(0, 4)

Cetakan pertama memiliki 5 karakter unik ( [123]), cetakan kedua memiliki 8 karakter unik ( range(4)), perbedaan panjang output adalah 1, kode memiliki 15 karakter, output terpendek adalah 11 karakter ... aturan ini cukup membingungkan tetapi Saya pikir ini membawa saya ke skor akhir 15 + 1-min (11,5 + 8) = 5.


Namun, "program Anda harus diakhiri", bahkan pada mesin yang sangat cepat, jumlah "jauh lebih besar" (terbatas) Anda masih jauh dari dekat - jadi saya membantah skor Anda (memberi atau menerima;))
James Webster

@ JamesWebster Terima kasih telah memberikan kesalahan teknis yang mengerikan ini kepada saya, saya telah mengedit jawaban saya;)
Tal

Jawaban serupa lainnya pasti akan datang. Saya kira penilaian untuk jawaban-jawaban ini harus dihitung pada seberapa cepat mereka sampai tak terbatas.
Vereos

@Vereos Saya harap, jika jawaban lain seperti ini muncul, pertanyaan akan diedit dengan detail penilaian tambahan.
Tal

1
@Tal Saya pikir semua orang yang membaca aturan penilaian akan membuat solusi yang dapat menghasilkan skor negatif, hanya dibatasi oleh bahasa atau perangkat keras, sebelum membaca jawaban atas masalah;) Penilaian hanya rusak oleh desain ...
foobar

13

Python - 0 poin

Tidak tahu bagaimana ini bekerja: P Baru saja menemukannya ketika mencoba kode acak.

int

Pada Python 3, ini <class 'int'>dan pada Python 2, itu <type 'int'>(menggunakan konsol interatif)
"Lebih baik" Nilai: 3 (panjang) + 1 (char diff.) - 4 (karakter unik)

Python 1 - 7 poin lebih tua

print()

Terima kasih banyak kepada @grc untuk versi ini dan membantu saya mengurangi empat poin!

Dalam Python 2, pernyataan ini diartikan sebagai print ()yang mencetak tuple kosong ().
Dalam Python 3, printini adalah fungsi dan menghasilkan tidak ada yang dicetak.
Skor "Lebih baik": 7 (panjang) + 2 (beda karakter) - 2 (karakter unik)

Python 2 - 13 poin lebih tua:

print(1,2)

Skor "Lebih baik": 12 (panjang) + 2 (beda karakter o / p) - 1 (karakter unik o / p)

Saya tahu ini tidak akan menang tetapi masih memberikan jawaban, karena ini adalah percobaan Python pertama saya :)


Saya pikir ini bisa disingkat print().
grc

@ grc Terima kasih banyak atas sarannya! Melihat kembali ke kompiler saya, saya melihat bahwa saya telah mencobanya, tetapi sangat tersesat dalam dokumen, sehingga saya menghapusnya untuk mencoba dict.itertools(): P
Gaurang Tandon

12

C #

Saya juga mengubah algoritma inferensi tipe metode generik antara C # 2, 3 dan 4. Misalnya:

using System;
class C
{
  static int M<T>(T x, T y) { return 1; }
  static int M(object x, object y) { return 2; }
  static void Main() 
  {
    Console.WriteLine(M(1, new int?()));
  }
}

Dalam metode C # 2, inferensi tipe mengatakan bahwa T tidak dapat keduanya intdan int?, dan juga menghasilkan 2. Dalam metode C # 3 jenis inferensi mengatakan "kompromi terbaik antara intdan int?adalah int?" dan memilih M<int?>dan menghasilkan 1.


9
> Aku juga berubah. Apa maksudmu kamu mengubah ... oh. OH.
Bob

9

Ruby, 4 karakter + 0 perbedaan panjang char - 3 perbedaan char unik = skor 1

p ?d

Pada Ruby 1.9, itu akan dicetak "d". Pada 1,8, itu dicetak 100.

Penjelasan: ?dada "d"di 1.9 dan 100(kode ASCII untuk d) di 1.8. p xsetara dengan puts x.inspect. *adalah pengulangan string dan multiplikasi.


Versi "Dioptimalkan" untuk penilaian lama:

Ruby, 8 karakter - 999999989 perbedaan karakter = skor -999999981

p ?!*1e9

Cetakan 33000000000.0untuk 1,8 dan "!!!!!!... !!!"untuk 1,9. ( ?!ada 33di 1.8 dan "!"di 1.9, dan *keduanya merupakan pengulangan string dan multiplikasi.)

Sungguh, Anda bisa pergi sejauh yang Anda inginkan dengan perkalian, itu hanya tergantung pada seberapa cepat komputer Anda.


Bisakah Anda menjelaskan apa sebenarnya yang terjadi di baris kedua itu?
Tal

@Tal Oke, diedit
Doorknob

8

Bash - -∞ (hingga batas praktis)

Secara efektif, betapapun banyak memori yang Anda miliki. Misalnya dengan sekitar 10GB:

echo {0..999999999}

Bash 2: tidak mendukung rentang dalam ekspansi brace, jadi cetaklah {0..999999999}.

Bash 3:


Bahasa apa pun - -∞ (hingga batas praktis)

Anda akan memiliki ini dalam hampir semua bahasa, bahkan jika itu sedikit lebih rumit. Segera setelah Anda dapat membuat dua nilai yang berbeda, Anda dapat menulis kode yang menghasilkan keluaran yang berbeda secara sewenang-wenang. Metode penilaian yang lebih baik akan mengabaikan perbedaan dalam output.

version = … # some arbitrarily weird stuff
if version = 2:
    while not timed_out():
        print "version2"

@foobar The dalam versi "bahasa apa pun" singkatan dari trik apa pun yang Anda gunakan untuk membuat program Anda bergantung pada pencapaian dalam spesifikasi bahasa. Ini adalah pendeteksian versi, apakah Anda melakukannya if $version >= 3atau tidak if isinstance(range(0),list).
Gilles 'SO- berhenti bersikap jahat'

4

C #

Kode berikut akan menghasilkan output yang berbeda untuk C # 5.0 dan versi sebelumnya dari C #

using System;
using System.Collections.Generic;

namespace TestConsoleAppClosure
{
    class Program
    {
        static void Main(string[] args)
        {
            var actions = new List<Action>();
            List<int> list = new List<int> { 10, 20, 30, 40 };
            foreach (var item in list)
            {
                  actions.Add(() => Console.WriteLine(item));
            }
            foreach (var act in actions) act();
        }
    }
}

Output: C # 5.0

10
20
30
40

Output: C # 4.0

40
40
40
40

Alasannya dijelaskan dalam posting blog oleh Eric Lippert

Menutup variabel loop dianggap berbahaya


4

Python, -14 Poin (3 - 17 perbedaan panjang char = -14)

2/3

Output Python 2: 0

Output Python 3: 0.6666666666666666

Versi skor yang lebih baik, 5 poin (3 + 2 perbedaan panjang karakter = 5)

3/2

Output Python 2: 1

Output Python 3: 1.5


4

C #

Saya menambahkan kovarians dan contravariance ke C # 4, jadi programnya berupa:

using System;
using System.Collections.Generic;
class C
{
  static void Main() 
  {
    Console.WriteLine((new List<string>()) is IEnumerable<object>);
  }
}

Akan menghasilkan falsedalam C # 2 dan 3 dan truedalam C # 4.

Namun, orang mungkin berpendapat bahwa ini tidak masuk hitungan karena perpustakaan yang memuat definisi IEnumerable<T>juga harus diubah.


3

C ++ 98/11 - "Better" Scoring (115 karakter - 115 perbedaan karakter yang unik dalam output = skor 0)

Versi yang sedikit diedit untuk mematuhi aturan pemberian skor yang baru

Golf:

#include<cstdio>
#define u8 "\x0B"
int main(){int i=116;char c[i];c[--i]=0;while(i-->0)c[i]=u8"\x7E"[0]+i;puts(c);}

Versi tidak disatukan:

#include <cstdio>
#define u8 "\x0B"
int main() {
    int i = 116;
    char c[i];
    c[--i] = 0;

    while(i-- > 0)
        c[i] = u8"\x7E"[0] + i;

    puts(c);
}

Solusi baru tidak berbeda jauh dengan yang lama. Dalam solusi baru output di C ++ 11 dan C ++ 98 adalah dengan 116 karakter yang sama-sama panjang, tetapi satu-satunya karakter yang mereka miliki adalah karakter baris baru yang ditambahkan oleh fungsi put.

Untuk C ++ 98 u8in u8"\x7E"[0]masih akan diganti, tetapi sekarang dengan "\x0B". Jadi nilai yang dihasilkan setelah preprocessing akan "\x0B""\x7E"[0]. Dua string akan digabungkan ke "\x0B\x7E"dan operator subskrip akan mengakses elemen pertama, dalam hal ini karakter dengan nilai 11 dalam pengkodean karakter. Selain itu nilai iakan ditambahkan, yang awalnya adalah 114. Jadi karakter dengan nilai 125 akan ditulis ke array yang dihasilkan. Ketika inol, semua nilai dari 125 ke 11 akan ditulis ke array danputs akan mencetak semua karakter dengan nilai dari 11 hingga 125, ditambah garis yang baru.

Dalam C ++ 11 u8"\x7E"[0]akan ditafsirkan sebagai string UTF-8 yang terdiri dari karakter tunggal dengan nilai heksadesimal 7E. Operator subskrip sekarang akan mengakses karakter ini dan nilai iditambahkan ke dalamnya, menghasilkan nilai desimal 241 selama iterasi pertama. Sementara ipergi ke nol, semua nilai ke 126 akan ditulis ke array danputs akan mencetak karakter dengan nilai dari 126 hingga 241, ditambah baris baru yang tertinggal.

Bergantung pada set karakter yang digunakan, ini akan menghasilkan hasil yang berbeda, karena sebagian besar set karakter hanya memiliki 128 karakter pertama yang sama.

Untuk ISO-8859-2 outputnya adalah sebagai berikut:

C ++ 98: Output untuk C ++ 98

C ++ 11: Output untuk C ++ 11

C ++ (106 karakter - 107 perbedaan dalam output = skor -1) (ATURAN TUA)

Golf:

#include<cstdio>
#define u8 "f"
int main(){int i=108;char c[i];c[--i]=0;while(i-->0)c[i]=u8""[0];puts(c);}

Versi tidak disatukan:

#include <cstdio>
#define u8 "f"

int main() {
    int i = 108;
    char c[i];
    c[--i] = 0;

    while(i-- > 0)
            c[i] = u8""[0];

    puts(c);
}

Disusun dengan g++ -std=c++98 main.cppdang++ -std=c++11 main.cpp .

Sebenarnya Anda bisa menggantinya 108 dengan angka positif dalam rentang integer untuk mencapai skor negatif. Asalkan lebih besar dari 108;)

Dalam C ++ 98 #define u8 "f"akan menyebabkan preprocessor untuk menggantikan u8""[0]dengan "f"""[0]. Ini akan menghasilkan "f"[0], yang akhirnya menjadi karakter tunggal 'f', yang ditulis ke array.

puts(c) akan mencetak array yang dihasilkan, terdiri dari i-1 'f' .

Dalam C ++ 11 u8""[0] akan menyebabkan string kosong ditafsirkan sebagai string UTF-8, sehingga tidak ada penggabungan string. Karena ini adalah C-string, operator subskrip akan mengakses terminasi null-byte dan menulisnya ke array.

Pada akhirnya puts(c)akan mencetak array yang dihasilkan, yang hanya terdiri dari null-byte. Tetapi ketika putsberhenti membaca input segera setelah menemukan null-byte, itu hanya akan mencetak baris baru dan tidak lebih.


Saya mendapatkan skor Anda menjadi 1. Baik c ++ 89 dan c ++ 11 menghasilkan ?(setidaknya pada sistem (Mac) saya)
James Webster

Padahal saya hanya menghitung 115 karakter dalam solusinya.
James Webster

@James Webster benar, wc -c berbohong kepada saya;) Saya akan menambahkan baris baru ke akhir solusi saya;) ... Atau hanya menyesuaikannya.
foobar

@James Webster Saya kira Anda menggunakan pengkodean UTF-8 di terminal Anda. Karena bit paling signifikan dalam byte dicadangkan di UTF-8, bit tidak dapat memetakan karakter yang dihasilkan oleh program dalam kisaran 128 hingga 232. Jadi, Anda akan melihat hingga 104 '?' atau kurang dengan sampah biner di antaranya. Dengan pengkodean WINDOWS-1256 sebagai contoh, terminal Anda akan menampilkan ini untuk versi C ++ 11: tuvwxyz {|} ~ € پ ‚ƒ„………… ‡ ˆ ŒŒ ٹ '' '“ > œ ں, ¢ £ ¤ ¥ |§¨ © ھ «¬®¯ ° ± ²³'μ¶ · ¹;» ¼½¾ ہءآأؤإئابةتثجحخدذرزسشصض × طظعغفقك à ل â منهو?
foobar

Untuk versi C ++ 98, terminal Anda mungkin menampilkan '?' untuk nilai di bawah 32 karena itu adalah karakter kontrol. Terminal saya misalnya menggantikan sebagian besar dari mereka dengan kotak dan nilai heksadesimalnya dicetak ke dalamnya. Kecuali untuk karakter baris dan tab baru sebagai contoh. Tetapi sekarang saya menyebutkannya sendiri. versi C ++ 98 berisi baris baru dua kali, tapi itu mudah diperbaiki;)
foobar

2

CSS2 vs CSS3 48 poin

<i style='font-feature-settings:"smcp" on;'>abcdefghijklmnopqrstuvwxyz</i>

Dijadikan sebagai ABCDEFGHIJKLMNOPQRSTUVWXYZ(huruf kecil) pada browser CSS3

Dijadikan sebagai abcdefghijklmnopqrstuvwxyzpada browser non-CSS3

74 karakter - 26 perbedaan karakter unik = 48


Tetapi ini adalah kesalahan dalam CSS2. Saya pikir kesalahan tidak masuk hitungan.
Tn. Lister

Pengaturan font-fitur @MrLister AFAIK telah diperkenalkan di CSS3 dev.w3.org/csswg/css-fonts/#propdef-font-feature-settings
Toni Toni Chopper

1

Perl, 24 karakter - (9 * (10 ^ 9)) - 1 perbedaan char = skor - ((9 * (10 ^ 9)) - 1) +24

print$]>=5?"a":"a"x9e9;

Mencetak 9e9 kali auntuk semua versi di bawah 5, cetakan auntuk semua versi di atas 5. Anda bisa membuat skor menjadi sangat rendah dengan hanya menambahkan lebih banyak as ke output kedua.


2
Dalam pertanyaan: "Niatnya adalah bahwa perubahan harus menjadi konsekuensi dari perubahan dalam spesifikasi bahasa daripada spesifikasi VM atau metadata lingkungan"
Doorknob

Saya tidak menggunakan spesifikasi VM atau metadata lingkungan. Hanya versi yang terinstal.
Vince

1

Befunge, 36 - 378 = -342; 164 - 2576 = -2412

"v
"<v
" <v
"  <v
"   <v
 <v:,<
 ^_@

Di Befunge 93, ini akan menghasilkan 3 spasi, diikuti oleh <v, diikuti oleh 76 spasi, diikuti oleh <v, kemudian 76 spasi, kemudian <v, kemudian 76 spasi, kemudian <vdiikuti oleh 77 spasi, lalu vdiikuti oleh 78 spasi. Panjang: 3 + 2 + 76 + 2 + 76 + 2 + 76 + 2 + 77 + 1 + 78 = 395Ini dapat diperpanjang secara sepele dengan menambahkan garis ekstra mirip dengan 5 baris pertama.

Di Befunge 98, ini akan menampilkan <v <v <v <v v.

Perbedaan panjang: 395 - 17 = 378. Jadi skornya adalah (berdasarkan aturan lama):-342

Catatan: Saya bisa mendapatkan perbedaan yang lebih besar jika saya menggunakannya .sebagai ganti ,; perbedaannya pasti-684


Perubahan aturan:

Ini sedikit lebih rumit.

"  "-v>"Befunge 93 very long strings"v>"F"0g" "1-`!#v_   "F"0g1-"F"0pvz
     _^p0"F"-1g0"F"_v#    `-1" "g0"F"<^"j++a81zzzzzz]zzzzzzzzzzzzzzz"<
             _@#`0:,<

Output Befunge 93:

sgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeB

Output Befunge 98:

j++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzz

Panjang: 2576. Tidak ada karakter di antara string yang sama, jadi jika saya memahami tantangan dengan benar, skor saya adalah 164 - 2576 = -2412(ya saya seharusnya membidik 0, tapi ini lebih menyenangkan). Jika saya perlu membuatnya sehingga setiap karakter dalam setiap string unik dan berbeda satu sama lain, saya dapat melakukannya, tolong beri tahu saya.


1

Powershell, penilaian "Lebih baik", -163 (15 - 178 char diff = -163)

$PSVersionTable

Powershell V2

Name                           Value                                                                   
----                           -----                                                                   
CLRVersion                     2.0.50727.5477                                                          
BuildVersion                   6.1.7601.17514                                                          
PSVersion                      2.0                                                                     
WSManStackVersion              2.0                                                                     
PSCompatibleVersions           {1.0, 2.0}                                                              
SerializationVersion           1.1.0.1                                                                 
PSRemotingProtocolVersion      2.1                                                                     

Powershell V3

Name                           Value                                                                   
----                           -----                                                                   
WSManStackVersion              3.0                                                                     
PSCompatibleVersions           {1.0, 2.0, 3.0}                                                         
SerializationVersion           1.1.0.1                                                                 
BuildVersion                   6.2.9200.16398                                                          
PSVersion                      3.0                                                                     
CLRVersion                     4.0.30319.1022                                                          
PSRemotingProtocolVersion      2.2 

1

PHP, Nilai: 0 (kasus terbaik)

srand(2);echo rand();

Wow, ini akan menyenangkan untuk dijelaskan.

Menurut situs web ini , srand()fungsi ini tampaknya rusak dari PHP 5.1.5 ke PHP 5.3.14 . Oleh karena itu, kita akan tetap mempertimbangkan PHP 4.4.9 dan satu versi acak dari PHP 5 yang termasuk dalam interval versi yang ditentukan di atas.

Output PHP 4.4.9: 1505335290

Saya tidak berpikir ini melanggar aturan; Karena ini tampaknya bug, hasilnya harus sama, tetapi sebenarnya tidak. Versi PHP kami yang lain hanya akan melewatkan srand()fungsi dan menghasilkan angka acak.


1

Jawa (sekitar -2.000.000.000)

Versi Java kadang-kadang disebut 1.x, tapi saya pikir masih dalam aturan.

Cara mudah adalah memeriksa apakah ada kelas yang diperkenalkan dalam versi tertentu.

try {
    Class.forName("java.lang.AutoCloseable");
    // Java 7 or later
    char[] text = new char[Integer.MAX_VALUE];
    Arrays.fill(text, 'a');
    System.out.println(new String(text));
} catch (Exception e) {
    // Java 6 or earlier
    System.out.println("-");
}

(Tergantung sedikit pada terminal Anda apakah mungkin untuk menghasilkan 2 miliar karakter dalam dua detik / Untuk penilaian baru, ganti Integer.MAX_VALUEdengan jumlah byte program untuk mencapai skor nol sempurna.)

Kode ini tergantung pada versi VM / JDK yang digunakan (apakah itu diperhitungkan?)

import java.lang.reflect.Field;
import java.util.Arrays;

{
    Field fValue = null;
    for (Field f: String.class.getDeclaredFields()) {
            if (f.getName().equals("value")) {
                    fValue = f;
            }
    }
    char[] text = new char[10];
    Arrays.fill(text, 'a');
    String s1 = new String(text);
    String s2 = s1.substring(1);
    fValue.setAccessible(true);
    text = (char[]) fValue.get(s2);
    Arrays.fill(text, 'z');
    System.out.println(s1);
}

Mencetak zs untuk Java 6 dan JDK sebelumnya dan as untuk versi terbaru.


1

JavaScript (ES3 vs ES5) - 9 poin

panjang 10 + perbedaan panjang 0 - perbedaan keluaran1

[].map?1:0

Output 1untuk browser modern yang mendukung Array.prototype.map. Output 0pada browser lama. Saya menguji ini dengan IE8.

Dengan aturan lama: 0 poin

panjang 26 - perbedaan panjang26

Array([].map?27:0).join(0)

Output 00000000000000000000000000pada browser modern. Dan string kosong pada yang lama.


IE8 benar-benar mendukung ES4 ???
Bergi

Saya agak terkejut bagaimana mereka menerapkan standar yang tidak ada ...
Bergi

Aduh! Diperbaiki :)
nderscore

1

Python - 0

a='a=%r\ntry:print a%%a\nexcept:pass'
try:print a%a
except:pass

Python 2 mencetak quine, sedangkan Python 3 tidak mencetak apa pun.

EDIT: Diperbarui, diperbaiki.


Bisakah komputer Anda mencetak ~ 9 miliar digit dalam 2 detik?
James Webster

@ JamesWebster Ini sebenarnya adalah nilai balik dari suatu fungsi - dengan demikian, hanya perlu ada dalam memori untuk menyelesaikan program. Ini membutuhkan / banyak / RAM, tetapi akan selesai dalam 2 detik pada komputer yang ditentukan dengan baik.
cjfaure

0

APL (5 - (1988894 - 1) = -1988888)

Dalam APL gaya lama (seperti Dyalog jika ⎕ML=0*), berarti campuran , yang, pada vektor 1-dimensi tidak menghasilkan apa-apa. Dalam APL2-style APLs, seperti GNU APL, (atau Dyalog if ⎕ML=3), berarti pertama , yang mengambil item pertama dari suatu vektor.

Dengan demikian, 5byte berikut (rangkaian APL tidak cocok dalam satu byte),

↑⍳3e5

akan menampilkan 1988894byte (daftar angka yang dipisahkan spasi dari 1 hingga 3e5) dalam dialek APL gaya lama,

dan 1byte (hanya nomor pertama dalam daftar tersebut, yang 1panjangnya 1), dalam dialek APL-style APL2.

Catatan:

  • ⎕MLberarti tingkat migrasi . Di Dyalog APL, semakin tinggi Anda atur ⎕ML, semakin banyak fitur gaya APL2 diaktifkan. Standarnya adalah 0. (Dan itu adalah variabel global! Menyenangkan!)
  • 3e5adalah nilai tertinggi 3-karakter yang akan diterima oleh Dyalog APL . 4e5memberi saya LIMIT ERROR. Pembatasan ini mungkin tergantung pada juru bahasa. (GNU APL tidak mengalami masalah dengan nilai yang lebih tinggi.)

0

Bash 7 (panjang program 14 byte + 0 perbedaan panjang output - 7 perbedaan karakter unik dalam output)

Terkait dengan jawaban @Gilles, tetapi fitur ekspansi yang berbeda dan versi yang berbeda. Mencetak menurut pertanyaan yang diedit:

echo {1..9..2}

Output untuk bash 3.x:

{1..9..2}

Output untuk bash 4.x:

1 3 5 7 9

0

PHP: −134217684 (43 - 134217727)

echo str_pad("",ip2long("")&0x7ffffff,"a");

Pemakaian:

time php -r 'echo str_pad("",ip2long("")&0x7ffffff,"a");' > /tmp/test
1.61user 0.17system 0:01.79elapsed 99%CPU (0avgtext+0avgdata 142272maxresident)k
0inputs+0outputs (0major+35922minor)pagefaults 0swaps

Di PHP5 + ini tidak akan mencetak apa pun karena ip2long dengan argumen yang tidak valid berubah menjadi false yang menghasilkan nol. Dalam PHP4 ituip2long("") mengembalikan -1 dan kami mengisi string kosong dengan 128MB og a.

Topeng dipasang sehingga kembali jauh sebelum 2 detik di mesin saya. Jika Anda tidak dapat membuatnya dalam 2s, beli perangkat keras yang lebih baik!

Dengan aturan baru: 0 (40 - 40. Anda tidak bisa mendekati nol.)

echo str_pad("",40,chr(97+ip2long("")));

Output:

In PHP4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
In PHP5: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

Dengan aturan penilaian baru skor Anda adalah 39. Kedua output sama-sama panjang, jadi tidak ada penalti untuk itu. Tetapi hanya ada satu perbedaan karakter yang unik. a tidak sama dengan b, jadi Anda diizinkan untuk mengurangi -1 dari skor Anda.
foobar

0

C89 / C99 mengeksploitasi komentar, 45 karakter, 0 skor

main(a){while(++a<47)putchar(79-a//**/~0
);}

keluaran c89

QRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} - 45 char.

keluaran c99

MLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"! - 45 char.


Ini sebenarnya menggunakan logika yang persis sama dengan jawaban C lainnya .
user12205

Maksud saya, mengingat fakta bahwa sudah ada jawaban dari pertanyaan ini menggunakan bahasa yang persis sama dan logika yang sama persis, jawaban ini tidak terlalu menarik.
user12205

Entri ini lebih unggul daripada 'jawaban C lain' awal pada berbagai tingkatan. Ini lebih pendek, skor sempurna, selesai dalam waktu kurang dari dua detik, dan tidak crash atau dibatalkan. Sejauh versi yang diperbarui ... dalam keadilan Anda mungkin harus meninggalkan komentar yang menghubungkan kode ini.
Johnny Cage

Jawaban Anda lebih baik daripada jawaban "awal" C lainnya karena jawaban C lainnya dikirimkan sebelum aturan berubah.
user12205

Mungkin, tetapi versi yang diperbarui merobek implementasi saya. Tidak hanya menggunakan offset yang sama dan beralih dari printfke putchar; paling memberatkan adalah bahwa untuk r5 saya salah membaca aturan dan secara tidak sengaja menggabungkan skor baru dan lama. Output untuk [r5, r6] adalah kesalahan. r3 di jawaban C lainnya mengandung kesalahan yang sama persis. Jika Anda melihat cap waktu, Anda akan melihat bahwa r5 yang diposting di sini ketika jawaban lain diperbarui. Bukan masalah, karena ini golf kode , dan entri ini memuaskan tantangan dalam karakter yang lebih sedikit, titik.
Johnny Cage

0

C ++ 98 / C ++ 11

#include <iostream>

int main()
{
  for (long i = 0; i < __cplusplus; ++i)
     std::cout << "x";
}

Untuk kompiler C ++ 98 yang memenuhi standar, ini menghasilkan 199711 kali huruf 'x', sedangkan untuk kompiler C ++ 11 yang memenuhi standar, ini menghasilkan 201103 kali dari huruf 'x'. Perbedaan panjang dari output adalah 1392 karakter. Ini berarti bahwa benar-benar bermain golf kode sumber tidak bermanfaat, karena efek yang jauh lebih besar dapat dicapai hanya "x"dengan mengganti dengan string yang lebih panjang, atau dengan mengalikannya __cplusplusdengan beberapa nomor.


0

SmileBASIC 3 / SmileBASIC 2, Nilai: -5 (skor asli)

?1E9

Dalam versi SB modern, ini mencetak 1000000000seperti yang diharapkan, tetapi dalam versi 2 dan sebelumnya dicetak 10karena bug.


0

TI-Basic 83 Plus vs 84 Plus, skor 5-1 = 4

length("setTime(

Keluaran 2pada TI-83 Plus, di mana program yang sama diuraikan sebagai sesuatu yang terlihat length("?►DMSkarena setTime(perintah belum diperkenalkan. Jadi string berisi dua token 1-byte, panjangnya 2.

Output 1pada TI-84 Plus, karena string yang berisi token 2-byte tunggal memiliki panjang 1.


0

Go 1.9-> 1.10. Nilai = 1 - 1 = 0

Dari 1,10 catatan :

Tidak ada lagi batas pada pengaturan GOMAXPROCS. (In Go 1.9 batasnya adalah 1024.)

package main 
import (r"runtime")
var g=r.GOMAXPROCS
func main() {g(10340)
print(g(0))}

1.8: 256

1.9: 1024

1.10: 10340

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.