Anti-golfscript anti-golf: stwórz zadanie, w którym GolfScript lub J jest obrzucony przez (konwencjonalny) język [zamknięty]


29

Musisz zrobić trzy rzeczy:

  1. Zestawienie zadania, T .
  2. Rozwiązanie zadania w języku nie są zwykle używane do gry w golfa, A .
  3. Rozwiązanie zadania w języku zwykle używane do golfa, B . Nie próbuj po prostu nadmuchać B, aby zwiększyć wynik, zamiast tego pomyśl, jakby B został napisany przez twojego zawodnika.

Definiując typically used for golfing, kieruj się zdrowym rozsądkiem , staraj się maksymalizować zabawę innym użytkownikom.

Inni użytkownicy mogą proponować lepsze B(np. W innych językach „golfowych”).

Punktacja jest taka (length_in_bytes(B)+5)/(length_in_bytes(A)+5), im więcej, tym lepiej. (Może formuła punktacji powinna zostać zmieniona?)

Główną ideą jest wynalezienie zadania, w którym języki, które zwykle działają dobrze w codegolf, napotykają problem. Może to być nagła siła zwykłego języka w danym zadaniu lub nagła słabość jakiegoś golfa.

Unikaj zadań, które wspominają o określonych językach programowania, takich jak Input a string and execute it as a Scheme code.


1
Podejrzewam, że organizujesz konkurs popularności zamiast golfa. W przeciwnym razie ludzie będą narzekać, że nie jest to „najkrótszy wygrany kod”.
Victor Stafusa

OK, zmiana na konkurs popularności. Możesz także zaproponować lepszy tytuł lub lepszą punktację.
Vi.

Zakładam, że moje poprzednie pytanie się kwalifikuje? codegolf.stackexchange.com/questions/18633/… Rozwiązanie perla ma 48 znaków, podczas gdy rozwiązanie J ma 54 znaki
użytkownik12205

1
Czy możemy podać język B (o ile jest dobry w golfie)? Czy ktoś może powiedzieć „tutaj jest program w języku <wstaw nazwę języka> i ma on bardzo krótkie rozwiązanie długości <n>:”?
Justin

1
BTW, niektóre języki, takie jak Perl, mogą znajdować się zarówno po stronie A, jak i po stronie B, w zależności od kontekstu.
Vi.

Odpowiedzi:


14

Moje poprzednie pytanie, Drukuj falę sinusoidalną (pionowo), kwalifikuje się w tym momencie. Zamieszczam to tutaj jako rozwiązanie, mając również nadzieję, że wymyślicie krótsze rozwiązania mojego pierwotnego pytania.

Zgodnie z wymaganiami Vi. Opublikuję streszczenie pytania.

Wydrukuj ciągłą falę sinusoidalną przewijaną pionowo na terminalu. Program nie powinien się kończyć i powinien stale przewijać falę w dół (z wyjątkiem SIGINT). Możesz założyć, że przepełnienie nie stanowi problemu (tzn. Możesz używać nieskończonych pętli z licznikami rosnącymi lub nieskończoną rekurencją).

Fala powinna spełniać następujące właściwości:

  • Amplituda = 20 znaków (amplituda szczytowa)
  • Okres = od 60 do 65 linii (włącznie)
  • Dane wyjściowe powinny składać się tylko ze spacji, nowej linii i |
  • Po każdym wierszu wyjścia zatrzymaj się na 50 ms

Moje oryginalne pytanie zawiera przykładowy wynik, ale nie zamieszczam go tutaj, ponieważ dzięki temu moja odpowiedź będzie śmiesznie długa. Moje oryginalne pytanie można zobaczyć tutaj: Wydrukuj sinusoidalną falę (pionowo)

Najkrótszy Aobecnie: rozwiązanie Perla z 48 znakami: https://codegolf.stackexchange.com/a/18655/12205

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

Najkrótszy Bobecnie: rozwiązanie J z 54 znakami: https://codegolf.stackexchange.com/a/18649/12205

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




Obecnie wynik tej odpowiedzi to 1,133 (okropnie niski wynik)


Obecny wynik według obecnego wzoru wynosi około 1,113
Vi.

@Vi. powinienem usunąć tę odpowiedź, czy powinienem poczekać i zobaczyć, co się stanie? Jeśli to drugie, jak długo powinienem czekać?
user12205

Instrukcja zawiera bajty, a nie znaki. Rozwiązanie APL przekonwertowane na UTL-8 ma 61 bajtów (70 dla UTF-16).
Vi.

