'abc' и 'cba'

28

Ваша задача проста: написать один фрагмент кода, который при выполнении на одном языке выводит только строку, 'abc'а при выполнении на другом языке - только строку 'cba'. Программа не должна принимать никаких данных.

Это вызов .

Chris_Rands
источник
4
Я не думаю, что это дурак вообще. Тот факт, что строка обратная, достаточно отличается от печати двух разных строк. Я не буду (голосовать за) вновь открывать, хотя, поскольку это имело бы немедленный эффект
Луис Мендо
4
Я проголосовал за повторное открытие этого поста, потому что IMO, печатающий обратную строку и строку, сильно отличается от двух разных. Ни один ответ не может быть тривиально изменен, чтобы соответствовать этой задаче. Мой собственный ответ использует технику обратной симметрии по сравнению с ответами там. Я согласен с @LuisMendo.
Мистер Кскодер,
2
Можете ли вы печатать ABCвместоabc
Оливер Ни
5
Я голосую, чтобы вновь открыть, некоторые ответы используют факт cbaв abcобратном направлении; ссылка , ссылка , ссылка , ссылка , ссылка , ссылка , ссылка , ссылка , ссылка , ссылка
Оливер Ни
2
'ABC'и 'CBA'все в порядке, начальные / конечные пробелы / переводы строк в порядке, но они должны быть одинаковыми для обоих выходных данных
Chris_Rands

Ответы:

21

MATLAB / Octave, 41 байт

disp(flip('abc',size(randsample(2,2),2)))

В MATLAB randsample(2,2)дает вектор 2 × 1, так что size(...,2)есть 1. Таким образом flip, применяется к первому измерению, которое является одиночным, поэтому 'abc'отображается исходная строка :

введите описание изображения здесь

В Октаве randsample(2,2)дает 1 × 2 вектор, так что size(...,2)есть 2. Таким образом flip, применяется вдоль второго измерения, то есть строка переворачивается слева направо:

введите описание изображения здесь

Луис Мендо
источник
Я думаю, что это будет на несколько байт короче, если вы используете менее интересный versionвариант.
Стьюи Гриффин
@ StewieGriffin Спасибо. Я думаю, что уже слишком поздно, чтобы измениться. Может опубликовать это сам?
Луис Мендо
Нет, это скучная версия этого ... Кроме того, у меня больше нет MATLAB, поэтому я не смогу протестировать его.
Стьюи Гриффин
15

25 байт

print(1/2and'cba'or'abc')

Попробуйте онлайн! ( Python 2 )

Попробуйте онлайн! ( Python 3 )

Эрик Outgolfer
источник
-1 байт, используя exitвместо print(хотя это относится к каждому ответу на данный момент).
notjagan
@notjagan. exitпечатает stderr, не так ли? Не уверен, что это будет правильный ответ.
@ThePirateBay Вывод в STDERR разрешен согласно мета-консенсусу .
notjagan
Задача состоит в том, чтобы отсканировать код и напечатать, хотя он не использует правила по умолчанию.
xnor
10

-1 байт, если я сделаю ==0 в >0но это уже другой ответ

Python 2 , 26 байт

print('acbbca'[1/2==0::2])

Попробуйте онлайн!


Python 3 , 26 байт

print('acbbca'[1/2==0::2])

Попробуйте онлайн!

1/2дает 0(floordiv) в Python 2 и 0.5(truediv) в Python 3. Таким образом, 1/2==0дает 1 в Python 3 и 0 в Python 2 (фактически, логические, но это просто целые числа), поэтому 'acbbca'[1::2] => 'cba'дается для Python 3 и 'acbbca'[0::2] => 'abc'дается для Python 2.

HyperNeutrino
источник
10

Excel / Google Sheets, 41 28 27 24 байта

Формула анонимного рабочего листа, которая не требует ввода и вывода "ABC"в вызывающую ячейку в Excel и "CBA"в вызывающую ячейку в Google Sheets

=IfError(M("CBA"),"ABC")

В Google Sheets M(...)- псевдоним для и автоформатирование T(...)(сокращение Text()). Этот вызов возвращает текстовое значение переданной переменной "CBA". "CBA"не выдается как ошибка, поэтому "CBA"возвращаетсяIfError(...,"ABC")

В Excel нет M(...)функции, M(...)она не является псевдонимом и, следовательно, M("CBA")возвращает ошибку формулы не найдена #NAME?. Это пойман IfError(...,"ABC"), который в свою очередь возвращается "ABC".


Предыдущие версии, 27, 28, 41 байт

Смотрите правки для объяснений

