Фон
Когда я учился в начальной школе, мы играли в игру по математике, которая выглядит следующим образом.
Все дети сидят в большом кругу и считают по очереди, начиная с 1 .
Тем не менее, следующие цифры должны быть пропущены при подсчете:
- Числа, кратные 3 .
- Числа, имеющие 3 в десятичном представлении.
Первые 15 цифр, которые должны сказать дети:
1 2 4 5 7 8 10 11 14 16 17 19 20 22 25
Всякий раз, когда кто-то неправильно вводит число - говорит число, которое не входит в последовательность, или пропускает число, которое есть - он удаляется из круга. Это продолжается до тех пор, пока не останется только один ребенок.
задача
Вы плохо в этой игре, поэтому вы решили обмануть. Напишите программу или функцию, которая, учитывая номер последовательности, вычисляет следующий номер последовательности.
Вам не нужно обрабатывать числа, которые нельзя представить, используя собственный числовой тип вашего языка, при условии, что ваша программа работает правильно до ввода 251 и что ваш алгоритм работает для произвольно больших входных данных.
Вход и выход могут использовать любую удобную базу.
Поскольку вы должны скрывать свой код, он должен быть максимально коротким. На самом деле это код-гольф , поэтому выигрывает самый короткий код в байтах.
Контрольные примеры
1 -> 2
2 -> 4
11 -> 14
22 -> 25
29 -> 40
251 -> 254
источник
7
было пропущено, когда я играл, но вы вместо этого сказали бы что-нибудь другое, вместо того, чтобы перейти к следующему номеру в строке.Ответы:
Брахилог , 10 байт
Попробуйте онлайн!
объяснение
источник
JavaScript (ES6), 30 байт
источник
J, 24 байта
Прямой подход, который просто выполняет итерацию вперед от ввода n до тех пор, пока не найдет следующее число, допустимое по правилам.
Формы пяти смайликов,
$:
,:)
,0=
,=|
, и>:
.использование
объяснение
источник
Python 2,
73 6643 байтаСпасибо xnor за сообщение, что я был глуп, используя 2 переменные, и спасибо Митчу Шварцу.
источник
x=input()+1
while'3'[:x%3]in`x`:x+=1
print x
.x=~input()
вычитания вместо сложения и печати-x
.05AB1E , 11 байт
Попробуйте онлайн!
объяснение
источник
Perl, 19 байт
18-байтовый код + 1 для
-p
.использование
источник
Java 8,
57565550 байтСпасибо @Numberknot за 1 байт Спасибо @Kevin Cruijssen за 5 байтов
Это
Function<Integer, Integer>
объяснение
Наивная реализация, которая просто увеличивается, пока не достигнет приемлемого числа.
Тестовый класс
Выход тестового класса:
источник
|
вместо||
do-while
? Просто обычный цикл for короче:i->{for(;++i%3<1|(i+"").contains("3"););return i;}
( 50 байтов )while
иdo-while
, и они оба дали мне одинаковое количество очков, но мне понравилось, как яdo-while
выглядел ... Я не думал об использованииfor
цикла ... Спасибо!Japt, 18 байт
Протестируйте это онлайн
У меня наконец-то появилась возможность использовать
ß
:-)Как это устроено
источник
PowerShell v2 +, 46 байт
Принимает ввод
$args[0]
, добавляет1
, сохраняет в$a
, запускаетfor
цикл. Условие поддерживает цикл, пока либо$a-match3
(совпадение с регулярным выражением)-or
$a%3
равно нулю (значение!
которого равно1
). Цикл просто увеличивается$a++
. В конце цикла мы просто помещаем$a
в конвейер, а вывод через неявныйWrite-Output
происходит при завершении программы.Примеры
источник
R, 46 байт
источник
n
вместоcat(n)
.Python 2,
494442 байтаДругая запись Python превосходит это (edit: больше нет :-D), но я опубликовал ее, потому что мне скорее нравится ее рекурсивный подход. Спасибо Митчу Шварцу и Эрику Гольфисту за помощь в сокращении.
источник
f=lambda x:f(x+1)if x%3>1or'3'in`x+1`else-~x
. Если вы хотите сохранить Python 3, вы можете играть в гольф последнийx+1
в-~x
и удалить пространство.f=lambda x:'3'[:~x%3]in`~x`and f(x+1)or-~x
иf=lambda x:f(x+1)if'3'[:~x%3]in`~x`else-~x
Луа, 58 байт
источник
Пайк, 13 байт
Попробуй это здесь!
источник
while
в начале.C #,
56, 51 байт.Это удивительно мало для ответа C #!
источник
t=x=>(++x)%3<1|(x+"").Contains("3")?t(x):x;
В Visual Studio вам просто нужно определить переменную и установить для нее значение null,Func<int, int> t = null;
а затем определить рекурсивную функцию в следующей строке.Haskell,
5048 байтовПопробуйте это на Ideone. Сохранено 2 байта благодаря @Charlie Harding .
Альтернатива: (50 байт)
источник
until(\x->mod x 3>0&¬Elem '3'(show x))succ.succ
.Pyth, 11 байт
Попробуйте онлайн: демонстрация или тестовый набор
Объяснение:
источник
GolfSharp , 43 байта
источник
Рубин, 47 байтов
Я действительно чувствую, что это может быть дальше в гольфе.
источник
i
вместо"#{i}"
MATL , 14 байтов
Попробуйте онлайн!
объяснение
источник
Лабиринт ,
117102 байтаПопробуйте онлайн!
Лабиринт - это двумерный язык программирования, основанный на стеке, и в местах соединения направление определяется вершиной стека (положительное число направлено вправо, отрицательное - влево, нулевое - прямо). В этих программах есть два основных цикла. Первый изменяет целочисленный ввод на 3 и увеличивает его на 0. Второй повторно проверяет, является ли последняя цифра 3 (вычитая 3 и модифицируя на 10), а затем деля на 10, чтобы получить новую последнюю цифру.
источник
PHP,
60555446 байтСпасибо @ user59178 за сокращение нескольких байт, @AlexHowansky за байт, @Titus за еще несколько байт
Вызывается из командной строки с помощью
-r
. Наивный метод, который зацикливается, когда число кратно 3 или имеет 3 в своих цифрах.источник
for($i=$argv[1];!(++$i%3)|strpos(" $i",'3'););echo$i;
возможно, можно добиться большего успеха, назначая$i
при использовании его тоже.strpos(_.$i,'3')
%3<1
, один с51
вместо'3'
, еще два сstrstr($i)
вместоstrpos(_.$i)
и еще два, поменяв местами|
операнды во второй версии:<?for(;strstr($i=++$argv[1],51)|$i%3<1;);echo$i;
-> 48 байтPHP,
4741 байтвдохновлен Xanderhall , но последняя идея, наконец, оправдывает свой ответ.
или же
Это использует тот факт, что вход также из последовательности: для
$n%3==1
, по новому модулю2
. Ведь$n%3==2
новый модуль есть4-3=1
.$n%3==0
никогда не бываетЗапустите как трубу с
-R
или попробуйте их онлайн .источник
APL (Dyalog Unicode) ,
33282719 байтов SBCSПопробуйте онлайн!
-6 спасибо Адаму. -8 благодаря нгн.
Старое объяснение:
APL (Dyalog Extended) ,
2317 байт SBCSПопробуйте онлайн!
Спасибо Адаму. -6 благодаря нгн.
Старое объяснение:
источник
Perl 6 ,
27 2524 байтаПопробуйте онлайн!
Находит первое число больше входного, которое не имеет тройки и имеет остаток при модуляции на 3. Я надеялся сделать что-то необычное с условием, например
!/3/&*%3
но оно не работает с!
.:(
Объяснение:
источник
C, 81 байт
источник
сетчатый, 30 байтов
Попробуйте онлайн!
объяснение
1: инициализация
Это преобразует
i
nput вn
Umber, затем идет вниз (v
)2: петля
3: финал
источник
Пакет, 93 байта
Принимает участие в STDIN.
источник
CJam, 19 байтов
ОНЛАЙН
Объяснение:
Если бы спросили менее подробное объяснение, я бы сделал это:
источник
Pyth, 19 байт
Тестирование
Я уверен, что могу сыграть в гольф ... это так же, как мой ответ CJam.
Объяснение:
источник
J
. Вы можете увеличитьQ
. И если вы делаете это умно, вы можете вставить операцию в условие while:W|!%=hQ3/
Q \ 3; Q`.W|!%=hQ3/`Q\3;Q
Clojure, 73 байта
Рекурсивно циклы пока
n
делится на 3, или содержит 3 в своем строковом представлении. Хотя я использую неоптимизированную рекурсию, она смогла обработать 2999999 в качестве входных данных, так что все должно быть в порядке.Ungolfed
источник