Çağlar Boyunca Geçerli


24

SO bu sorudan ilham aldı göreviniz, seçtiğiniz dilin (en azından) iki farklı sürümünde geçerli olan ve farklı çıktılar üreten bir program üretmektir.

kurallar

  • Birden fazla ana sürüme sahip olan herhangi bir dil kullanılabilir.
    • Bu zorluğun amaçları için, sürüm numarasındaki ilk sayının değiştiği "büyük sürüm" olduğunu söyleyebilirim.
      • PHP 4 ve PHP 5 farklı, PHP 5.3 ve PHP 5.4 farklı değil.
    • Bununla birlikte, tüm diller için versiyonlama şemasını bilmediğimden, durumunuzu yeterince iyi savunabiliyorsanız, topluluğun "ana versiyonu" belirlemede adil olup olmadığınızı belirleyeceğinden eminim.
  • Kodun aynı bayraklarla derlenmesi ve çalıştırılması ve her seferinde giriş yapılması gerekir.
    • Bu uygunsa, dilin sürümünü değiştirmek hariç
  • Hatalar çıktı olarak sayılmaz ve hata üreten cevaplar diskalifiye edilir (hata çıktıları sadece göz ardı edilmek yerine)
  • Programın çalışması için gerekenlerin dışında bir girdi almamalıdır.
  • Verilen her sürüm için çıktı her zaman aynı olmalıdır
  • Amaç, değişimin, VM belirtimi veya çevresel meta veriler yerine, dil belirtimindeki bir değişimin sonucu olması gerektiğidir.

puanlama

  • türü uzunluğu için puanlama, böylece +1her char / byte
  • -1uzunluktaki her karakter farkı içinÇıktı .
    • örn. Sürüm 1 çıkışları abcde(5 karakter), Sürüm 2 çıkışları 123abc(6 karakter) =-1

Diğer kurallar

  • Standart istisnalar geçerlidir - harici programlar, web istekleri vb.
  • Programınız sonlandırılmalıdır (2 saniye içinde)
  • En düşük puan kazanır.

"Daha İyi" Puanlama

Orijinal cevaplarınızı saklayın, adalet adına, kazananı orijinal kurallara göre işaretlerim.

Orijinal puanlamam temelde kırıldığından, neden aşağıdaki puanlama sistemiyle yeniden puanlama / tekrar denemeyin:

  • türü uzunluğu için puanlama, böylece +1her char / byte
  • +1çıkış uzunluğu her karakter farkı için
    • abcdeve 123456->+1
  • -1çıktıdaki her benzersiz karakter farkı için (en kısa çıktının uzunluğu ile sınırlandırılmış)
    • abcdeve 123456->-5
    • 12345ve 123456->-1
    • 12345ve 123455->0
  • Sıfır kazanmaya en yakın puanlar
  • İkinci bir beraberlik molası durumunda, basit puanı kazanır.

Not: Ruby'de ilk sayı çağdır , bir sürüm numarası değil, Ruby tarihinin önemli olaylarını belirtir (ilk sürüm 0-1, 1 -> Ruby Ruby'nin 20. doğum günüdür). En büyük sayı ikinci sayıdır. Yani, Ruby 1.8-> 1.9 büyük bir sürümü geçiyor olacaktı.
Jörg W Mittag

1
Yeni puanlamanın orijinalden çok farklı olduğunu düşünüyorum, pratikte yeni bir soru
Tal

PHP örneğinin tartışmalı olduğunu söyleyebilirim, 5.4, 5.3'ü (özellikler, [] diziler, dizi düzenleme dışı bırakma) kırılacak birkaç temel özelliğe sahiptir. PHP6 olacaktı, ancak daha sonra 6'yı varsayılan olarak unicode dizeleri olarak daha radikal bir şeye kaydetmeye karar verdi
15

2
Eşsiz karakter farkı nedir? Çıktım zzzzve aaaabu bana veriyor -4mu? Bana öyle geliyor.
Justin,

1
Öyleyse, programın hangi sürümde çalıştığını tespit edebileceğini varsayarsak, kazanan iki saniyede en fazla karakteri kim çıkarıyor? Bence bu soru, insanları ilginç ve ince dil hataları bulmaya teşvik etmek için popülerlik yarışması olarak daha iyi olur.
Cephalopod

Yanıtlar:


39

"Daha iyi" puanlama sistemi için gözden geçirilmiş cevap

