„abc” i „cba”

28

Twoje zadanie jest proste: napisz pojedynczy fragment kodu, który po uruchomieniu w jednym języku wyprowadza tylko ciąg znaków, 'abc'a po uruchomieniu w innym języku - tylko ciąg znaków 'cba'. Program nie powinien pobierać danych wejściowych.

To wyzwanie dla .

Chris_Rands
źródło
4
Nie sądzę, żeby to był w ogóle dupek. Fakt, że łańcuch jest odwrócony, różni się wystarczająco od drukowania dwóch różnych łańcuchów. Nie będę (ponownie głosować) ponownie otwarty, ponieważ miałoby to natychmiastowy skutek
Luis Mendo,
4
Głosowałem za ponownym otwarciem tego postu, ponieważ IMO drukuje odwrotność napisu i napisu znacznie różni się od 2 różnych. Żadnej odpowiedzi nie można w prosty sposób zmodyfikować, aby pasowała do tego wyzwania. Moja własna odpowiedź wykorzystuje technikę odwrotnej symetrii w porównaniu do tamtejszych odpowiedzi. Zgadzam się z @LuisMendo.
Pan Xcoder,
2
Czy możesz wydrukować ABCzamiastabc
Oliver Ni
5
Głosuję za ponownym otwarciem, niektóre odpowiedzi wykorzystują fakt, że cbajest on abczacofany; link , link , link , link , link , link , link , link , link
Oliver Ni
2
'ABC'i 'CBA'jest w porządku, wiodące / końcowe białe znaki / nowe linie są w porządku, ale muszą być takie same dla obu wyników
Chris_Rands

Odpowiedzi:

21

MATLAB / oktawa, 41 bajtów

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

W MATLAB randsample(2,2)daje wektor 2 × 1, tak size(...,2)jest 1. W flipten sposób jest stosowany wzdłuż pierwszego wymiaru, który jest singletonem, więc 'abc'wyświetlany jest oryginalny ciąg :

enter image description here

W Octave randsample(2,2)daje wektor 1 × 2, tak też size(...,2)jest 2. W flipten sposób jest stosowany wzdłuż drugiego wymiaru, to znaczy łańcuch jest odwracany od lewej do prawej:

enter image description here

Luis Mendo
źródło
Myślę, że byłoby to kilka bajtów krótszych, jeśli użyjesz mniej interesującego versionwariantu.
Stewie Griffin,
@StewieGriffin Thanks. Myślę, że jest już za późno na zmianę. Może opublikujesz to sam?
Luis Mendo,
Nie, to nudna wersja tego ... Poza tym nie mam już MATLAB-a, więc nie będę mógł go przetestować.
Stewie Griffin,
15

25 bajtów

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

Wypróbuj online! ( Python 2 )

Wypróbuj online! ( Python 3 )

Erik the Outgolfer
źródło
-1 bajt przy użyciu exitzamiast print(chociaż dotyczy to każdej odpowiedzi od teraz).
notjagan
@notjagan. exitdrukuje do stderr, prawda? Nie jestem pewien, czy byłaby to prawidłowa odpowiedź.
@ThePirateBay Przesyłanie danych do STDERR jest dozwolone zgodnie z meta konsensusem .
notjagan
Wyzwanie mówi, że fragment kodu i drukowanie, nie używa domyślnych reguł.
xnor
10

-1 bajt, jeśli robię ==0w >0ale to już inna odpowiedź

Python 2 , 26 bajtów

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

Wypróbuj online!


Python 3 , 26 bajtów

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

Wypróbuj online!

1/2daje 0(floordiv) w Pythonie 2 i 0.5(truediv) w Pythonie 3. Zatem 1/2==0daje 1 w Pythonie 3 i 0 w Pythonie 2 (właściwie booleany, ale to tylko liczby całkowite), więc 'acbbca'[1::2] => 'cba'jest podane dla Pythona 3 i 'acbbca'[0::2] => 'abc'jest podane dla Pythona 2)

