'abc' und 'cba'


28

Ihre Aufgabe ist einfach: Schreiben Sie einen einzelnen Codeausschnitt, der bei Ausführung in einer Sprache nur die Zeichenfolge 'abc'und bei Ausführung in einer anderen Sprache nur die Zeichenfolge ausgibt 'cba'. Das Programm sollte keine Eingabe annehmen.

Dies ist eine Herausforderung.


4
Ich denke nicht, dass dies ein Schwachsinn ist. Die Tatsache, dass die Zeichenfolge umgekehrt ist, unterscheidet sich genug von dem Drucken von zwei verschiedenen Zeichenfolgen. Ich werde jedoch nicht (dafür) stimmen, da dies sofort Wirkung haben würde
Luis Mendo

4
Ich habe für die Wiedereröffnung dieses Beitrags gestimmt, da IMO das Drucken der Rückseite eines Strings und eines Strings sehr viel anders ist als bei zwei anderen. Keine Antwort kann trivial geändert werden, um dieser Herausforderung zu entsprechen. Meine eigene Antwort verwendet eine umgekehrte Symmetrietechnik im Vergleich zu den Antworten dort. Ich bin mit @LuisMendo einverstanden.
Mr. Xcoder

2
Können Sie ABCstattabc
Oliver Ni

5
Ich stimme für die Wiedereröffnung, einige Antworten verwenden die Tatsache, dass cbaes abcrückwärts ist. Link , Link , Link , Link , Link , Link , Link , Link , Link
Oliver Ni

2
'ABC'und 'CBA'ist ok, führende / nachfolgende Leerzeichen / Zeilenumbrüche ok, muss aber für beide Ausgaben gleich sein
Chris_Rands

Antworten:



21

MATLAB / Octave, 41 Bytes

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

In MATLAB randsample(2,2)einen 2 × 1 - Vektor gibt, so size(...,2)ist 1. Wird flipalso entlang der ersten Dimension, die ein Singleton ist, angewendet, wird die ursprüngliche Zeichenfolge 'abc'angezeigt:

Bildbeschreibung hier eingeben

In Octave randsample(2,2)einen 1 × 2 - Vektor gibt, so size(...,2)ist 2. Wird flipalso entlang der zweiten Dimension angewendet, dh die Zeichenfolge wird von links nach rechts gespiegelt:

Bildbeschreibung hier eingeben


Ich denke, das wäre ein paar Bytes kürzer, wenn Sie die weniger interessante versionVariante verwenden.
Stewie Griffin

@ StewieGriffin Danke. Ich denke, es ist zu spät, um sich jetzt zu ändern. Vielleicht poste es selbst?
Luis Mendo

Nein, es ist eine langweilige Version von diesem ... Außerdem habe ich kein MATLAB mehr, so dass ich es nicht testen kann.
Stewie Griffin

15

25 Bytes

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

Probieren Sie es online! ( Python 2 )

Probieren Sie es online! ( Python 3 )


-1 Byte durch Verwenden von exitanstelle von print(obwohl dies ab sofort für jede Antwort gilt).
Notjagan

@notjagan. exitdruckt nach stderr, nicht wahr? Ich bin mir nicht sicher, ob es eine gültige Antwort wäre.

@ThePirateBay outputing zu STDERR darf laut Meta Konsens .
Notjagan

Die Herausforderung besagt, dass Code-Snippet und Print keine Standardregeln verwenden.
9.


10

-1 Byte , wenn ich machen ==0in , >0aber das ist schon eine andere Antwort

Python 2 , 26 Bytes

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

Probieren Sie es online!


Python 3 , 26 Bytes

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

Probieren Sie es online!

1/2ergibt 0(floordiv) in Python 2 und 0.5(truediv) in Python 3. So 1/2==0gibt 1 in Python 3 und 0 in Python 2 (eigentlich booleans, aber das sind nur ganze Zahlen), so 'acbbca'[1::2] => 'cba'für Python 3 gegeben und 'acbbca'[0::2] => 'abc'wird für Python gegeben 2.


10

Excel / Google Sheets, 41 28 27 24 Bytes

Anonyme Arbeitsblattformel, die keine Ein- und Ausgaben "ABC"in die aufrufende Zelle in Excel und "CBA"in die aufrufende Zelle in Google Sheets übernimmt

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

