triplegolf - sadece kaynak kodu uzunluğu sayılmaz!


15

Bu zorluğun amacı, aşağıdaki üç uzunluğun tamamen aynı olduğu bir program yazmaktır:

  • kaynak kodun uzunluğu
  • standart çıktıya yazdırdığı çıktının uzunluğu
  • seçtiğiniz (değiştirilmemiş) derleyici ile oluşturduğu derleyici uyarılarının uzunluğu

Kazanan her üç kriteri de yerine getiren en kısa koddur ve en az 1 karakter uzunluğunda olmalıdır.

Bir şeyleri renklendirmek için, çıktıda üçten az farklı karakter varsa, her birinin uzunluğuna 5 puanlık bir ceza eklenir (yani yalnızca tek bir türse +10, iki için +5).

(Yeni satırlar seçiminiz 1 veya 2 karakter olarak sayılır, ancak her üç ölçütte de tutarlı olmalıdır. Ön ve arkadaki boşluklar, üç ölçütün de tüm satırlarında yok sayılır)

Eşit puan durumunda, en ilginç sonucu (çöp yerine) basan kazanır.


1
"Karakter türü" nedir?
Peter Taylor

5
Ayrıca, derleyici uyarı vermeyen çıktı üretirse (örn. "Derleme Ana")? Ayrıca, uyarı dosyalarında kaynak dosyanın adı görünürse (örn. "Foo.c: 1: 1: ...")?
Joey Adams

3
Benim seçim silahım gerçekten bir derleyici olmayan ve çalıştırmak için bir ikili dosya çıktısı olmayan VBA, (bazı diğer dillerde olduğu gibi, inanıyorum). Bunun için dikkat edilecek noktalar var mı yoksa varsayılan olarak diskalifiye oldum mu?
Gaffi

2
Acaba bir dilde üçlü üçlü mümkün mü?
Ry-

2
Yorumlanan diller için, bir hatanın oluşması durumunda bile bir çıktı alırız, bu durumda bu hatalar kabul edilir mi yoksa yalnızca uyarılar kabul edilir mi?
l0n3sh4rk

Yanıtlar:


14

Bash, 23 karakter

Hata:

bash: /: Is a directory

Kaynak:

echo       $0-$01234;/;

Çıktı:

/bin/bash-/bin/bash1234


Brainf * ck, 32 karakter

Bu kod yaklaşık 3 saniye boyunca yürütülür ve durur ve aşağıdaki hata ve çıktıyı görüntüler.

Hata:

bff: out of memory (-2058691272)

Kaynak:

+++++[......-]..+[>>>>>>>>>>>>-]

Çıktı: (Hexdump)

0505 0505 0505 0404 0404 0404 0303 0303
0303 0202 0202 0202 0101 0101 0101 0000


C, 35 karakter

Uyarı:

b.c:1:30: warning: division by zero

Kaynak ve Çıktı:

main(){system("cat "__FILE__)/0;;;}


PHP, 50 karakter

Uyarı:

PHP Warning:  Division by zero in /tmp/3 on line 1

Kaynak ve Çıktı:

<?php echo (0/0).''.file_get_contents(__FILE__);?>

1
Bash örneği bir uyarı değil bir hatadır.
Peter Taylor

C çözümü için hangi derleyiciyi kullanıyorsunuz?
ekmek kutusu

@breadbox gcc sürüm 4.7.0 20120505 (yayın öncesi) (GCC)
l0n3sh4rk

8

C - 48 karakter

main(i){while(++i<49)putchar(i);putchar('\z');}

Not: bir son (Unix tarzı) yeni satır içerir.

Çıktı gelen gcc a.cokur:

a.c:1:41: warning: unknown escape sequence '\z'

Çıktı a.outçoğunlukla baskı olmayan karakterlerdir, bu nedenle hexdump ile borulamadan sonra şöyle görünür:

00000000: 0203 0405 0607 0809 0A0B 0C0D 0E0F 1011  ................
00000010: 1213 1415 1617 1819 1A1B 1C1D 1E1F 2021  .............. !
00000020: 2223 2425 2627 2829 2A2B 2C2D 2E2F 307A  "#$%&'()*+,-./0z

Anladığım kadarıyla, yazdırılamayan (beyaz sayfa?) Kesildi, bu yüzden sayılmaz. Bu işe yararsa kendi cevabımı geliştirebilirim.
Gaffi

1
\ T, \ n, \ r, \ f ve bazen \ v için kontrol karakterleri genellikle boşluk olarak kabul edilmez. Bunların hiçbiri önde veya arkada değil, bu yüzden güvende olduğumu düşündüm.
ekmek kutusu

1
Bence bu kesinlikle kabul edilebilir. Bunlar boşluk değildir ve her iki durumda da bu ACM değildir. gereksinimlerle o kadar sıkı . Bu "boşluk" kuralının temel nedeni, bazı IDE'lerin derleyici çıktılarını büyük ölçüde biçimlendirebilmeleridir.
vsz

