Делать пока ложно
Сегодня на работе один из моих коллег описывал вариант использования для do while (false). Человек, с которым он разговаривал, думал, что это глупо и так просто, если заявления будут намного лучше. Затем мы потратили впустую половину нашего дня, обсуждая лучший способ написать что-то эквивалентное:
do
{
//some code that should always execute...
if ( condition )
{
//do some stuff
break;
}
//some code that should execute if condition is not true
if ( condition2 )
{
//do some more stuff
break;
}
//further code that should not execute if condition or condition2 are true
}
while(false);
Это идиома, которая встречается в c довольно часто. Ваша программа должна выдавать тот же вывод, что и приведенный ниже псевдокод, в зависимости от условий.
do
{
result += "A";
if ( C1)
{
result += "B";
break;
}
result += "C"
if ( C2 )
{
result += "D";
break;
}
result += "E";
}
while(false);
print(result);
Поэтому вход может быть:
1. C1 = true, C2 = true
2. C1 = true, C2 = false
3. C1 = false, C2 = true
4. C1 = false, C2 = false
и вывод должен быть:
1. "AB"
2. "AB"
3. "ACD"
4. "ACE"
Это код-гольф, поэтому ответы будут оцениваться по байтам. Стандартные лазейки запрещены.
Да, это простой вопрос, но, надеюсь, мы увидим креативные ответы. Надеюсь, простота побудит людей использовать языки, в которых они менее уверены.
return result
вместоbreak
. Тогда вы получаете бонусы за повторное использование и упрощение кода вызова. Но, возможно, я что-то упустил.goto
использоватьgoto
это плохо :)do{}while(false)
, было внутри макросов. Простогоif
недостаточно, потому что оно плохо взаимодействуетelse
с окружающими, которые могут присутствовать. Без макроса вы можете также удалитьdo
иwhile
.Ответы:
Python 3, 31
Сохранено 1 байт благодаря xnor.
Только один байт от ES6. : / Глупый Python и его длинный анонимный синтаксис функции.
Ура для одного лайнера!
Тестовые случаи:
источник
x*"AB"
, вы можете сэкономить место после.λ
синонимом,lambda
было бы здорово :)JavaScript ES6,
302625 байтПростая анонимная функция, принимающая два входа. Назначьте переменную для вызова. Обновление : давайте поскакаем на индекс победителя. Это экономит 4 байта. Я обеспечил себе преимущество над Python . Сохранение байта путем каррирования функции; звоните как
(...)(a)(b)
. Спасибо, Патрик Робертс!Старая, оригинальная версия, 30 байтов (включена, чтобы не раствориться в ответе Python
(;
):источник
:b?
C препроцессор макро, 34
Попробуйте онлайн .
источник
Haskell, 28 байт
Пример использования:
False # True
->"ACD"
.Использование входных значений непосредственно в качестве охранников.
источник
MATL , 15
17байтВходы есть
0
или1
на отдельных строках. В качестве альтернативы,0
может быть замененаF
(MATL - хfalse
) и1
отT
(MATL - хtrue
).Попробуйте онлайн!
источник
Brainfuck, 65 байт
Это предполагает, что C1 и C2 вводятся как необработанные 0 или 1 байт. например
Golfed:
Ungolfed:
Я считаю , что стоит отметить , что это решение является на самом деле основано на разрушении из в то время как петли.
источник
GNU Sed, 21
Ideone .
источник
NTFJ , 110 байт
Более читабельно:
Это было конечно интересно. Попробуйте здесь , используя два символа (
0
или1
) в качестве ввода.Используя метод ETHProduction для преобразования в 0, 1 (символы) в биты, это становится проще.
Это указанный метод. Нажатие 193 (
##~~~~~#@
), NANDing его (|
) с верхним значением ввода (в этом случае, первый код символа, 48 или 49). Это дает 254 для 1 и 255 для 0. NANDE с 255 (########@
) возвращает 0 или 1 бит в соответствии с входом.Это печатает
A
, так как весь ввод начинается сA
.*
появляетсяA
при печати, поэтому стопка остается неизменной по сравнению с предыдущим состоянием.Случай 1: первый бит
1
, и(
активирует код внутри.~#~~~~#~@*
печатаетB
,########@^
нажимает 255 и переходит на эту позицию в коде. Это конец программы, она заканчивается.Случай 2: первый бит есть
0
.(
пропускает)
и код продолжается.Это печатает
C
, потому что это следующий символ.Это преобразует наш второй вход в немного.
Если наш второй бит равен 1, мы приступаем к печати
E
.Это NAND представление булева отрицания нашего бита:
A NAND (0 NAND A) = NOT A
.Это теперь активируется, если бит был
0
, и печатаетE
.источник
Pyth, 16 байт
Тестирование
Триад!
Объяснение:
Ввод на двух последовательных строках.
источник
CJam, 15
1617байтПопробуйте онлайн!
Один байт благодаря @randomra, а один байт благодаря @Dennis
Объяснение:
Старая версия (16 байт):
Объяснение:
источник
Pyth, 13 символов, 19 байтов
Принимает данные в форме [a, b]
объяснение
Попробуй здесь
Или используйте набор тестов
источник
«
как 1 байт каждый (2 байта в UTF-8). Какwc
и в этом согласны , что это 19 байт.C, 76 байтов
Я переименовал
c1
вc
,c2
чтобыC
иresult
чтобыr
. C программисты идут на крайности, чтобы избежатьgoto
. Если у вас когда-нибудь есть проблум с абсурдным синтаксисом в C, скорее всего, это потому, что вы не использовалиgoto
.Ungolfed
источник
char r[4]="A";
? Мой C ржавый."AC"
и заменив все сr[1]=67
наr[2]=69;
наr[2]=c2?68:69;
C, 41 байт
Я не уверен, требует ли вопрос программы, функции или фрагмента кода.
Вот функция:
Он получает входные данные в виде двух параметров, которые должны быть 0 или 1 (ну,
b
обязательно), и печатает в стандартный вывод.Наборы
a
к одному из0x4241
,0x454341
или0x444341
. При печати в виде строки в системе ASCII с прямым порядком байтов выдает требуемый вывод.источник
R ,
413937 байтПопробуйте онлайн!
В R,
TRUE
иFALSE
принуждают к1
и ,0
соответственно , при попытке использовать их как числа. Мы можем преобразовать эти числа индексов1
,2
и3
по формуле1+a+a^b
.Эти значения затем используются для индекса списка
ACD
,ACE
,AB
чтобы дать правильный вывод.Сохранено два байта благодаря JayCe.
Если вместо этого вы предпочитаете версию с
if
оператором, для 41 байта есть следующее:Попробуйте онлайн!
источник
^
Mathematica,
3530 байтОчень простой. Анонимная функция.
источник
Сетчатка, 22 байта
Попробуйте онлайн
источник
^
сm`
, чтобы он работал для многострочного ввода, что не является обязательным для вопроса, но облегчает тестирование.JavaScript, 38 байт
Используйте без разделителя
0
или1
вместоfalse
/true
источник
split` `
вместоsplit(" ")
+('0b'+prompt())
вместоparseInt(prompt(),2)
Cache ObjectScript , 27 байт
источник
ArnoldC , 423 байта
Поскольку ArnoldC, кажется, не имеет формального ввода, просто измените первые 2
YOU SET US UP
значения на 0 или 1.объяснение
Это всего лишь куча условных операторов, которые учитывают все возможные результаты. Почему, спросите вы? Ну, у ArnoldC на самом деле нет понимания строк. Он даже не может объединять строки! В результате мы вынуждены прибегнуть к более ... неэффективному ... методу.
источник
Java, 28 байт
Тот же самый шаблон, как много ответов. Тип есть
BiFunction<Boolean,Boolean, String>
.источник
(c,d)->
может быть в гольфе на 1 байт,c->d->
когда вы используетеjava.util.function.Function<Boolean, java.util.function.Function<Boolean, String>>
.Pyth, 21 байт
Попробуй это здесь!
Ввод принимается как 0 или 1 вместо true / false, пока C1 идет первым.
объяснение
Просто используя тот факт, что есть только 4 возможных результата. Работает, интерпретируя входные данные как двоичные, преобразовывая их в базу 10 и используя это для выбора правильного результата из строки поиска.
источник
Y , 20 байтов
В случае, если первый вход один, берется только один вход. Я предполагаю, что такое поведение разрешено. Попробуй это здесь!
Ungolfed:
Разъяснение:
Это толкает символы
B
затемA
в стек.Это берет один вход, увеличивает его, выталкивает и перемещает на это количество секций.
Случай 1:
j1 = 0
. Это более интересный.r$
переворачивает стек и выводит значение,'C'E
толкает символыC
иE
.@
преобразуетE
в числовой аналог, вычитает из него второй вход и преобразовывает его в символ.r
не переворачивает стек. Затем программа видит C-ссылку и переходит к следующей ссылкеp
и печатает стек.Случай 2: программа переходит к последней ссылке
p
, которая просто печатает весь стек.источник
PowerShell, 40 байт
Вложенные массивы индексируются вводом. В PowerShell
$true
/1
и$false
/0
практически эквивалентны (благодаря очень свободному приведению типов), так что они хорошо индексируются в двухэлементный массив. Это действительно так близко к троице, как PowerShell, и я много раз использовал его в гольфе.Примеры
источник
К, 37 байт
источник
Витси , 26 байт
Ожидает входные данные как 1 с или 0 через STDIN с разделителем новой строки.
Я действительно обнаружил серьезную проблему с утверждениями if во время этого вызова. D: Это опубликовано с неработающей версией, но работает просто отлично. (Я обновлю это после того, как исправлю проблему)Обратите внимание, что я обновил Vitsy с исправлением if / ifnot. Это изменение не дает мне никакого преимущества, только разъяснение.Объяснение:
Попробуйте онлайн!
источник
пчелиный воск , 26 байт
Интерпретация
0
как ложь,1
как правда.Выход:
Клонируйте моего переводчика пчелиного воска из моего хранилища Github .
источник
C,
4745 байтовТак как есть только 3 различных результата, мы можем выбрать одну из трех строк следующим образом:
Спасибо Herman L за 2 байта
демонстрация
источник
char*f(c,d){return"AB\0 ACE\0ACD"+(!c<<d+2);}
Perl, 23 байта
Требуется
-E
|-M5.010
помечает и принимает ввод как 1 и 0:Альтернативное решение, которое требует
-p
и составляет 22 + 1 = 23 байта:источник
say-<>?AB:-<>?ACD:ACE
на два байта короче.05AB1E ,
2320 байтКод:
Попробуйте онлайн!
источник
i„ABë„AC69I-çJ
попробуйте ее в Интернете или проверьте все контрольные примеры .I
. ; pJapt, 19 байт
Проверьте это онлайн!
Интересный факт: это было бы 16 байтов, если бы не ошибка:
источник