=If(IsErr(A()),"ABC","CBA")
=If(IsErr(GT()),"ABC","CBA")
=IfError(If(Info("NUMFILE"),"ABC"),"CBA")
Тейлор Скотт
источник
1
Ухоженная! .... Вы можете сохранить 2 байта, используя iserrвместо, iferrorи 1 байт, используя «SYSTEM» вместо «NUMFILE»:=IF(ISERR(INFO("SYSTEM")),"cba","abc")
Адам,
8

CJam / 05AB1E , 6 байтов

"abc"R

Попробуйте онлайн:

Как это работает в CJam

"abc"    Push this string
R        Push variable R, predefined to the empty string
         Implicitly display stack

Как это работает в 05AB1E

"abc"    Push this string
R        Reverse
         Implicitly display top of the stack
Луис Мендо
источник
8

С извинениями @HyperNeutrino за кражу большей части его ответа (у меня пока нет репутации, чтобы комментировать)

Python 2 , 25 байт

print('acbbca'[1/2>0::2])

Попробуйте онлайн!

Python 3 , 25 байт

print('acbbca'[1/2>0::2])

Попробуйте онлайн!

reffu
источник
Хм это на самом деле <1кстати.
Эрик Outgolfer
@EriktheOutgolfer Нет, это правда для обоих языков
HyperNeutrino
Как предложил @notjagan, вы можете заменить printна exit(что разрешено нашими правилами) и, следовательно, сохранить 1 байт.
3
Вы должны добавить второй язык к своему ответу (я полагаю,
Python3
@ Zacharý Спасибо, я не знал, что проблема была обновлена ​​(оригинал был только Python 2 и Pyhon 3)
reffu
8

Vim / Notepad.exe, 10 байт

cbaabc<esc><backspace><backspace><backspace>
м-chrzan
источник
2
Блокнот не язык программирования, но +1.
Якоб
7

JavaScript (NodeJS) и PHP, 46 байт

<!--
strrev=console.log//--><?=
strrev("abc");

Печать abcв JS и cbaPHP.

Попробуйте JS онлайн!

Попробуйте PHP онлайн! (обратите внимание, что TIO не скрывает комментарии HTML ( <!--... -->)

Джастин Маринер
источник
1
Как <!--интерпретируется в Node?
Esolanging Fruit
@ Challenger5 Это явно интерпретируется как однострочный комментарий, точно так же как //( источник ). Так же работает и в браузере JS.
Джастин Маринер,
6
Это странно ...
Esolanging Fruit
--> blah blahдопустимый комментарий в некотором интерпретаторе JavaScript, вы можете просто удалить//
tsh
1
@JustinMariner Я тестировал на Node v8.1.3. И поведение, определенное в Приложении B спецификации ES6, что означает, что все браузеры , поддерживающие ES6, должны принимать его как комментарий.
17
6

Python / Befunge, 20 18 байт

2 байта сохранены благодаря @karhell

print("abc")# ,,,@

Попробуйте онлайн! для Python

Python видит print("abc")тогда комментарий.

Попробуйте онлайн! для Befunge

Befunge, удаляя все nops и бесполезные команды, видит, "abc",,,@что помещает a, bи cв стек, а затем печатает их (последний пришел - первый вышел).

Уриэль
источник
Немного поздно, но вы можете сбрить два байта, заменив >:#,_@на,,,@
karhell
#,,<@Вместо этого сохраните еще одну
Джо Кинг,
5

Python 2 и Python 3, 42 байта

try:exec("print'abc'")
except:print('cba')

Попробуйте онлайн! (Python 2)

Попробуйте онлайн! (Python 3)

Я думал, что попробую что-то другое ...

totallyhuman
источник
Мне нравится эта, не самая короткая, но достаточно универсальная структура, ее можно немного сократить с помощьюtry:long;print('abc')
Chris_Rands
Или еще лучшеtry:cmp;print('abc')
Chris_Rands
Это не то, что я написал, parantheses () все еще требуется для печати
Chris_Rands
5

Excel / Google Sheets, 28 байт

Вдохновленный @TaylorScott, который использовал функцию, которая существует только в Excel, я нашел еще более короткую функцию, которая существует только в Google Sheets. Удобно, он предназначен для возврата строк:

=iferror(join(,"cba"),"abc")

Как это работает

В Google Таблицах, join([arg1], arg2, arg3,...argk)будет конкатенация арг2 -> argk , необязательно с использованием сепаратора , указанным в arg1 . В этом случае он успешно возвращает «cba».

Excel не имеет joinфункции, поэтому iferrorвидит проблему и возвращает «abc»

Адам
источник
1
Моя первая подача - надеюсь, я делаю это правильно ...
Адам
Хорошее решение :)
Тейлор Скотт
4

CJam и Gaia , 8 байтов

'c'b'a]$

Попробуйте это в CJam!

Попробуйте это в Gaia!

объяснение

На обоих языках это определяет список символов.

В CJam $есть сортировка, поэтому она становитсяabc .

В Gaia $объединяет список в одну строку, давая cba.

Бизнес Кот
источник
Я добавил Гайю в список языков игры в гольф ; пожалуйста, дайте мне знать, если я ошибся в деталях.
ETHproductions
@ETHproductions выглядит хорошо для меня.
Business Cat
4

Java 8 & C, 95 байт

//\
interface a{static void main(String[]s){System.out.print("abc"/*
main(){{puts("cba"/**/);}}

Попробуйте это в Java 8 - в результате "abc".
Попробуйте это в C - в результате "cba".

Объяснение:

//\
interface a{static void main(String[]s){System.out.print("abc"/*
main(){{puts("cba"/**/);}}

Как вы можете видеть в выделенном Java-коде выше, первая строка представляет собой комментарий из-за //, а C-код - из-за комментария /* ... */, что приводит к:

interface a{static void main(String[]s){System.out.print("abc");}}

//\
interface a{static void main(String[]s){System.out.print("abc"/*
main(){{puts("cba"/**/);}}

Не уверен, как правильно включить C-подсветку, потому что lang-cприводит к той же подсветке, что и Java. Но //\закомментирует следующую строку, которая является Java-кодом, в результате:

main(){{puts("cba");}}
Кевин Круйссен
источник
4

Python 2 / Python 3, 28 байт

print('abc'[::int(1/2*4)-1])

В Python 2 int(1/2*4)-1принимает значение -1и поэтому отпечатки cba. - TiO

В Python 3 он оценивает 1так печатает abc. - TiO


источник
2
Добро пожаловать в Программирование головоломок и Code Golf
Евгений Новиков
4

C и C ++, 115 , 78 , 58 , 56 байтов

#include<stdio.h>
main(){puts(sizeof('x')>1?"abc":"cba");}

78 байт, благодаря запросу5 .

58 байтов, спасибо aschepler .

56 байт, благодаря hvd

Попробуйте - C ++!

Попробуй это - C!

Иван Ботеро
источник
1
1) Вы можете свернуть две #ifdefбуквы, чтобы сделать одну. 2) Вы можете удалить пространство в #include <stdio.h>. 3) Вы можете изменить printf("%s",на puts(. Попробуйте онлайн!
Esolanging Fruit
2
Или всегда есть старый добрый sizeof('x')>1?"abc":"cba"трюк.
aschepler
@ Challenger5 Спасибо за комментарий
Иван Ботеро
@aschepler Спасибо за трюк, я внес изменения в 58 байт :)
Иван Ботеро
1
sizeofОперанду не нужны скобки, это не функция.
HVd
4

