Вступление
Классически, логические значения - один бит; true
или false
, 1
или 0
. Ведущие нули были бы просто лишними. Например, 001
означает так же, как 00001
или просто 1
.
32-битный логический
Учитывая значение truey / falsey, выведите эквивалентный 32-битный логический тип в виде строки. (Или как число, если по какой-то причине ваш язык поддерживает начальные нули.)
Ваша программа не должна работать для каждого типа «истина / ложь», только то, для чего лучше всего работает ваш язык программирования.
Пример ввода / вывода
Input >> Output
truthy >> 00000000000000000000000000000001
falsey >> 00000000000000000000000000000000
Ответы:
Python 3 ,
33251815 байтСпасибо @ jurjen-bos за
__mod__
подсказку.Попробуйте онлайн!
источник
lambda b:'%0.32d'%b
работать?None
правда или ложь ?lambda b:f'{bool(b):032}'
илиlambda b:f'{not b<1:032}'
0.32d
.Машинный код x86-16 (DOS), 16 байт
Приведенная выше функция получает логическое значение (0 == Falsey, 1 == Truey) в
BL
регистре ( байтBX
) и печатает «лишнюю логическую» строку в стандартный вывод.Он работает, вызывая прерывание (0x21) для вызова функции DOS (выбирается настройкой
AH
2), которая печатает один символ (inDL
) на стандартный вывод.Сначала загружается символ ASCII '0'
DL
, счетчик (CX
) устанавливается в 31, и он зацикливается для вывода "лишних" байтов. Затем добавляется входное логическое значениеDL
(еслиBL
false, добавление 0 не изменитсяDL
как ASCII '0'; еслиBL
верно,DL
будет увеличено на единицу до ASCII '1'), и будет напечатан последний байт.Функция не возвращает значение.
Довольно приличный для языка, который на самом деле не делает строк.
Полная программа, 21 байт
Если вы хотите превратить его в полную программу, потребуется всего 5 байтов. Вместо того, чтобы передавать ввод в регистр, он читает входные данные из аргументов, переданных в командной строке при вызове приложения. Аргумент 0 интерпретируется как фальси, как и полное отсутствие аргументов; аргумент больше 0 интерпретируется как правдивый.
Просто соберите следующий код как программу COM, а затем выполните его в командной строке.
Пример вывода:
Как это работает? Ну, это в основном то же самое, пока вы не приступите к
CMP
инструкции. Это сравнивает аргумент командной строки со значениемDL
регистра (который, как вы помните, содержит ASCII '0'). В программе COM байты кода загружаются со смещением 0x100. За этим следует префикс сегмента программы (PSP) , который содержит информацию о состоянии программы DOS. В частности, по смещению 0x82 вы найдете первый (фактически второй, поскольку первый является пробелом) аргумент, который был указан в командной строке при запуске программы. Итак, мы просто сравниваем этот байт с ASCII '0'.Сравнение устанавливает флаги, а затем
SALC
инструкция (недокументированный код операции до Pentium, эквивалентныйsbb al, al
, но только 1 байт вместо 2) устанавливаетAL
значение 0, если два значения были равны, или -1, если они были разными. Тогда очевидно , что если вычестьAL
изDL
, это приводит либо ASCII «0» или «1», в зависимости от обстоятельств.(Обратите внимание, что, по иронии судьбы, вы сломаете его, если передадите аргумент с начальным 0 в командной строке, так как он смотрит только на первый символ. Поэтому
01
будет рассматриваться как фальси. :-)источник
Python 3 , 23 байта
Попробуйте онлайн!
источник
'10'[not n]
было бы достаточно, если бы они нуждались в поддержке.'{:032}'.format
на 15 байт и работают так же, как ваше текущее решениеbool(n)
было бы достаточноJavascript, 23 байта
!!a
приводит к логическому значению, которое унарный плюс превращается в int.источник
a=>'0'.repeat(31)+(+a)
на один байт короче.Your program doesn't have to work for every truthy/falsy type, only what your programming language work best for.
a=>'0'.repeat(31)+~~a
работает с true, false, 1,0V , 8 байт
Попробуйте онлайн!
Объяснение:
источник
Нейм ,
65 байтПопробуйте онлайн!
Объяснение:
Сохраненный байт благодаря Okx
источник
ᛝΨβ_I
ᛝ
нет в вики, где ты его нашел?Октава , 17 байт
Анонимная функция. Работает в MATLAB тоже.
Попробуйте онлайн!
источник
ArnoldC , 369 байт
Попробуйте онлайн!
источник
Brainfuck ,
616036 байтЯ уверен, что есть умный способ не перемещаться с указателями.Я был прав. Существовал. Спасибо @Graviton за предоставленную мне идею!
Следующий шаг: получите значения 32 и 48 быстрее!
Попробуйте онлайн!
Было весело для первого Гольфа!
Сейчас стало слишком поздно.Что я вообще делаюисточник
>-[-[-<]>>+<]>--<<-[>+<-----]>--->[-<.>],.
(принимает входные данные как 0 или 1) Попробуйте онлайн!Scala, 32 байта
Извините, но я был вынужден сделать это в 32 байта> _ <
Он заключен в функцию, принимающую в
t
качестве параметра (как a,string
которая может быть «0» или «1» для ложных или правдивых), иs
возвращается.Попробуйте онлайн!
Допустимый ответ: Scala, 46 байт.
Так же, как мой ответ Java, я должен был принять логическое значение для параметра. Так :
Попробуйте онлайн!
источник
Braingolf ,
108 байтПопробуйте онлайн!
␟
является Разделителем модулей, ASCII0x1F
или 31. Не удается найти фактический символ для вставки в TIO, поэтому вместо него используется TIO# 1-
, который увеличивает пробел (32) и уменьшает до 31.объяснение
источник
Октава , 23 байта
Попробуйте онлайн!
Это короче, чем все подходы, которые я пробовал
printf
. Я мог что-то пропустить, хотя, так как я сделал это на моем телефоне.Только один байт дольше
Это может быть 18 байт, если я могу взять 1/0 в качестве строк.
Попробуйте онлайн!
источник
Java 8,
3127 байт-4 байта благодаря @ OlivierGrégoire .
Попробуй это здесь.
источник
"".format
)String.format
я знал, что есть какой-то более короткий путь, но я подумал, что, вероятно, использовал переменную String в прошлый раз ... Спасибо. ;)05AB1E , 5 байтов
Попробуйте онлайн!
источник
31úð0:
!Рубин, 21 байт
Да, это место должно быть там ..: /
В Ruby все, кроме
false
иnil
правдиво; Попробуйте онлайн!источник
Mathematica, 36 байт
Mathematica, 26 байтов
Попробуйте онлайн!
источник
Древесный уголь , 5 байт
Попробуйте онлайн! (Ссылка на подробную версию.)
Как уголь понимает
0
и1
какTrue
илиFalse
, это просто печатает 310
с и ввод (0
или1
) в виде строки.источник
True
хотя, странноPython 2 ,
2625 байтСпасибо Эрику Аутгольферу за сохранение байта!
Идет для полного программного подхода:
Попробуйте онлайн!
источник
~~
с+
на -1. После этого полная программа больше не будет дорогой . ;)Нежелательный, Ненужный, Оппортунистический , 7 байтов
Введите 1 или 0 в регистр.
источник
C, 26 байтов
Практически та же идея, что и у решения 1bluestone , но в C он короче и работает правильно для любого целочисленного ввода:
Конечно, это включает в себя некоторые неявно типизированные переменные / функции, как это делают все хорошие ответы C-golf ...
!!
Оператор - самый короткий способ преобразовать любое истинное значение1
в C (через двойное отрицание,!
определено, чтобы возвращать либо1
или0
).Тест с:
источник
Haskell ,
3732 байтаПопробуйте онлайн!
Спасибо @nimi за
-5
байты!источник
show(fromEnum x)
вместоlast(...)
. Pointfree еще короче(('0'<$[1..31])++).show.fromEnum
.Bool
этоEnum
, спасибо!PHP, 28 байт
Сохраните как bool.php и запустите:
источник
printf('%032d',$argv[1]);
(требуется-r
флаг).Ли ,
201513 байтРЕДАКТИРОВАТЬ: Сохранено 5 байтов благодаря ов.
РЕДАКТИРОВАТЬ: сохранить еще 2 байта, напечатав 0 как число, а не символ.
источник
65*1+["0"o1-]nu
работать?Октава,
1611 байтПопробуйте онлайн!
Функциональный дескриптор, который воспринимается
"00000000000000000000000000000001"
как правдивый и"00000000000000000000000000000000\0"
ложный.Объяснение:
В Octave массив считается ложным, если хотя бы один из его элементов равен нулю. 33-й элемент второй строки - это символ со значением ASCII, равным 0, поэтому его можно считать ложным.
источник
Java, 40 символов, 40 байтов
Это принимает строку как параметр, что является неправильным (ложное / истинное значение java принудительно определяется OP, чтобы быть представленным логическим значением).
Попробуйте онлайн!
Допустимый ответ: Java, 60 символов, 60 байтов
Попробуйте онлайн!
Я знаю, что уже есть ответ Java, который короче этого, но все же :)
источник
return
оператор является частью вашего кода, поэтому часть вашего подсчета байтов. Но ваш ответ не соответствует правилам: вы должны получить вboolean
качестве входных данных. «Истина / ложь» переводится на Java как «либо»,true
либо «false
ничего». Таким образом, вы не можете получить вString
качестве входного параметра.;
). Кроме того , вы можете сократить свой код , как это:c->{String k="";for(;k.length()<31;)k+=0;return k+=c?1:0;}
. Этоk+=c?1:0
сократитьk+(c?1:0)
.;
. Для утверждения требуется точка с запятой. Лямбда это не утверждение.Japt ,
1311 байтОбъяснение:
Сохранение байта с использованием встроенного преобразования base-2!
Чтобы вставить строку из 0 перед
1
/0
, мне нужно привести1
и0
в строку. Типичный способ сделать это1s
(3 байта). Но поскольку мы конвертируем только 1 и 0, я могу использовать встроенный в base-21¤
(2 байта).Ввод может быть в виде целого числа или строки.
0
и""
ложь в Япте.Попробуйте онлайн!
Тестирование
источник
C # (.NET Core) , 29 байт
ОП сказал, что 1/0 может использоваться для правды / фальси, поэтому может сделать
a
int, и он становитсяВ C # на самом деле нет правды / фальши, поэтому я не буду использовать этот ответ.
Попробуйте онлайн!
источник
Padleft
входит здесь с тем же количеством байтов.interpolated strings
может быть весьма полезным здесь:b=>$"{(b?1:0):D32}"
19 bytes
МОЙ ,
109 байтПопробуйте онлайн!
Пояснение (кодовая страница [с указанием символа) / шестнадцатеричный код):
Я не могу поверить, что это возможно без каких-либо команд с двумя аргументами вообще!
Редактировать: 1 байт, используя простые числа вместо арифметики, чтобы получить 31.
источник
APL, 11 байт
Как?
1\⍨⊢
- повторить 1 раз - вернуть пустой массив на ложное значение1↑
- возьми первый предмет¯32↑
- выровнять справа по 31 нулю⍕
- отформатировать как строкуисточник
⍕¯32↑⊢
должно работать∊⍕¨¯32↑⎕
или что-то.J 11 байт
Попробуйте онлайн!
как?
примечание: в J булевы значения 0 или 1, также известные как «соглашение о айверсоне», после Кена Айверсона, создателя J и APL
источник
":
это необходимо для работы - оно заменяет логическое значение на строку ,