Utwórz program, który generuje ciąg hello world („Hello world”, „Hello, World” itp.) I kod źródłowy. Dane wyjściowe są zapisywane na standardowym lub równoważnym. Łańcuch Hello world jest osadzony w kodzie źródłowym.
Na przykład wynikiem może być
(some source code here)hello world(some source code here)
Kiedy dane wyjściowe zostaną ponownie skompilowane lub zinterpretowane, powinny utworzyć podobne dane wyjściowe, ale ciąg znaków hello world musi mieć inną interpunkcję lub wielkie litery. Na przykład w poprzednim przykładzie można utworzyć następujące dane wyjściowe
(some source code here)hello, wORld(some source code here)
Każdy „(tutaj trochę kodu źródłowego)” w tych przykładach może ulec zmianie po każdym wykonaniu lub może być taki sam.
Twoje dane wyjściowe muszą zawierać prawidłowy ciąg hello world dokładnie raz. Może zawierać dowolną liczbę niepoprawnych ciągów hello world. Kod źródłowy może zawierać dowolną liczbę komentarzy, a ciąg hello world może być osadzony w komentarzach. Pierwszy program może mieć zero lub jeden prawidłowy ciąg znaków hello world, ale nie więcej.
Ważna jest następująca interpunkcja:
hello, world
hello world
helloworld
Wszelkie wielkie litery są dopuszczalne. Na przykład są to poprawne ciągi znaków hello world:
Hello, world
hellO WORld
HELLoworlD
Te ciągi są nieprawidłowe:
Hello world
Hello(newline)world
Hello,world
Hello, Steve
Twój program kończy się niepowodzeniem, gdy zostanie spełniony jeden z następujących warunków:
- Wyświetla ciąg znaków hello world, który został wygenerowany podczas wcześniejszego wykonania,
- wynik nie jest już poprawnym kodem źródłowym w tym samym języku lub
- dane wyjściowe nie zawierają dokładnie jednego prawidłowego ciągu hello world.
Twój program nie jest ważny w tym konkursie, chyba że co najmniej dwa pierwsze wykonania zakończą się powodzeniem. Oznacza to, że trzecie wyjście może być nieprawidłowe. Dane wyjściowe Twojego programu mogą nie być losowe. Pierwsze wykonanie powinno zawsze tworzyć takie same drugie wyjście, drugie wykonanie powinno zawsze tworzyć takie samo trzecie wyjście itp.
Wynik jest obliczany jako ilość bajtów w kodzie źródłowym programu początkowego. Najniższy wynik wygrywa.
Obowiązują następujące bonusy (do -60%):
- -5% * (N - 2), gdzie N jest indeksem wykonania, po którym program wygeneruje nieprawidłowe dane wyjściowe. Ten bonus ogranicza się do -50%. Jeśli Twój program odniesie 12 lub więcej sukcesów, otrzymasz maksymalną premię.
- -10%, jeśli twoje dane wyjściowe (w tym pierwszy kod źródłowy) zawierają wszystkie trzy prawidłowe alternatywy interpunkcyjne.
Twoje zgłoszenie powinno zawierać pierwszy kod źródłowy, a także zawierać wyniki pomyślnych wykonań. Jeśli twój program odniesie sukces więcej niż 12 razy, dodaj wynik dla 12 wykonań.
Przykład
Następny wiersz to pierwszy kod źródłowy. Kiedy go wykonujemy, jest to pierwsze wykonanie.
hello world(some source code here)
Następny wiersz to wynik pierwszego kodu źródłowego. To jest pierwsze wyjście.
hello, world(some source code here)
Następny wiersz to wynik drugiego wykonania. To drugie wyjście.
helloworld(some source code here)
Kiedy wykonaliśmy pierwsze wyjście, program ten kwalifikował się do premii -10%. Oznacza to, że mamy dwa wyjścia i jeden oryginalny kod, z których każdy ma inną interpunkcję. Ponadto, ponieważ drugie wyjście było ważne, ten program kwalifikuje się do tego konkursu.
Następny wiersz to wynik trzeciego wykonania. To trzecie wyjście.
Helloworld(some source code here)
Następny wiersz to wynik czwartego wykonania. To czwarte wyjście.
hellworld(some source code here)
To wyjście było nieprawidłowe. Indeks ostatniego ważnego wykonania wynosił 4. Ten program kwalifikuje się do premii -5% * (4 - 2) i -10% premii za interpunkcję. To daje w sumie -20%. Długość pierwszego kodu źródłowego („witaj świecie (tutaj trochę kodu źródłowego)”) wynosiła 34 bajty, więc końcowy wynik to 27,2.
hello world
?Odpowiedzi:
Pyth, 17 bajtów
Inne rozwiązanie Pyth:
Wynik:
Drugie wyjście:
źródło
Mathematica, 214 - 50% = 107 bajtów
Postanowiłem zoptymalizować tutaj liczbę ciągów. Działa to dla 1024 programów bez zatrzymywania, przechodząc przez każdą kombinację wielkich i małych liter. Wykonanie można zobaczyć tutaj .
źródło
s
i analizujesz goToExpression
.)Vitsy, 33–33 * .05 * (11–2) = 18,15 bajtów
Heh! Pobij to! Prawdopodobnie będziesz. :do
Pierwsze wyjście:
Drugie wyjście:
Trzeci wynik:
Czwarta moc wyjściowa:
Piąte wyjście:
Szósty wynik:
Siódma produkcja:
Ósma moc wyjściowa:
Dziewiąte wyjście:
Dziesiąta moc wyjściowa:
Jedenaste wyjście:
To jest ostatnie wyjście, ponieważ spowoduje błąd.
źródło
CJam, n =
34 bajty 28 - 10% - 10% = 22,4uruchamia to następujący łańcuch:
gdzie ostatni nie zawiera już ważnego „Hello, World”.
Sprawdź to tutaj.
Wyjaśnienie
Zauważ, że początkowy program nie zawiera poprawnego „Hello, World”, ale to pozwala nam przejść o jedną iterację dalej.
źródło
CJam
6960-50 % = 30Nadal jestem początkujący, powiedz mi, jak grać w golfa w CJam.
Drukowanie każdej iteracji jest uciążliwe, ponieważ będzie obowiązywać przez 99 iteracji.
Działa poprzez wyliczenie wielkich liter słowa „witaj”. Tedium polega na dzieleniu łańcuchów na części, ponieważ zarówno „witaj świecie”, jak i licznik należy zaktualizować.
Wyjaśnienie
UWAGA: Nie czytam odpowiedzi Mathematica, przepraszam, myślę, że była oryginalna
Po zmianie kolejności i różnej wielkości liter tracę 9 bajtów.
CJam 73 - 60% = 29,2
Tym razem wylicz także interpunkcję.
źródło
GolfScript, 35 bajtów - 50% = 17,5
Zdecydowałem się na przesadną liczbę egzekucji przed powtórzeniem. Ten program, którego dane wyjściowe zostaną przesłane z powrotem do interpretera GolfScript, wygeneruje 890 różnych ciągów Hello World przed pierwszym powtórzeniem. Oto krótkie 15 pierwszych iteracji:
Działa to poprzez iterację ciągu, odwracanie wielkich liter każdej litery (przez XOR kod ASCII z 32), jeśli poprzednia litera (po ewentualnym odwróceniu wielkości liter) ma małe litery. Pierwsza litera zostanie odwrócona, jeśli liczba na początku programu wynosi 32 zamiast 0 - a liczba wyjściowa dla następnej iteracji będzie wynosić 32 za każdym razem, gdy ostatnia litera łańcucha jest mała, co powoduje zmiany na końcu ciąg do propagacji z powrotem na początek podczas następnej iteracji.
(Ten szczególny proces sprzężenia zwrotnego został uzyskany całkowicie ad hoc . Początkowo chciałem po prostu uruchomić prosty licznik binarny, używając wielkich i małych liter jako bitów, ale jego wdrożenie zajęło zbyt wiele bajtów, więc zacząłem go poprawiać, aby znaleźć coś krótszego to wciąż dawałoby dość wysoką długość cyklu. Ponieważ teoretyczne maksimum, przy użyciu tylko przerzucania wielkości liter, wynosi 2 10 = 1024, uzyskanie cyklu iteracji 890 jest całkiem niezłe).
Niestety, premia za dodatkowe iteracje jest ograniczona do -50%; bez ograniczenia program ten miałby ogromną premię -4440%. ;-)
źródło
Pyth, 18 bajtów
Które zwraca:
Co z kolei drukuje:
Miałem rozwiązanie, które wykonało wszystkie trzy pisowni, ale jest dłuższe nawet z premią.
źródło
Simplex , 21 bajtów.
To co Simplex był urodzony na. Zdecydowanie mogę z tym pójść dalej.
(Wciąż wciskam Ctrl + Enter, przepraszam! Obwiniam to na klawiaturze tabletu)
Próba 3, wer. 0,8 +, 31 -5% = 29,45 bajtów (metinks UTF-8)
Ta emotka pośrodku wyraża mnie. Raczej. Dlaczego znowu to zrobiłem? ._.
2. wyjście:
3. wyjście:
Końcowe wyjście:
Próba 2, wer. 0.8 +, 21 bajtów (chyba UTF-8)
Wynik:
Końcowe wyjście:
Próba 1, wersja 0. +
2826 bajtówNie jestem pewien, czy to kwalifikuje się do pierwszego bonusu…
Pierwsze wyjście:
Program zewnętrzny jest oceniany pod koniec wykonywania (robi to dla y; tak wygląda program zewnętrzny:
Końcowe wyjście:
źródło
Rubinowy, 81-50% = 40,5
Oryginalny kod:
Kolejne wyniki:
Myślę, że liczy się to jako pełne 50%? Może być wyłączony o jeden. Poza tym w Ruby jest prawdopodobnie lepsze rozwiązanie bez premii.
Oryginalny kod nie zawiera „helloworld”, ale tworzy quine, która zastępuje pierwszą wielką literę w kodzie źródłowym wersją pisaną małymi literami. Tak więc z każdym kolejnym uruchomieniem quine wyprowadzana jest jedna litera mniej.
Sztuczka polega na tym, aby użyć łańcucha formatu do interpolacji zarówno samego łańcucha, do quitingu, jak i łańcucha Hello World, aby pojawiał się tylko raz.
źródło
PHP, 297 - 40% = 178,2 bajtów
Nie bardzo konkurencyjny, ale pisanie było fajne
To odmiana tego quine:
ale dodaje również „helloworld” do wyniku i zastępuje
0
go0+1
(w następnej iteracji1
z1+1
i tak dalej). Korzystanie zsubstr
istniejącego wyjścia „helloworld” zostaje usunięte przed dodaniem nowego „helloworld”.Aby uzyskać inny wynik, jedna litera „helloworld” jest pisana wielkimi literami (określana przez liczbę rosnącą). To jest odpowiedni kod:
Wyzwanie polegało na tym, aby nie używać żadnych numerów oprócz tutaj i do wymiany numerów
Tam już widzisz, że
+1
jest to realizowane jako+(int)true
.Do argumentów podciągu potrzebowałem
0, 146
:Zmusza się niepusty łańcuch „i”
true
i zanegowany.false
jest poprawnym argumentem liczby całkowitej i jest traktowany jak0
.ord(I)
to wartość ASCII „I”: 73Wyjście (pierwsza iteracja):
Wyjście (2. iteracja):
Wyjście (10. iteracja):
To jest ostatnie prawidłowe wyjście, ale już nie jest to poprawny program
źródło
(int)true
na `` !! i '' i zapisać 12 bajtów. Spróbuję zagrać w golfa nieco późniejPip, 48-50% = 24
który rozwija się następująco:
ostatnie wyjście jest niepoprawne, ponieważ
HELLOWORLD
nie uległo zmianie. (Popraw mnie, jeśli nie zrobiłem dobrze bonusu.)Dzięki temu pytaniu właśnie odkryłem nową technikę quine! Podstawowy quine to
V Y"`V Y`.RPy"
:Nasz dodatkowy kod modyfikuje ciąg
y
przed ponownym przetworzeniem w następujący sposób:0
znaki znajdujące się są wielkie;0
zo+0
(jeślio
jest zmienna wbudowane równa 1).Następnym razem wokół numeru w kodzie jest
1
zamiast0
, i tak dalej.źródło
JavaScript, 52 bajty
Test
=>
<='("hello world").replace(" ","")'
=> eval('("hello world").replace(" ","")')
<= 'helloworld'
źródło
///, 23 bajty - 10% = 20,7?
Wypróbuj online!
Pierwsze wyjście:
Drugie wyjście:
źródło
BBC BASIC, 56 bajtów
Zrozumiałem to, zanim zdałem sobie sprawę, jak późno jestem w grze. Oto, co warto, oto moja wersja i moja pierwsza próba kodu golfowego StackExchange.
Tutaj V. przypomina znaki podane przez kody ASCII na poniższej liście oddzielonej przecinkami, a P. jest skrótem do wydrukowania. Korzystam z znaku backspace, aby zastąpić istniejący ciąg „helloworld”.
Kod wejściowy:
Pierwsze wyjście:
Drugi wynik:
Można to przetestować online na https://bbc.godbolt.org/
źródło