Problem:
Twoim zadaniem jest zdecydować, czy w sekwencji liczb każda liczba zawiera co najmniej jedną z cyfr liczby, która ją poprzedziła.
Na przykład następujące powinny zwracać prawdę:
[1, 12, 203, 0, 30]
^ ^ Contains a 0
^ Contains a 2
^ Contains a 1
Falsey powinien zwrócić:
[1, 32, 23, 34]
^ Doesn't contain a 1, therefore false
Twoje zgłoszenie może być funkcją lub pełnym programem.
Wkład:
Dane wejściowe mogą być dowolnym rozsądnym typem sekwencji. Tablica liczb, tablica ciągów, rozdzielany ciąg liczb itp.
Kolejność ma jednak znaczenie, więc każda struktura, którą zdecydujesz się przyjąć jako dane wejściowe, musi oczywiście mieć określone uporządkowanie.
Dane wejściowe można pobierać za pomocą standardowego wejścia lub argumentu.
Możesz założyć:
wszystkie liczby będą liczbami całkowitymi nieujemnymi
wejście zawsze będzie zawierało co najmniej 2 liczby
numery wejściowe nie zaczynają się od 0
Wydajność:
Dane wyjściowe będą zgodne z prawdą lub falsey (zgodnie z definicją Twojego języka), co oznacza, czy powyższa specyfikacja jest spełniona.
Wartości prawda / falsey nie muszą być spójne między testami.
Może być albo wyprowadzony na standardowe wyjście, albo zwrócony.
Przypadki testowe:
True cases:
[1, 1, 1, 11, 111, 11, 1]
[12, 23, 34, 45, 56]
[65, 54, 43, 32, 21]
[123, 29, 9, 59, 55, 52, 2017, 2]
[1234567890, 19, 95, 5012, 23]
False cases:
[1, 2, 3, 4, 5, 1, 11] (2 doesn't contain a 1)
[12, 23, 33, 45] (45 doesn't contain a 3)
[98, 87, 76, 11, 12, 23] (11 doesn't contain a 7 or 6)
To jest golf golfowy, więc wygrywa najmniejsza liczba bajtów.
JavaScript (ES6),
4744 *43 bajtówZapisano bajt dzięki @Neil
Pobiera dane wejściowe jako listę ciągów znaków.
Testowy fragment kodu
Pokaż fragment kodu
* ( przekreślone 44 jest wciąż zwykłym 44 )
źródło
`[${p}]`
działa?a=>a.reduce((l,r)=>`${l}`.match(`[${r}]`)&&r)
(co działa również dla wprowadzania numerycznego).p&&
jeśli ustawiłeśp=1/19
?05AB1E , 10 bajtów
Wypróbuj online! lub jako pakiet testowy
Wyjaśnienie
źródło
€Sü.å
- Chciałbym, żeby to działało tak, jak myślałem.ü.å
lub€Süå
.CJam ,
181514 bajtówZaoszczędzono 4 bajty dzięki Martinowi Enderowi
Wypróbuj online!
Wyjaśnienie
źródło
Haskell,
514835 bajtów-3 bajty dzięki @NickHansen! Naprawdę muszę być lepszy z tymi operatorami monad
-4 i -9 bajtów dzięki odpowiednio @Laikoni i @nimi!
Ta wersja przyjmuje dane wejściowe jako tablicę ciągów, co eliminuje potrzebę
show
, ale, o ile widzę, działa w dużej mierze w ten sam sposób, co starsza wersja:(Jestem pewien, że mogę przesłać taką anonimową funkcję, ale naprawię ją, jeśli to konieczne)
Najpierw liczby są konwertowane na ciągi. Następnie magia monady
zip=<<tail
tworzy funkcję, która zamyka listę samą sobą, która paruje każdą pozycję z sąsiadami. Następnieall
odwzorowuje lambda na każdą parę, która sprawdza, czy jeden ciąg znaków zawiera znaki z drugiej, i na koniec sprawdza, czy wszystkie wychodząTrue
.Stara wersja, która działa w zasadzie w ten sam sposób:
źródło
and.(zipWith(any.flip elem)=<<tail).map show
["1234567890", "19", "95", "5012", "23"]
celu upuszczenia pliku.map show
.Mathematica
62 4735 bajtówZ 12 bajtami zaoszczędzonymi dzięki MartinE.
źródło
Rubinowy,
4948 bajtówDane wyjściowe są
nil
dla false, a „losowa” liczba całkowita dla true.źródło
Java 8,
949087 bajtówDane wejściowe to tablica ciągów znaków reprezentujących liczby. Począwszy od drugiego łańcucha, wykonuje regularne porównania ekspresji wobec każdego poprzedniego łańcucha aby sprawdzić, czy zawiera ona żadnej z jej znaków:
.*[previous string].*
.Gra w golfa:
Nie golfowany:
źródło
a->{for(int i=1;i<a.length;)if(!a[i].matches(".*["+a[i++-1]+"].*"))return 0>1;return 1>0;}
a->{int r=1;for(int i=0;++i<a.length;)r*=a[i].matches(".*["+a[i-1]+"].*")?1:0;return r>0;}
a->{int r=1,i=0;for(;++i<a.length;)r*=a[i].matches(".*["+a[i-1]+"].*")?1:0;return r>0;}
Galaretka , 6 bajtów
Wypróbuj online!
Wyjaśnienie
Najbardziej oczywista jest próba użycia
2/
tutaj, ale ta uruchamia jednoargumentową funkcję na wszystkich plasterkach wielkości 2."Ḋ
skutecznie uruchamia funkcję binarną na wszystkich parach sąsiednich elementów, co oznacza, że możemy użyćf
bezpośrednio (zamiast konieczności konwertowania jej na jednoargumentową funkcja jakof/
). To kończy się pozostawieniem ostatniego elementu wejścia na miejscu, ale na szczęście nawet wejście 0 nie staje się pustą listą po konwersji na dziesiętne, więc nie ma to wpływu naẠ
.źródło
Python 3 , 48 bajtów
Wypróbuj online!
źródło
Galaretka , 8 bajtów
Wypróbuj online!
W jaki sposób?
źródło
05AB1E , 5 bajtów
Kod:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online! lub Zweryfikuj wszystkie przypadki testowe! .
Wyjaśnienie:
źródło
RüÃõå_
wymyśliłem sam. Mam zaszczyt być tak blisko twojej najlepszej odpowiedzi, usuwając moją. Dlaczego jednak nie potrzebujeszR
?R
? : pPowerShell , 87 bajtów
Wypróbuj online!
Nie najkrótszy pod żadnym względem, ale nieco inne podejście niż inni, i pokazuje sprytną
|?{}
funkcjonalność.To pobiera dane wejściowe jako tablicę ciągów znaków
$n
, a następnie zapętla od1
dolength-1
. UżywamyWhere-Object
(|?{...}
), aby wyciągać te wskaźniki, które są prawdziwe dla określonego warunku. Możesz myśleć o tym jak ofor
pętli kombinowanej zif
klauzulą.Klauzula jest tutaj
[char[]]$n[($i=$_)-1]|?{$n[$i]-like"*$_*"}
. Oznacza to, że bierzemy bieżący indeks$_
, ustawiamy go$i
i odejmujemy1
, i używamy go do indeksowania$n
(tj. Tak, aby uzyskać poprzedni element w naszej tablicy wejściowej). Jest to następnie rzutowane jakochar
tablica i wysyłane przez innąWhere-Object
procedurę.Klauzula wewnętrzna
$n[$i]-like"*$_*"
określa, że ciąg przy bieżącym indeksie$i
jest-like
bieżącym znakiem$_
z poprzedniego indeksu. W ten sposób wyprowadzone zostaną wszystkie znaki, które są wspólne między dwoma elementami tablicy. Zatem klauzula zewnętrzna będzie prawdziwa tylko wtedy, gdy występuje wspólny znak (ponieważ pusta tablica w programie PowerShell ma falsey), a zatem indeks zostanie wybrany tylko wtedy, gdy występują wspólne znaki.Następnie zbieramy wszystkie wskaźniki, które pasują do kryteriów, i sprawdzamy, czy
.count
są one odpowiednie-eq
do długości tablicy wejściowej. Ten wynik logiczny jest pozostawiany w potoku, a dane wyjściowe są niejawne.źródło
Perl 5 , 31 bajtów
Port pięknej odpowiedzi Martina Endera .
30 bajtów kodu +
-p
flaga.Wypróbuj online!
źródło
APL (Dyalog APL) , 9 bajtów
Wypróbuj online!
∧/
są wszystkie na liście×
znaki≢
zestawienia¨
każdy z2∩/
pary skrzyżowań⎕
wkład?źródło
PHP,
6568iteruj po wszystkich liczbach i usuń wszystkie cyfry, które pojawiły się w poprzednim. Policz, jak często równa się samej liczbie (bez cyfr usuwanych). Jeśli przynajmniej jeden był równy, nie mieliśmy meczu w jednej z par.
Naprawiono błąd przy użyciu
trim
instedstrtr
. Dzięki @ JörgHülsermannźródło
["filename",1,11,414]
nie działa.trim
działa tylko dla wiodących i końcowych znaków. Naprawione.a&
zamiastnull!==
(-5 bajtów).$argv[$i]
, ponieważ „Jeśli od i mają różne długości, dodatkowe znaki w dłuższej z dwóch są ignorowane”. (z instrukcji)PHP, 75 bajtów
pobiera liczby z argumentów wiersza poleceń; wychodzi z
1
falsy, z0
prawdy.Uruchom go
-r
lub przetestuj online .$b
= liczba zawierająca wszystkie cyfry$b
z argumentu$b
1
0
źródło
PHP, 77 bajtów
źródło
foreach($argv as$k=>$v)$t=$k--?$t*preg_match("#[{$argv[$k]}]#",$v)):1;echo$t;
:, 77 bajtów (nieprzetestowane).$k--
, aby--$k
i upuść jeden) po że podejście powinno działać i trzeba dodać @ za ostrzeżenie$k--
. Użyłem go specjalnie, aby $ k wciąż było 0 przy pierwszym uruchomieniu. Ostrzeżenia są ignorowalne. Oznacza to, że kod ma teraz 76 bajtów, ale nadal nie został przetestowany.foreach($argv as$k=>$v)$t=$k--?$t*preg_match("#[{$argv[$k]}]#",$v):1;echo$t;
działa poprawnie. Testowanie za pomocą$argv = array(1, 12, 123, 3, 34, 45, 5, 5);
wyświetlaczy1
i testowanie za pomocą$argv = array(1, 12, 123, 3, 34, 45, 5, 6);
wyświetlaczy0
, zgodnie z oczekiwaniami.MATL , 14 bajtów
Wypróbuj online!
Dzięki @LuisMendo za uratowanie bajtu. Wyjaśnienie:
źródło
1)VG
go1&)
(co pozwala uniknąć powtarzania pierwszego numeru))
daje wybrane wartości jako pierwsze dane wyjściowe, a następnie pozostałe wartości jako drugie dane wyjścioweClojure, 71 bajtów
Anonimowa funkcja, która akceptuje ciąg liczb. Zwraca
true
/false
.Lubię, jak to czyta. Jest zdecydowanie kilka obszarów, które można poprawić tutaj. Przekazanej funkcji
map
nie można łatwo zmienić, aby nie wymagała makra funkcji, co oznacza, że cała funkcja nie może korzystać z makra, które prawdopodobnie dodało niektóre bajty. Byłoby również miło, gdybym mógł wymyślić lepszy sposób rozpakowywania wartości wevery?
predykacie.źródło
SimpleTemplate, 124 bajty
Wow, to był trening!
To „po prostu” dokonuje wyrażenia regularnego, używając starego elementu, pokazując
1
jako prawdziwą wartość lub nic innego.Nie golfowany:
źródło
JavaScript (ES6), 37 bajtów
Akceptuje wprowadzanie jako ciąg liczb oddzielonych znakiem nowej linii. Na podstawie doskonałej odpowiedzi Retina @ MartinEndera, ale wykonuję cały test w jednym wyrażeniu regularnym, ponieważ w ten sposób jest krótszy w JavaScript.
źródło
Pip ,
1210 bajtówPobiera dane wejściowe jako ciąg argumentów wiersza polecenia. Dane wyjściowe to niepusta lista dla prawdy i pusta lista dla falsey. Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
Röda ,
4535 bajtówWypróbuj online!
Jest to podobne do rozwiązania Perl 5, które jest portem rozwiązania Retina autorstwa Martina Endera. -10 bajtów dzięki @Neil.
Oto inne rozwiązanie (
7372 bajty):Jest to anonimowa funkcja, która pobiera ciągi ze strumienia i sprawdza, czy kolejne ciągi zawierają te same znaki. Wyjaśnienie:
Mogłoby być golfa więcej ...
źródło
^(\S*(\S)\S* (?=\S*\2))+\S+$
.Narzędzia Bash + Unix,
7169 bajtówWypróbuj online!
Wejście jest ustawione na standardowe, jedna liczba na linię.
Dane wyjściowe znajdują się w kodzie wyjścia: 0 dla prawdy, 1 dla falsey.
To może być bardziej golfa.
Aby powyższy kod działał, w bieżącym katalogu nie może być żadnego pliku o nazwie jednocyfrowej. Jeśli nie jest to dopuszczalne, zamień
[\1]
w programie na'[\1]'
(koszt 2 dodatkowych bajtów).Uruchomienie próbne (ostatni przypadek testowy podany w wyzwaniu):
(1 tutaj to falsey.)
Jak to działa:
Pokażę na przykładowym przebiegu powyżej.
Polecenie sed przekształca dane wejściowe w:
Polecenie tr przekształca to w ciąg:
Ten ciąg jest poleceniem powłoki do wykonania żądanej operacji, więc potokuję to do sh i gotowe.
źródło
Q, 57 bajtów
Uwaga: 0 dołączane na początku tablicy wejściowej w ramach funkcji. Dokonano tego, aby porównanie pierwszego elementu zostało zarejestrowane. W przeciwnym razie ostatni znak pierwszego elementu zostanie porównany. Mógłby jednak sprawdzić typ, który dodaje 7 bajtów ponad bieżącą liczbę.
źródło