Instrukcje
Biorąc nieznaną ciąg wejściowy i
o wartości zarówno głowic lub ogonów , powrót 1
do głowy lub -1
za ogony z najkrótszego kodu.
Przykładowy kod bez golfa (55b):
if(i == "heads"){
print(1);
}else{
print(-1);
}
Przykładowy kod do gry w golfa (16b):
print("t">i||-1)
Javascript został wykorzystany dla przykładu, ale to nie wymóg . Przepraszamy, jeśli jest zbyt prosty dla większości użytkowników, można go ulepszyć.
Odpowiedzi:
CJam, 4 bajty
Zakłada, że zmienna
I
przechowuje dane wejściowe, ponieważi
nie jest poprawnym identyfikatorem w CJam.Wypróbuj online.
Jest to równoważne z kodem JavaScript
I.indexOf('e')
.źródło
p
w tym? Czy w CJam jest to standardem?p
nie jest potrzebny.C, 18 bajtów
Całkiem proste, ale zróbmy to dla zabawy ...
Biorąc pod uwagę ciąg,
char *i
który wypisuje 1 dlaheads
i -1 dlatails
, z końcowym znakiem nowej linii.Wyjaśnienie
W C
"-1" + 1
wskazuje 1 znak do przodu, więc jest taki sam jak"1"
. Rzućmy okiem na pierwsze postacie:Jeśli policzymy bity od skrajnie prawej strony zaczynającej się od zera, bit 3 ma wartość 1 w,
heads
a 0 wtails
: zsumowanie"-1"
daje odpowiedni łańcuch. To wygląda tak:Teraz substytut
i[0]
z*i
a prawy shift z power-of-two podziału zaoszczędzić kilka bajtów. Usuń także bezużyteczne nawiasy:Teraz
& 1
można go zastąpić% 2
. Liczba znaków jest taka sama, ale moduł ma wyższy priorytet, pozwalając na upuszczenie nawiasów. Usuń białe znaki:Premia
Myślę, że najkrótszym sposobem na uzyskanie liczby całkowitej 1 lub -1 (nie ciągu) w C jest:
Wyjaśnienie:
źródło
Rubinowy, 8 (6 bez wyjścia)
Operator rakiet!
źródło
PHP - 11 bajtów
Działa to, ponieważ
'tails' ^ 'F'
→'2'
i'heads' ^ 'F'
→'.'
, które są wpisane jako liczba całkowita0
.Możesz przetestować to rozwiązanie (lub dowolne z poniższych) w następujący sposób:
Ideone Link
Alternatywy
15 :
<?=1-md5($i)%3;
16 :
<?=md5($i)[5]-5;
16 :
<?=-crc32($i)%5;
źródło
TI-BASIC, 9-10 bajtów
Bezpośredni. „t” znajduje się w pozycji 1 „ogonów”, ale „t” nie znajduje się w ciągu „głów”, więc inString (zwraca 1 dla ogonów i 0 dla głów.
Jeśli twój kalkulator jest w trybie radian (jak powinien być każdy matematyk), zajmuje tylko dziewięć bajtów:
Zauważ, że kalkulatory TI nie mają nazwanych ciągów, więc dane wejściowe znajdują się w zmiennej odpowiedzi kalkulatora. Zauważ też, że małe litery mają po dwa bajty, więc to rozwiązanie faktycznie zajmuje mniej pamięci niż słowo „heads”.
źródło
t
IinString(
mają po dwa bajty.Rozszczepienie ,
2621 bajtówMartin (i jego doskonała odpowiedź tutaj ) przekonał mnie do nauki nowego języka, a jakie jest lepsze miejsce niż szybki golf? To prawie na pewno nie jest optymalne, ale hej, było fajnie! Gdy poczuję się dobrze, mogę podać jakieś wyjaśnienie, jeśli będzie wymagane.
źródło
Python 2, 16 bajtów
źródło
Pyth - 4 bajty
Biegaj z głowami lub ogonami . Jak
i
jestint
w Pyth, używaz
jako nazwy zmiennej, która zawiera żadnych danych użytkownika. Jest to odpowiednik Pythonaprint(z.find("e"))
, dlatego używa metody @ Dennisa.źródło
VBA (Excel), 12 bajtów
Nie jest to fantastyczna gra w golfa, ale fajnie jest wypróbować VBA, aby zbliżyć się do odpowiedniego języka programowania ...
i jest łańcuchem i wykorzystuje tylko wartość ASCII pierwszego znaku, podzieloną przez 6 i odjętą od 13, aby dać 1 lub -1. Bardzo prosty.
Przykład uruchomienia w bezpośrednim oknie (10 dodatkowych bajtów, aby ustawić zmienną wejściową):
źródło
C, 22 bajty
Podziękowania dla @TheE za powiedzenie mi o tym !
Wyjaśnienie:
Jeśli pierwszy znak ciągu jest większy niż
'h'
, ciąg"-1"
jest drukowany. W przeciwnym razie ciąg"1"
zostanie wydrukowany. Zauważ, że to podejście ma końcowy znak nowej linii.Stara wersja (25 bajtów):
Wyjaśnienie:
Jeśli pierwszy znak ciągu jest większy niż
'h'
, drukowane jest -1. W przeciwnym razie drukowane jest 1.źródło
h
i 7 zat
.puts(*i>'h'?"-1":"1");
nie byłoby lepsze użycie putów ? (22 bajtów)Tr:
1713 znaków(Lub
1410, jeśli policzysz tylko argumenty ...)Przykładowy przebieg:
Krótkie wyjaśnienie:
tr
oznacza transliterację, co oznacza, że zastępuje każdy znak danych wejściowych znalezionych w pierwszym argumencie znakiem w tej samej pozycji w drugim argumencie:Jeśli pierwszy argument jest dłuższy, znaki bez dopasowania pozycyjnego w drugim argumencie są zastępowane ostatnim znakiem drugiego argumentu:
Gdy używana jest opcja
-s
(--squeeze-repeats
), kolejne znaki, które zostałyby zastąpione tym samym znakiem, są zastępowane jednocześnie:Jeśli więc wymienimy wszystkie znaki w „ogonach”, otrzymamy to, czego potrzebujemy:
To samo dotyczy „głów”, ale musimy zachować „t” z przodu, aby zużyć minus (znaki posortowane alfabetycznie pod kątem przerażenia):
Scalenie wszystkich unikalnych znaków „ogonów” i „głów” w jednym pierwszym argumencie, trzymając „t” przed sobą, prowadzi do ostatecznego rozwiązania:
Aby uniknąć wyliczania postaci, w odstępie od - do formatu może być stosowany zamiast.
źródło
tr
. POSIXly:tr -s ta-s '-[1*]'
Zestaw 8088, IBM PC DOS, 17 bajtów
Niezmontowane:
Wyjaśnienie:
Użyj flagi parzystości procesora, aby ustalić, czy pierwszy znak jest
'h'
(parzystą liczbą plików binarnych1
) czy't'
(nieparzystą liczbą plików binarnych1
). Oszczędza to jeden bajt w porównaniu z char w ASCII.Wejście z wiersza poleceń, wyjście do konsoli.
Wejście wyjście:
źródło
Japt , 2 bajty
Wypróbuj online
źródło
shell (przenośny / POSIX), 16 bajtów
expr $i : he - 1
Wypróbuj online!
Dzięki @ StéphaneChazelas w unix.stackexchange.com
Wypróbowano inne rozwiązania:
echo $[30#$i%7-1] # 17 bytes but only in bash, zsh.
Wypróbuj online!echo $((30#$i%7-1)) # 19 bytes but only bash,ksh,zsh.
Wypróbuj online!he=2;echo $[${i%a*}-1] # 22 bytes But only in bash,zsh .
Wypróbuj online!a=${i%h*};echo ${a:+-}1 # 23 .
przenośny . Wypróbuj online!he=2;echo $((${i%a*}-1)) # 24 bytes .
przenośny . Wypróbuj online!IFS=h;set $i;echo ${1:+-}1 # 26 (change IFS) .
przenośny . Wypróbuj online!(IFS=h;set $i;echo ${1:+-}1) # 28 (subshell) .
przenośny . Wypróbuj online!(IFS=h;set $i;echo $(($#*2-3))) # 31 bytes .
przenośny . Wypróbuj online!Uwaga: Używanie
dash
jako rozsądnego porównania przenośnego testera powłoki.expr $i : he - 1
Działa poprzez liczenie, ile znaków pasujehe
z$i : he
.heads
Mecz2
itails
mecz 0 (brak) .Następnie odejmując1
z- 1
.$[30#$i%7-1]
działa poprzez konwersję ciągu na liczbę całkowitą. Podstawa 30 i mod przez 7 zostały wybrane, aby uzyskać różnicę 2 międzyheads
itails
. Następnie odejmując 1, konwertuje liczby na1
i-1
.Zauważ, że a
$[...]
to archaiczna forma wyrażenia arytmetycznego$((...))
ważna tylko w niektórych powłokach.he=2;echo $[${i%a*}-1]
działa poprzez utworzenie zmiennej o określonej wartości, a następnie użycie rozszerzenia arytmetycznego do rozwinięcia tej zmiennej (z wartości tekstowej). W${i%a*}
konwertujeheads
dohe
itails
nat
(tj, jako zmienna, ma wartość 0).IFS=h;set $i;echo ${1:+-}1
działa w dwóch krokach. Ustawianie IFS doh
przerwy notowanych$i
wset $i
na części podzielonej przez charakterh
,heads
jest podzielony na''
i'eads'
, tym samym ustawienie$1
na wartość null.tail
nie jest podzielone przezh
, co$1
równa siętails
. Następnie${1:+-}
generuje wartość-
if, która$1
jest różna od null (jak w intails
) lub nic (jak w null$1
). Ten znak (lub nic) jest połączony1
.(IFS=h;set $i;echo $(($#*2-3)))
działa w podobny sposób, ale należy użyć liczby części ($#
), na które$i
włamał się łańcuch .źródło
Python 2, 17 bajtów
'heads'
jest mniejsze niż't'
, więc oceniaTrue == 1
i drukuje ciąg po pierwszym znaku.'tails'
jest większy niż't'
, więc oceniaFalse == 0
i cały łańcuch jest drukowany.Jeśli robimy to z wiersza poleceń, z niejawnym drukowaniem, staje się to po prostu:
... dla 12 bajtów, ale dodaje pojedyncze cudzysłowy do wyniku.
źródło
QBasic, 11 bajtów
To musi być najkrótszy kawałek QBasic, jaki kiedykolwiek napisałem.
Wyjaśnienie:
Powyżej jest trochę dość mocno golfa QBasic. Gdy autoformatter przejdzie przez to, będzie wyglądać następująco:
Pierwszy wiersz porównuje ciąg
i
z"t"
. Jeślii
jest"heads"
,i > "t"
to fałsz ic = 0
. Jeślii
jest"tails"
,i > "t"
to prawda ic = -1
. Tak,-1
jest domyślną wartością logiczną true w QBasic!Drugi wiersz odwzorowuje
-1
się-1
i0
aby1
poprzez trick matematyki:(-1)^(-1) == 1/(-1) == -1
i0^0
, choć technicznie matematycznie zdefiniowana, powraca1
.Ten kod wymaga
i
jawnego zadeklarowania jako zmiennej łańcuchowej; inaczej by tak byłoi$
. Pełny program testowy (testowany na QB64 ):źródło
Gaia ,
54 bajtówPodobnie do odpowiedzi CJam Dennisa , znajduje indeks
e
w ciągu wejściowymZapisano jeden bajt, ponieważ nie zdawałem sobie sprawy, że dane wejściowe są automatycznie używane jako argument, jeśli nie ma wystarczającej liczby wartości stosu
Jak to działa
Wypróbuj online!
źródło
Bash , 22
Bierze drugą literę (
e
luba
) i interpretuje ją jako cyfrę szesnastkową (14 lub 10), a następnie podziel przez 2 i odejmij 6, aby uzyskać prawidłowe odpowiedzi.Wypróbuj online!
źródło
echo $[30#$i%7-1]
tylko 17 bajtów. :-)ed ,
272521 bajtówed
sprawił mi ból głowy. W końcu to rozgryzłem z pomocą@ed1conf
Twittera i kilku podglądaczyunix.se
. Nie możesz tak po prostu dopasować rzeczys/re/newtext/
, musisz ją poprzedzić, wg
przeciwnym razieed
spakujesz smutek. To jest jak zrzędliwy 50-letni program uniksowy mówiący „zejdź z mojego trawnika”.Wypróbuj online!
-2 bajty przez upuszczenie ostatnich
/
s-4 bajtów dzięki @manatwork (i którego
sed
odpowiedź plagiatowałem)Stara wersja:
g/t/s//- g/\w\+/s//1 wq .
źródło
q
, sam zrezygnuje, gdy nie pozostanie nic do zrobienia. I potrzebujesz tylko nowej linii po nich, „.” (Lub „roblogic”…) jest niepotrzebne. Wypróbuj online!Python, 20 bajtów
Zwraca,
False
jeśli tak nie jest, aTrue
jeśli tak jest. W PythonieFalse
i0
są takie same,True
i1
są również.Więc:
źródło
golflua
252018Prawdopodobnie można by trochę zagrać w golfa za pomocą trików, o których obecnie nie myślę.(zobacz historię dla starej wersji) Zapisano 5 znaków, przenosząc dane wejściowewrite
i ignorującif
tam zawartą instrukcję. Dwa kolejne znaki zostały zapisane, ignorując opcjonalny nawias włączonyfind
. Nie sprawdza warunków nieudanych (tj. Danych wejściowych, które nie są główkami ani ogonami ).Byłby to odpowiednik Lua
źródło
Haskell, 18 bajtów
Każdy ciąg rozpoczynający się na literę
h
jest odwzorowany1
, a wszystkie inne na-1
.źródło
Sed: 16 znaków
Przykładowy przebieg:
źródło
ed
rozwiązania, ale nadal zajęło 23 bajty, ponieważed
jest stary i zrzędliwy!\w
i\+
są jednak rozszerzeniami GNU.Stax , 3 bajty
Uruchom i debuguj
źródło
Stax , 4 bajty
Uruchom i debuguj
Jest to część kodowa pierwszego znaku mod 7 minus 5.
źródło
PowerShell , 15 bajtów
Wypróbuj online!
Pobiera dane wejściowe przez rozpryskiwanie. Wykorzystuje
e
vsa
do obliczeń matematycznych ASCIIźródło
dc , 8 bajtów
dc nie może zrobić nic znaczącego z ciągami innymi niż wczytać je i spróbować je ocenić. Robiąc to, „heads” generuje ostrzeżenia o niezaimplementowanych poleceniach i pustym stosie, które ignorujemy, ale co ważne, stos pozostaje pusty. „ogony” robią prawie to samo z ważnym wyjątkiem, że końcowe „ls” ładuje wartość z rejestru s do stosu.
Następnie używamy „z”, aby uzyskać długość stosu i arytmetycznie bawimy się, aby uzyskać prawidłowe odpowiedzi.
Wypróbuj online!
źródło
Trójkątny , 10 bajtów
Wypróbuj online!
Dzieli wartość ASCII wprowadzonego znaku przez 7. Odejmuje iloraz od 15. Wykonywanie zatrzymuje się, gdy kończy się adres IP przestrzeni programowej. Działa to, ponieważ Trójkątny może zarządzać tylko podziałem całkowitym. Dogodnie „h” ma wartość 104, która wynosi 14, gdy liczba całkowita jest dzielona przez 7; „t” wynosi 116, co oznacza 16, gdy liczba całkowita jest dzielona przez 7.
Niegolfowane / Objaśnienie:
Poprzednia wersja (14 bajtów):
Przeczytaj znak z wejścia; jeśli wartość ASCII tego znaku podzielona przez 8 ma resztę, wydrukuj -1, w przeciwnym razie wydrukuj 1.
źródło
Beczka ,
8128 bajtówWypróbuj online!
Wyjaśnienie (niepoprawnie składniowe)
źródło
^
.Vitsy , 13 bajtów
Spóźniam się na przyjęcie. ¯ \ _ (ツ) _ / ¯
źródło