2
Twierdzisz, że Perl nie jest językiem zwykle używanym do gry w golfa, ale jest to język, który został po raz pierwszy skojarzony ze słowem golf ! 56-letnia Ruby wygląda jak prawdziwy język A w obecnych odpowiedziach na twoje pytania.
Peter Taylor

8

Dodaj dwie liczby

Uzyskaj dwie liczby ze STDIN i dodaj je razem. Musisz obsługiwać liczby zmiennoprzecinkowe, więc 0,5 + 1,5 musi być równe 2.

Perl 5 (z -E)

say<>+<>

GolfScript

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

Obliczony wynik jako (24+5)/(8+2+5) = 1.9(3). -Erównież liczone jako bajty programu.
Vi.

Ten sam komentarz, który skierowałem do asa: twierdzisz, że Perl nie jest językiem zwykle używanym do gry w golfa, ale jest to język, który po raz pierwszy skojarzono ze słowem golf !
Peter Taylor

Twój program GolfScript nie działa. Działający program byłby n%'+'*'"#{ }"'n/\*~tam, gdzie znak pomiędzy {}jest dosłowną nową linią (nie obsługiwaną w komentarzach).
Peter Taylor

@PeterTaylor W porównaniu z GolfScript Perl jest „zwykłym” językiem; w porównaniu z Javą jest to język „golfowy”.
Vi.

1
J za to nie jest tak źle, faktycznie: +/".1!:1,~1. APL prawdopodobnie byłby jeszcze mniejszy.
algorytm


7

Ocena 48/37 lub 1. (297)

T: napisz fragment kodu, który kończy program po dokładnie godzinie (jak najbliżej, jak w ciągu sekundy) od uruchomienia. Nie martw się o wyjątki, można sobie z nimi poradzić.

Odp .: Java (32)

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

B: dotyczy Befunge 98, wymaga odcisku palca TIME (43)

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

Zajmuje to godzinę, minutę i sekundę w czasie działania i umieszcza komórki w komórkach 02, 01 i 00. Następnie przeskakuje ;do drugiej części. Druga część działa w następujący sposób:

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

podobnie dla minuty i godziny.

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

Zauważ, że Befunge automatycznie wróci na początek linii, gdy dojdzie do końca linii.


Jak widzimy, Befunge nie jest dobry, jeśli chodzi o czekanie na określone czasy. Jednak Java nie jest zła.


9
APL:⎕DL 3600
marinus

14
Java zwykle czyta się jako class Main{public static void main...
Vi.

3
@Vi. patrz „fragment kodu”. Zasadniczo wymaga kodu, który faktycznie działa, nie więcej.
Justin

2
Nie wiem Befunge, ale fragment kodu Java nie „kończy programu” zgodnie z wymaganiami specyfikacji. To wymagałoby albo System.exit(0);snu lub otulenia snu mainmetodą.
Peter Taylor

3
@DoorknobofSnow Nie można skompilować:error: not a statement
Bob

5

Wyjście określonego pliku tekstowego (498.388888 punktów)

Dane wyjściowe celu są tutaj .

Skrypt do wydrukowania w Pythonie 3.4.3 ma 49 bajtów:

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

Naiwny program CJam równy wyjściowemu celowi, poprzez zawijanie ciągu wyjściowego "..."i unikanie każdego "występującego w nim, miałby 26908 bajtów.


Bardzo sprytny, choć może obyć się z ograniczeniem „określonych języków” (co jest niejasne, co prawda).
BMac

Najbliższa reguła to „unikaj wspominania o konkretnym języku”. Python nie jest wspomniany, ale ma wyraźne znaczenie.
Vi.

Tak, ta odpowiedź jest nieco wymowna, chciałem tylko zaznaczyć, że reguła jest trochę śliska. Wyobraź sobie, że bardziej „zniekształciłem” wynik - powiedzmy, biorąc sumę kontrolną SHA1 każdego dokumentu - byłoby bardzo dziwnie twierdzić, że „ta zniekształcona wiązka cyfr szesnastkowych jest zbyt specyficzna dla języka” :)
Lynn

Gdybym chciał udzielić bardziej „uczciwej” odpowiedzi, prawdopodobnie użyłbym Mathematica. Możesz zrobić w nim wiele bardzo specyficznych dla domeny rzeczy, które zajęłyby tysiące bajtów CJam / Pyth / cokolwiek innego. Ale niestety nie znam języka.
Lynn

Link do wyjścia jest martwy.
pppery

4

Powiedz „Witaj świecie!” (50/26 ≈ 1,92)

Pokaż okno komunikatu z komunikatem „Witaj świecie!”

JavaScript

alert('Hello world!')

