Це ціле число?


26

Число є цілим, якщо це невід'ємне ціле число без десяткової частини. Так 0і 8та 233494.0в цілому, в той час як 1.1і 0.001і 233494.999не є.


Вхідні дані

Номер з плаваючою комою у базовій / кодовій вашій мові за замовчуванням.

Наприклад, за замовчуванням ціле представлення для двійкового обчислення лямбда буде церковними цифрами . Але типовим цілим поданням для Python є базове 10 десяткових , а не унарне .

Вихідні дані

Truthy значення , якщо вхід ціле, falsy значення , якщо це не так .

Зауважте, що якщо ваша мова підтримує лише десяткову точність до, скажімо, 8 місць, 1.000000002можна вважати цілою.

Введення та виведення можуть здійснюватися за допомогою будь-яких стандартних методів вводу / виводу .


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

Input        -> Output
332          -> true
33.2         -> false
128239847    -> true
0.128239847  -> false
0            -> true
0.000000000  -> true
1.111111111  -> false
-3.1415926   -> false
-3           -> false

Оцінка балів

Як і у випадку з , виграє найкоротше подання. Удачі!


2
@StephenLeppik Це не простіше, ніж виклик паритету ванілі, або Привіт Світ, або машина Істини. (Насправді, це важче, ніж більшість із них.)
MD XF

Чи можемо ми прийняти введення як два числа, що представляють собою дріб?
LyricLy

@LyricLy Ні, це може бути набагато простішим для деяких мов або непотрібним для інших.
MD XF

Зауважте, що цілі числа є невід’ємними цілими числами. Будь ласка, оновіть своє перше речення, щоб відобразити це. І ви можете додати в тестові випадки з від’ємними числами, якщо хочете показати, як цілі числа не є від’ємними, а фальшиві результати для від’ємних чисел дійсні.
Томас Уорд

1
@ThomasWard, ця стаття з вікіпедії, здається, не повністю з вами погоджується: "Тексти, які виключають нуль із натуральних чисел, іноді посилаються на натуральні числа разом із нулем як цілі числа, але в інших працях цей термін використовується замість цілих чисел (включаючи від’ємні цілі числа) ". Я читаю заголовок як запитання про цілі числа.
ilkkachu

Відповіді:


13

APL (Dyalog) , 3 байти

⌊≡|

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

Зауважте, що f←він був попередньо створений у посиланні TIO через технічні обмеження, але зазвичай це не потрібно.


Це елегантно! Я не знаю, чому я додав зайвої стелі у свою відповідь ....
Гален Іванов

4
@GalenIvanov Це просто floor(n) == abs(n).
Ерік Аутгольфер




6

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

£ΘN

Спробуйте в Інтернеті! Третій тестовий випадок закінчується в TIO, тому я нарізав пару цифр. Я намагався запустити його локально, але вбив його через пару хвилин, оскільки він використовував понад 6 Гб пам'яті, і мій комп'ютер почав заїкатися. Він теоретично повинен закінчити в якийсь момент ...

Пояснення

Це відповідає безпосередньо опису виклику.