C89 / C99, Puan: 0

Programım 52 karakter uzunluğunda ve farklı çıktılar elde etmek için orijinal cevabımdakiyle aynı mekanizmayı kullanıyor. Bu işe yarar, çünkü C89 //bir yorum olarak değerlendirilmez:

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

Sonuçlar:

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

Eski cevap:

C89 / C99, Puan: - Sonsuzluk?

Bu programın kuralları ihlal etmediğinden emin değilim, ama boşver. Bu program C89’da //geçerli bir yorum değil /* ... */, olduğu gerçeğinden faydalanmaktadır .

Yorum numarası kullanılarak başka bir işlev yürütülür. C89'da işlev yalnızca "trolololol..."yığın taşana kadar yazdırır (böylece 2 saniye içinde bitebilir).

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
Kurallara aykırı olup olmadığından emin değilim, ama hoşuma gidiyor :)
Tal

9
"Daha iyi kurallara" göre, Scores closest to zero winbu aslında sıfırdan çok uzak.
user80551

1
Bir fonksiyon işaretleyicisini C standardının yorum tanımına bağlı olarak ya bölünerek ya da ekleyerek indeksleme ... güzel.
destY

16

Python - Bir sonraki en iyi cevaptan 10 puan daha az

print(range(100))

Python 2'de bu, 0 - 99 arasındaki tamsayıların listesini yazdırır.

Python 3'te range bir jeneratör ve bu nedenle yalnızca "aralık (0,100)" yazacaktır.

Python'da sayılarda hiçbir zaman bir boyut sınırına rastlamadığımı görünce, bu 100'ü çok daha büyük bir sayıyla (örneğin, 2 ** 1000) değiştirebilir ve çıktıda neredeyse sonsuz bir farkla sonuçlanabilir.

Herhangi bir pratik amaç için sınırsız derecede düşük bir puan alabilirken, 2 saniyenin altında sona eren bir programla gerçek sonsuzluğa erişemeyeceğimi yansıtacak şekilde düzenlenmiştir.

Güncellenen kravat kırıcı puanlama sistemi için şunları sunarım:

print(range(4))

Çıktı:

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

Python 3: range(0, 4)

İlk baskının 5 benzersiz karakteri var ( [123]), ikinci baskının 8 benzersiz karakteri var ( range(4)), çıktının uzunluğu arasındaki fark 1, kodun 15 karakteri, en kısa çıktının 11 karakteri var ... bu kurallar oldukça kafa karıştırıcı ama Sanırım bu beni 15 + 1-dk (11,5 + 8) = 5'lik final skoruna getiriyor.


Bununla birlikte, "programınız sonlandırılmalıdır", çok (son derece) hızlı bir makinede bile, "çok daha büyük" (sonlu) numaranız hala hiçbir yerde değildir - bu nedenle puanınıza itiraz ediyorum (ver ya da al;))
James Webster

@JamesWebster Bu korkunç teknik hatayı dikkatime sunduğum için teşekkür ederim, cevabımı buna göre düzenledim;)
Tal

Diğer benzer cevaplar kesinlikle gelecek. Sanırım bu cevaplar için yapılan puanlamanın sonsuzluğa ne kadar çabuk gittiklerine göre hesaplanması gerekiyor.
Vereos

@Vereos Eğer bu türden başka cevaplar ortaya çıkarsa, sorunun ek puanlama detayları ile düzenleneceğini umuyorum.
Tal

1
Bence @Tal sadece sorunun herhangi bir cevap okumak zorunda önce, dil veya donanım tarafından sınırlı negatif puanları üretebilir bir çözüm oluşturacak puanlama kuralları okuyan herkes; puanlama sadece tasarımdan bozuldu) ...
foobar

13

Python - 0 puan

Bunun nasıl çalıştığı hakkında hiçbir fikrim yok: P Rasgele kod denerken sadece üzerine tökezledi.

int

Python 3'te, <class 'int'>ve Python 2'de, <type 'int'>(etkileşimli konsolu kullanarak)
"Daha İyi" Puanı: 3 (uzunluk) + 1 (karakter farkı) - 4 (benzersiz karakter sayısı)

Eski Python 1 - 7 puan

print()

@Grc'ye teşekkürlerBu sürüm ve dört puan çıkarmama yardım ediyor!