In Google Sheets M(...)ist ein Alias ​​für und automatisch formatiert T(...)(Kurzform für Text()). Dieser Aufruf gibt den Textwert der übergebenen Variablen zurück "CBA". "CBA"wird nicht als Fehler abgefangen, wird also "CBA"von zurückgegebenIfError(...,"ABC")

In Excel gibt es keine M(...)Funktion und M(...)kein Alias. Daher wird M("CBA")der Fehler "Formel nicht gefunden" zurückgegeben #NAME?. Dies wird von gefangen IfError(...,"ABC"), was wiederum zurückkehrt"ABC" .


Frühere Versionen, 27, 28, 41 Bytes

Erläuterungen finden Sie unter Änderungen

=If(IsErr(A()),"ABC","CBA")
=If(IsErr(GT()),"ABC","CBA")
=IfError(If(Info("NUMFILE"),"ABC"),"CBA")

1
Ordentlich! .... Sie können 2 Bytes mit iserranstelle von iferrorund 1 Byte mit "SYSTEM" anstelle von "NUMFILE" speichern:=IF(ISERR(INFO("SYSTEM")),"cba","abc")
Adam

8

CJam / 05AB1E , 6 Bytes

"abc"R

Probieren Sie es online aus:

Wie es in CJam funktioniert

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

So funktioniert es in 05AB1E

"abc"    Push this string
R        Reverse
         Implicitly display top of the stack

8

Ich entschuldige mich bei @HyperNeutrino, dass er den größten Teil seiner Antwort gestohlen hat (ich habe noch nicht den Ruf, einen Kommentar abzugeben)

Python 2 , 25 Bytes

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

Probieren Sie es online!

Python 3 , 25 Bytes

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

Probieren Sie es online!


Umm es ist eigentlich <1übrigens.
Erik der Outgolfer

@EriktheOutgolfer Nein, das ist für beide Sprachen
wahr

Wie @notjagan vorgeschlagen, können Sie ersetzen printmit exit(was erlaubt nach unseren Regeln) und damit speichern 1 Byte.

3
Sie sollten Ihrer Antwort die zweite Sprache hinzufügen (Python3, nehme ich an)
Zacharý

@ Zacharý Danke, ich habe nicht bemerkt, dass das Problem aktualisiert wurde (das Original war nur Python 2 und Pyhon 3)
reffu

8

Vim / Notepad.exe, 10 Bytes

cbaabc<esc><backspace><backspace><backspace>

2
Notepad ist keine Programmiersprache, sondern +1.
Jakob

7

JavaScript (NodeJS) und PHP, 46 Byte

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

Druckt abcin JS und cbain PHP.

Probieren Sie das JS online!

Probieren Sie das PHP online! (beachten Sie, dass TIO nicht die HTML - Kommentare verstecken ( <!--... -->)


1
Wie wird das <!--in Node interpretiert?
Esolanging Fruit

@ Challenger5 Es wird anscheinend als einzeiliger Kommentar interpretiert, genau wie //( Quelle ). Funktioniert auch in Browser JS so.
Justin Mariner

6
Das ist komisch ...
Esolanging Fruit

--> blah blahist ein gültiger Kommentar in einigen JavaScript-Interpreter, Sie können nur entfernen//
tsh

1
@ JustinMariner Ich hatte auf Node v8.1.3 getestet. Und das in der ES6-Spezifikation in Anhang B definierte Verhalten, dh alle Browser , die ES6 unterstützen, sollten es als Kommentar akzeptieren.
Dienstag,

6

Python / Befunge, 20 bis 18 Bytes

2 Bytes gespart dank @karhell

print("abc")# ,,,@

Probieren Sie es online! für Python

Python sieht print("abc")dann einen Kommentar.

Probieren Sie es online! für Befunge

Befunge, alle nops und nutzlose Befehle Entfernen sieht , "abc",,,@welchen Puts a, bund cauf dem Stapel und dann druckt sie (zuletzt in - first out).


Ein bisschen spät, aber Sie können zwei Bytes >:#,_@,,,@
abschneiden,

Speichern Sie #,,<@stattdessen einen weiteren mit
Jo King

5

Python 2 und Python 3, 42 Bytes

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

Probieren Sie es online! (Python 2)

Probieren Sie es online! (Python 3)

Ich dachte, ich würde etwas anderes ausprobieren ...


Ich mag dieses, nicht das kürzeste, aber durchaus generische Framework, das sich mittry:long;print('abc')
Chris_Rands

Oder noch bessertry:cmp;print('abc')
Chris_Rands


Das habe ich nicht geschrieben, um print
Chris_Rands

5

Excel / Google Sheets, 28 Byte

Inspiriert von @TaylorScott, der eine Funktion verwendete, die nur in Excel vorhanden ist, fand ich eine noch kürzere Funktion, die nur in Google Sheets vorhanden ist. Zweckmäßigerweise ist es so konzipiert, dass Zeichenfolgen zurückgegeben werden:

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

Wie es funktioniert

join([arg1], arg2, arg3,...argk)Verkettet in Google Sheets arg2 -> argk , optional mit dem in angegebenen Trennzeichen arg1 Trennzeichen . In diesem Fall wird "cba" erfolgreich zurückgegeben.

Excel hat keine joinFunktion, iferrorsieht also ein Problem und gibt "abc" zurück


1
Meine allererste Einreichung - hoffe, ich mache es richtig ...
Adam

Schöne Lösung :)
Taylor Scott