HyperNeutrino
źródło
10

Excel / Arkusze Google, 41 28 27 24 bajtów

Anonimowa formuła arkusza roboczego, która nie pobiera danych wejściowych i wyjściowych "ABC"do komórki wywołującej w programie Excel i "CBA"komórki wywołującej w Arkuszach Google

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

W Arkuszach Google M(...)jest aliasem i automatycznie formatowany do T(...)(skrót od Text()). To wywołanie zwraca wartość tekstową zmiennej upływu "CBA". "CBA"nie jest wychwytywany jako błąd, więc "CBA"jest zwracany przezIfError(...,"ABC")

W programie Excel, nie ma M(...)funkcji, a M(...)nie jest aliasem i dlatego M("CBA")zwraca formuły nie znaleziono błąd, #NAME?. Zostaje to złapane IfError(...,"ABC"), co z kolei powraca "ABC".


Poprzednie wersje, 27, 28, 41 bajtów

Wyjaśnienia znajdziesz w edycjach

=If(IsErr(A()),"ABC","CBA")
=If(IsErr(GT()),"ABC","CBA")
=IfError(If(Info("NUMFILE"),"ABC"),"CBA")
Taylor Scott
źródło
1
Schludny! .... Możesz zapisać 2 bajty, używając iserrzamiast iferrori 1 bajt, używając „SYSTEM” zamiast „NUMFILE”:=IF(ISERR(INFO("SYSTEM")),"cba","abc")
Adam
8

CJam / 05AB1E , 6 bajtów

"abc"R

Wypróbuj online:

Jak to działa w CJam

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

Jak to działa w 05AB1E

"abc"    Push this string
R        Reverse
         Implicitly display top of the stack
Luis Mendo
źródło
8

Z przeprosinami @HyperNeutrino za kradzież większości jego odpowiedzi (nie mam jeszcze reputacji, aby komentować)

Python 2 , 25 bajtów

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

Wypróbuj online!

Python 3 , 25 bajtów

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

Wypróbuj online!

reffu
źródło
Umm, właściwie to przy <1okazji.
Erik the Outgolfer,
@EriktheOutgolfer Nie, to prawda dla obu języków
HyperNeutrino
Jak @notjagan zasugerował, można zastąpić printz exit(co jest dozwolone przez naszych zasad), a zatem oszczędzania 1 bajt.
3
Powinieneś dodać drugi język do swojej odpowiedzi (zakładam, że Python3)
Zacharý
@ Zacharý Dzięki, nie wiedziałem, że problem został zaktualizowany (oryginał to tylko python 2 i pyhon 3)
reffu
8

Vim / Notepad.exe, 10 bajtów

cbaabc<esc><backspace><backspace><backspace>
m-chrzan
źródło
2
Notatnik nie jest językiem programowania, ale daje +1.
Jakob
7

JavaScript (NodeJS) i PHP, 46 bajtów

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

Drukuje abcw JS i cbaPHP.

Wypróbuj JS online!

