tło
Kiedy byłem w szkole podstawowej, graliśmy w grę z matematyki, która wygląda następująco.
Wszystkie dzieci siedzą w dużym kręgu i liczą na zmianę, zaczynając od 1 .
Podczas liczenia należy jednak pominąć następujące liczby:
- Liczby będące wielokrotnościami 3 .
- Liczby, które mają 3 w postaci dziesiętnej.
Pierwsze 15 liczb, które dzieci powinny powiedzieć, to
1 2 4 5 7 8 10 11 14 16 17 19 20 22 25
Ilekroć ktoś pomyli liczbę - mówi liczbę, która nie jest w sekwencji lub pomija liczbę, która jest - jest usuwany z kręgu. Trwa to dopóki nie zostanie tylko jedno dziecko.
Zadanie
Jesteś zły w tej grze, więc decydujesz się oszukiwać. Napisz program lub funkcję, która na podstawie numeru sekwencji oblicza następny numer sekwencji.
Nie musisz obsługiwać liczb, które nie mogą być reprezentowane przy użyciu rodzimego typu liczbowego twojego języka, pod warunkiem, że twój program działa poprawnie do wejścia 251 i że twój algorytm działa dla dowolnie dużych danych wejściowych.
Wejście i wyjście może wykorzystywać dowolną dogodną bazę.
Ponieważ musisz ukryć swój kod, musi on być jak najkrótszy. W rzeczywistości jest to kod-golf , więc wygrywa najkrótszy kod w bajtach.
Przypadki testowe
1 -> 2
2 -> 4
11 -> 14
22 -> 25
29 -> 40
251 -> 254
źródło
7
go pomijano, kiedy go grałem, ale zamiast tego przechodziłbyś do następnej liczby, zamiast tego mówiłeś coś innego.Odpowiedzi:
Brachylog , 10 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
JavaScript (ES6), 30 bajtów
źródło
J, 24 bajty
Proste podejście, które po prostu iteruje od wejścia n, aż znajdzie kolejną liczbę, która jest zgodna z regułami.
Formy pięć emotikony,
$:
,:)
,0=
,=|
, i>:
.Stosowanie
Wyjaśnienie
źródło
Python 2,
73 6643 bajtyDzięki xnor za poinformowanie mnie, że jestem głupi, używając 2 zmiennych, a także dzięki Mitchowi Schwartzowi.
źródło
x=input()+1
while'3'[:x%3]in`x`:x+=1
print x
.x=~input()
, odejmując zamiast dodając i drukując-x
.05AB1E , 11 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Perl, 19 bajtów
Kod 18 bajtów + 1 dla
-p
.Stosowanie
źródło
Java 8,
57565550 bajtówDzięki @Numberknot za 1 bajt Dzięki @Kevin Cruijssen za 5 bajtów
To jest
Function<Integer, Integer>
Wyjaśnienie
Naiwne wdrożenie, które po prostu rośnie, aż osiągnie akceptowalną liczbę.
Klasa testowa
Wynik klasy testowej:
źródło
|
zamiast||
do-while
?i->{for(;++i%3<1|(i+"").contains("3"););return i;}
while
ido-while
oboje dali mi ten sam wynik, ale podobał mi siędo-while
wygląd ... Nie pomyślałem o użyciufor
pętli ... Dzięki!Japt, 18 bajtów
Przetestuj online
Nareszcie mam szansę skorzystać
ß
:-)Jak to działa
źródło
PowerShell v2 +, 46 bajtów
Bierze dane wejściowe
$args[0]
, dodaje1
, zapisuje$a
, rozpoczynafor
pętlę. Warunkowe utrzymuje pętlę, podczas gdy jedno z nich$a-match3
(dopasowanie wyrażenia regularnego)-or
$a%3
wynosi zero (!
z czego jest1
). Pętla po prostu zwiększa się$a++
. Na końcu pętli po prostu umieszczamy$a
w potoku, a dane wyjściowe za pośrednictwem niejawnego mająWrite-Output
miejsce po zakończeniu programu.Przykłady
źródło
R, 46 bajtów
źródło
n
zamiast tegocat(n)
.Python 2,
494442 bajtówDrugi wpis w Pythonie bije to (edytuj: już nie :-D), ale opublikowałem go, ponieważ wolę podejście rekurencyjne. Dzięki Mitchowi Schwarzowi i Erikowi Golferowi za pomoc w skróceniu tego.
źródło
f=lambda x:f(x+1)if x%3>1or'3'in`x+1`else-~x
. Jeśli chcesz zachować Pythonie 3, można golf ostatnix+1
do-~x
i wyjąć przestrzeń.f=lambda x:'3'[:~x%3]in`~x`and f(x+1)or-~x
if=lambda x:f(x+1)if'3'[:~x%3]in`~x`else-~x
Lua, 58 bajtów
źródło
Pyke, 13 bajtów
Wypróbuj tutaj!
źródło
while
na początku.C #,
56, 51 bajtów.Jest to zaskakująco krótko jak na odpowiedź w języku C #!
źródło
t=x=>(++x)%3<1|(x+"").Contains("3")?t(x):x;
W Visual Studio wystarczy zdefiniować zmienną i ustawić ją na zero,Func<int, int> t = null;
a następnie zdefiniować funkcję rekurencyjną w następującym wierszu.Haskell,
5048 bajtówWypróbuj na Ideone. Zaoszczędź 2 bajty dzięki @Charlie Harding .
Alternatywnie: (50 bajtów)
źródło
until(\x->mod x 3>0&¬Elem '3'(show x))succ.succ
.Pyth, 11 bajtów
Wypróbuj online: pakiet demonstracyjny lub testowy
Wyjaśnienie:
źródło
GolfSharp , 43 bajty
źródło
Ruby, 47 bajtów
Naprawdę czuję, że można dalej grać w golfa.
źródło
i
zamiast"#{i}"
MATL , 14 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Labirynt ,
117102 bajtówWypróbuj online!
Labirynt jest dwuwymiarowym językiem programowania opartym na stosie, a na skrzyżowaniach kierunek określa góra stosu (dodatni idzie w prawo, ujemny idzie w lewo, zero idzie prosto). W tych programach są dwie główne pętle. Pierwsza modyfikuje wprowadzoną liczbę całkowitą o 3 i zwiększa ją o 0. Druga wielokrotnie sprawdza, czy ostatnia cyfra to 3 (odejmując 3 i modując przez 10), a następnie dzieląc przez 10, aby uzyskać nową ostatnią cyfrę.
źródło
PHP,
60555446 bajtówDzięki @ user59178 za odcięcie kilku bajtów, @AlexHowansky za bajt, @Titus za kolejne kilka bajtów
Wywoływany z linii poleceń za pomocą
-r
. Naiwna metoda, która zapętla się, gdy liczba jest wielokrotnością 3 lub ma 3 cyfry.źródło
for($i=$argv[1];!(++$i%3)|strpos(" $i",'3'););echo$i;
lepszym rozwiązaniem może być przypisywanie również$i
podczas korzystania z niego.strpos(_.$i,'3')
%3<1
, jeden z51
zamiast'3'
, dwa kolejne zstrstr($i)
zamiaststrpos(_.$i)
i kolejne dwa, zamieniając|
operandy w drugiej wersji:<?for(;strstr($i=++$argv[1],51)|$i%3<1;);echo$i;
-> 48 bajtówPHP,
4741 bajtówzainspirowany przez Xanderhall , ale najnowszy pomysł w końcu uzasadnia własną odpowiedź.
lub
Wykorzystuje to fakt, że dane wejściowe pochodzą również z sekwencji: For
$n%3==1
, nowy moduł jest2
. Dla$n%3==2
nowego modulo jest4-3=1
.$n%3==0
nigdy się nie zdarzaUruchom jako potok z
-R
lub wypróbuj je online .źródło
APL (Dyalog Unicode) ,
33282719 bajtów SBCSWypróbuj online!
-6 dzięki Adámowi. -8 dzięki ngn.
Stare objaśnienie:
APL (Dyalog Extended) ,
2317 bajtów SBCSWypróbuj online!
Dzięki Adám. -6 dzięki ngn.
Stare objaśnienie:
źródło
Perl 6 ,
27 2524 bajtówWypróbuj online!
Znajduje pierwszą liczbę większą niż wartość wejściowa, która nie ma trójki i ma resztę, gdy jest modulowana przez 3. Miałem nadzieję, że zrobię coś fantazyjnego z warunkiem,
!/3/&*%3
ale nie działa z!
.:(
Wyjaśnienie:
źródło
C, 81 bajtów
źródło
siatkowy, 30 bajtów
Wypróbuj online!
Wyjaśnienie
1: inicjalizacja
Konwertuje
i
nput nan
umber, a następnie przechodzi w dół (v
)2: pętla
3: końcowy
źródło
Partia, 93 bajty
Pobiera dane wejściowe na STDIN.
źródło
CJam, 19 bajtów
ONLINE
Wyjaśnienie:
Gdyby zapytano mniej szczegółowe wyjaśnienie, zrobiłbym to:
źródło
Pyth, 19 bajtów
Zestaw testowy
Jestem pewien, że mogę to zagrać w golfa ... to jest to samo, co moja odpowiedź CJam.
Wyjaśnienie:
źródło
J
. Możesz zwiększyćQ
. A jeśli robisz to sprytnie, możesz wprowadzić operację do warunku while:W|!%=hQ3/
Q \ 3; Q`.W|!%=hQ3/`Q\3;Q
Clojure, 73 bajty
Rekurencyjnie zapętla się, gdy
n
jest podzielna przez 3, lub zawiera 3 w swojej reprezentacji ciągu. Chociaż używam niezoptymalizowanej rekurencji, był w stanie obsłużyć 2999999 jako dane wejściowe, więc powinno być w porządku.Bez golfa
źródło