4

Java 8 & C, 95 Bytes

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

Versuchen Sie es in Java 8 - was zu "abc" führt.
Versuchen Sie es in C - was zu "cba" führt.

Erläuterung:

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

Wie Sie im obigen Java-hervorgehobenen Code sehen können, ist die erste Zeile ein Kommentar aufgrund //und der C-Code ist ein Kommentar aufgrund /* ... */, was zu Folgendem führt:

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

Ich bin mir nicht sicher, wie ich C-Hervorhebung richtig aktivieren soll, da dies lang-czu der gleichen Hervorhebung wie bei Java führt. Aber //\ich werde die nächste Zeile, den Java-Code, auskommentieren, was zur Folge hat:

main(){{puts("cba");}}

4

Python 2 / Python 3, 28 Bytes

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

In Python 2 wird int(1/2*4)-1ausgewertet -1und so gedruckt cba. - TiO

In Python 3 wertet es 1so aus, dass es druckt abc. - TiO


2
Willkommen beim Programmieren von Rätseln und Code Golf
Евгений Новиков

4

C und C ++, 115 , 78 , 58 , 56 Bytes

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

78 Bytes dank challenger5 .

58 bytes dank aschepler .

56 bytes dank hvd

Probieren Sie es aus - C ++!

Probieren Sie es aus - C!


1
1) Sie können die beiden #ifdefs zu einem einzigen zusammenfalten. 2) Sie können das Leerzeichen in entfernen #include <stdio.h>. 3) Sie können ändern printf("%s",zu puts(. Probieren Sie es online!
Esolanging Fruit

2
Oder es gibt immer den guten alten sizeof('x')>1?"abc":"cba"Trick.
Aschepler

@ Challenger5 Danke für den Kommentar
Ivan Botero

@ Taschepler Danke für den Trick, ich habe die Änderungen 58 Bytes gemacht :)
Ivan Botero

1
sizeofDer Operand von benötigt keine Klammern, er ist keine Funktion.
HDV

4

R / Cubix , 20 Bytes

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

R - Online ausprobieren!

Cubix - Probieren Sie es online!

