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


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


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 )


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


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

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

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!


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>

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 ( <!--... -->)


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


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


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”


1
Moje pierwsze poddanie się - mam nadzieję, że robię to dobrze ....
Adam,

Ładne rozwiązanie :)
Taylor Scott,


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

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


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!


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


2
Dziwnie się cieszę ze sposobu, który cat(jest całkowicie ignorowany przez Cubix.
Giuseppe,



3

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

#include<stdio.h>
main(){puts("abc\0cba"+(sizeof(' ')&4));}


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


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)


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!


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

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

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!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.