'abc' и 'cba'


28

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

Это вызов .


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

-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.


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])

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


Хм это на самом деле <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>

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)

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


Мне нравится эта, не самая короткая, но достаточно универсальная структура, ее можно немного сократить с помощью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 и выйдите

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


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.

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


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.

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


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.