Für R cat("abc")dann schamloser Missbrauch von Kommentaren. Für Cubix

    c a
    t (
" a b c " ) # u
@ o ; o ; o ( ;
    . .
    . .
  • "abc" Schiebt a, b und c auf den Stapel
  • )# Inkrementiert das c, drückt die Anzahl der Elemente im Stapel
  • u Wende nach rechts
  • ;( Entfernen Sie die Zählung, Dekrementieren Sie die c
  • o;o;o@ Cba ausgeben und beenden

Schiebt die Nummer im Stapel auf


2
Ich freue mich seltsamerweise über den Weg, den cat(Cubix völlig ignoriert.
Giuseppe



3

C (gcc) C ++ (g ++), 59 Bytes

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


3

Ly / > <> , 20 bis 19 Bytes

"abc"&&ov
;     oo<

Probieren Sie es mit> <>!

Probieren Sie es mit Ly!

Diese Sprachen sind sehr ähnlich, da Ly auf> <> basiert. Ly hat jedoch keine 2D-Ausführung und Interpretationen& anders, was ich hier ausgenutzt habe.

Beide Sprachen werden durch Drücken von gestartet abc auf den Stapel .

Für> <> die & Befehl Werte zum Register und zurück. Zwei in einer Reihe drücken einen Wert in das Register und nehmen ihn dann direkt zurück, im Wesentlichen eine NOP.

Für Ly, & handelt es sich um einen Modifikator, mit dem eine Anweisung ihre Funktion für den gesamten Stapel ausführt.

obedeutet für beide Sprachen dasselbe, aber da es von &in Ly geändert wurde , wird der gesamte Stapel gedruckt und ausgegeben abc. In> <> wird nur ausgegebenc (wie von oben nach unten gedruckt)

vist ein NOP in Ly, der es überspringt und direkt zum ;Ende der Ausführung übergeht . > <> behandelt es stattdessen als Zeiger und sendet die IP nach unten.

Es trifft dann einen weiteren Pfeil und sendet die IP nach links. Hier trifft es auf zwei oZeichen, ausgeben bunda .

BEARBEITEN: Byte gespeichert (und Absturz behoben)


1
Sie können ein Byte speichern, indem Sie ;in die zweite Zeile wechseln. Dies hat auch den Vorteil, dass die> <> IP nicht umbrochen wird und die zweite Zeile erneut durchläuft, was zu einem Fehler führt.
Esolanging Fruit

sollte es nicht eine geben; für> <>? es würde nicht mehr Bytes brauchen, ersetzen Sie einfach eines der Leerzeichen
Destructible Lemon

Wie wäre es "abc"&&ooo;? Es bringt Ly zum Absturz, aber erst nach dem Drucken von "abc".
Kein Baum

… Oder "abc"&&o!;o<für 1 zusätzliches Byte, wenn Sie Abstürze vermeiden möchten.
Kein Baum



2

05AB1E und 2sable , 6 Bytes

…CBAžR

Drucke ABC(OP sagte, dass es erlaubt war) in 05AB1E und CBAin 2sable, unter Verwendung der Tatsache, dass 2sable 05AB1E ähnlich war, aber dasžR zu 05AB1E hinzugefügt wurde, nachdem 2sable abgebrochen wurde.

Probieren Sie es online! (05AB1E)

Probieren Sie es online! (2sable)


Die Spezifikation besagt, dass es "abc" oder "cba" sein muss. Nach meinem Wort würde ich sagen, dass dies ungültig ist, aber ich kann OP fragen.
HyperNeutrino

Ich habe den OP gefragt und er hat nicht geantwortet. Wenn sich herausstellt, dass dies ungültig ist, werde ich es entfernen.
Oliver Ni

@OliverNi Umm, wenn es ungültig ist, kannst du einfach ein lBtw anhängen .
Erik der Outgolfer

2

PHP + JavaScript, 29 28 Bytes

Dies funktioniert, weil PHP '0'(genau wie die ganze Zahl 0) als falsch interpretiert, während JavaScript davon ausgeht, dass es sich lediglich um eine nicht leere Zeichenfolge handelt, die der Wahrheit entspricht.

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

Dies soll mit -rPHP laufen . Fügen Sie es in Javascript einfach in die Konsole ein.


Vielen Dank an @Justin Mariner für das Speichern von 1 Byte!


Sie können auch "0"anstelle von verwenden +![]: es wird 0(falsch) in PHP und ist eine Zeichenfolge (wahr) in JS.
Justin Mariner

@JustinMariner Du hast Recht, aber das ist 1 Byte länger.
Ismael Miguel

1
Ist es nicht ein Byte kürzer? +![]?print(abc):alert('cba');->"0"?alert('cba'):print(abc);
Justin Mariner

@JustinMariner OH !!! Dieser Weg!!! Ja, es ist 1 Byte kürzer. Vielen Dank!
Ismael Miguel


2

Julia und Octave / Matlab, 27 Bytes

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

In Octave repräsentieren daher beide 'a'und "a"dieselbe Zeichenfolge'a'=="a" wahr. In Julia 'a'ist dies jedoch ein einzelnes Zeichen, während "a"es sich um eine Zeichenfolge mit einem Zeichen handelt. In Julia,"cba" ist die Ausgabe.

Ungolfed-Version:

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.