Zadanie jest proste. Napisz tłumacza języka * .
Istnieją tylko trzy prawidłowe * programy:
*
Drukuje „Hello World”*
Drukuje liczbę losową z przedziału od 0 do 2 147 483 647*+*
Działa wiecznie.
Trzeci przypadek musi być nieskończoną pętlą zgodnie ze specyfikacjami w tym pytaniu
Wejście:
- Dane wejściowe można pobierać dowolną akceptowalną metodą wprowadzania danych, stosując nasze standardowe reguły we / wy
- Zawsze będzie to jeden z powyższych programów
Wynik:
- Pierwszy przypadek powinien zostać wydrukowany dokładnie
Hello World
, z lub bez znaku końca linii. - W drugim przypadku, jeśli maksymalna liczba całkowita twojego języka jest mniejsza niż 2 147 483 647, użyj maksymalnej liczby całkowitej twojego języka
- Pierwszy i drugi przypadek mogą być drukowane na dowolnym akceptowalnym wyjściu według naszych standardowych reguł I / O.
- Trzeci przypadek nie powinien dać żadnego wyniku.
Punktacja:
Ponieważ jest to golf kodowy , wygrywa najkrótsza odpowiedź w bajtach.
code-golf
interpreter
code-golf
array-manipulation
sorting
code-golf
halting-problem
code-golf
javascript
code-golf
algorithm
code-golf
arithmetic
code-golf
math
counting
code-golf
math
code-golf
decision-problem
radiation-hardening
code-golf
conversion
bitwise
code-golf
number
decision-problem
code-golf
string
decision-problem
code-golf
random
game
code-golf
ascii-art
graphical-output
code-golf
decision-problem
binary-tree
tree-traversal
code-challenge
array-manipulation
code-challenge
graphical-output
path-finding
test-battery
algorithm
code-golf
integer
factorial
code-golf
binary-tree
code-golf
grid
graph-theory
code-golf
regular-expression
quine
code-golf
encoding
code-golf
king-of-the-hill
javascript
TheOnlyMrCat
źródło
źródło
0
i2,147,483,647
„ czy ” jest to włączające czy wyłączne? (Np. Czy jest0
to prawidłowy wynik?)-1
ode mnie automatyczna .Odpowiedzi:
* , 0 bajtów
Ponieważ * nie ma możliwości odczytu danych wejściowych, domyślne reguły pozwalają określić, że dane wejściowe należy podać, łącząc je z programem .
(... myślę. Istnieje warunek „co najmniej dwa razy więcej głosów pozytywnych niż głosów negatywnych” , którego nie mam do zweryfikowania przez przedstawiciela).
źródło
R , 69 bajtów
Wypróbuj online!
switch
próbuje dopasować nazwane argumenty, a jeśli nie ma dopasowania, wybiera pierwszy nienazwany po pierwszym, którym w tym przypadku jest nieskończona pętlarepeat{}
.źródło
Galaretka ,
2120 bajtówMonadyczny link akceptujący listę znaków.
Wypróbuj online!
vL’...
działa również (patrz poniżej).W jaki sposób?
Alternatywny
źródło
C (gcc) ,
6663 bajtówDzięki attinat za -3 bajty.
Muszę tylko sprawdzić drugi znak: jeśli ustawiony jest LSB, to jest to
+
( a więc program to „*+*
”) i program się zapętla. Następnie, jeśli jestNUL
, program był „*
” i wyświetla sięHello World
; w przeciwnym razie wyświetla losową wartość („*
”, jedyna pozostała opcja.)Wypróbuj online!
źródło
f(char*s){*++s&1?f(s-1):printf(*s?"%d":"Hello World",rand());}
rand
nie gwarantuje się zwrócenia wystarczająco dużej wartości;RAND_MAX
iINT_MAX
nie ma gwarancji, że będą takie same (i nie są dostępne w kompilatorach świata rzeczywistego, np. Visual Studio'sRAND_MAX
jest32767
, podczas gdyINT_MAX
[na nowoczesnych systemach pochodnych x86] jest2147483647
wartością określoną w pytaniu PO).Python 2 ,
103938987 bajtówI w połączeniu z moją wcześniejszą odpowiedź Chas Browns męska odpowiedź i coś kilka bajtów krótszy.
Liczba losowa będzie wynosić od 0 do 2 ** 31-1 włącznie.
Wypróbuj online!
Poprzednie wersje:
103 bajty
93 bajty
źródło
randint(0,2**31-1)
jerandrange(2**31)
.while'*'<i
saves 2randrange(2**31)
nagetrandbits(31)
(ten ostatni zwracalong
,int
ale nie , aleprint
wydrukujestr
formularz, a nierepr
formularz, więcL
nie będzie końca).i=input()
działa tylko wtedy, gdy dane wejściowe są cytowane, jeśli wpiszesz zwykły*/ * /*+*
, umrze zSyntaxError
(ponieważinput
zawiera niejawneeval
); musisz wpisać'*'/' * '/'*+*'
(lub równoważny z podwójnymi cudzysłowami). Nie widziałem niczego oczywistego w standardowych regułach I / O, które by na to pozwalały, co może oznaczać, że będziesz musiał użyćraw_input()
, kosztując cztery bajty.input()
pobiera ciąg wejściowy i ocenia go. Tak naprawdę nie dodam do danych wejściowych, po prostu biorę ciąg znaków jako dane wejściowe, a łańcuchy mają cudzysłowy. Jest to dość standardowe, w ten sam sposób, w jaki mogę wziąć tablicę[1,2,3]
zamiast jako ciąg rozdzielany, który następnie muszę podzielić i przeanalizować. Celem witryny nie jest ścisłe wprowadzanie danych, ale ułatwienie wejścia / wyjścia, abyśmy mogli skoncentrować kod na danym wyzwaniu.Keg ,
-lp
,-ir
302625242019 bajtów-1 bajt za pomocą flag
Wypróbuj online!
Historia odpowiedzi
Wypróbuj online!
Skrócony
Hello World
do ciągu słownikaWypróbuj online!
Nigdy nie przestałem się dziwić potędze Keg. Kredyty dla użytkownika EdgyNerd dla innego zapisanego bajtu.
Poprzednie wersje
Wypróbuj online!
Kredyt dla użytkownika A__ za zapisany dodatkowy bajt.
Stara wersja
Zasadniczo pobiera program wejściowy i:
Następnie niejawnie wydrukuj stos.
4 bajty zapisane ze względu na fakt, że witaj świecie, nie potrzebujesz interpunkcji.
Wypróbuj online! Stara wersja
Wypróbuj online! Nowa wersja
źródło
Befunge-93 , 54 bajty
Wypróbuj online!
Adnotacja:
Losowość nie jest jednolita. Przy każdym wzroście istnieje 50% szans na zatrzymanie przyrostu.
źródło
Japt , 22/25 bajtów
Pierwsze rozwiązanie dotyczy oryginalnej specyfikacji, która miała
*<space>
jako drugi program, a drugie dotyczy zaktualizowanej specyfikacji, która arbitralnie ją zmieniła<space>*</space>
, dzięki EoI za sugerowaną „poprawkę”.Oba generują błąd przepełnienia po wejściu w nieskończoną pętlę trzeciego programu, ale teoretycznie przy wystarczającej pamięci (którą możemy założyć na potrzeby golfa kodowego ) działałby wiecznie.
Wypróbuj program 1
Wypróbuj program 2
Wypróbuj program 3
Wypróbuj program 1
Wypróbuj program 2
Wypróbuj program 3
źródło
*<space>
. Nie masz czasu na aktualizację teraz.UÌ>S
zamiast¢
w drugim trójskładnikuJavaScript (ES7), 66 bajtów
Wypróbuj online! (Witaj świecie)
Wypróbuj online! (Liczba losowa)
Wypróbuj online! (nieskończona pętla)
źródło
x=(z=>x())&&x()
nie działałoby dla -1 bajtów z nieskończonego kodu pętli, zakładając, że przeglądarka nie ma maksymalnego rozmiaru stosu wywołań?Galaretka ,
2321 bajtówWypróbuj online!
Łącze monadyczne, które przyjmuje pojedynczy argument i zwraca
Hello World
, losową 31-bitową liczbę całkowitą lub nieskończoną pętlę zgodnie ze specyfikacją.Wszystkie opcje:
*
*
*+*
Wyjaśnienie
źródło
Java (JDK) , 83 bajty
Wypróbuj online!
źródło
Python 2 ,
918988 bajtówWypróbuj online!
2 bajty dzięki Jonathanowi Allanowi ; 1 bajt dzięki dla ShadowRanger .
źródło
while'*'<p
saves 2getrandbits(31)
oszczędza bajtrandrange(2**31)
.PowerShell,
60, 56 bajtówDość wersja niemy, jedyny golfa technika tutaj jest pominięcie
Get-
wGet-Random
.UPD. Zmniejszony do 56 bajtów poprzez usunięcie cudzysłowów, dzięki Veskah !
źródło
Perl 5
-p
,4339 bajtówWypróbuj online!
źródło
C # (interaktywny kompilator Visual C #) , 71 bajtów
Wypróbuj online!
źródło
Ruby
-n
, 47 bajtówWypróbuj online!
źródło
Wolfram Language (Mathematica) , 65 bajtów
Wypróbuj online!
źródło
Węgiel drzewny , 30 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Nadużywa domyślnego formatu wejściowego Charcoal, który dzieli się na spacje, jeśli jest tylko jedna linia, a zatem wprowadzanie liczb losowych w rzeczywistości wygląda jak trzy wejścia. Wyjaśnienie:
Powtórz, gdy pierwsze wejście zawiera
*
.Jeśli pierwsze wejście jest
*
tylko ...... następnie zamień na
Hello World
, powodując zakończenie pętli.*+*
nie zostanie zastąpiony, co spowoduje nieskończoną pętlę.Jeśli pierwsze wejście nie jest puste, wyślij je.
Ale jeśli jest pusty, wypisz losową liczbę całkowitą w żądanym zakresie.
źródło
Dodaj ++ , 78 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Brachylog ,
2623 bajtówWypróbuj online!
Pobiera program jako ciąg znaków przez zmienną wejściową i ignoruje zmienną wyjściową. Mocno wykorzystuje gwarancję, że dane wejściowe są zawsze tylko jednym z trzech poprawnych programów: każde wejście o długości trzy będzie zachowywać się tak samo, jak
" * "
i"*+*"
zależnie od tego, czy pierwszy znak jest spacją, a każde inne dane wejściowe będą się zachowywać"*"
.źródło
PHP , 51 bajtów
Wypróbuj online! (Witaj świecie)
Wypróbuj online! (Liczba losowa)
Wypróbuj online! (Nieskończona pętla)
Zajmuje drugie charakter wejścia, które mogą być
''
,'*'
albo'+'
. W przypadku,'+'
gdy'*'<'+'
będzie to prawdą, a pętla będzie nieskończona, w przeciwnym razie po pętli zostanie wyświetlony „Hello World” lub liczba losowa.rand()
Automatycznie generuje liczbę między 0 agetrandmax()
które zastosowania zdefiniowanychRAND_MAX
w standardzie biblioteki C i domyślnie2147483647
na większość platform / środowisk, włącznie TIO.źródło
05AB1E , 21 bajtów
Wypróbuj online. (UWAGA: losowe budowanie jest dość wolne z dużymi listami, więc może upłynąć trochę czasu, zanim wynik zostanie podany).
Wyjaśnienie:
Zobacz moją wskazówkę 05AB1E (sekcja Jak korzystać ze słownika? ), Aby zrozumieć, dlaczego tak
”Ÿ™‚ï
jest"Hello World"
.źródło
Pyth , 32 bajty
Wypróbuj online!
Objaśnienie (Python-ish)
źródło
hC*4\ÿ
to^2 32
, ale aby rozwiązanie było poprawne, powinieneś użyć^2 31
zamiast tego. Również użyjz
zamiastJw
, zapisuje 1 bajt więcej. Twoje wyjaśnienie pomija linię zt
wcześniejlJ
.+
znak, zapisuje 1 bajt, ponieważ nie trzeba go zmniejszać.APL (Dyalog Unicode) , 39 bajtów SBCS
Anonimowy przedrostek lambda.
Wypróbuj online!
{
„dfn”;⍵
jest argument:'+'∊⍵:
jeśli plus jest członkiem argumentu:∇⍵
ogon powraca na argument' '∊⍵
jeśli spacja jest członkiem argumentu:?0
random float (0–1)2E31×
skaluj do (0–2³¹)⌊
piętro'Hello World'
w przeciwnym razie zwróci ciągźródło
Commodore BASIC (VIC-20, C64, TheC64Mini itp.) - 170 tokenizuje bajty BASIC
Myślę, że aby to zrobić dokładniej, będę musiał zagłębić się w dziwny świat języka asemblera 6502, ale to pierwszy szkic.
Po pierwsze,
INPUT
słowo kluczowe w Commodore BASIC ignoruje białe spacje, więc podprogram w linii9
jest szybkim i brudnym sposobem akceptowania pozycji klawiatury, w tym spacji.Drugi punkt, liczby całkowite Commodore BASIC mają zakres 16-bitowych znaków, więc od -32768 do +32767 źródła - więc zachowałem liczbę losową wygenerowaną na 0 - 32767 włącznie
źródło
Strzyżyk ,
143135 bajtówNie jestem dobrym golfistą ... RNG generuje tę samą wartość za każdym razem, ponieważ jest generatorem liczb pseudolosowych.
Wypróbuj online!
źródło
JavaScript, 63 bajty, brak nieskończonej rekurencji
zła sieć, więc brak linku TIO
źródło