Musisz stworzyć grę Zbyt niska --- Zbyt wysoka (TLTH) w najkrótszym kodzie (w bajtach)
Zasady gry:
- Komputer wybierze liczbę losową spoza zakresu liczb całkowitych (-32768..32767).
- Teraz wymyślisz liczbę i wprowadzisz ją.
- Komputer powie, czy Twój numer jest niższy (
TOO LOW
) lub wyższy (TOO HIGH
) niż wybrany numer. - Po odgadnięciu numeru komputer powinien zostać wyświetlony
Congrats! You found the number!
.
Reguły kodu:
Nie używaj znaków
T
,O
,L
,W
,H
,I
iG
(ani małe ani wielkie) w ciąg znaków lub literałów.
Na przykład:tolower(T); // Acceptable cout<<"T"; // Unacceptable char ch='T'; // Unacceptable
Usuń 300 bajtów, jeśli Twój kod może wyświetlać reguły gry przed jej uruchomieniem.
Usuń 50 bajtów, jeśli Twój kod może zliczyć liczbę tur i wyświetlić liczbę tur wykonanych na końcu gry w następujący sposób:
"Congrats! You found the number in n turns!"
gdzie n jest liczbą wykonanych zwojów zamiast
"Congrats! You found the number!"
Usuń 25 bajtów z wyniku, jeśli kod może powiedzieć użytkownikowi, że wprowadzona liczba jest poza zakresem liczb całkowitych.
Na przykład:Enter the number: 40000 Sorry! This number is out of range Please Enter the number again:
Usuń 25 bajtów, jeśli kod pobiera liczbę losową nie z żadnej wbudowanej funkcji losowej.
Usuń 10 bajtów, jeśli kod wyświetla kolor „gratulacje” (wybierz dowolny kolor oprócz domyślnego białego).
Zasady przesyłania:
Dodaj nagłówek ze swoim językowym imieniem i wynikiem wraz ze wszystkimi obliczeniami nagród i ich wyjaśnieniem.
Opublikuj swój kod do gry w golfa i bez golfa.
Zwycięzca
- Odpowiedź z najmniej bajtami wygrywa.
- W przypadku remisu wygrywa odpowiedź z większą liczbą głosów.
- Zwycięzca zostanie wybrany po 5 dniach.
EDYCJA : Pokaż wyniki swojego kodu.
EDYCJA-2 : Możesz zignorować Regułę-1 dla Reguł-2,3 i 4 w Regułach Kodowych
Powodzenia :]
WhileURong(USayNumbr;ISayBigrOrSmalr)
Odpowiedzi:
JavaScript (-210 punktów (
190
bajty -300
(dla reguł) - -50
(dla liczby odgadnięć) -25
(za nieużywanie żadnego wbudowanego źródła liczb losowych) -25
(za informację, czy dane wejściowe są poza zakresem podpisanego16
-bit liczba całkowita) ):Gra w golfa:
Pełny kod (ładnie sformatowany):
Wynik:
źródło
0
. :-( Ponadto, czy nie powinno być spacji wTOO LOW
/TOO HIGH
?Perl 5.10+:
159144 bajtów - 350 = −206 punktówEdycja 2: Wraz z ostatnią zmianą reguł, która pozwala mi używać dowolnego literału łańcuchowego dla komunikatu „gratulacje”, mogę zapisać 15 bajtów z mojego oryginalnego 159-bajtowego rozwiązania. Nie ma nic szczególnie nowego ani interesującego w powyższym nowym kodzie w porównaniu ze starym kodem (właśnie pozbyłem się
p
funkcji isay
zamiast tego wywołałem bezpośrednio), więc pozostała część tego postu opisuje oryginalny kod, pokazany poniżej:Tak, nadużywam piekła poza regułą 1. Kto potrzebuje sznurków, kiedy możesz mieć słowa bez słów ? ;-)
Uruchom za pomocą,
perl -M5.010
aby włączyć funkcję Perl 5.10+say
(lub zastąp korpusp
funkcjiprint join$",@_,$/
za dodatkową opłatą 5 bajtów).Wyniki bonusowe:
Kod nie zawiera literałów łańcuchowych w ścisłym tego słowa znaczeniu, więc powiedziałbym, że zasada 1 nie jest technicznie naruszona. Sztuczka polega na tym, że w Perlu bez
use strict
identyfikatora, który nie odpowiada słowu kluczowemu lub podprogramowi znanego języka, będzie można łatwo ocenić jego własną nazwę. Następnie funkcjap
po prostu pobiera listę słów i drukuje je, oddzielając je spacjami.Przykładowy przebieg gry:
Edycja: Och, racja, zasady mówią, że muszę również opublikować wersję kodu bez gry w golfa, więc proszę bardzo. Technicznie rzecz biorąc, jest to „gra w golfa”, ponieważ zwykle od początku komponuję swoje programy do gry w golfa w mniej lub bardziej w pełni golfowej formie, a czasem może być trudne usunięcie wszystkich optymalizacji gry w golfa bez zasadniczej zmiany tego, jak niektóre części program pracy. Mimo to przynajmniej próbowałem dodać spacje, komentarze i bardziej znaczące nazwy funkcji / zmiennych:
Ps. Alternatywnie, jeśli korzystanie ze słów kluczowych zamiast ciągów znaków jest dla ciebie zbyt trudne, oto 182-bajtowe rozwiązanie, które nie używa liter
TOLWHIG
nawet w słowach kluczowych (ale używa ich w operatorze transliteracji). Nadal dostaje te same bonusy, za łączny wynik 182 - 350 = −168 punktów :Wyjście wygląda dokładnie tak samo jak powyżej. Zgodnie z (oryginalnymi) regułami używam liter
t
ii
drukuję reguły, ponieważ jest to dozwolone; wyeliminowanie nawet tych zastosowań kosztowałoby tylko dwa dodatkowe bajty. I odwrotnie, utworzenie całej wielkiej litery wyjściowej (co wydaje się dozwolone na podstawie powyższych komentarzy) pozwoliłoby mi zaoszczędzić trzy bajty.źródło
def method_missing *args;args.join' ';end
.Python 2: -80 punktów (270-300-50)
Wynik to 270 znaków, minus 300 za pokazanie instrukcji, minus 50 za pokazanie liczby zgadnięć w „gratulacjach!” string, w sumie ujemne 80 punktów.
Wersja pętli bez golfa, z nieskalowanymi ciągami:
Wbudowana
cmp
funkcja zwraca 0, jeśli wartości są równe, -1, jeśli pierwsza jest mniejsza, a 1, jeśli pierwsza jest większa. Używam tej wartości do indeksowania krotki ciągów, a następnie ponownie jako warunek wyjścia pętli. Indeksowanie sekwencji z indeksem ujemnym (jak -1) liczy się od końca sekwencji, a nie od początku.Kusiło mnie, aby pominąć importowanie i po prostu użyć
4
jako mojej losowej liczby, zgodnie z XKCD 221 (czy to kwalifikuje się do bonusu -25 znaków?).Przykład uruchomienia (z błędem, w którym nie mogę wykonać obliczeń ujemnych):
źródło
g
zero iwhile
pętla się kończy.You can ignore Rule-1 for Rules-2,3 & 4 in Code Rules
JavaScript 293, -300 (reguły) - 50 (wyświetlanie zakrętów) - 25 (ostrzeżenie o zasięgu) - 25 (brak losowej funkcji) = -107 (nowy wynik)
r=new Date%65536+~(z=32767);n=x="";for((A=alert)("\107uess my number, \111 \147\151ve feedback");(x=prompt())!=r;A(0>(x-~z^x-z)?"\164\157\157 "+(x>r?"\150\151\147\150":"\154\157\167"):"Ran\147e: "+~z+" - "+z))n++;A("C\157n\147ra\164s! Y\157u f\157und \164\150e number \151n "+ ++n+"\164urns!")
Twierdziłbym, że zgodnie z konwencjami RGB czarny jest kolorem, ale to byłoby trochę oszustwo ...
Aha, i mogę dodać, bez łamania zasady nr 1!
Dane wyjściowe w serii alertów i podpowiedzi
Nieskluczony kod:
źródło
A=alert;
i zastępując wszystkie zalert
zA
. I jeszcze jedno, jeśli przesuniesz alertA(0>(x...
po średnikuprompt())!=r;)n++1
.feedback if too high/low
który używa obecnie 84 znakówi give feedback
(co wymagałoby tylko\151 \147\151ve feedback
24 znaków do zapisania 60 znaków .n++
pętlę for do opcji,x=prompt(n++)
aby zaoszczędzić czasu+ ++n+
na ostatnim ostrzeżeniu. Zaoszczędziłby 3.JavaScript, 324 bajty, wynik -76
[Zaktualizowano z powodu zmian reguł]
Łączny wynik: -76
Gra w golfa:
Pozwala oderwać się od tego bałaganu.
Po pierwsze, poprawnie zidentyfikowane (ale nadal nie jest to zbyt dobre w przypadku zaciemnionego kodu):
Po drugie, zmiana nazw identyfikatorów:
Tak więc funkcja odblokowania pobiera wszystkie znaki między ASCII 33 (
!
) a ASCII 58 (:
) i dodaje 32, konwertując je na znaki z zakresuA-Z
.Pozwala odblokować kod więcej, odszyfrowując wszystkie ciągi:
Na koniec przenieśmy niektóre instrukcje w inne miejsca, zamień długi łańcuch trójskładnikowy na ifs i else, połącz łańcuchy konkatenacyjne i uprość matematykę, aby zwiększyć czytelność:
Próba:
źródło
C - 272 znaków - 300-50 - 25 = -103
Kod do gry w golfa:
Nie golfowany:
Wynik:
źródło
C: 237 - 300 - 50 - 25 - 25 - 10: -173 punktów
-300 za reguły, -50 za pokazanie liczby zgadnięć, -25 za brak użycia wbudowanego generatora liczb losowych, -25 za komunikat o przekroczeniu zakresu i -10 za pokolorowanie komunikatu gratulacyjnego.
Nie golfowany:
Przykładowy przebieg:
Ostatnia linia pokazuje się na czerwono.
źródło
bash, -137
Wynik
273 (bajty) - 300 (reguły) - 50 (liczba prób) - 25 (ostrzeżenie OOF) - 25 (niestandardowe PRNG) - 10 (kolor)
Wersja golfowa
Zauważ, że ostatni wiersz jest komentarzem, więc nie zawiera literałów ani znaków.
Wersja bez golfa
Próbka wyjściowa
Ostatnia linia jest wydrukowana na zielono.
źródło
C #: -30 punktów
Gra w golfa :
Aby go uruchomić, umieścić go w pliku (code.cs) i uruchomić z scriptcs w linii poleceń:
scriptcs code.cs
.Ungolfed : Rozszerzyłem nazwy zmiennych na coś łatwiejszego do zrozumienia i zamieniłem litery szesnastkowe na prawdziwe.
Przykładowe dane wyjściowe dostępne tutaj .
źródło
T
,O
,L
,W
,H
,I
iG
(ani małymi literami ani litera) w ciąg znaków lub literałów. ”T
,O
,L
... z\x54
,\x4F
,\x4C
... a ty jesteś w porządku.C ++ 505 + (-300-50-25-25) = 105
-300: Instrukcje
-50: Pokazuje liczbę zwojów
-25: Nie używa losowej funkcji
-25: ostrzega użytkownika o wejściu poza zasięg
GOLFED
UNGOLFED
WYNIK
źródło
C 183–300–25 = -142
183 bajtów -300 dla reguł -25 za nieużywanie losowej biblioteki
wersja bez golfa:
przykładowy przebieg:
źródło
"TOO HIGH"
i"TOO LOW"
oba zawierają niedozwolone znakiTOLWHIGtolwhig
.TOO LOW
dozwolone przez EDIT 2 ?J - 190 char -300 -50 = -160 pkt
Objaśnienie (pamiętaj, że J jest czytany od prawej do lewej):
'WhileURong(USayNumbr;ISayBigrOrSmalr)'1!:2]2
- Wydrukuj zasady.32767-?2^16[
- Podrzuć wartość zwracaną, a następnie wygeneruj losową liczbę od 0 do 2 ^ 16-1 włącznie. Następnie dostosuj go do zakresu -32768..32767, odejmując go od 32767.1>:@]^:(...)^:_~
-x u^:v^:_ y
Wzór jest trochę jak pętla while.x
pozostaje stały iy
mutuje się przy każdym wykonaniuu
. Trwa to, dopóki niex v y
zwróci 0 lubx u y
nie spowoduje zmiany nay
. W~
swapy dwóch argumentów, tak żex
będzie liczba losowa iy
rozpocznie się 1. Naszeu
jest>:@]
, co to przyrosty 1 i zwraca go, więc działa jako licznik ix u y
stan wypowiedzenia nie może nastąpić.[:".1!:1@1:
- Weź licznik i zignoruj jego wartość, używając zamiast tego cyfry 1 (1:
). Wczytaj wiersz wprowadzania (1!:1
) z klawiatury (uchwyt pliku 1) i uruchom go (".
). Pozwala to J, którego znakiem ujemnym jest zwykle_
, przyjmowanie liczb w postaci-n
(ocenia się jako negację zastosowaną do liczbyn
).]`(...)@.*@-
- Weź różnicę liczby losowej z poprzedniej i zgadnij (-
). Teraz wybieramy następną akcję w zależności od tego, czy ta różnica wynosi zero (@.*
). Jeśli tak, to zwróć (]`
), że 0 jako wynikx v y
, aby wykonanie zakończyło się, a cała pętla while zwróci licznik. Jeszcze...71+13 8 8 _39,(5 8 16;1 2 0 1){::~0&>
- Zwróć tablicę,5 8 16
jeśli liczba jest ujemna, a1 2 0 1
jeśli jest dodatnia. Następnie prepend13 8 8 _39
i dodać 71 do wszystkiego, więc mamy albo84 79 79 32 76 79 87
albo84 79 79 32 72 73 71 72
.1[2:1!:2~a.{~
- Zamień te cyfry na znaki ASCII, indeksując je alfabetema.
. Następnie wydrukuj je za pomocą1!:2
(używając uchwytu pliku 2) i zwróć 1 w wynikux v y
.'Congrats, you found the number in ',' turns!',~":
- Po zakończeniu pętli zwraca licznik. Konwertuj go na ciąg za pomocą":
i umieść między ciągami znaków'Congrats, you found the number in '
i' turns!'
.Przykładowe dane wyjściowe:
źródło
JavaScript -40
335 - 300 (zasady) - 50 (liczba zwojów) - 25 (poza zasięgiem)
Myślę, że nie wygra, ale fajny sposób na zdobycie listów.
Grał w golfa
Nie golfił
Próbka wyjściowa
źródło
APL (Dyalog) (157 - 300 - 50 = -193)
(Tak, liczą się one jako bajty, zestaw znaków APL mieści się w bajcie).
Twierdziłem, że „wyświetl zasady gry” i „policz liczbę tur”.
Przykładowy przebieg:
Nie golfowany:
źródło
Pogo: -95 (255–300–50)
Jeśli liczba wynosi 10:
Liczba znaków jest oparta na kodzie, z którego usunięto wszystkie białe znaki.
Pamiętaj, że Pogo nie jest fałszywym językiem. Stworzyłem go i napisałem dla niego kompilator i IDE: https://github.com/nrubin29/Pogo
źródło