W przeglądarce z obsługą DOM Level 0+.

Perl

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

Działa na ActivePerl z Win32 :: GUI.


alertnie jest z natury częścią JS, a program GolfScript to tylko komentarz.
Peter Taylor

Zmieniłem odpowiedź, aby używać zwykłego Perla.
Szczoteczka do zębów

3

Wyjście „Witaj świecie!” aż użytkownik naciśnie klawisz „q”, 1.842 105/44 = 2,386

  1. Drukuj „Witaj świecie!” (w tym nowa linia).
  2. Użytkownik naciska klawisz, który nie jest powtarzany na ekranie.
  3. Powtarzaj, aż wciśnięty klawisz to „q”.

QBasic ( 52 39 znaków)

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

Od opublikowania mojej oryginalnej odpowiedzi odkryłem, że mogę wyłączyć automatyczne formatowanie w QB64. : ^ D Z numerem wiersza i ?skrótem do PRINT, wygląda to raczej na potrójne wyrażenie w językach podobnych do C.

Pierwsza wersja:

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

Perl 5 (100 znaków)

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

Powyższe będzie działać tylko na (niektórych?) Systemach UNIX (testowanych na Ubuntu 12.04). Możliwe, że można przejść na wiele platform i sprowadzić do 91 znaków przy użyciu modułu Term :: ReadKey , ale nie przetestowałem tego:

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

1

Witaj, świecie (3 1/3 punktów)

Napisz program, który wyjdzie Hello World..

HQ9 + (1 znak)

To nie jest język „zwykle używany do gry w golfa”, więc uważam, że pasuje tutaj. Nawiasem mówiąc, działa w tym tłumaczu .

H

GolfScript (15 znaków)

Wątpię, czy może być krótszy, nawet jeśli jest to GolfScript.

"Hello World."

8
Nie sądzę, HQ9+garnitury jak A języku. Jest przeznaczony do sztuczek / zagadek / zabawy. Brainfuck / unlambda / inne języki esoterical również nie wydaje się garnitur jako A .
Vi.

@Vi .: Ale zwykle nie jest używany do gry w golfa.
Konrad Borowski

4
Możesz spróbować użyć HQ9+jako języka B i pokonać go przez Javę lub coś takiego ...
Vi.

7
Wygląda na to, że istnieje hierarchia: w porównaniu z Javą Perl jest golfowym językiem. W porównaniu do Perla, GolfScript jest golfowym językiem. W porównaniu do GolfScript, HQ9 + jest golfowym językiem ...
Vi.

@Vi .: Dokładnie sprawdziłem opis twojego zadania. HQ9 + nigdy nie jest używany do gry w golfa, z wyjątkiem dwóch szczególnych zadań - „99 butelek” i „Witaj, świecie”. O ile nie możesz pokazać innego zadania, w którym HQ9 + wygrywa z dowolnym innym językiem programowania, nadal uważam, że pasuje do definicji, nawet jeśli nadużywa go (hej, to konkurs popularności ). HQ9 + po prostu nie jest używany do gry w golfa niezwiązanej z tymi dwoma zadaniami. Nie jest to zwykle używane do gry w golfa. Drugi jest oczywiście przeznaczony dla CodeGolf - to GolfScript.
Konrad Borowski

0

Wyjście „Witaj świecie!”, 33/97 = 2,94

Napisz program, który wyjdzie Hello world!

Arduino lub GML

Serial.print("Hello world!")

lub

show_message("Hello world!")

Oba mają 28 znaków.

GTB

Używam GTB do gry w golfa (zwłaszcza, że ​​sam go stworzyłem, a Turing jest kompletny). Niestety, obsługa małych liter jest ograniczona (ponieważ kalkulator TI-84 nie może sobie z tym poradzić). Jest to prawdopodobnie najkrótszy program GTB, który może wyświetlać 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 znaków.


Czy wersja GTB również wysyła go do portu szeregowego?
Vi.

Czy wersja GTB celowo jest rozdęta różnymi coss i exprsczy naprawdę nie może po prostu wysyłać czegoś w zwykły sposób? Albo "znak nie jest dosłownie ciągiem i wprawia mnie w zakłopotanie ...
Vi.

@Vi. W ogóle nie jest rozdęty ... musi zdjąć e z wyrażenia, dwa l od dołu, o od cos, lub od lub, l od dołu i d od i.
Timtech,

„Inni użytkownicy mogą proponować lepsze B (może w tym w innych językach„ golfowych ”). „--- Pozwól mi spróbować golfa:"Hello world!"
John Dvorak

@JanDvorak Prawdopodobnie masz rację.
Timtech
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.