Вызов:
Создайте программу, которая принимает положительное целое число и проверяет, можно ли ее записать в виде (3 ^ x) -1, где X - другое положительное целое число .
Если это возможно, выведите X
Если это невозможно, выведите -1 или ложное утверждение.
Пример входов / выходов
Входные данные:
2
Его можно записать как (3 ^ 1) - 1, поэтому мы выводим x, равное 1
Выход:
1
Входные данные:
26
26 можно записать как (3 ^ 3) - 1, поэтому мы выводим x (3)
Выход:
3
Входные данные:
1024
1024 нельзя записать в виде (3 ^ x) - 1, поэтому мы выводим -1
Выход:
-1
Это код-гольф, поэтому выигрывает наименьшее количество байтов
Родственный OEIS: A024023
3^0-1
действительным выводом и, следовательно, не может использоваться как ложное,log()
в своем ответе, должен подтвердить, что он дает правильный ответ5
при242
вводе.Ответы:
Mathematica,
2116 байтИспользует символические вычисления Mathematica. Если
#+1
это степень трех, тоLog[3,#+1]
вычисляется целочисленный результат, который является атомарной величиной. В противном случае мы получимLog[#+1]/Log[3]
как есть. Поскольку это не атомарное значение, это выражение, которое всегда имеет формуhead[val1,val2,...]
. В этом случае это на самом деле что-то вродеTimes[Power[Log[3], -1], Log[#+1]]
.Мы различаем два случая, применяя другую функцию к результату. Что действительно применяет приложение, так это то, что оно заменяет
head
часть выражения. Поскольку целочисленные результаты являются атомарными, применение любой функции к ним ничего не делает. В частностиf @@ atom == atom
.Однако в другом случае голова заменяется. Функция, которую мы используем,
-1&
это простая функция, которая игнорирует свои аргументы и возвращает-1
. Таким образом, мы получаем что-то-1&[Power[Log[3], -1], Log[#+1]]
в нецелых случаях, что напрямую оценивается-1
. Специальный корпус с помощью магии.источник
Python,
4644 байтаПопробуйте онлайн!
В этом случае
0
будет ложное значение. Спасибо @ mbomb007 за указание на мой неверный вывод, а также 2 байта без[]
экономии.источник
[n for n in range(x)if 3**n-1==x]
для -4 байта, пустой список как ложныйHaskell, 35 байт
Пример использования:
f 26
->3
.источник
05AB1E , 7 байтов
Попробуйте онлайн!
объяснение
источник
<3zm©.ïi®
- самый близкий мне не использующий диапазоны, как он.3DÝms<k
... Неважно ... Не могу сбрить еще один байт, могу поклясться, что смогу.Желе , 5 байт
Выходы х или 0 (ложь).
Попробуйте онлайн!
Как это работает
источник
Python 2, 41 байт
Рекурсивная функция, которая возвращает
0
несоответствующие входы. Неоднократно наполовину делит ввод на 3, считая количество шаговi
, которое выводится в конце. Но если какой-либо шаг выдает значениеn
, которое не равно 2 по модулю 0, число не соответствует значению3^i-1
, поэтому результат умножается на 0.источник
Perl, 31 байт
Требуется
-E
флаг для запуска:Пояснения:
grep{3**$_-1==$i}0..($i=<>)
возвращает список элементов диапазона0..$_
(т. Е. От 0 до ввода), который удовлетворяет критерию3**$_-1==$i
. Только один элемент может удовлетворить этот тест, поэтому эта инструкция вернет массив из 0 или 1 элемента. Затем мы печатаем этот список: либо «то»,X
либо «ничего» (что неверно).источник
Pyth, 11 байт
Преобразует в базу 3 и проверяет равенство
[2, 2, ..., 2]
.источник
?-2JjQ3ZlJ
, так как<col> <num>
и<num> <col>
взаимозаменяемы для-
в Pyth.JavaScript (ES7),
383634 байтаИли просто
3029 байт, если можно выйти с ошибкой при ошибке:Тест
Показать фрагмент кода
источник
Java 8,
375867 байтЭта лямбда вписывается в
Function<Integer, Integer>
ссылку и использует простой трюк с базой 3.На этот раз все должно работать правильно.
источник
i->
. Кроме того, если вы беретеi
какLong
, вы можете использоватьa.toString(...)
(идентификаторы будут выдавать некоторые предупреждения о неправильном использовании статических функций, но должны компилироваться). Однако, как сказал OP, вам нужно возвращать значение, а не только True или False.Обработка,
6056 байтВыходы
-1
если ложные.объяснение
void
на 1 байт короче, чем при использованииfloat
, поэтому эта функция выводит напрямую, а не возвращает значение.Альтернативное решение
за 63 байта, но я думаю, что этот альт может быть короче, чем оригинальное решение. Я работаю над этим.
источник
0
сейчас?0
это не ложь в Java / Processing, о которой я знаю.Брахилог , 8 байт
Попробуйте онлайн!
Выводит значение, если оно истинно и
false.
если это невозможно.объяснение
Это прямая транскрипция данного отношения:
источник
+~^r~:3
, но , к сожалению ,~:
не делать то , что вы могли бы ожидать (вероятно , потому , что:
это синтаксис , а не встроено в него ), и , кажется, обрабатывают идентично:
.:
является управляющим символом и~
работает только с предикатами.Perl 6 ,
2524 байтаПопытайся
Удаление места после
**
работ, потому что он длиннее, чем другой инфиксный оператор, который может совпадать*
.Так
…***…
разбирается как… ** * …
а не… * ** …
.Попытайся
Expanded:
источник
R, 24 байта
Отличный подход от ответа Plannapus , и на один байт короче!
Генерирует все целые числа от
3^1-1
до3^99-1
и проверяет соответствие стандартного ввода. Если это так, он возвращает индекс, по которому он совпадает, то естьx
. Если нет, возвращаетNA
как ложное значение.Между прочим, он примет несколько значений в качестве входных данных и протестирует все из них, что является отличной особенностью.
источник
Пролог, 20 байт
Этот язык чертовски крут.
источник
05AB1E , 9 байтов
Попробуйте онлайн!
Отпечатки -1 для ложных.
источник
MATL , 8 байт
Это выводит число
x
если оно существует, или иначе ничего не выводит, что ложно.Попробуйте онлайн!
объяснение
источник
Japt , 11 байт
Попробуй это здесь .
Большое спасибо ETHproductions за помощь!
источник
Python 3,
746664 байта-10 байт благодаря @ mbomb007, @FlipTack и @ nmjcman101
источник
from math import*
. Такжеreturn n==3**x-1and x
.STDOUT
, поэтому вы можете изменить этот возврат на печать.import math
иmath.ceil
для одного байта. Также вы можете обратиться3**x-1==n and x
кx*(3**x-1==n)
Рубин, 30 байтов
Возвращает
nil
(ложное значение), если номер не был найден. [Попробуйте онлайн]источник
C, 56 байтов
добавьте один к входу и затем несколько раз делите на три, пока остаток не будет найден, если он достигнут, верните счетчик делений, иначе -1
источник
a%3<1
вместо!(a%3)
. Еще один с0
фальшивкой.a=--a?-1:n;
вы сэкономите 5 байтов. если не пустая функция не имеет возврата, она просто использует последнее присваивание. Также, что сказал @Titus.a%3?0:(a/=3)
вместо!(a%3)&&(a/=3)
Утилиты Bash / Unix,
3735 байтПопробуйте онлайн!
Использует dc для преобразования в базу 3, проверяет, что полученная строка равна всем 2, подсчитывает количество символов (включая символ новой строки), а затем использует bc для вычитания 1.
Если число в базе 3 - это не все 2, то grep ничего не выводит (даже перевод строки), поэтому количество символов равно 0, а вычитание 1 дает -1.
источник
C составлен с Clang 3.8.1,
53,52,54, 51 байт@SteadyBox уже опубликовал решение на C, но я использую другой подход.
@ Спасибо Jasen за помощь в сохранении байтов.
источник
log
возвращается,double
так что, возможно, это сработает.C, 42 байта, оптимизированный от Wade Tyler's
Пытаться
C 37 байт, без
return
Пытаться
n
является глобальным, но(I)MUL
может иметь только операнд dest в регистре, поэтому нужно поместить вEAX
(обычный выбор) и переместить тудаJavaScript 6, 32 байта
Если «ложь» должна быть такой же, 33 байта:
источник
Пыть ,
109 байтОбъяснение:
Сохраненный байт с помощью функции приращения вместо явного добавления 1
источник
Python, 64 байта
Выводится,
False
если число не может быть записано в этом формате.Это также работает в 64 байтах и печатает пустую строку как ложный вывод:
Креативное решение для 65 байтов, вывод
0
для фальсификации:источник
x
ни-1
.x
вместоn
в случае совпадения.Pyth, 10 байт
Попробуй это здесь!
источник
Юлия, 30 байт
Это простая функция - она создает вектор, который имеет
true
только в соответствующей позиции в3^a-1
, гдеa
вектор, содержащий целые числа от 0 доn
. Он находит «первую» позицию, которая равнаtrue
1, и вычитает 1 (если это всеfalse
, find оценивается как ноль, и возвращает -1).Как
0:n
и0
в первом месте, вычитание 1 корректирует индексирование и также допускает-1
ложный ответ.источник
Пайк,
96 байтПопробуй это здесь!
Старая 9-байтовая версия:
Попробуй это здесь!
источник
Pyth 8 байтов
Попробуй здесь
источник