'abc' та 'cba'


28

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

Це проблема з .


4
Я не думаю, що це взагалі дура. Справа в тому, що рядок сторнується на звороті, досить відрізняється від друку двох різних рядків. Я не буду (голосувати) за повторне відкриття, хоча це матиме негайний ефект
Луїс Мендо

4
Я проголосував за повторне відкриття цієї публікації, тому що IMO, що друкує реверс рядка і рядка, сильно відрізняється від двох різних. Жодна відповідь не може бути тривіально змінена, щоб відповідати цьому виклику. Моя власна відповідь використовує техніку зворотної симетрії порівняно з відповідями. Я згоден з @LuisMendo.
Містер Xcoder

2
Чи можете ви друкувати ABCзамістьabc
Олівер Ні,

5
Я голосую за повторне відкриття, у деяких відповідях використовується факт cba- це abcзворотно; посилання , посилання , посилання , посилання , посилання , посилання , посилання , посилання , посилання
Олівер Ні

2
'ABC'і 'CBA'все в порядку, провідні / трейлінг пробілів / нові рядки добре, але вони повинні бути однаковими для обох результатів
Chris_Rands

Відповіді:



21

MATLAB / Октава, 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 Таблицях 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])

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


Гм, це насправді <1btw.
Erik the Outgolfer

@EriktheOutgolfer Ні, що це правда для обох мов
HyperNeutrino

Як запропонував @notjagan, ви можете замінити printна exit(що дозволено нашими правилами) і, таким чином, зберегти 1 байт.

3
Ви повинні додати другу відповідь до своєї відповіді (Python3 я припускаю)
Zacharý

@ 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
Як <!--інтерпретується у Вузлі?
Esolanging Fruit

@ Challenger5 Це, мабуть, інтерпретується як однорядковий коментар, точно так само //( джерело ). Так працює і в JS браузера.
Джастін Марінер

6
Це дивно ...
Езоляція фруктів

--> blah blahдійсний коментар у якомусь перекладачі JavaScript, ви можете просто видалити//
tsh

1
@JustinMariner Я протестував на Node v8.1.3. А поведінка, визначена в додатку B до специфікації ES6, що означає, що всі браузери, які підтримують ES6, повинні сприймати це як коментар.
tsh

6

Python / Befunge, 20 18 байт

2 байти збережено завдяки @karhell

print("abc")# ,,,@

Спробуйте в Інтернеті! для Python

Пітон бачить print("abc")тоді коментар.

Спробуйте в Інтернеті! для Befunge

Оновіть, видаляючи всі крапки та непотрібні команди, бачить, "abc",,,@що ставиться a, bі cна стеку, а потім роздруковує їх (останнє в - перше).


Трохи запізнюючись, але ви можете >:#,_@,,,@
відголити

Збережіть ще один, #,,<@замість цього
Джо Кінг,

5

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

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

Спробуйте в Інтернеті! (Python 2)

Спробуйте в Інтернеті! (Пітон 3)

Думав, я спробую щось інше ...


Мені подобається цей, не найкоротший, але досить загальний фреймворк, його можна трохи скоротити, використовуючиtry:long;print('abc')
Chris_Rands

Або ще кращеtry:cmp;print('abc')
Chris_Rands


Це не те, що я писав, парантези () все ще потрібні навколо друку
Chris_Rands

5

Excel / Google Sheets, 28 байт

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

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

Як це працює

У Google Таблицях join([arg1], arg2, arg3,...argk)буде об'єднано arg2 -> argk , необов'язково використовуючи роздільник, вказаний у arg1 . У цьому випадку він успішно повертає "cba".

У Excel немає joinфункції, тому iferrorбачить проблему і повертає "abc"


1
Перше моє подання - сподіваюся, що я це роблю правильно ....
Адам,

Приємне рішення :)
Тейлор Скотт

4

CJam і Gaia , 8 байт

'c'b'a]$

Спробуйте в CJam!

Спробуйте в Гаї!

Пояснення

В обох мовах це визначає список символів.

У CJam, $це сортування, так це стає abc.

У Gaia $приєднується до списку в один рядок, даючи cba.


Я додав Гая до списку мов для гольфу ; будь ласка, дайте мені знати, чи я неправильно зрозумів деталі.
ETHproductions

@ETHproductions Мені виглядає нормально.
Ділова кішка

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
Євгеній Новиков

4

C і C ++, 115 , 78 , 58 , 56 байт

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

78 байт, завдяки challenger5 .

58 байт, завдяки аскеплеру .

56 байт, завдяки hvd

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

Спробуйте - C!


1
1) Ви можете згорнути два #ifdefs, щоб зробити єдине. 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 Поворот поверніть праворуч
  • ;( Видаліть лічильник, Зменшення c
  • 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

У Fission частинка починається 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- це НОП в Лі, який пропускає його і переходить до нього ;, закінчуючи виконання. > <> замість цього буде розглядати це як вказівник, надсилаючи IP-адресу вниз.

Потім він потрапляє на іншу стрілку, надсилаючи IP ліворуч. Тут він відповідає двом oзнакам, вихідним bі a.

EDIT: збережений байт (і виправлений> <> збій)


1
Ви можете зберегти байт, перемістивши ;до другого рядка. Це також має перевагу, що IP-адреса> <> не перегортається і знову проходить через другий рядок, що спричиняє помилку.
Esolanging Fruit

не повинно бути; для> <>? це не займе більше байтів, просто замініть один з пробілів
руйнуючий лимон

Як щодо "abc"&&ooo;? Це робить Ly крах, але тільки після друку "abc".
Не дерево

… Або "abc"&&o!;o<на 1 додатковий байт, якщо ви хочете уникнути збоїв.
Не дерево



2

05AB1E і 2- базова , 6 байт

…CBAžR

Відбитки ABC(ОП заявив, що це дозволено) в 05AB1E та CBAв 2-х примірних, використовуючи той факт, що 2able був подібний до 05AB1E, але žRдоданий до 05AB1E після того, як 2-х примірник був залишений.

Спробуйте в Інтернеті! (05AB1E)

Спробуйте в Інтернеті! (2-разовий)


У специфікації зазначено, що він повинен бути "abc" або "cba". Своїм словом я б сказав, що це недійсно, але я можу попросити ОП.
HyperNeutrino

Я попросив ОП, і він не відповів. Якщо це виявиться недійсним, я його видалю.
Олівер Ні

@OliverNi Umm, якщо він недійсний, ви можете просто додати lbtw.
Erik the Outgolfer

2

PHP + JavaScript, 29 28 байт

Це працює, тому що PHP інтерпретує '0'(як і ціле число 0) як хибне, тоді як JavaScript припускає, що це просто не порожня рядок, яка є правдою.

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

Це призначено для запуску -rна PHP. У Javascript просто вставте його в консоль.


Дякую @Justin Mariner за те, що врятував мені 1 байт!


Ви також можете використовувати "0"замість +![]: вона стає 0(фальшивою) в PHP і є рядком (truthy) в 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 * ck)



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.