Definicja
Słowo dolara to słowo, w którym gdy każdej z jego liter przypisuje się wartość centa, od a = 1 do z = 26, a litery są sumowane, wynikiem jest 100. Oto przykład na CodeReview, a oto lista słów dolara, które znalazłem online.
Wejście
Dane wejściowe będą alfabetyczne od az, w typach danych tekstowych w jednym języku (dozwolone są tablice). Nie musisz uwzględniać żadnych innych danych wejściowych - nie będzie spacji, apostrofów ani łączników. Możesz wziąć jako małe, wielkie lub kombinację. Końcowe znaki nowej linii są dozwolone.
Wynik
Podaj prawdziwą wartość, jeśli wejście jest słowem dolara, i falsey, jeśli nie jest.
Przypadki testowe
Prawda:
buzzy
boycott
identifies
adiabatically
ttttt
Falsey:
zzz
zzzzzzz
abcdefghiljjjzz
tttt
basic
To jest golf golfowy, więc wygrywa najkrótsza odpowiedź w bajtach! Obowiązują standardowe luki i zasady. Krawat idzie do pierwszego plakatu.
Odpowiedzi:
GS2 , 6 bajtów
Dane wejściowe muszą być pisane wielkimi literami.
Wypróbuj online!
Jak to działa
źródło
Python,
3938 bajtówWypróbuj online!
-1 bajt dzięki @JonathanAllan
źródło
05AB1E , 8 bajtów
Kod:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online!
Wyjaśnienie:
źródło
Tn
działa również: PÇ4+OTn%0Q
był inny pomysł, który miałem, ale jest gorzej.Perl 6 , 21 bajtów
Spróbuj
Alternatywny:
Spróbuj
Zauważ, że
Ⅽ
jest toROMAN NUMERAL ONE HUNDRED
U + 216D z unival… 100,który wymaga 3 bajtów do zakodowania.
Rozszerzony:
źródło
MATL , 8 bajtów
Wykorzystuje małe litery.
Wypróbuj online!
Wyjaśnienie
Kod jest tak czytelny, jak to tylko możliwe:
źródło
JavaScript (ES6), 46 bajtów
Zwraca
0
lub1
.źródło
reduce
i rekursja, oba wyszły 2 bajty dłużej.reduce()
przez pierwsze kilka minut okresu karencji, kiedy go początkowo opublikowałem.Haskell , 32 bajty
Wypróbuj online!
Chodzi o to, aby utworzyć listę znaków od
a
do podanego znaku dla każdego znaku na liście i sprawdzić, czy całkowita długość wynosi 100.Inne próby:
Szkoda, że
enumFromTo
to tak długo.źródło
(100==).length.(enumFromTo 'a' =<<)
to takie czyste użycie bezcelowościC,
4543 bajtówDzięki @Neil za zaoszczędzenie dwóch bajtów i rozróżnienie wielkości liter w rozwiązaniu!
Wypróbuj online!
źródło
n=0
globalnie, a następnie pomijając pierwszą klauzulę specyfikacji pętli, prawda? edycja: nieważne - myślę, że zadziałałoby to tylko przy pierwszym połączeniu.&31
może pracować, aby twoim przypadku kod niewrażliwy.n=!n
działa? Rozumiem, że sprawdza, czyn
wynosi zero, ponieważ na podstawie niektórych testów widzę!0
zwroty1
;!15
zwraca0
; i również!-15
wraca0
. Ale dlaczego? Który operand jest!
w C, gdy go używasz!integer
?!
to tylko logikanot
. W C0
oznacza średniefalse
i dowolne inne wartości całkowitetrue
. Tak!0 == 1
, i!n == 0
dla każdegon != 0
.0=false; 1=true
tym, stąd moje zamieszanie. Dziękuję za odpowiedź.Haskell , 32 bajty
Działa to dla małych liter. Na wielkie litery,
s/96/64/
. Obsługa mieszanych przypadków dodałaby kilka bajtów.źródło
Mathematica, 23 bajty
Czysta funkcja pobierająca ciąg wejściowy (lub tablicę liter), bez rozróżniania wielkości liter i zwracająca
True
lubFalse
. TutajTr
po prostu dodaje razem litery i cyfry; wszystko inne jest oczywiste.źródło
Galaretka ,
97? * 8 bajtówPełny program, zwracając 1, jeśli wejście jest słowem dolara, lub 0, jeśli nie.
Wypróbuj online!
W jaki sposób?
* Czy może to być 7 bajtów?
Jedynym powodem miało to wejście z
ɠ
było utrzymanie³
jak dosłownym 100, a nie 3 -ciej linii poleceń (1 st wejściowego programu).Sposobem na uniknięcie tego byłoby, jak wskazał Dennis, utworzenie 100 przy użyciu surowej formy dosłownej,
ȷ2
którą jest 10 2 . Prowadzi to do innego 8 bajtówO%32S=ȷ2
, ale teraz jest to anonimowa funkcja monadycznego (podobnie jak operacyjny jako pełnego programu z 3 rd argument).Ponieważ w golfie można tworzyć zmienne lub funkcje pomocnicze, które ograniczają program, w którym mogą się znajdować (nie można ponownie użyć tej nazwy w zakresie bez zatrzymania funkcji przed ponownym użyciem), być może ograniczenie programu do przyjmowania tylko danych wejściowych ze STDIN może także akceptowalny, w którym to przypadku 7 bajtów
O%32S=³
byłoby tutaj akceptowanych jako funkcja bez nazwy.źródło
O%32S=ȷ2
. Działa dla wprowadzania wielkich i małych liter.O%32S⁼³
naprawdę nie byłaby poprawnym wpisem, ponieważ definiuje nienazwaną funkcję wielokrotnego użytku, o ile reszta programu, w którym się znajduje, nie używa argumentów wiersza poleceń do wprowadzania danych?Alice , 23 bajty
Wypróbuj online!
Dane wejściowe powinny być pisane małymi literami. Drukuje
1
dla słów dolara i0
nie tylko.Wyjaśnienie
Czas pochwalić się taśmą Alice i zaawansowanym sterowaniem. Pomimo tego, że jest dość dobra w pracy z liczbami całkowitymi i łańcuchami indywidualnie, Alice nie ma wbudowanych a) określających długość łańcucha, b) konwersji między znakami i ich punktami kodowymi. Powodem tego jest to, że wszystkie polecenia Alice albo mapują liczby całkowite na liczby całkowite, albo ciągi znaków na ciągi znaków. Ale oba z nich wymagają mapowania ciągów na liczby całkowite lub odwrotnie, więc nie pasują do żadnego z trybów Alice.
Jednak oprócz stosu Alice ma również taśmę, a tryb kardynalny i porządkowy interpretują dane na taśmie na różne sposoby
Taśma może być używana do obu powyższych operacji: aby uzyskać długość łańcucha, zapisujemy ją na taśmie w trybie porządkowym, szukamy zakończenia -1 w trybie kardynalnym i wyszukujemy pozycję głowicy taśmy. Aby przekonwertować znaki na punkty kodowe, po prostu odczytujemy je z taśmy w trybie kardynalnym.
Pozostałe dwie ważne funkcje zastosowane w tym rozwiązaniu to stos zwrotny i iterator. Alicja ma stos zwrotny, który zwykle jest wypełniany podczas korzystania z polecenia skoku
j
, i z którego można wstawić adres, aby skoczyć z powrotemk
. Możliwe jest jednak również przesunięcie bieżącego adresu na stos zwrotny bez skakania gdziekolwiekw
. Jeśli połączymy tow
z poleceniem powtarzania&
, możemy przesunąć bieżący adres do stosu zwrotnego n razy. Teraz za każdym razem, gdy docieramyk
, jedna kopia jest usuwana ze stosu zwrotnego i wykonujemy kolejną iteracjęw
(zaczynając od komórki po niej, ponieważ adres IP przesuwa się przed wykonaniem kolejnego polecenia). Kiedy stos zwrotny staje się pusty,k
nic nie robi, a własność intelektualna po prostu przechodzi. Dlatego&w...k
pojawia się liczba całkowita n, a następnie wykonuje...
n + 1 razy, co daje nam bardzo zwięzły sposób na wyrażenie prostejfor
pętli.Do samego kodu ...
źródło
R
5555 bajtów-1 bajt dzięki BLT
zwraca funkcję wykonującą wymagane obliczenia, która zwraca
TRUE
iFALSE
zgodnie z oczekiwaniami.przyjmuje dane jako małe litery; byłoby tylko przejściem z
letters
naLETTERS
na wielkie literyźródło
function(x)sum(match(el(strsplit(x,"")),letters))==100
zapisuje bajt.Rubin, 25 bajtów
Działa na wielkie litery.
Widzę kilka bardziej skomplikowanych wpisów Ruby, ale to naprawdę jest takie proste.
s.sum
dodaje kody ASCII łańcucha wejściowego i odejmujemy 64-krotność długości łańcucha.Przykład zastosowania
źródło
Java 8, 36 bajtów
Wypróbuj online!
Uwaga: niezależne od wielkości liter.
źródło
05AB1E , 9 bajtów
Wypróbuj online!
Wyjaśnienie
Ponieważ 1 jest jedyną prawdziwą wartością w 05AB1E, możemy zapisać bajt przy użyciu odejmowania w porównaniu do 100 .
źródło
Perl 5 , 30 bajtów
-1 bajt dzięki @Neil (
31&
zamiast-96+
).29 bajtów kodu +
-p
flaga.Wypróbuj online!
źródło
31&ord
zamiast tego?-96+
do takich rzeczy .. Wielkie dzięki za to! (ale teraz czuję, że powinienem wrócić do moich starych postów i wymienić co-96+
: x){$@+=31&ord for@_;$@==100}
(niesprawdzony)+=
, ale w innych przypadkach możesz zmarnować oszczędności na nawiasy.your one language's text datatypes
. Tablice prawie nie są tekstowym typem danych Perla ... (W przeciwnym razie rzeczywiście zaoszczędziłby 1 bajt)PowerShell ,
3630 bajtówWypróbuj online!
Dane wejściowe jako tablica, ale zastanawiam się, czy istnieje lepszy sposób obsługi znaków.
EDYCJA Brakowało łatwej spacji, ale @AdmBorkBork uprzejmie daj mi znać: P również, istniał lepszy sposób na obsługę postaci!
źródło
[char]$_-96
i nie potrzebujesz odstępu pomiędzy-eq
i100
, obniżając Cię do 33. Możesz również zrobić"$_"[0]
zamiast[char]$_
, obniżając do 32. Wypróbuj online!"
okolica jest$_
konieczna? Wygląda na to, że działa bez obsady. Czy może to być spowodowane tym, że dane wejściowe są już tablicą łańcuchów?"
są potrzebne w tym konkretnym przypadku.Alice ,
2818 bajtówDzięki @MartinEnder za grę w golfa 10 bajtów
Wypróbuj online!
To przesłanie używa innej metody niż odpowiedź @ MartinEnder.
To przesłanie
0x00
jest wynikiem fałszu i0x01
prawdy.Oto wersja, która wyświetla
0
lub1
zamiast tego: Wypróbuj!Wyjaśnienie
Wyjaśnienie poniżej dotyczy wersji „widocznej”. Oba są bardzo podobne, z wyjątkiem pierwszego programu, ostatni
o
nie konwertuje ciągu0
lub1
na ciąg znaków (ponieważ jesteśmy w trybie kardynalnym), ale zamiast tego przyjmuje liczbę i wypisuje znak w tym punkcie kodu.Następnie IP zawija się do lewej krawędzi na
=
. Jeśli najwyższą wartością stosu jest0
, IP kontynuuje swoją ścieżkę, zwiększając całkowitą sumę wszystkich znaków, po zakończeniu wprowadzania (górna część stosu będzie1
), wówczas IP skręca w prawo (90 stopni zgodnie z ruchem wskazówek zegara).Należy zwrócić uwagę na jedną rzecz: pętla w pierwszym wierszu wykona iterację po zakończeniu wprowadzania. To odejmie
97
(96
od'`
i-1
od braku danych wejściowych) od sumy.źródło
Taxi , 1259 bajtów
Z podziałem linii wygląda to tak:
Akceptuje wielkie lub małe litery, ponieważ
Auctioneer School
konwertuje to wszystko na wielkie litery.Chop Suey
dzieli go na pojedyncze postacie.Charboil Grill
konwertuje znaki na ich kod ASCII.Zbieramy jeden znak na raz, konwertujemy go na ASCII, odejmujemy 65 i dodajemy do bieżącej sumy.
Gdy nie będzie już więcej znaków, porównaj całość do 100.
Zwraca
TRUE
za słowa dolara iFALSE
za wszystko inne.źródło
Kod maszynowy IA-32, 21 bajtów
Hexdump:
Kod zestawu:
Zlicza od 100 do 0. Po osiągnięciu 0 zwraca true (0xff); w przeciwnym razie false (0x00).
źródło
Dyalog APL,
1715 bajtówWykorzystuje zestaw znaków Dyalog Classic.
źródło
Python , 38 bajtów
Wypróbuj online!
Ta sama długość co rozwiązanie ovs . Zamiast odjąć 96 od każdej
ord
wartości, sprawdza, czyord
suma jest równa100+96*len(s)
. Jest to wyrażone o jeden bajt krócej4-96*~len(s)
, co jest równe4-96*(-len(s)-1)
.źródło
lambda s:sum(s.encode(),96*~len(s))==4
również będzie działać.Rubin ,
3530 bajtówWypróbuj online!
źródło
Retina ,
4723 bajtówWypróbuj online! Uwaga: Nagłówek wpisuje małe litery i dzieli je na słowa; wyniki pojawiają się w osobnych wierszach. Edycja: Zaoszczędź o wiele za dużo bajtów dzięki @MartinEnder.
źródło
Oktawa, 18 bajtów
Odejmuje
96
od ciągu wejściowegox
(małe litery), aby uzyskać wartości liczbowe liter. Bierzesum
i porównuje to100
. Zwraca wartość logiczną1
dla przypadków prawdziwych i logiczną0
dla przypadków fałszywych.Mógłbym zaoszczędzić jeden bajt, gdyby można było podać fałsz dla „słów dolara” i prawda dla „słów bez dolara”.
źródło
Japt ,
13 1210 bajtówWyjaśnienie:
Przetestuj online!
12 bajtów:
Wypróbuj online!
Kolejne 12-bajtowe rozwiązanie wykorzystujące inną technikę
Wypróbuj online!
źródło
m%H
zamiast zamiastm-96
(będzie działać teraz w obu przypadkach, bonus!), A jeden na drugim zL¥U¬x@;CaX Ä
m%H
było miłym znaleziskiem.x@
też był świetny pomysł!Rubinowy (2.4+), 38 bajtów
Pobiera dane pisane małymi literami. Wymaga Ruby 2.4,
Array#sum
aby nie działał na TIO.źródło
String#bytes
zamiastString#chars
, abyś nie musiał dzwonićc.ord
.sum
na tablicy zamiastmap
/// ,
564210189185 bajtówWypróbuj online!
Drukuje 1, jeśli jest to „słowo dolara”, w przeciwnym razie drukuje „0”
Dane wejściowe są następujące: (Przewiń do końca w prawo)
Działa, zastępując każdą literę jej wartością w unarnym, a następnie zastępując unarną 100 na 0. Następnie zastępuje dowolną wartością słowa 1. Jeśli wartość słowa wynosi 0, to wypisze 1, ponieważ na końcu kod zastępuje 0. Jeśli wartość słowa to cokolwiek innego, wypisze to 0.
Gra w golfa polega na wykorzystaniu typowych wystąpień w kodzie jako zamienników.
źródło
Narzędzia Bash + GNU, 47
Wypróbuj online .
źródło