R / Cubix , 20 байтов

cat("abc")#u@o;o;o(;

R - Попробуйте онлайн!

Cubix - попробуйте онлайн!

Для R, cat("abc")то бесстыдное злоупотребление комментариями. Для Cubix

    c a
    t (
" a b c " ) # u
@ o ; o ; o ( ;
    . .
    . .
  • "abc" Вставляет a, b ad c в стек
  • )# Увеличивает c, помещает количество элементов в стек
  • u Разворот направо
  • ;( Убрать граф, убавить
  • o;o;o@ Выведите cba и выйдите

Вставляет число в стек

MickyT
источник
2
Я странно рад тому, что cat(Cubix полностью игнорирует это.
Джузеппе
3

C (gcc) C ++ (g ++), 59 байт

#include<stdio.h>
main(){puts("abc\0cba"+(sizeof(' ')&4));}
ТТГ
источник
3

Деление / > <> , 11 байт

!R"abc"ooo;

Попробуй Fission Online

При делении частица начинается Rи печатает abc.

Попробуйте> <> Онлайн

В> <> IP начинается сверху слева. !пропускает следующую инструкцию и "abc"помещает [a, b, c] в стек. oooзатем выскакивает и печатает три раза, давая cba.

Обе программы заканчиваются на ;

KSmarts
источник
3

Ly / > <> , 20 19 байт

"abc"&&ov
;     oo<

Попробуйте это с> <>!

Попробуй это с Ли!

Эти языки очень похожи, так как Ly основан на> <>. Однако Ly не имеет 2D исполнения и интерпретирует& разному, что я здесь использовал.

Оба языка начнут с нажатия abc в стек.

Для> <> & инструкция перемещает значения в регистр и обратно. Два подряд выдвигают значение в регистр, а затем возвращают его обратно, по сути, NOP.

Для Ly &это модификатор, который заставляет инструкцию выполнять свою функцию на всем стеке.

oозначает то же самое для обоих языков, но так как он изменен &в Ly, он напечатает весь стек, выведя abc. В> <> он будет выводить толькоc (как печатается сверху вниз)

vэто NOP в Ly, который пропускает его и переходит прямо к ;завершению выполнения. > <> вместо этого будет обрабатывать его как указатель, отправляя IP-адрес вниз.

Затем он нажимает на другую стрелку, отправляя IP влево. Здесь встречаются два oзнака: вывод bи a.

РЕДАКТИРОВАТЬ: Сохраненный байт (и исправлено> <> сбой)

LyricLy
источник
1
Вы можете сохранить байт, переместив ;его во вторую строку. Это также имеет то преимущество, что IP-адрес> <> не оборачивается и снова не проходит через вторую строку, что вызывает ошибку.
Esolanging Fruit
не должно быть; для> <>? это не займет больше байтов, просто замените один из пробелов
Разрушаемый лимон
Как насчет "abc"&&ooo;? Это приводит к краху Ly, но только после печати «abc».
Не дерево
... или "abc"&&o!;o<за 1 дополнительный байт, если вы хотите избежать сбоя.
Не дерево
2

05AB1E и 2sable , 6 байтов

…CBAžR

Печатает ABC(OP сказал, что это разрешено) в 05AB1E и CBAв 2sable, используя тот факт, что 2sable был похож на 05AB1E, но žRбыл добавлен к 05AB1E после того, как 2sable был оставлен.

Попробуйте онлайн! (05AB1E)

Попробуйте онлайн! (2sable)

Оливер Ни
источник
В спецификации говорится, что это должно быть "abc" или "cba". Я бы сказал, что это неверно, но я могу спросить OP.
HyperNeutrino
Я спросил ОП, и он не ответил. Если это окажется недействительным, я удалю его.
Оливер Ни
@OliverNi Хм, если он недействителен, вы можете просто добавить lbtw.
Эрик Outgolfer
2

PHP + JavaScript, 29 28 байт

Это работает, потому что PHP интерпретирует '0'(так же, как целое число 0) как ложное, в то время как JavaScript предполагает, что это просто непустая строка, которая является правдивой.

'0'?alert('cba'):print(abc);

Это предназначено для запуска -rна PHP. В Javascript просто вставьте его в консоль.


Спасибо @Justin Mariner за спасение мне 1 байт!

Исмаэль Мигель
источник
Вы также можете использовать "0"вместо +![]: это становится 0(ложно) в PHP и является строкой (правда) в JS.
Джастин Маринер,
@JustinMariner Вы правы, но это на 1 байт больше.
Исмаэль Мигель
1
Разве это не на один байт короче? +![]?print(abc):alert('cba');->"0"?alert('cba'):print(abc);
Джастин Маринер
@JustinMariner ОХ !!! Сюда!!! Да, это на 1 байт короче. Спасибо!
Исмаэль Мигель
2

PHP / Brainf * ck, 31 байт

используя -rфлаг,

PHP видит die(abc)и комментарий, и так как компилятор прощает, он выводитabc в виде строки вместо пустой переменной.

Brainf * ck видит только символы инструкции, а остальное видится как комментарии.

die(abc);#--[----->+<]>---.-.-.

Попробуйте онлайн! (PHP)

Попробуйте онлайн! (Brainf * ск)

Стэн Струм
источник
К вашему сведению, вам не нужно считать-r
Business Cat
2

Юлия и Октава / Матлаб, 27 байтов

if'a'=="a""abc"else"cba"end

В Octave оба 'a'и "a"представляют одну и ту же строку, поэтому 'a'=="a"верно. Тем не менее, в Юлии, 'a'это один символ, в то время "a"как строка из одного символа. У Юлии "cba"это выходной.

Безголовая версия:

if 'a'=="a"
  "abc"
else
  "cba"
end
Свен Хоэнштейн
источник
2

Perl / Ruby, 18 байт

Рубин

print'abc'.reverse

printS , cbaкак мы называем .reverseна струне.

Попробуйте онлайн!

Perl

print'abc'.reverse

prints abc конкатенируется с результатом, reverseкоторый по умолчанию работает с $_пустым и поэтому не имеет значения.

Попробуйте онлайн!

Дом Гастингс
источник