Це трицифрове число, що закінчується одним?


27

Враховуючи невід’ємне ціле число, поверніть, чи є це трицифрове число, що закінчується одним, у будь-якій послідовній цілій основі. Іншими словами, число потрібно представити в base-N, N є цілим числом, більшим за нуль.

Правила

  • Це , тому найкоротша відповідь виграє.
  • Оскільки унарі поводиться дивно, поведінка з введенням 3 10 не визначена.
  • Стандартні лазівки заборонені.

Приклади

Правда:

5   
73  
101 
1073
17
22
36
55
99  

Помилковий:

8
18
23
27
98
90
88
72
68

Жменька великої кількості:

46656 true
46657 true
46658 true
46659 true
46660 true
46661 false
46662 false
46663 true
46664 false
46665 true
46666 true
46667 false
46668 false
46669 false
46670 true
46671 true

1
Так як одинарний поводиться химерно немає, він не поводиться дивно, одинарне уявлення цілого невід'ємного nтільки n 1з, наприклад 0 = ()₁, 3 = (111)₁, 10 = (1111111111)₁і т.д.
Ерік Outgolfer

6
@EriktheOutgolfer Це поводиться зовсім інакше; Ви не можете розділити, наприклад, 1 на n-ithift.
wizzwizz4

3
Що означає послідовна ціла база? (Крім того, замість виключення унарних у правилах ви можете просто вказати N ≥ 2.)
Лін

1
@Lynn Позиційна позиція з одним радіусом, наприклад, десять базових, на відміну від залежного від положення радіусу, як ви бачите з імперськими одиницями або часом.
HAEM

1
@Lynn як доповнення, я також намагався виключити раціональні, негативні, складні тощо. Що стосується вашого другого пункту, правило про одинарне не повинно включати і не виключати унарне. Якщо моє розуміння мови не є більш слабким, ніж я думав, "невизначена поведінка" означає "все, що хоче сторона, що реалізує", саме для цього я йшов.
HAEM

Відповіді:


10

Желе , 7 байт

bRṫ€3ċJ

Повертає кількість підстав (ненульове значення триє, нулеве - хибне), в якому вхід - трицифрове число, що закінчується одним.

Спробуйте в Інтернеті!

Як це працює

bRṫ€3ċJ  Main link. Argument: n

 R       Range; yield [1, ..., n].
b        Base; convert n to bases 1, ..., n.
  ṫ€3    Tail each 3; remove the first two elements of each digit array.
      J  Indices of [n]; yield [1].
     ċ   Count the number of times [1] appears in the result to the left.

10

JavaScript (ES7), 43 40 39 байт

f=(n,b)=>n<b*b?0:n%b==1&n<b**3|f(n,-~b)

Тестові справи

Прокоментував

f = (n,           // given n = input
        b) =>     // and using b = base, initially undefined
  n < b * b ?     // if n is less than b²:
    0             //   n has less than 3 digits in base b or above -> failure
  :               // else:
    n % b == 1 &  //   return a truthy value if n is congruent to 1 modulo b
    n < b**3 |    //   and n is less than b³ (i.e. has less than 4 digits in base b)
    f(n, -~b)     //   or the above conditions are true for some greater value of b






3

Математика, 43 байти