Python 2'de bu ifade print ()boş dize basan yorumlanır ().
Python 3'te, bu printbir fonksiyondur ve hiçbir şeyin basılmamasını sağlar.
"Daha iyi" Skoru: 7 (uzunluk) + 2 (karakter farkı) - 2 (benzersiz karakter)

Eski Python 2 - 13 puan:

print(1,2)

"Daha iyi" Skoru: 12 (uzunluk) + 2 (karakter farkı o / p) - 1 (benzersiz karakter o / p)

Bunun kazanamayacağını biliyorum ama yine de bir cevap verdi, çünkü bu benim ilk Python denemem :)


Bunun kısaltılabileceğini düşünüyorum print().
grc

@grc Tavsiyeniz için çok teşekkür ederiz! Derleyicime baktığımda, denedim, ama dokümanlardaki kadar kaybolmuştum, denemek için sildim dict.itertools(): P
Gaurang Tandon

12

C #

Ayrıca C # 2, 3 ve 4 arasındaki genel yöntem türü çıkarım algoritmalarını da değiştirdim. Örneğin:

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?()));
  }
}

C 2. yöntem tür kesmesi veya T olamaz söylüyor intve int?ve böylece üretir 2. C # 3 yöntem tür kesmesi diyor "arasında en iyi uzlaşma intve int?olduğu int?ve seçer böylece" M<int?>ve 1 üretmektedir.


9
> Ben de değişti Ne demek sen ah ... değişti. OH.
Bob

9

Yakut, 4 karakter + 0 karakter uzunluğu farkı - 3 benzersiz karakter farkı = 1 puan

p ?d

Ruby 1.9'da, yazdıracak "d". 1.8’de yazdırır100 .

Açıklama: ?dolduğu "d"1.9 ve 100(d ASCII kod) in 1.8. p xeşittir puts x.inspect. *hem dize tekrarı hem de çarpımdır.


Eski puanlama için "Optimize edilmiş" sürüm:

Ruby, 8 karakter - 999999989 karakter farkı = -999999981 puanı

p ?!*1e9

33000000000.01,8 ve "!!!!!!... !!!"1,9 için yazdırır . ( ?!Olup 331.8 ve "!"1.9 de ve* dize tekrarı ve çarpma hem de.)

Gerçekten, çarpma ile istediğiniz yere gidebilirsiniz, bu sadece bilgisayarınızın ne kadar hızlı olduğuna bağlıdır.


İkinci satırda tam olarak neler olduğunu açıklayabilir misiniz?
Tal

Tamam @Tal düzenlenmiş
Doorknob

8

Bash - -∞ (pratik sınırlara kadar)

Etkili, ancak çok fazla hafızanız var. Örneğin yaklaşık 10GB ile:

echo {0..999999999}

Bash 2: ayraç genişletmedeki aralıkları desteklemediğinden yazdırır {0..999999999}.

Bash 3:


Herhangi bir dil - -∞ (pratik limitlere kadar)

Biraz daha karmaşık olsa bile, hemen hemen her dilde buna sahip olacaksınız. İki farklı değer yapabildiğiniz anda, keyfi olarak farklı çıktılar üreten kodlar yazabilirsiniz. Daha iyi bir puanlama yöntemi çıktıdaki farklılıkları görmezden gelir.

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

@foobar “Herhangi bir dilde” sürümünde, programınızı dil belirtimindeki değişime bağlı tutmak için kullandığınız püf noktaları anlatılmaktadır. Yaptığın olsun, sürümü algılama olduğunu if $version >= 3veya if isinstance(range(0),list).
Gilles 'SO- kötü olmayı bırak'

4

C #

Aşağıdaki kod, C # 5.0 ve C # 'nun önceki sürümleri için farklı çıktılar üretecektir.

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();
        }
    }
}

Çıktı: C # 5.0

10
20
30
40

Çıktı: C # 4.0

40
40
40
40

Nedeni blog yazısında Eric Lippert tarafından açıklanmıştır.

Döngü değişkeni üzerinden kapatmanın zararlı olduğu kabul edilir


4

Python, -14 Puan (3 - 17 karakter uzunluğu farkı = -14)

2/3

Python 2 çıkışı: 0

Python 3 çıkışı: 0.6666666666666666

Daha İyi Puanlama sürümü, 5 puan (3 + 2 karakter uzunluğu farkı = 5)

3/2

Python 2 çıkışı: 1

Python 3 çıkışı: 1.5


4

C #

C # 4'e kovaryans ve çelişki ekledim, yani formdaki programlar:

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

