Anti-golfscript anti-golf: GolfScript veya J'nin (geleneksel) diliniz [kapalı] tarafından aşıldığı bir görev yaratın


29

Üç şey yapman gerekiyor:

  1. Bir görev, Tablosu T .
  2. Dilde görevin çözümü değil, tipik golf, kullanılan bir .
  3. Dilde görevin çözümü genellikle golf, kullanılan B . Sadece şişmesine kalkmayın B yerine, skor şişirmek sanki düşünmeye B rakip tarafından yazılmıştır.

Tanımlamada sağduyulu kullanın typically used for golfing, diğer kullanıcılar için eğlenceyi en üst düzeye çıkarmaya çalışın.

Diğer kullanıcılar daha iyi Bdilekleri önerebilirler (belki diğer "golfy" dillerinde dahil).

Puanlama (length_in_bytes(B)+5)/(length_in_bytes(A)+5), daha iyidir. (Belki puanlama formülü değiştirilmeli? ..)

Ana fikir, kod kodlayıcıda genellikle iyi performans gösteren dillerin bir sorunla karşılaştığı bir görev icat etmektir. Verilen görevde normal bir dilin ani bir gücü veya bazı golflangıcısının ani bir zayıflığı olabilir.

Gibi belirli programlama dillerinden bahseden görevlerden kaçının Input a string and execute it as a Scheme code.


1
Sanırım bunu bir kod golf yerine bir popülerlik yarışması haline getirdiniz. Aksi takdirde, insanlar bunun "en kısa kod kazancı" olmadığından şikayet edeceklerdir.
Victor Stafusa,

Tamam, popülerlik yarışmasına geçiyor. Ayrıca daha iyi bir başlık veya daha iyi puanlama önerebilirsin.
Vi.

Önceki sorumun cevap verdiğini düşünüyorum. codegolf.stackexchange.com/questions/18633/… Perl çözümü 48 karakter, J çözümü 54 karakter
user12205

1
Lang B'yi belirtebilir miyiz (golf oynamakta iyi olduğu sürece)? Veya herhangi biri "burada <dil dili ekle> dilinde bir program ve <n>: 'in çok kısa bir çözümü var" diyebilir mi?
Justin

1
BTW Perl gibi bazı diller, bağlama bağlı olarak hem A tarafında hem de B tarafında olabilir.
Vi.

Yanıtlar:


14

Önceki sorum, şu anda bir sinüzoidal dalga (dikey) yazdır. Buraya bir çözüm olarak gönderiyorum, ayrıca asıl soruma daha kısa çözümler bulabileceğinizi umuyorum.

Vi'nin istediği gibi, sorunun bir özetini göndereceğim.

Bir terminal üzerinde dikey kaydırma sürekli bir sinüzoidal dalga yazdırın. Program sonlandırılmamalı ve dalgayı sürekli aşağı kaydırmalıdır (SIGINT hariç). Taşma probleminin olmadığını düşünebilirsiniz (yani, artan sayaçları olan sonsuz döngüler veya sonsuz özyineleme kullanabilirsiniz).

Dalga aşağıdaki özellikleri sağlamalıdır:

  • Genlik = 20 karakter (en yüksek genlik)
  • Dönem = 60 - 65 satır (dahil)
  • Çıktı yalnızca boşluklardan, yeni satırdan ve |
  • Her çıktı satırından sonra 50ms durakla

Asıl sorumun örnek bir çıktısı var, ancak buraya göndermiyorum, çünkü bu benim cevabımı gülünç bir şekilde uzatacak. Asıl sorum burada görülebilir: Sinüzoidal bir dalga bas (dikey)

AŞu anda en kısa : 48 karakterli bir Perl çözümü: https://codegolf.stackexchange.com/a/18655/12205

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

BŞu anda en kısa : 54 karakterli bir J çözümü: https://codegolf.stackexchange.com/a/18649/12205

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




Şu anda, bu cevabın puanı 1.113 (derece düşük bir puan)


Geçerli formüle göre mevcut puan yaklaşık 1.113
Vi'dir.

@Vi. bu cevabı silmeli miyim yoksa bir süre bekleyip ne olduğunu görmeli miyim? İkincisi, ne kadar beklemeliyim?
user12205,

İfade, karakterleri değil baytları belirtir. UTL-8'e dönüştürülen APL çözümü 61 bayt (UTF-16 için 70) üretti.
Vi.

2
Perl’in genellikle golf oynamak için kullanılan bir dil olmadığını, ancak ilk önce golf kelimesiyle ilişkilendirilen bir dil olduğunu iddia ediyorsunuz ! Ruby, 56 yaşında, sorularınızın cevaplarında gerçek dil A'ya benziyor.
Peter Taylor

8

İki numara ekle