!FreeQ[IntegerDigits[#,2~Range~#],{_,_,1}]&

Спробуйте в Інтернеті!

або Спробуйте в Інтернеті! (велика кількість)

Мартін Ендер врятував 3 байти


!FreeQ[#~IntegerDigits~Range@#,{_,_,1}]&трохи коротше, якщо ви не проти побачити IntegerDigits::ibase: Base 1 is not an integer greater than 1.попередження. (Він все одно повертає правильні відповіді.)
Міша Лавров




2

APL (Dyalog Unicode) , 21 20 14 байт SBCS

-5 завдяки @ngn.

Чисто арифметичне рішення (насправді не робить базових перетворень) і, таким чином, дуже швидко.

3∊⊢(|×∘⌈⍟)⍨1↓⍳

Спробуйте в Інтернеті!

⊢()⍨1↓⍳ На один випадений з аргументу ɩ ndices 1… та аргумент застосувати:

| поділ залишки

×∘⌈ разів округлене

 журнал N Аргумент

3∊ є трьома членами цього?


Ви можете зберегти 1 за допомогою стандартного трюку заміни аргументів:⊢(∨/(3=∘⌈⍟)∧1=|)⍨1↓⍳
18-18

@ngn Дякую Наступного разу сміливо редагуйте такі (якщо вам це подобається).
Адам

добре. Ось більш складне вдосконалення, яке я залишаю вам для вирішення - воно робить це таким же коротким, як ваше інше рішення:(⊂1 3)∊⊢(⌈|,¨⍟)⍨1↓⍳
1818

1
3∊⊢(|×|×∘⌈⍟)⍨1↓⍳
ngn

2
@ngn 1=⌈a⍟b, a≤ba=b0=a|b0=b|b
Адам


1

Лушпиння , 15 байт

V§&o=1→o=3LṠMBḣ

Спробуйте в Інтернеті!

Пояснення

V§&(=1→)(=3L)ṠMBḣ  -- implicit input, for example: 5
             ṠMB   -- map "convert 5 to base" over..
                ḣ  --   range [1..5]
                   -- [[1,1,1,1,1],[1,0,1],[1,2],[1,1],[1,0]]
V                  -- does any of the elements satisfy the following
 §&( 1 )( 2 )      --   apply functions 1,2 and join with & (logical and)
         =3L       --     is length equals to 3?
    =1→            --     is last digit 1?


1

C, 60 байт

Функція, яка повертає ненульове значення, якщо аргумент можна представити як трицифрове число, що закінчується на 1:

i,j;f(n){for(j=0,i=sqrt(n);i>cbrt(n);)j+=n%i--==1;return j;}

Примітка. Це працює з GCC, де функції вбудовані. Для інших компіляторів вам, ймовірно, потрібно переконатися, що типи аргументів та повернення відомі:

#include<math.h>

Пояснення

Найнижча база, яка nпредставлена ​​в трьох цифрах, є ⌊∛n⌋найнижчою базою, в якій nпредставлена ⌊√n⌋двозначною цифрою, тому ми просто перевіряємо, чи число відповідає конвергенту 1 модулю будь-яким основам у тризначному діапазоні. Повертаємо підрахунок кількості підстав, що задовольняють умові, надаючи значення нульове (триутюкі) або нульове (хибне) значення у відповідних випадках.

Тестова програма

Передайте будь-яку кількість входів як позиційні параметри:

#include<stdio.h>
int main(int c,char**v)
{
    while(*++v)
        printf("%s => %d\n", *v, f(atoi(*v)));
}



0

Pyt , 35 33 байт

←ĐĐ3=?∧∧:ŕĐ2⇹Ř⇹Ľ⅟⌊⁺3=⇹Đ2⇹Ř%*ž1⇹∈;

Пояснення:

←ĐĐ                                             Push input onto stack 3 times
   3=?  :                       ;               If input equals 3, execute code after the question mark;otherwise, execute code after the colon. In either case, afterwards, execute the code after the semicolon
      ∧∧                                        Get 'True'
        :                                       Input not equal to 3
         ŕ                                      Remove 'False'
          Đ2⇹Ř                                  Push [2,3,...,n]
              ⇹Ľ⅟⌊⁺                             Push [floor(log_2(n))+1,floor(log_3(n))+1,...,floor(log_n(n))+1]
                   3=                           Is each element equal to 3
                     ⇹                          Swap the top two elements on the stack (putting n back on top)
                      Đ2⇹Ř                      Push [2,3,...,n]
                          %                     Push [n%2,n%3,...,n%n]
                           *                    Multiply [n%x] by the other array (i.e. is floor(log_x(n))+1=3?)
                            ž                   Remove all zeroes from the array
                             1⇹∈                Is 1 in the array?
                                ;               End conditional
                                                Implicit print

Спробуйте в Інтернеті!


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.