falseC # 2 ve 3'te üretir vetrue 4. C.

Bununla birlikte, bunun tanımlanmadığı söylenebilir, çünkü tanımını içeren kitaplığınIEnumerable<T> da değişmesi gerekiyordu.


3

C ++ 98/11 - "Daha İyi" Puanlama (115 karakter - çıktıda 115 benzersiz karakter farkı = 0 puan)

Yeni puanlama kurallarına uyması için biraz düzenlenmiş bir versiyon

golfed:

#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);}

Ungolfed versiyonu:

#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);
}

Yeni çözüm eskisinden çok farklı değil. Yeni çözümde hem C ++ 11 hem de C ++ 98'deki çıktılar eşit derecede 116 karakterden oluşuyor, ancak ortak karakterleri tek karakter koyar fonksiyonu tarafından eklenen yeni çizgi karakterleri.

C ++ 98 için u8giriş u8"\x7E"[0]hala değiştirilecek, ancak şimdi değiştirilecek "\x0B". Böylece önişlemeden sonra ortaya çıkan değer olacaktır "\x0B""\x7E"[0]. İki dize birleştirilecek "\x0B\x7E"ve alt operatör, ilk elemana erişecek, bu durumda karakter kodlamasında 11 değeri olan karakter. Ek iolarak, esas olarak 114 olan , değeri de eklenecektir. Dolayısıyla, 125 değerine sahip karakter, sonuçtaki diziye yazılacaktır. As iile 11 125 den tüm değerleri sıfıra iner diziye yazılır veputs 11 ila 125 değerler, artı sondaki yeni satır ile tüm karakterleri yazdırır.

C ++ 11'de u8"\x7E"[0], onaltılık değeri 7E olan tek karakterden oluşan bir UTF-8 dizisi olarak yorumlanacaktır. Abonelik operatörü şimdi bu karaktere erişecek ve değeri iona eklenerek ilk yineleme sırasında 241 ondalık değere yol açacaktır . İken isıfıra gider, 126 kadar tüm değerler dizisi yazılır veputs 126 ila 241 değerlerle artı sondaki yeni satır karakterleri yazdırır.

Kullanılan karakter setine bağlı olarak, çoğu karakter setinin ortak olarak yalnızca ilk 128 karakterine sahip olması nedeniyle, bu farklı sonuçlar üretecektir.

ISO-8859-2 için çıktı şu şekilde olacaktır:

C ++ 98: C ++ 98 için çıktı

C ++ 11: C ++ 11 için çıktı

C ++ (106 karakter - çıktıdaki 107 fark = -1 puan) (ESKİ KURALLARI)

golfed:

#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);}

Ungolfed versiyonu:

#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);
}

İle Derleyen g++ -std=c++98 main.cppveg++ -std=c++11 main.cpp .

Aslında değiştirebilirsiniz 108 negatif puanlar elde etmek için tamsayı aralığında herhangi bir pozitif sayıyla . 108'den büyük olduğu sürece;)

C ++ 98 yılında #define u8 "f"yerine önişlemci neden olacaktır u8""[0]ile "f"""[0]. Bu, sonuçta bir diziye yazılan "f"[0]tek karakter olan nihayet ortaya çıkacaktır 'f'.

puts(c) i-1'den oluşan diziyi basacaktır 'f' .

C ++ 11’de u8""[0] boş dizginin UTF-8 dizgisi olarak yorumlanmasına neden olur, bu nedenle dize bitiştirmesi yapılmaz. Bu bir C-string olduğu için, abone operatörü sonlandırıcı boş bayt'a erişecek ve onu bir diziye yazacaktır.

Sonunda puts(c)yalnızca boş baytlardan oluşan sonuç dizisini yazdıracaktır. Ancak, putsbir boş baytla karşılaştığı anda girişi okumayı bıraktığında, yalnızca yeni bir satır yazacak ve başka bir şey yazmayacaktır.


Ben puanınız 1. olmak olsun Hem c ++ 89 ve c ++ 11 çıktı ?(en azından benim (Mac) sistemde)
James Webster

Yine de çözümde sadece 115 karakter sayıyorum.
James Webster,

@James Webster doğru, wc -c bana yalan söyledi;) Çözümümün sonuna yeni bir satır ekleyeceğim;) ... Veya düzeltin.
foobar