Wypróbuj PHP online! (zauważ, że TIO nie ukrywa komentarzy HTML ( <!--... -->)

Justin Mariner
źródło
1
Jak <!--interpretowana jest w węźle?
Esolanging Fruit
@ Challenger5 Najwyraźniej jest interpretowany jako komentarz jednowierszowy, dokładnie tak jak //( źródło ). Działa to również w przeglądarce JS.
Justin Mariner,
6
To dziwne ...
Esolanging Fruit
--> blah blahjest poprawnym komentarzem w niektórych interpreterach JavaScript, możesz po prostu usunąć//
tsh
1
@JustinMariner Testowałem na Node 8.1.3. A zachowanie zdefiniowane w załączniku B specyfikacji ES6, co oznacza, że ​​wszystkie przeglądarki obsługujące ES6 powinny zaakceptować to jako komentarz.
tsh
6

Python / Befunge, 20 18 bajtów

2 bajty zapisane dzięki @karhell

print("abc")# ,,,@

Wypróbuj online! dla Pythona

Python widzi print("abc")wtedy komentarz.

Wypróbuj online! dla Befunge

Befunge, usuwając wszystkie nops i bezużyteczne polecenia, widzi, "abc",,,@które kładzie a, bi cna stosie, a następnie drukuje je (ostatnie wejście - pierwsze wyjście).

Uriel
źródło
Trochę późno, ale można golić dwa bajty, zastępując >:#,_@przez,,,@
karhell
Zapisz jednym z bardziej #,,<@zamiast
Jo Kinga
5

Python 2 i Python 3, 42 bajty

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

Wypróbuj online! (Python 2)

Wypróbuj online! (Python 3)

Myślałem, że spróbuję czegoś innego ...

całkowicie ludzki
źródło
Podoba mi się ten, nie najkrótszy, ale dość ogólny framework, można go nieco skrócić, używająctry:long;print('abc')
Chris_Rands
Lub jeszcze lepiejtry:cmp;print('abc')
Chris_Rands
To nie to, co napisałem, nawiasy () nadal są wymagane przy drukowaniu
Chris_Rands
5

Excel / Arkusze Google, 28 bajtów

Zainspirowany przez @TaylorScott, który użył funkcji, która istnieje tylko w programie Excel, znalazłem jeszcze krótszą funkcję, która istnieje tylko w Arkuszach Google. Dogodnie jest przeznaczony do zwracania ciągów:

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

Jak to działa

W Arkuszach Google join([arg1], arg2, arg3,...argk)połączy arg2 -> argk , opcjonalnie używając separatora określonego w arg1 . W takim przypadku z powodzeniem zwraca „cba”.

Excel nie ma żadnej joinfunkcji, więc iferrorwidzi problem i zwraca „abc”

Adam
źródło
1
Moje pierwsze poddanie się - mam nadzieję, że robię to dobrze ....
Adam,
Ładne rozwiązanie :)
Taylor Scott,
4

CJam i Gaia , 8 bajtów

'c'b'a]$

Wypróbuj w CJam!

Wypróbuj w Gaia!

Wyjaśnienie

W obu językach określa to listę znaków.

W CJam $jest sort, więc staje się abc.

W Gaia $łączy listę w jeden ciąg, dając cba.

Business Cat
źródło
Dodałem Gaię do listy języków golfowych ; daj mi znać, jeśli popełniłem błąd.
ETHproductions
@ETHproductions Dla mnie wygląda OK.
Business Cat
4

Java 8 i C, 95 bajtów

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

Wypróbuj w Javie 8 - uzyskując „abc”.
Wypróbuj w C - uzyskując „cba”.

Wyjaśnienie:

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

Jak widać w powyższym kodzie wyróżnionym w Javie, pierwszy wiersz jest komentarzem //, a kod C jest komentarzem /* ... */, w wyniku czego:

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"/**/);}}

Nie jestem pewien, jak poprawnie włączyć podświetlanie C, ponieważ lang-cpowoduje to takie samo podświetlanie jak Java. Ale //\skomentuje następny wiersz, którym jest kod Java, co powoduje:

main(){{puts("cba");}}
Kevin Cruijssen
źródło
4

Python 2 / Python 3, 28 bajtów

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

W Python 2 int(1/2*4)-1ocenia -1i tak drukuje cba. - TiO

W Pythonie 3 to ocenia, 1więc drukuje abc. - TiO


źródło
2
Witamy w Programowaniu łamigłówek i Code Golf
Евгений Новиков
4

C i C ++, 115 , 78 , 58 , 56 bajtów

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

78 bajtów, dzięki Challenger5 .

58 bajtów dzięki ascheplerowi .

56 bajtów, dzięki hvd

Wypróbuj - C ++!

Spróbuj - C!