STDIN'den iki numara alın ve bunları bir araya getirin. Kayan nokta sayılarını desteklemelisiniz, bu nedenle 0.5 + 1.5 2'ye eşit olmalıdır.

Perl 5 (ile -E)

say<>+<>

GolfScript

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

Olarak hesaplanan puan (24+5)/(8+2+5) = 1.9(3). -Eayrıca program bayt olarak sayılır.
Vi.

As ile aynı yorumda bulundum: Perl'in golf oynamak için genellikle kullanılan bir dil olmadığını, ancak ilk önce golf kelimesiyle ilişkilendirilen bir dil olduğunu iddia ediyorsunuz !
Peter Taylor

Ve GolfScript programınız çalışmıyor. Çalışan bir program, n%'+'*'"#{ }"'n/\*~aradaki karakterin {}değişmez bir yeni satır olduğu (yorumlarda desteklenmeyen) olacaktır.
Peter Taylor

@PeterTaylor, GolfScript ile karşılaştırıldığında, Perl "normal" bir dildir; Java ile karşılaştırıldığında, bir "golf" dilidir.
Vi.

1
Bunun için J çok da kötü değil aslında +/".1!:1,~1. APL muhtemelen daha küçük olurdu.
algorithmshark

8

'Merhaba, Dünya!' Yazdır stdout’a

PHP, 13 bayt

Hello, World!

Golf Betiği, 15 bayt

'Hello, World!'

Pyth, 14 bayt

"Hello, World!

3
Güzel topikal. :)
AdmBorkBork

2
Yeni B: HQ9 + InH
Charles

2
Ama yanlış yazıldığından, @ NootthatCharles
georgeunix

1
@georgeunix İyi nokta. "W" harfini aktifleştirdin.
Charles,

7

48/37 veya 1 puan. (297)

T: Çalışmanın tam olarak bir saat sonra (olabildiğince yakın, bir saniye içinde) bitecek bir kod pasajı yaz. İstisnalar için endişelenmeyin, işlenemezler.

A: Java (32)

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

B: Befunge 98 içindir, TIME parmak izini gerektirir (43)

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

Bu, çalışma sırasında Saat, Dakika ve Saniye'yi alır ve hücreleri 02, 01 ve 00'a koyar. Sonra, ;ikinci bölüme atlar . İkinci kısım şu şekilde çalışır:

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

Aynı şekilde Dakika ve Saat için.

++  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

Befunge'nin, hattın sonuna gelindiğinde otomatik olarak hattın başına geri döneceğini unutmayın.


Gördüğümüz gibi, Befunge belirli zamanları beklemeye gelince iyi değil. Ancak, Java fena değil.


9
APL:⎕DL 3600
marinus

14
Java genellikle şöyle okur class Main{public static void main...
Vi.

3
@Vi. Bkz. "Kod pasajı". Temel olarak, aslında işi yapan kodu gerektirir, bundan fazlasını değil.
Justin

2
Befunge'yi tanımıyorum, ancak Java snippet'i belirtildiği gibi "programı sonlandırmıyor". Bu, ya a System.exit(0);ya da uykunuzun bir mainyöntemle sarılmasını gerektirir .
Peter Taylor

3
@DoorknobofSnow Derleme başarısız:error: not a statement
Bob

5

Belirli bir metin dosyasını çıktı (498.388888 puan)

Hedef çıktı burada .

Yazdırmak için Python 3.4.3 betiği 49 bayttır:

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

Hedef çıktısına eşit olan saf CJam programı, çıktı dizgisini sararak ve içinde meydana gelen "..."her birinden kaçarak "26908 bayt olacaktır.


Çok zekice olsa da, "belirli diller" kısıtlamasının ağır basmasına rağmen (açıkça belirsiz).
BMac

En yakın kural "belirli dilden bahsetmekten kaçınmak" dır. Python'dan bahsedilmez, ancak açıkça ifade edilir.
Vi.

Evet, bu cevap biraz yanak dili, sadece kuralın kaygan bir eğim olduğunu belirtmek istedim. Çıktıyı daha fazla "karıştırdıysam" - her dokümanın SHA1 sağlama toplamını aldığımı düşünün - "altıgen basamaklı bu bozuk sayı demetinin dile özgü" olduğunu iddia etmek çok tuhaf olurdu :)
Lynn

Daha "adil" bir cevap yapmak isteseydim, muhtemelen Mathematica'yı kullanırdım. Binlerce bayt CJam / Pyth / başka bir şey alabilecek çok fazla alana özgü şey yapabilirsiniz. Ama ne yazık ki, dili bilmiyorum.
Lynn,

Çıkış bağlantısı kesildi.
pppery

4

"Merhaba dünya!" De. (50/26 ≈ 1,92)

"Merhaba dünya!" Demek için bir mesaj kutusu göster.