£ΘN  Implicit input: a number.
  N  The infinite list [1,2,3,4...
 Θ   Prepend 0: [0,1,2,3,4...
£    Is the input an element of this list?

Як λx → floor(x) == abs(x)виглядав би Хуск?
Лінн

@Lynn Це було б §=⌊a, тому на один байт довше.
Згарб


5

/// , 94 байти, вхід жорстко закодований

/=/\/x://:/\/\///-0/-:.0/.:.|/|:-|/|:0=1=2=3=4=5=6=7=8=9=|x/|:||/true:x:/-:/.:/|/+:++/false/||

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

Введення між двома закінчуючими вертикальними лініями ( ||)

Смугає -00...0та .00...0перетворює всі цифри, що залишилися, до xs, а потім перевіряє, чи залишилось число ще xпісля s .чи -ні ..

Може заощадити до 7 байт в залежності від того , що вважається truthy і falsey , так як ця мова не має власних значень truthy / falsey, в даний час виводить trueі , falseале може змінитися, наприклад, Tі Fдля 87 байт , якщо це дозволено.


5

Октава , 15 байт

@(x)any(x==0:x)

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

Цей заснований на підході, який використовується у відповіді Haskell @ flawr .

Хоча це призводить до зниження кількості байтів до 15, воно ганебно неефективне (жодних злочинів не передбачається), створюючи список кожного цілого числа від 0до xта бачити, чи xміститься він у ньому.


Октава , 18 байт

@(x)fix(x)==abs(x)

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

Вводить дані як число подвійної точності. Повертає істинне, якщо ціле.

Перевіряє, чи вхід при округленні дорівнює величині вводу. Це буде лише тоді, коли число позитивне і ціле.


Октава , 18 байт

@(x)~mod(x,+(x>0))

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

Альтернативне рішення на 18 байт. На жаль, modфункція в Octave неявно не перетворює a boolв a double, тому +( )потрібна приблизно порівняно з порівнянням. Інакше це рішення було б коротшим.


Октава , 18 байт

@(x)x>=0&~mod(x,1)

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

І ще один ... Я, здається, не можу отримати менше 18 байт . Все через те, що потрібно допустити, щоб 0 було істинним, >=а не справедливим >.



4

Ацето , 6 байт

rfdi±=p
r захоплює вхід
f перетворює його на поплавок
d і я дублює його і перетворює в ціле число
± висуває абсолютне значення (b / c не може бути негативним)
= перевіряє, чи вони рівні
p друкує результат

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



4

QBIC , 17 байт

?(:=int(a))*(a>0)

Пояснення

?             PRINT
 (:=int(a))     if the input (: assigns the cmd line param to 'a') equals itself 
                cast to int, -1 else 0
 *              times
 (a>0)          if the input > 0, -1 else 0

Якщо будь-яка перевірка не вдається, це повертає 0. Якщо обидва вірні, то повертається -1 x -1 = 1



4

C (gcc), 27 28 27 25 байт

-2 завдяки PrincePolka

#define g(f)!fmod(f,f>=0)

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

Визначає макро "функцію", gяка приймає параметр f(будь-якого типу). Потім перевіряє, чи немає на кастингу f mod 1нульового рівня, а якщо fнемає негативного.


Я думаю, вам потрібно включити розмір includeдирективи у свій байт, оскільки fmod визначений у math.h: дивіться там
HatsuPointerKun

@HatsuPointerKun Працює і без цього
містер Xcoder

2
Я не думаю, що вам потрібен -lm на Windows-дистрибутивах C (працює на моїй машині)
Conor O'Brien

25, #define g (f)! Fmod (f, f> = 0)
PrincePolka

4

C #, Java: 43 байти

-1 байт завдяки Zacharý
-1 байт завдяки TheLetalCoder

int w(float n){return(n==(int)n&&n>=0)?1:0;}

C # має спеціальну 33-байтну оптимізацію, яку не можна робити в Java:

bool w(float n){return(int)n==n;}

Для тестування

C # код:

class Program {
    int w(float n){return(n==(int)n&&n>=0)?1:0;}

    static void Main(string[] args)
    {
        var p = new Program();
        float[] fTab = new float[]{
            332,33.2f,128239847,0.128239847f,0,0.0000f,1.1111111111f,-3.1415926f,-3
        };
        foreach (float f in fTab) {
            Console.WriteLine(string.Format("{0} = {1}", f, (p.w(f) != 0).ToString()));
        }
        Console.ReadKey();
    }
}

Код Java:

public class MainApp {
    int w(float n){return(n==(int)n&&n>=0)?1:0;}

    public static void main(String[]a) {
        MainApp m = new MainApp();
        float testArr[] = new float[]{
                332,33.2f,128239847,0.128239847f,0,0.0000f,1.1111111111f,-3.1415926f,-3
        };

        for (float v : testArr) {
            System.out.println(v + " = " + String.valueOf(m.w(v)!=0));
        }
    }
}

Я думаю, ви можете видалити пробіл між returnі (.
Zacharý

return a boolі не потрібно в тернарі.
TheLethalCoder

@TheLethalCoder boolне існує на Java
HatsuPointerKun

Я не знаю Java / C # так добре, але чи зможете ви це зробити return(int)n==n? Або це би кинути n==nна int, а не просто n?
Zacharý

1
Можна знизити відповідь Java 7 на 3 байти, відмінивши чек і змінивши булевий оператор на бітовий: int w(float n){return(int)n!=n|n<0?0:1;}( 40 байт ). Як і лямбда Java 8, це ще коротше: n->(int)n==n&n>=0( 17 байт ) , і це ж стосується відповіді C # як лямбда: n=>(int)n==n&n>=0(також 17 байт ) .
Кевін Круїссен

4

Google Таблиці, 10 байт

Функція анонімного робочого аркуша, яка повідомляє введення з комірки A1та виводить в клітинку, що викликає.

=A1=Int(A1


3

Лі , 35 47 байт

ir"-"=[0u;]pr[["0"=![psp>l"."=[ppr!u;]p<2$]pp]]

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

У Ly є підтримка поплавця, але єдиний спосіб створити поплавок на даний момент - це виконати поділ. Немає можливості взяти float як вхід, тому мені довелося замість цього вручну перевірити рядок.

Втрачено 13 байт, додавши підтримку негативних чисел.


3

JavaScript, 14

n=>!(n<0||n%1)

13 байт:n=>!(n-(n|0))
Ісмаель Мігель

@IsmaelMiguel. Не працює для від'ємних чисел.

@ThePirateBay Яке саме число? Я спробував з 5, 5,1, -5, -5,1, 0, 0,1 і -0,1.
Ісмаїл Мігель

@IsmaelMiguel. (n=>!(n-(n|0)))(-3)повертається true, але має повернутися false. Дивіться останній тестовий випадок.

О, ти прав на це: / Я неправильно прочитав питання: /
Ісмаїл Мігель




3

C #, 40 37 29 байт

bool z(float x)=>x%1==0&x>=0;

Збережено 8 байт завдяки @Dennis_E!

Стара відповідь (37 байт)

bool z(float x){return x%1==0&&x>=0;}

Стара відповідь (40 байт):

bool z(float x){return (int)x==x&&x>=0;}

2
30 байт: bool z(float x)=>x%1==0&&x>=0;і ви можете використовувати сингл &для 29 байт
Dennis_E

@Dennis_E Дякую!
yummypasta

x=>x%1==0&x>=0коротше і скласти доFunc<float, bool>
TheLethalCoder

3

JavaScript, 17 15 байт

_=>_<0?0:_==~~_

_=>_<0?0:_==(_|0)

Дякую edc65 за те, що я помилявся.


3

Нерозширений Sinclair ZX81, 20 байт

 1 INPUT A
 2 PRINT ABS A=INT A

20 байт, тому що BASIC є токенізованим.

Просто виведемо 1 (вірно), якщо число додатне, а значення введеного числа дорівнює його цілому значенню. Виходи 0 жодна з цих умов не виконані.


1
Це токенізована мова? Якщо це так, ви повинні вказати це у своїй відповіді.
Тейлор Скотт

1
Вибачте, так, це tokenized, тобто INPUT - це 1 байт оперативної пам’яті, як PRINT і навіть> = завдяки ~ химерності за призначенням функції Sinclair BASIC
Shaun Bebbers

1
Зокрема, кожний номер рядка становить 5 байт + 1 newline( \r\nеквівалент на ZX81), пробіли не вважаються байтами, оскільки вони вже включені до ключових слів, як правило, завдяки системі введення Sinclair "однією клавішею натискання". Під час запуску це займе більше байтів, оскільки воно покладе значення Aна var stack; Я думаю, що кожне числове значення - це завжди 5 байт пам'яті.
Шон Бебберс

1
і ZX Spectrum теж
edc65

1
Наскільки мені відомо, режим токенізації точно такий же (у Spectrum більше кодів). А будь-яке буквальне число - 6 байт: байт "числового тегу" з наступним значенням, закодованим у форматі власного плаваючої крапки з 5 байтами)
edc65,

3

C, C ++: 38 37 байт

-1 байт завдяки Захарі

-1 байт завдяки стельовій коті

int w(float n){return(int)n==n&n>=0;}

Для тестування

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

C Код:

#include <stdio.h>
int main() {
    float f[] = { 332,33.2f,128239847,0.128239847f,0,0.0000f,1.1111111111f,-3.1415926f,-3 };
    int t;
    for ( t = 0; t < 9; ++t) {
        printf("%f = %s\n", f[t], w(f[t])?"true":"false");
    }
    return 0;
}

Код C ++:

#include <iostream>
int main() {
    std::initializer_list <std::pair<float,bool>> test{
        {332.f,true}, {33.2f,false}, {128239847.f,true}, {0.128239847f,false}, {0.f,true}, {0.000000f,true}, {1.111111f,false}, {-3.1415926f,false}, {-3.f,false}
    };

    for (const auto& a : test) {
        if (w(a.first) != a.second) {
            std::cout << "Error with " << a.first << '\n';
        }
    }
    return 0;
}

1
Це буде працювати лише до INT_MAX. (Мені це зовсім не цікаво, але деякі люди це роблять.)
MD XF

Чи змінив би це на return(int)n==n...роботу?
Zacharý

Ви можете голити один байт, використовуючи неподписаний int замість підписаного (як тоді вам не потрібен >=0тест): return(unsigned)n==n; І в C ви можете опустити тип повернення ще 4 байти.
Toby Speight

Ви можете зберегти ще 8 байт:w(float n){n=n==(int)n&&n>=0;}
Йохан дю Тойт




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