1
@copy veya Veya main(i){i='\z';while(i-->74)putchar(i);}- ancak program boyutunu küçültmek aslında ters etki yaratır .
ekmek kutusu

1
Bu benim en sevdiğim cevap, dosyanın içeriğine erişmeyi yasaklamam gerektiğini biliyorum (gerçek quines gibi)
vsz

5

JavaScript, 63 66

!function x(){console.log(x+'...');eval(Array(33).join('$'))}()

Çıktı:

function x(){console.log(x+'...');eval(Array(33).join('$'))}...

Chrome'da hata:

ReferenceError: $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ is not defined

3

Visual Basic .NET, 185

Gee, vbc derleme uyarıları ile oldukça ayrıntılı. Her neyse, kod şudur:

Public Module Main
    Public Sub Main()
        Console.WriteLine(New String("a"c,185))
    End Sub

    Public Function A()
        'This is actually just padding.
        'Hi
    End Function
End Module

(Bunların boşluk değil sekme olması gerektiğini unutmayın.)

Çıktı şudur:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Derleyici uyarısı şudur:

warning BC42105: Function 'A' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.

    End Function
    ~~~~~~~~~~~~

(Bu sefer, aslında sekmeler değil dört boşluk var.)


3

Zsh , 20 bayt

<<<   $-$_$_$_$_$_
[

Burada karşılaştığımız sorun yukarıdaki bir yorumda belirtilmiştir: Zsh, her hatadan önce satır numarasına ek olarak program adını yazdırır . Buradaki çözüm, bunu kötüye kullanmak için tek karakterlik bir dosya adı kullanıyor. Tam olarak ne yazdırdığını göstermek için bir yardımcı komut dosyasına koydum ve kullandımwc -c stderr, stdout ve kaynak dosyada kullandım.

Çıktı: 569Xcatcatcatcatcatarkasından bir yeni satır
Hatalar:s:[:2: ']' expected arkasından yeni satır


EDIT: Dosya kısıtlaması olmadan alternatif 20 bayt çözüm:

<<<$-$-$-$-$_>&1 >&2

Çevrimiçi deneyin!

Zsh ,, zsh -x10 bayt

<<<$_$_$_

-xflag xtrace özelliğini etkinleştirir. Bu yine tek karakterli bir dosya adı gerektirir. Çevrimiçi deneyin!

Zsh zsh -JNTwEDY , 12 bayt

<<<$->&1 >&2

-flagDosya adı gerekliliği olmadan en kısa yanıt. Daha fazla bayrak ayarlar ve $-hepsini yazdırır. Çevrimiçi deneyin!


2

JavaScript (Firefox 54), 34 bayt

alert((f=function(x)1234)(56)+f+f)

Çıktılar:

1234function(x)1234function(x)1234

Bu uyarıyı tarayıcı konsoluna gönderir:

expression closures are deprecated

Öyle görünüyor bu Firefox Developer Edition (54.0a2) benim kopyasında. Firefox'un diğer sürümlerinde de çalışabilir.


2

Ruby, 48 karakter

IO=1;puts ?a*48;# let's make it 48 bytes long :)

çıktılar

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Uyardı

r.rb:1: warning: already initialized constant IO

(dosya r.rb, yolu kaldırdım, irb'den çalıştırırsanız (irb): 1: uyarı ...)

Ruby'de uyarma yöntemi var, ancak argümanlarını $ stderr'a çıkarır ve daha az bir uyarı gibi görünmesini sağlar.


1

Python, 57 bayt

Diğer tercümanlar uyarıyı farklı gösterebilir. Bu sadece TIO üzerinde çalışmak için test edildi.

from warnings import*
print("prt"*19)
warn("Warning...!")

Çevrimiçi deneyin

Çıktı

prtprtprtprtprtprtprtprtprtprtprtprtprtprtprtprtprtprtprt

Uyarı

.code.tio:3: UserWarning: Warning...!
  warn("Warning...!")

Baştaki boşlukların bayt sayısına sayılmadığını unutmayın. Baştaki boşluklar göz ardı edilmediyse, bu 51 baytta yapılabilir.


1

Javascript (ES6), 32 30 bayt

Screen(console.log(Function));

baskılar

ƒ Function() { [native code] }

ve ardından atar

TypeError: Illegal constructor

Orijinal 32 bayt çözümüm:

(x=y=>console.log(x+!0+10)||z)()

ilk olarak, baskılar

y=>console.log(x+!0+10)||ztrue10

Ve hatayı atar

ReferenceError: z is not defined

0

VBA, 39 Bayt

Derleyici kısıtlaması göz önüne alındığında, bunun uygun olup olmadığından emin değilim:

Giriş: (hemen pencerede)

For i=1 To 39:a=a & Chr(i):Next:Print a

* Çıktı, bu pencerede iyi oynatılmayan yazdırma dışı karakterler içeriyor.


VBA herhangi bir derleyici uyarısı vermiyor, bu yüzden bunun geçerli olduğunu düşünmüyorum
Taylor Scott

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.