Ivan Botero
źródło
1
1) Możesz zwinąć dwa #ifdefs, aby utworzyć jeden. 2) Możesz usunąć spację #include <stdio.h>. 3) Możesz zmienić printf("%s",na puts(. Wypróbuj online!
Esolanging Fruit
2
Lub zawsze jest stara dobra sizeof('x')>1?"abc":"cba"sztuczka.
aschepler
@ Challenger5 Dzięki za komentarz
Ivan Botero,
@aschepler Dzięki za podstęp, wprowadziłem zmiany 58 bajtów :)
Ivan Botero
1
sizeofArgument nie potrzebuje nawiasów, nie jest funkcją.
hvd
4

R / Cubix , 20 bajtów

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

R - Wypróbuj online!

Cubix - Wypróbuj online!

Dla R, cat("abc")a następnie bezwstydne nadużycie komentarzy. Dla Cubix

    c a
    t (
" a b c " ) # u
@ o ; o ; o ( ;
    . .
    . .
  • "abc" Wpycha a, b ad c na stos
  • )# Zwiększ c, pcha liczbę elementów na stosie
  • u Zawróć w prawo
  • ;( Usuń liczbę, Zmniejsz c
  • o;o;o@ Wyjście cba i wyjście

Wpycha liczbę na stos

MickyT
źródło
2
Dziwnie się cieszę ze sposobu, który cat(jest całkowicie ignorowany przez Cubix.
Giuseppe,
3

Python 2 i Foo , 16 bajtów

print"abc"[::-1]

Python 2

print"abc"[::-1]

Wypróbuj Python 2 online!

Wyjaśnienie

print"abc"[::-1]

print             # print... (duh)
     "abc"        # the string "abc"...
          [::-1]  # backwards

bla

"abc"

Wypróbuj Foo online!

Wyjaśnienie

"abc"

"abc"               print the string "abc"
całkowicie ludzki
źródło
3

C (gcc) C ++ (g ++), 59 bajtów

#include<stdio.h>
main(){puts("abc\0cba"+(sizeof(' ')&4));}
tsh
źródło
3

Rozszczepienie / > <> , 11 bajtów

!R"abc"ooo;

Wypróbuj Fission Online

W rozszczepieniu cząstka zaczyna się Ri drukuje abc.

Spróbuj> <> Online

W> <> adres IP zaczyna się w lewym górnym rogu. !pomija następną instrukcję i "abc"wypycha [a, b, c] na stos. ooonastępnie wyskakuje i drukuje trzy razy, dając cba.

Oba programy kończą się na ;

KSmarts
źródło
3

Ly / > <> , 20 19 bajtów

"abc"&&ov
;     oo<

Wypróbuj z> <>!

Wypróbuj z Ly!

Te języki są bardzo podobne, ponieważ Ly opiera się na> <>. Ly nie ma jednak wykonania 2D i interpretuje& inaczej, co wykorzystałem tutaj.

Oba języki zaczną się od pchania abc na stos.

Dla> <>, & instrukcja przenosi wartości do iz powrotem do rejestru. Dwa z rzędu wypchną wartość do rejestru, a następnie cofną ją, zasadniczo NOP.

Dla Ly & jest modyfikatorem, który sprawia, że ​​instrukcja wykonuje swoją funkcję na całym stosie.

ooznacza to samo dla obu języków, ale ponieważ został zmodyfikowany przez &Ly, wydrukuje cały stos, wyprowadzając abc. W> <> będzie tylko wyświetlaćc (ponieważ jest drukowany od góry do dołu)

v to NOP w Ly, który pomija go i przechodzi od razu do ; końca, kończąc wykonanie. > <> potraktuje to jako wskaźnik, wysyłając adres IP w dół.

Następnie uderza inną strzałkę, wysyłając adres IP w lewo. Tutaj spełnia dwa oznaki, wyjściowy bia .

EDYCJA: Zapisano bajt (i naprawiono awarię> <>)

LyricLy
źródło
1
Możesz zapisać bajt, przenosząc go ;do drugiej linii. Ma to również tę zaletę, że adres IP> <> nie zawija się i nie przechodzi ponownie przez drugą linię, co powoduje błąd.
Esolanging Fruit
nie powinno być; dla> <>? nie zajmie to więcej bajtów, wystarczy zastąpić jedną ze spacji
Destructible Lemon
Jak o "abc"&&ooo;? Powoduje awarię Ly, ale dopiero po wydrukowaniu „abc”.
Nie drzewo,
… Lub "abc"&&o!;o<1 dodatkowy bajt, jeśli chcesz uniknąć awarii.
Nie drzewo,
2

05AB1E i 2sable , 6 bajtów

…CBAžR

Wydruki ABC(OP powiedział, że jest dozwolone) w 05AB1E i CBA2sable, wykorzystując fakt, że 2sable był podobny do 05AB1E, ale žRzostał dodany do 05AB1E po porzuceniu 2sable.

Wypróbuj online! (05AB1E)

Wypróbuj online! (2sable)

Oliver Ni
źródło
W specyfikacji podano, że musi to być „abc” lub „cba”. Słowem powiedziałbym, że jest to nieważne, ale mogę zapytać OP.
HyperNeutrino,
Zapytałem OP, a on nie odpowiedział. Jeśli okaże się to nieważne, usunę je.
Oliver Ni
@OliverNi Umm, jeśli jest nieprawidłowy, możesz po prostu dołączyć lbtw.
Erik the Outgolfer,
2

PHP + JavaScript, 29 28 bajtów

Działa to, ponieważ PHP interpretuje '0'(tak samo jak liczba całkowita 0) jako fałsz, podczas gdy JavaScript zakłada, że ​​jest to po prostu niepusty ciąg znaków, który jest prawdziwy.

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

To ma działać -rna PHP. W Javascript po prostu wklej go w konsoli.


Dzięki @Justin Mariner za uratowanie mnie 1 bajt!

Ismael Miguel
źródło
Możesz także użyć "0"zamiast +![]: staje się 0(falsy) w PHP i jest ciągiem (prawda) w JS.
Justin Mariner,
@JustinMariner Masz rację, ale to o 1 bajt dłużej.
Ismael Miguel,
1
Czy to nie jest o jeden bajt krótszy? +![]?print(abc):alert('cba');->"0"?alert('cba'):print(abc);
Justin Mariner,
@JustinMariner OH !!! W ten sposób!!! Tak, jest o 1 bajt krótszy. Dziękuję Ci!
Ismael Miguel,
2

PHP / Brainf * ck, 31 bajtów

za pomocą -rflagi,

PHP widzi die(abc)i komentarz, a ponieważ kompilator wybacza, wypisujeabc jako ciąg zamiast pustej zmiennej.

Brainf * ck widzi tylko znaki instrukcji, a reszta jest postrzegana jako komentarze.

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

Wypróbuj online! (PHP)

Wypróbuj online! (Brainf * ck)

Stan Strum
źródło
Do Twojej wiadomości, nie musisz się liczyć-r
Business Cat
2

Julia i Octave / Matlab, 27 bajtów

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

Dlatego w Octave oba 'a'i "a"reprezentują ten sam ciąg, dlatego 'a'=="a"jest prawdą. Jednak w Julii 'a'jest to pojedynczy znak, podczas gdy "a"jest to ciąg jednego znaku. W Julii"cba" jest wyjście.

Wersja bez golfa:

if 'a'=="a"
  "abc"
else
  "cba"
end
Sven Hohenstein
źródło
2

Perl / Ruby, 18 bajtów

Rubin

print'abc'.reverse

prints cbajak wzywamy .reverseciąg.

Wypróbuj online!

Perl

print'abc'.reverse

prints abcpołączone, w wyniku reverseczego domyślnie działa, na $_którym jest pusty i dlatego nie ma znaczenia.

Wypróbuj online!

Dom Hastings
źródło