@James Webster Terminalinizde UTF-8 kodlamasını kullanıyorsunuzdur. Bir bayttaki en önemli bit UTF-8'de saklandığından, programın 128 ile 232 arasında çıktığı karakterleri eşleyemez. Yani 104 '?' Arada ikili çöp olduğunda daha az. Örnek olarak kodlayan WINDOWS-1256 ile terminaliniz bunu C ++ 11 sürümü için gösterir: tuvwxyz {|} ~ € پ ‚ƒ„… † ‡ ˆ ‰ Œ چژڈگ '' '' '' '' '' '' '' '' ' > œ ں, ¢ £ ¤ ¥ |§¨ © ھ «¬®¯ ° ± ²³'μ¶ · ¹;» ¼½¾ ہءآأؤإئابةتثجحخدذرزسشصض × طظعغفقك à ل â منهو?
filanca

C ++ 98 sürümü için terminalinizin '?' Gösterilmesi mümkündür 32 altındaki değerler için bu kontrol karakterleridir. Mesela terminalim çoğunu bir kare ile değiştirdi ve onaltılık değerinin içine basıldı. Yeni satır ve sekme karakterleri dışında örnek olarak. Ama şimdi kendimden söz ediyorum. C ++ 98 sürümü iki kez yeni bir satır içeriyor, ancak düzeltilmesi kolay;)
foobar

2

CSS2 vs CSS3 48 puan

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

Olarak işlenen ABCDEFGHIJKLMNOPQRSTUVWXYZCSS3 tarayıcılarda (küçük harf)

abcdefghijklmnopqrstuvwxyzCSS3 dışındaki tarayıcılarda olduğu gibi işlenir

74 karakter - 26 benzersiz karakter farkı = 48


Ancak bu, CSS2'de bir hatadır. Hataların sayılmadığını sanıyordum.
Bay Lister

@MrLister AFAIK font-özellik ayarları CSS3'te
Toni Toni Chopper

1

Perl, 24 karakter - (9 * (10 ^ 9)) - 1 karakter farkı = - ((9 * (10 ^ 9))) - 1) +24 puanı

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

5'in aaltındaki tüm sürümler için 9e9 kez yazdırır, yazdırıra , 5'in üzerindeki tüm sürümler için . Yalnızca aikinci çıktısına daha fazla s ekleyerek puanı kademesiz olarak düşürebilirsiniz .


2
Soru: "Amaç, değişimin, VM belirtimi veya çevresel meta veriler yerine, dil belirtimindeki değişimin bir sonucu olması gerektiğidir"
Doorknob

Herhangi bir VM spesifikasyonu veya çevresel meta veri kullanmıyorum. Sadece yüklü sürüm.
Vince,

1

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

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

Befunge 93'te bu, sonra 3 boşluk, ardından <v76 boşluk, ardından <v76 boşluk <v, sonra 76 boşluk, sonra<v 77 boşluk, ardından v78 boşluk olacaktı. Uzunluk: 3 + 2 + 76 + 2 + 76 + 2 + 76 + 2 + 77 + 1 + 78 = 395İlk 5 satıra benzer ekstra satırlar eklenerek, bu özellik uzatılabilir bir şekilde genişletilebilir.

Befunge 98’de bu çıktı <v <v <v <v v .

Uzunluk farkı: 395 - 17 = 378 . Yani puan (eski kurallara göre) olurdu:-342

Not: Ben kullanılırsa ben çok daha etkili olmalarını kazanılmış olabilir .yerine ,; fark olurdu-684


Kural değişikliği:

Bu biraz daha zor.

"  "-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:,<

Befunge 93 çıkışı:

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

Befunge 98 çıkışı:

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

Uzunluklar: 2576. Dizeler arasındaki karakterlerin hiçbiri aynı değildir, bu yüzden zorluğu doğru anladıysam puanım 164 - 2576 = -2412(evet hedeflemeliydim 0, ama bu daha eğlenceli oldu). Her dizedeki her karakterin benzersiz ve birbirinden farklı olması için bunu yapmam gerekirse, lütfen bana söyleyin.


1

