Twój cel : napisanie kodu, który da klasyczny wynik „Cześć, świecie!” drukowane do STDOUT lub równoważnego.
Reguły : Kod musi być w całości drukowany ASCII. Cały kod musi być funkcjonalny - usunięcie dowolnego pojedynczego znaku zliczającego musi zmienić wynik lub spowodować, że kod nie będzie działał. Wszystkie zmienne muszą być użyte po przypisaniu. Literały znakowe i łańcuchowe muszą być niezbędne do uzyskania danych wyjściowych - to znaczy zastąpienie dowolnego literału znakowego lub dowolnego znaku w łańcuchu literowym innym znakiem musi być zdolne do zmiany wyniku (a nie poprzez efekt sekwencji ucieczki - zastąpienie znaku odwrotnym ukośnikiem lub odpowiednik)
(UWAGA: Ostateczna reguła została edytowana w)
Punktacja : Tutaj robi się ciekawie. Najwyższy wynik wygrywa według liczby znaków, zgodnie z typowymi regułami kręgli kodowych. Jednak wielokrotne użycie znaków spowoduje odjęcie punktów. Konkretnie...
- Wielokrotne użycie dowolnego znaku alfanumerycznego (az, AZ, 0-9) spowoduje odjęcie 3 punktów za powtórzenie (pierwsze użycie nie spowoduje odliczenia).
- Powtarzające się stosowanie podstawowej interpunkcji ([!? .-, ": ';]) - łącznie z nawiasami - spowoduje odjęcie 2 punktów za powtórzenie.
- Wielokrotne użycie innych znaków ASCII {`~ @ # $% ^ & * _ + = | \ /> <} - łącznie z nawiasami klamrowymi - spowoduje odjęcie 4 punktów za powtórzenie.
- Wielokrotne użycie spacji, tabulatorów i znaków nowej linii spowoduje odjęcie 1 punktu za powtórzenie. Oznacza to, że tylko pierwsze użycie spacji, tabulacji lub nowego wiersza będzie się liczyło do sumy całkowitej.
Uwaga: komentarze nie liczą się do sumy, chociaż znaki oznaczające początek / koniec komentarza. Na przykład w C / C ++, jeśli masz /* This is a comment */
, to policzy dwa ukośniki i dwie gwiazdki, ale nic między nimi.
Kilka przykładów (uwaga: użycie Julii jako przykładowego języka) ...
print("Hello, world!");
Wszystkich widocznych znaków: 22
Zawiera spację: +1
Powtarzane
znaki alfanumeryczne: -12 dla ll Powtarzana interpunkcja: -2 dla „
Wynik końcowy: 22 + 1-12-2 = 9
print("Hel",char(108),"o, wor",0x108,"d!"); # 0x108 makes a Uint8 that prints as ASCII
Wszystkie znaki: 43 (nie liczy żadnych znaków po #, który jest znakiem komentarza)
Zawiera spację: +1
Powtarzane znaki
alfanumeryczne: -18 dla rr1008
Powtarzane znaki interpunkcyjne: -24 dla () „” „” „,,,,
Końcowy wynik: 43 + 1-24-18 = 2
xy=STDOUT
m="Hello, world!"
print(xy,m);
Wszystkich widocznych znaków: 37
Zawiera
nowy wiersz : +1
Zawiera spację: +1
Powtarzane
znaki alfanumeryczne: -18 dla ksyllor Powtarzane znaki interpunkcyjne: -4 dla „,
Powtarzane inne ASCII: -4 dla =
Wynik końcowy: 37 + 1 + 1-18-4 -4 = 13
Kilka nieprawidłowych fragmentów kodu ...
x=2;print("Hello,world!")
Problem: x
jest przypisany, ale nieużywany.
print("Hello,"*" world!")
Problem: *
jest niepotrzebny, bez niego wynik będzie taki sam.
k=1
if k>0
print("Hello, world!")
else
print("abcghjmquvxyzABCDEFGIJKLMNOPQRSTUVWXYZ_+*-&|")
end
Problem: Drugie print
polecenie nie zostanie uruchomione. Również usunięcie znaków w cudzysłowie w drugim print
poleceniu nie zmieni wyniku.
x="Hello, world!";
print(x)
Problem: usunięcie znaku nowej linii nie zmieni wyniku ani nie spowoduje błędu (w Julii średnik jest konieczny tylko wtedy, gdy wiele poleceń znajduje się w tym samym wierszu, w przeciwnym razie po prostu pomija wartość zwracaną).
print("Hellos\b, world!")
Problem: s
postać nie wpływa na wynik, ponieważ zostaje skasowana \b
. Jest to dopuszczalne, jeśli jest wykonane za pomocą code ( "Hello",char(100),"\b, world!"
), ale nie można tego zrobić za pomocą literałów łańcuchowych lub literowych.
Wygodny kalkulator wyników - http://jsfiddle.net/4t7qG/2/ - dzięki Doorknob