Słowo cyfrowe to słowo, w którym po ewentualnym usunięciu niektórych liter pozostaje jedna z pojedynczych cyfr: JEDNA, DWA, TRZY, CZTERY, PIĘĆ, SZEŚĆ, SIEDEM, OSIEM lub DZIEWIĘĆ (nie ZERO).
Na przykład BOUNCE i ANNOUNCE są cyframi, ponieważ zawierają cyfrę jeden.
ENCODE nie jest słowem cyfrowym, mimo że zawiera O, N i E, ponieważ nie są w porządku.
Napisz program / funkcję, która jako dane wejściowe lub parametr przyjmuje pojedyncze (wielkie lub małe litery - wybierasz) słowo i określa, czy jest to słowo cyfrowe. Ustaw kod tak krótko, jak to możliwe.
Jeśli słowo nie jest cyfrem, powinieneś zwrócić „NIE”, 0 lub dowolną wartość „falsey” (może się to różnić w zależności od języka). Jeśli słowo to jest cyfrą, powinieneś podać cyfrę, którą zawiera, jako liczbę.
Możesz założyć, że żadne słowa nie zawierają więcej niż jednej cyfry, więc nie będziesz mieć czegoś takiego jak ONFIVE.
Przypadki testowe
BOUNCE
1
ENCODE
NO
EIGHT
8
BLACKJACK
NO
FABULOUS
NO
EXERCISE
NO
DRIFTWOOD
2
SERVICEMAN
7
INSIGNIFICANCE
9
THROWDOWN
2
ZERO
NO
OZNERO
1
To wyzwanie zostało zaczerpnięte z (i jest bardzo niewielką modyfikacją) pytania 1 z BIO 2009 . Większość przypadków testowych pochodzi z systemu oceny .
NOFELINEVET
zawiera zarówno 5, jak i 9 ... co mam zwrócić?0
w przypadku braku cyfr, nawet jeśli nie jest to fałsz w wybranym języku?Odpowiedzi:
JavaScript (ES6),
10199 bajtówźródło
PHP> = 7.0, 87 bajtów
Jeśli wstawione zostaną tylko znaki z jednej cyfry jako słowa na wejście, wyjdź z programu za pomocą cyfry. Lub zmień kolejność, aby
levenshtein("DIGIT $argn",IntlChar::charName("$i"),1,1,0)
nie liczyć usunięcia znakówlewenshtein
IntlChar :: charName
PHP> = 7.0, 112 bajtów
IntlChar :: charName
PHP, 128 bajtów
Wypróbuj online!
143 bajtów na więcej niż 1 cyfrę
Wypróbuj online!
źródło
foreach(...)$r+=++$k*preg_match(...);echo$r?:NO;
(-1 bajt).chunk_split($v,1,".*")
zamiastjoin(...)
(-2 bajtów).chunk_split
Nigdy wcześniej go nie widziałem. Powinieneś zrobić wpis w dziale poradIntlChar::enumCharNames
... jutro.levenshtein()
wydaje się działać:<?for(;$i++<9;)levenshtein(IntlChar::charName("$i"),"DIGIT $argn",0,1,1)?:die("$i")?>NO
.Python 3, 150 bajtów
combinations
zwraca wszystkie kombinacje rzeczy w kolejności. Łatwiej byłoby mieć ustawioną liczbę dla drugiego parametrucombinations
, więc spacje są dodawane na końcu oryginalnego ciągu, który jest parametrem mojej lambda. To prosty opis działania mojego wpisu. Zapytaj, czy chcesz uzyskać więcej wyjaśnień.źródło
Mathematica, 83 bajty (kodowanie WindowsANSI)
Definiuje jednoargumentową funkcję,
±
która pobiera listę małych liter jako dane wejściowe i zwraca cyfrę w formie podobnej{{7}}
lub pustą listę{}
. Nie wydaje mi się, żebym zrobił tu mnóstwo golfowych rzeczy, z wyjątkiem tego, żeCharacters@*IntegerName~Array~9
generuje dopasowania liczbowe bez szukania ich na stałe .Przykładowe użycie:
daje
{{9}}
.źródło
Galaretka ,
3128 bajtów-2 bajty teraz, gdy małe litery są akceptowane
Pełny program, który oczekuje małych liter i wypisuje wynik, używając
0
dla przypadku falsey.Jako monadyczny link pobierający listę znaków, faktycznie zwraca listę liczb całkowitych, która zawiera jeden
0
w przypadku falsey, pojedynczą liczbę całkowitą pomiędzy oczekiwanymi przypadkami użycia1
i9
włącznie, oraz wiele takich wpisów w przypadkach, gdy w słowo.Wypróbuj online!
W jaki sposób?
źródło
Ruby + to_words :
4948 + 12 =6160 bajtówUżywa flag
-rto_words -n
. Przyjmuje małe litery. Zwraca,nil
jeśli nie znaleziono „cyfry”.-1 bajt teraz, gdy dozwolone jest wprowadzanie małych liter, co pozwala na usunięcie
i
flagi z wyrażenia regularnego.Aby uzyskać czystszą Rubinową odpowiedź bez zewnętrznych klejnotów, 91 + 1 = 92 bajty:
źródło
05AB1E , 26 bajtów
Falsy ma tutaj wartość 0 .
Wyjaśnienie:
Wykorzystuje kodowanie 05AB1E . Wypróbuj online! lub Zweryfikuj wszystkie przypadki testowe!
źródło
Haskell,
113111 bajtówWypróbuj online!
Zwraca,
0
jeśli nie znaleziono cyfry.Znajdź wszystkie podsekwencje słowa wejściowego na liście cyfr. Przygotuj pusty ciąg
[]
o indeksie 0, który jest częścią każdego podsekwencji.elemIndices
zwraca listę indeksów i=<<
spłaszcza je w jedną listę. Wybierz ostatni indeks.źródło
JavaScript (ES6), 121 bajtów
Zwraca najniższą wykrytą cyfrę lub
0
jeśli nie wykryto żadnej cyfry (+6, jeśliNO
jest wymagana).źródło
Japt , 52 bajty
Wypróbuj online!
źródło
Siatkówka ,
160126120 bajtówWypróbuj online!
Zwraca pusty ciąg, jeśli dane wejściowe nie zawierają cyfry.
-6 bajtów dzięki @CalculatorFeline .
źródło
0
zamiastNO
.PHP,
134 132128 bajtówuruchom jako potok z
-nF
lub spróbuj online .Tworzy wyrażenie regularne ze słowami w nawiasach; tzn. każde słowo
N
jest wN
podwyrażeniu th.Jeśli słowo zostanie znalezione, dopasowany ciąg będzie w
$m[0]
i wN
elemencie th, z elementami między nimi pustymi i bez pustych ciągów; tzn.$m
maN+1
elementy.źródło
<?=preg_match("#(".strtr(chunk_split(ONE0TWO0THREE0FOUR0FIVE0SIX0SEVEN0EIGHT0NINE,1,".*"),[")|("]).")#",$argn,$m)?count($m)-1:NO;
Wypróbuj online!Python , 148 bajtów
Funkcja bez nazwy, która bierze tylko wielkie litery i zwraca liczbę całkowitą (
1
do9
) lub0
dlaNO
.Wypróbuj online!
W jaki sposób?
Dla ciągu wejściowego
s
funkcja przechodzi przez listę ciągów:"x"
,"ONE"
,"TWO"
,"THREE"
,"FOUR"
,"FIVE"
,"SIX"
,"SEVEN"
,"EIGHT"
,"NINE"
, is
. Sam szuka jakichkolwiek meczów *Stosowane porównanie dotyczy tego, czy ten ciąg,
w
to taki, który może być utworzony z kombinacji liter w kolejności od wejścia. Funkcjacombinations
pobiera je dla nas (i tylko tych o wymaganej długości używalen(w)
), ale są one w postaci krotek, więc łańcuchy są rzutowane na krotki dla porównania.Z jedenastu wyników
"x"
zawsze będzie tenFalse
, dla któregos
zawsze będzieTrue
. Ma"x"
to na celu zapewnienie, że indeks dopasowania z parametremONE
throughNINE
jest wymaganymi wartościami (ponieważ listy w języku Python są indeksowane jako 0), właściwośćs
jest tam, aby zapewnić połączenie doindex(1)
(synonimindex(True)
) przyzwyczajenie zawieść, gdy nie cyfra słowo zostało znalezione, po czym Otrzymana10
jest konwertowany na0
modulo dziesięciu przy użyciu%10
.* Gdyby
s
z jakiegoś powodu zawiera spacje, listaw
s będzie dłuższa, ale proces będzie nadal działał, ponieważ dopasowania słów w cyfrach będą działać w ten sam sposób, a jeśli żadne nie pasuje do pierwszego podciągu z podziałem spacjis
będzie pasować, ponownie dając10
i wracam0
.Jeśli istnieją słowa wielocyfrowe, funkcja zwróci słowo minimalne.
źródło
Java,
167153 bajtówRaczej naiwna implementacja, pasująca do wyrażenia regularnego.
Przetestuj i bez golfa
Oszczędza
źródło
"ONE TWO THREE FOUR FIVE SIX SEVEN EIGHT NINE".split(" ")[i].split("")
bezpośrednio w pętli for i pozbyć sięString[]N=
i;
. I możesz zapisać dodatkowe 2 bajty, zmieniając kolejność pętli for:,for(int i=0;i<9;)
użyj[i++]
zamiast[i]
w sprawdzaniu if i pozbądź się+1
w zamian."".join
nas.join
.Bash , 163 bajty
Wypróbuj online!
Nie znam RETINY, ale wydaje się, że to prosta odpowiedź.
źródło
*
,j=0;for i in ONE TWO .. ; do ((j++)); printf "%s)a=%s;;" $(sed 's/./\*&\*/g' <<<$i) $j ; done
ale był dłuższyJavaScript, 121 bajtów
lub 116
Ale w tym momencie wystarczy recykling materiału.
źródło
Pyth,
-44-41 bajtówPobiera cytowany ciąg, zwraca 0 dla NIE.
Spróbuj!
wyjaśnienie
źródło
Java, 254 bajty
Wypróbuj online
źródło
C, 198 bajtów
Wypróbuj online
źródło
Python 2, 155 bajtów
Anonimowa funkcja wyszukująca grupę wyrażeń regularnych. Nie najlepsze rozwiązanie w Pythonie, ale alternatywny sposób.
źródło