Powershell, "Better" puanlaması, -163 (15 - 178 karakter farkı = -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, Puan: 0 (en iyi durum)

srand(2);echo rand();

Vay canına, bunu açıklamak eğlenceli olacak.

Göre bu web sitesi , srand()fonksiyon gelen bozuk görünüyor PHP 5.1.5 için PHP 5.3.14 . Bu nedenle, yukarıda belirtilen sürüm aralığına giren PHP 4.4.9 ve PHP 5'in rastgele bir versiyonunu dikkate alacağız.

PHP 4.4.9 çıktı: 1505335290

Bunun kural kırma olduğunu sanmıyorum; Bu bir hata gibi göründüğü için, çıktı aynı olmalı , ancak değil. Diğer PHP sürümümüz sadece srand()işlevi atlayacak ve rasgele bir sayı çıkaracaktır .


1

Java (yaklaşık -2.000.000.000)

Java sürümleri bazen 1.x olarak adlandırılır, ancak yine de kurallar dahilinde olduğunu düşünüyorum.

Kolay yol, belirli bir sürümde tanıtılan bir sınıfın olup olmadığını kontrol etmektir.

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("-");
}

(İki saniyede 2 milyar karakter çıkarmanın mümkün olup olmadığına terminalinize biraz bağlı / Yeni puanlamada, Integer.MAX_VALUEmükemmel sıfır puan elde etmek için programın bayt sayısı ile değiştirin .)

Bu kod kullanılan VM / JDK sürümüne bağlıdır (bu sayılır mı?)

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);
}

zJava 6 ve önceki JDK'ler aiçin s'yi ve en son sürümler için s'yi yazdırır .


1

JavaScript (ES3 vs ES5) - 9 puan

uzunluk 10 + uzunluk farkı 0 - çıktı farkı1

[].map?1:0

1Array.prototype.map özelliğini destekleyen modern tarayıcıların çıktıları . 0Eski tarayıcılarda çıktılar . Bunu IE8 ile test ettim.

Eski kurallarla: 0 puan

uzunluk 26 - uzunluk farkı26

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

00000000000000000000000000Modern tarayıcılarda çıktılar . Ve eski ipte boş.


IE8 gerçekten ES4'ü destekliyor mu ???
Bergi

Var olmayan bir standardın nasıl uygulandığına şaşırmıştım …
Bergi

Tüh! Sabit :)
nderscore

1

Python - 0

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

Python 2 bir yazı yazdırırken Python 3 hiçbir şey yazmıyor.

EDIT: Güncelleme, sabit.


Bilgisayarınız gerçekten 2 saniyede ~ 9 milyar rakam yazdırabilir mi?
James Webster,

@JamesWebster Bu aslında bir işlevin dönüş değeridir - bu nedenle sadece programın bitirmesi için bellekte bulunması gerekir. Bir / lot / RAM gerektirir, ancak iyi tanımlanmış bir bilgisayarda 2 saniye içinde bitecekti.
cjfaure

0

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

Eski tarz APL'lerde ( ⎕ML=0* ise Dyalog gibi ), 1 boyutlu bir vektörde hiçbir şey yapmayan mix anlamına gelir . APL2 tarzı APL'lerde, GNU APL gibi (veya Dyalog ise ), ilk önce bir vektörün ilk öğesini alan anlamına gelir .⎕ML=3

Bu durumda, şu 5bayt (APL karakter kümesi yapar bir bayt formlarını),

↑⍳3e5

çıkacak 1988894 Eski stil APL ağızlarda bayt (boşluk 3E5 1'den numaralar listesine ayrılmış),

ve 1baytı (İlk bahsedilen listedeki numarası 1ve bu nedenle uzunluk1 ) APL2-tarz APL lehçelerinde.

Notlar:

  • ⎕MLgöç seviyesi demektir . Dyalog APL'de, ne kadar yüksek ayar yaparsanız ⎕ML, o kadar fazla APL2 tarzı özellik etkinleştirilir. Varsayılan olarak 0. (Ve bu küresel bir değişken! Eğlenceli!)
  • 3e5Dyalog APL'nin kabul edebileceği en yüksek 3 karakterdi . 4e5bana bir tane verdi LIMIT ERROR. Bu kısıtlama muhtemelen tercümana bağlıdır. (GNU APL'nin daha yüksek değerlerle hiçbir sorunu yoktu.)

0

Bash 7 (14 baytlık program uzunluğu + çıkış uzunluğunda 0 fark - çıktıdaki benzersiz karakterlerde 7 fark)

@Gilles ile ilgili cevap, ancak farklı bir genişleme özelliği ve farklı sürümleri. Düzenlenen soruya göre puanlama:

echo {1..9..2}

Bash 3.x için çıktı:

{1..9..2}

Bash 4.x için çıktı:

1 3 5 7 9

0

PHP: 134217684 (43 - 134217727)

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