JavaScript

alert('Hello world!')

DOM Seviye 0+ desteği olan bir tarayıcıda.

Perl

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

ActivePerl’de Win32 :: GUI ile çalışıyor.


alertdoğası gereği JS'nin bir parçası değildir ve GolfScript programı sadece bir yorumdur.
Peter Taylor

Cevabı düz Perl kullanacak şekilde değiştirdim.
Diş fırçası

3

Çıktı "Merhaba dünya!" kullanıcı "q" tuşuna basana kadar, 1.842 105/44 = 2.386

  1. Yazdır "Merhaba dünya!" (newline dahil).
  2. Kullanıcı, ekrana yankılanmayan bir tuşa basar.
  3. Basılan tuş "q" olana kadar tekrarlayın.

QBasic ( 52 39 karakter)

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

Orijinal cevabımı gönderdiğimden beri, QB64'te otomatik biçimlendirmeyi kapatabileceğimi öğrendim. : ^ D Satır numarası ve ?kısayol için PRINTbu, C benzeri dillerde üçlü bir ifadeye benziyor.

İlk versiyon:

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

Yukarıdakiler sadece (belirli?) UNIX sistemlerinde çalışacaktır (Ubuntu 12.04'te test edilmiştir). Term :: ReadKey modülünü kullanarak platformlar arası gidip 91 karaktere düşmesi mümkün , ancak test etmedim:

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

1

Merhaba, dünya (3 1/3 puan)

Çıktı yapan programı yaz Hello World..

HQ9 + (1 karakter)

Bu "genellikle golf oynamak için kullanılan" bir dil değil, bu yüzden buraya uygun olduğuna inanıyorum. Bu arada, bu tercümanda çalışıyor .

H

GolfScript (15 karakter)

GolfScript olsa bile, daha azına ulaşabileceğinden şüpheliyim.

"Hello World."

8
Bir dil HQ9+olarak uygun olduğunu sanmıyorum . Hileler / bilmeceler / eğlence için tasarlanmıştır. Brainfuck / unlambda / diğer ezoterik diller de A olarak görünmüyor .
Vi.

@Vi .: Ama genellikle golf oynamak için kullanılmaz.
Konrad Borowski

4
B dili HQ9+olarak kullanmayı deneyebilir ve Java ya da benzeri bir şeyle yenebilirsiniz ...
Vi.

7
Bir hiyerarşi var gibi görünüyor: Java ile karşılaştırıldığında, Perl bir golflang. Perl ile karşılaştırıldığında, GolfScript bir golflang. GolfScript ile karşılaştırıldığında, HQ9 + bir golflang ...
Vi.

@Vi .: Görev tanımınızı dikkatlice kontrol ettim. HQ9 +, iki özel görev haricinde golf oynamak için asla kullanılmaz - "99 şişe" ve "Merhaba dünya". HQ9 + 'ın başka bir programlama diliyle kazandığı başka bir görevi göstermezseniz, kötüye kullansa bile tanımına uyduğunu düşünüyorum (hey, popülerlik yarışması ). HQ9 + bu iki görevle ilgili olmayan golf etkinliklerinde kullanılmaz. Yani, genellikle golf oynamak için kullanılmaz. İkincisi açıkça CodeGolf için tasarlanmıştır - GolfScript.
Konrad Borowski

0

Çıktı "Merhaba dünya!", 33/97 = 2.94

Çıktı yapan bir program yaz Hello world!

Arduino veya GML

Serial.print("Hello world!")

veya

show_message("Hello world!")

Her ikisi de 28 karakterdir.

GTB

GTB'yi çok golf oynamak için kullanıyorum (özellikle kendim yarattığımdan beri ve Turing tamamlandı). Ne yazık ki, yalnızca küçük harfler için sınırlı destek vardır (çünkü TI-84 hesaplayıcısı bununla başa çıkamaz). Bu muhtemelen Merhaba dünyayı çıkaran en kısa GTB programı!

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

92 karakter.


GTB versiyonu da seri porttan çıktı mı?
Vi.

GTB sürümü kasıtlı olarak çeşitli s'lerle şişirilmiş mi cosve exprsya da gerçekten düzenli bir şekilde bir şey çıkartamıyor mu? Ya da "karakter aslında bir dize değildir ve kafamı karıştırır ...
Vi.

@Vi. Hiç şişirilmemiş ... e'yi ekspr'den, iki l'den aşağıya, o cos'dan veya l'den aşağıya, ve d'den ve d'ye çıkarmak zorunda.
Timtech

'Diğer kullanıcılar daha iyi pansiyonlar önerebilir (diğer "golfy" dilleri dahil). '--- golfscript'i deneyeyim:"Hello world!"
John Dvorak

@JanDvorak Muhtemelen haklısın.
Timtech
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.