Kullanımı:

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

PHP5 + 'da bu geçersiz bir argümanla ip2long'un sıfıra dönüştüğü yanlışa dönüştüğü için hiçbir şey basmayacaktır. PHP4'te ip2long("")-1 döndürür ve boş dizgiyi 128 MB og ile doldururuz.a .

Maske, makinemdeki 2 saniyeden uzun süre önce geri dönecek şekilde takılıyor. Eğer 2s yapamazsan daha iyi bir donanım al!

Yeni kurallarla: 0 (40 - 40. Sıfıra daha fazla yaklaşamazsınız.)

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

Çıktılar:

In PHP4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
In PHP5: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

Yeni puanlama kuralları ile puanınız 39'dur. Her iki çıktı da eşit derecede uzun, bu yüzden bunun için bir ceza yok. Fakat sadece bir tane benzersiz karakter farkı var. a b'ye eşit değildir, bu nedenle puanınızdan -1 çıkarmanıza izin verilir.
foobar

0

C89 / C99 yorum kullanımı, 45 karakter, 0 puan

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

c89 çıkışı

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

c99 çıkışı

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


Bu aslında diğer C cevabı ile aynı mantığı kullanır .
user12205 16.04.2014

Demek istediğim, tam olarak aynı dili ve tamamen aynı mantığı kullanarak bu sorunun bir cevabı olduğu gerçeği göz önüne alındığında, bu cevap çok ilginç değildir.
user12205, 16.04.2014

Bu giriş, birden fazla seviyedeki ilk “diğer C cevabı” na göre daha üstündür. Daha kısa, mükemmel skorlar, iki saniyeden kısa sürede tamamlanır ve çökmez veya iptal etmez. Güncellenen sürüme kadar ... adil olmak gerekirse, muhtemelen bu kodu bağlayan bir yorum bırakmalısınız.
Johnny Cage

Cevabınız "ilk" diğer C cevabından daha iyidir, çünkü diğer C cevabı kural değişikliğinden ÖNCE gönderilmiştir.
user12205

Belki, ancak güncellenmiş sürüm uygulamamı karıştırıyor. Sadece aynı ofsetleri kullanmakla kalmaz, aynı zamanda arasında geçiş printfyapar putchar; Kahretsin, r5 için kuralları yanlış okudum ve yanlışlıkla yeni ve eski skorları birleştirdim. [R5, r6] çıkışı bir hata. Diğer C cevabındaki r3 de aynı hatayı içeriyor. Zaman damgalarına bakarsanız , diğer cevap güncellendiğinde buraya gönderilen r5 olduğunu göreceksiniz . Önemli değil, çünkü bu kod golf ve bu giriş daha az karakterli, zorlu mücadeleyi yerine getiriyor .
Johnny Cage

0

C ++ 98 / C ++ 11

#include <iostream>

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

Standart bir C ++ 98 derleyici için bu, 199711 katı 'x' harfini verirken, standart bir C ++ 11 derleyici için bu, 201103 katı 'x' harfini verir. Çıktının uzunluk farkı bu nedenle 1392 karakterdir. Bu, aslında kaynak kodunun golf oynamanın faydası olmadığı anlamına gelir, çünkü daha "x"uzun bir dize ile değiştirilerek veya __cplusplusbir sayı ile çarpılarak çok daha büyük bir etki elde edilebilir .


0

SmileBASIC 3 / SmileBASIC 2, Puan: -5 (orijinal puanlama)

?1E9

SB'nin modern sürümlerinde, bu 1000000000beklendiği gibi yazdırılır , ancak sürüm 2 ve önceki sürümlerde 10bir hata nedeniyle yazdırılır .


0

TI-Basic 83 Plus - 84 Plus, puan 5-1 = 4

length("setTime(

2Aynı programın, komut henüz tanıtılmadığı length("?►DMSiçin benzeyen bir şey olarak ayrıştırıldığı TI-83 Plus'ta çıktılar setTime(. Dize iki adet 1-bayt jeton içeriyor, uzunluğu 2.

1TI-84 Plus'ta çıktılar , çünkü tek bir 2 baytlık belirteci içeren bir dizgenin uzunluğu 1'dir.


0

Git 1.9-> 1.10. Puan = 1 - 1 = 0

Gönderen 1.10 notları :

GOMAXPROCS ayarında artık bir sınır yoktur. (Go 1.9’da limit 1024’dü.)

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.