Schreiben Sie ein Programm, das den Namen seiner Quelldatei umkehrt


27

Schreiben Sie in einer einzelnen Datei ein Programm, das keine Eingabe erfordert und keine Ausgabe erzeugt. Beim Ausführen sollte der Name der Datei, in der er enthalten ist , umgekehrt werden, unabhängig davon, wie der Name lautet , ohne den Code zu ändern oder andere dauerhafte Nebenwirkungen hervorzurufen.

Jeder Weg, dies zu erreichen, ist in Ordnung. Es ist nur wichtig, dass nach dem Ausführen des Programms die einzige dauerhafte Änderung darin besteht, dass der Dateiname umgekehrt wurde. zB sollten sich keine neuen Dateien im Verzeichnis befinden.

Wenn Sie das Programm erneut ausführen, sollte der Name zurückgesetzt werden. In der Tat sollte das Programm beliebig oft ausgeführt werden können.

Für die Zwecke dieser Herausforderung:

  • Sie können davon ausgehen, dass Dateinamen immer Zeichenfolgen mit Kleinbuchstaben (az) zwischen 1 und 127 Zeichen sind. (Wenn für Ihre Sprache Dateien mit Erweiterungen ausgeführt werden müssen, kehren Sie einfach den Teil vor der Erweiterung um, z . B. mycode.batedocym.bat.)
  • Sie können davon ausgehen, dass sich die Codedatei in einem eigenen Verzeichnis befindet, sodass keine Namenskonflikte auftreten (außer bei sich selbst).
  • Sie dürfen nicht davon ausgehen, dass der Dateiname kein Palindrom ist, dh umgekehrt. Dateinamen, die Palindrome sind, sollten genauso gut funktionieren wie solche, die es nicht sind.
  • Sie können den Inhalt oder die Metadaten Ihrer Datei lesen. Es gibt keine Einschränkungen hier.
  • Sie können davon ausgehen, dass Ihr Programm auf einem bestimmten, modernen und alltäglichen Betriebssystem (z. B. Windows / Linux) ausgeführt wird, da nicht alle Shells denselben Befehlssatz haben.

Nehmen wir als konkretes Beispiel an, Sie haben ein Python-Programm in einer Datei, die mycodein einem eigenen Verzeichnis aufgerufen wird . Laufen

python mycode

im Terminal sollte dazu führen, dass der Dateiname in umgekehrt wird edocym. Die Datei edocymsollte sich alleine in ihrem Verzeichnis befinden - es mycodesollte keine benannte Datei mehr existieren. Laufen

python edocym

mycodekehrt den Namen zurück zu , an diesem Punkt kann der Vorgang auf unbestimmte Zeit wiederholt werden.

Wenn die gleiche Python-Datei umbenannt wurde racecar(ohne den Code zu ändern) und dann ausführen

python racecar

nichts sollte sich sichtbar ändern, da "Rennwagen" ein Palindrom ist. Das gleiche gilt, wenn der Dateiname beispielsweise aoder lautete xx.

Der kürzeste Code in Bytes gewinnt. Tiebreaker ist höher gestimmte Antwort.


Ist das aktuelle Arbeitsverzeichnis wichtig?
Brad Gilbert b2gills

@ BradGilbertb2gills Du solltest in der Lage sein, den Ordner mit dem Programm an eine andere Stelle zu kopieren und es trotzdem funktionieren zu lassen (vorausgesetzt, du hast Berechtigungen und so weiter). Sie können davon ausgehen, dass das Arbeitsverzeichnis der Shell der Ordner ist, in dem sich die Datei befindet.
Calvins Hobbys

6
Was ist, wenn wir eine kompilierte Sprache verwenden? Wie wirkt sich die ausführbare Datei auf Ihre Regeln aus?
EMBLEM

Aufforderung zur Klärung 'akzeptiert keine Eingabe und erzeugt keine Ausgabe'. Technisch gesehen ist der Name der Datei eine Eingabe, die aus dem Dateisystem abgerufen werden muss, und der geänderte Name muss an das Dateisystem gesendet werden. Dies sind Input und Output. Es kann sinnvoll sein, anzugeben, dass keine anderen Ausgaben zulässig sind.
13.

Betrachten Sie die Verwendung von untergeordneten Prozessen außerdem als Verstoß gegen die Eingabe- / Ausgaberegeln? Das heißt, das Aufrufen eines separaten Prozesses, um einen Teil der Aufgabe auszuführen, wie das Umkehren des Namens, würde das Senden des Namens (Ausgabe aus Ihrem Code und Eingabe in die App) und das Empfangen des Werts aus dem Prozess (Ausgabe des Prozesses) durch den anderen Prozess erfordern und Eingabe in die App).
13.

Antworten:


41

Bash + gemeinsame Linux-Utils, 13 Bytes

Meine Methode ähnelt der von @DigitalTrauma, ist aber aufgrund der Pipe etwas kürzer mit ls:

mv * `ls|rev`

Oh sehr gut.
Digital Trauma

20
Willkommen bei Programming Puzzles & Code Golf! Dies ist eine sehr schöne erste Antwort. :)
Alex A.

1
Funktioniert nur, wenn sich keine andere Datei im Verzeichnis befindet.
WGroleau

1
@WGroleau && terdon: Ihre beiden Kommentare sind richtig, aber die Frage behandelt bereits diese beiden Annahmen.
Julie Pelletier

@ JuliePelletier ah, ja, du hast ganz recht. Ich habe vermisst, dass Dateinamen nur aus Kleinbuchstaben bestehen dürfen.
Terdon

14

153 Bytes

void f(){var x=System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;File.Move(x,new string(x.Reverse().ToArray()).Substring(4)+".exe");}

OO ist cool und alles, bis Sie eine Variable definiert haben:

System.Reflection.Assembly.GetExecutingAssembly (). ManifestModule.Name

Das ist nur gemein


12

Bash + gemeinsame Linux-Utils, 15

  • Dank @Dennis 1 Byte gespart

Angenommen, das Skript befindet sich in einem eigenen Verzeichnis.

mv * `rev<<<$0`

6
Sie können die Code - Datei in einem Verzeichnis , das von sich selbst übernehmen , so $0kann ersetzt werden *.
Dennis

Tut mir leid, aber es gibt einen kleinen Fehler in Ihrem Update und es funktioniert nicht so wie es ist. Die einfachste Lösung besteht darin, näher an das heranzugehen, was Sie zuvor hatten, $0anstatt an das Letzte *.
Julie Pelletier

@ JuliePelletier Es schien zu funktionieren, als ich es ausprobiert habe, aber ja, Sie haben Recht - * Globbing Expansion passiert nicht rechts von einem <<<.
Digital Trauma

7

Julia, 51 Bytes

d,f=splitdir(@__FILE__)
cd(d)do
mv(f,reverse(f))end

Dieses Programm sollte betriebssystemunabhängig sein, obwohl es nur unter OS X getestet wurde.

Ungolfed:

# Get the directory and file name of the current source file
d, f = splitdir(@__FILE__)

# Change the working directory temporarily to d
cd(d) do
    # Overwrite the file with the reverse of its name
    mv(f, reverse(f))
end

8
Glückwunsch! 20k !!!
Luis Mendo

Die meisten Antworten gehen davon aus, dass sich die Datei im aktuellen Verzeichnis befindet cd. In diesem Fall f=readdir()[]wäre noch kürzer.
Dennis

6

MATLAB, 50 46 Bytes

e='.m';x=mfilename;movefile([x e],[flip(x) e])

Vielen Dank an @Suever für das Entfernen von 4 Bytes und für das Testen!

Getestet unter OS X El Capitan und Debian Jessie, beide mit Matlab Version R2014a.

Unter Windows wird ein Flag 'f'benötigt ( e='.m';x=mfilename;movefile([x e],[flip(x) e]),'f'), um den Dateinamen zu ändern, während die Datei verwendet wird.

Wie es funktioniert

e='.m';                       % Store file extension '.m' in variable `e`
x=mfilename;                  % Get name of file being run, without the extension
movefile([x e],[flip(x) e])   % Move (rename) file. `flip` is used for reversing the
                              % name without extension. [...] is (string) concatenation

Auf welchem ​​Betriebssystem bist du, dass das 'f'benötigt wird?
Suever

@Suever Windows. Wird es nicht auf dem Mac benötigt?
Luis Mendo

Es wird anscheinend auf einem Linux-Mac nicht benötigt.
Suever

@Suever Danke! 4 Bytes weg :-)
Luis Mendo

@Suever Kannst du das genaue Betriebssystem angeben, auf dem dies funktioniert?
Luis Mendo

4

Ruby, 24 Bytes

File.rename$0,$0.reverse

Ziemlich selbsterklärend. ( $0ist der Name der ausgeführten Datei.)

Führen Sie mit ruby whatevermit einem Arbeitsverzeichnis des Verzeichnisses aus, das die Datei enthält.


4

Batch, 109 Bytes

@echo off
set f=%0
set r=
:l
set r=%f:~0,1%%r%
set f=%f:~1%
if not .%f%==. goto l
ren %0.bat %r%.bat

Hinweis 1: Batch-Dateien müssen auf enden .bat. Es wird davon ausgegangen, dass die Batch-Datei mit ihrem Namen ohne Erweiterung ausgeführt wird und .batnicht rückgängig gemacht werden soll. Zum Beispiel reversewürde versuchen , umbenennen reverse.batzu esrever.bat.
Hinweis 2: CMD.EXEFehler nach dem Umbenennen der Batch-Datei. ( COMMAND.COMWürde nicht, außer dass es überhaupt nicht in der Lage ist, Zeichenfolgen zu manipulieren.)

Bearbeiten: 2 Byte mit der Garantie gespeichert, dass der Dateiname alphabetisch ist (basierend auf dem Kommentar von @ CᴏɴᴏʀO'Bʀɪᴇɴ).


3
1. WARUM SCHREIEN SIE NICHT? 2. Ich denke, Sie können ein Byte speichern, indem Sieif ]%f% NEQ ] goto l
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ Ah ja, der Dateiname ist alphabetisch, also kann ich zwar 2 Bytes speichern, aber danke für den Hinweis.
Neil

1
SIE MÜSSEN IN CHARGEN SCHREIEN,
Katze

4

C 102 Bytes

main(c,v)char**v;{char*b=strdup(*v),*n=strrchr(*v,47),*t=strchr(b,0);for(;*++n;*--t=*n);rename(*v,b);}

Nervenzusammenbruch:

                            // No #include lines required (for GCC at least)
main(c,v)char**v;{          // K&R style function to save 2 bytes
    char*b=strdup(*v),      // Duplicate args[0] (script path)
        *n=strrchr(*v,47),  // Find last "/" in input
        *t=strchr(b,0);     // Go to end of output string
    for(;*++n;*--t=*n);     // Reverse input into output character-by-character
    rename(*v,b);           // Rename the file
}                           // Implicit return 0

Endlich eine Herausforderung, bei der C nicht (so hoffnungslos) wettbewerbsunfähig ist!


Wenn wir „können Sie das Arbeitsverzeichnis der Shell übernehmen wird der Ordner der Datei in ist“ bedeutet , dass das Programm immer aufgerufen werden ./myexecutable, können wir vereinfachen *n=strrchr(*v,47)zu *n=*v+110 Zeichen zu speichern, aber das ist nicht ganz gültig ( es könnte ././myexecutablezum Beispiel aufgerufen werden als ).


Auch wenn Sie eine Dateierweiterung (zB „.out“) im Takt halten möchten, können Sie ändern *t=strchr(b,0)zu *t=strrchr(b,46), 2 Bytes kosten. Wird aber nicht benötigt.


Schön - ich habe nie nachgesehen, was renamepassiert, wenn src == dest; es scheint, dass Sie die Palindrom-Bedingung kostenlos erfüllen.
Toby Speight

Beachten Sie, dass hierfür ein Dateisystem erforderlich ist, bei dem Codepoint 47 das Trennzeichen ist. Ich denke, dies beinhaltet POSIX (oder erlaubt das EBCDIC /in einem Eckfall?)
Toby Speight

@TobySpeight Ja, ich habe gnu.org/software/libc/manual/html_node/Renaming-Files.html zur Verdeutlichung überprüft , aber am ehesten habe ich festgestellt: "Ein Sonderfall für das Umbenennen ist, wenn alter und neuer Name zwei Namen für dieselbe Datei sind Die konsistente Möglichkeit, diesen Fall zu behandeln, besteht darin, den alten Namen zu löschen. In diesem Fall erfordert POSIX jedoch, dass das Umbenennen nichts unternimmt und Erfolg meldet - was inkonsistent ist. Wir wissen nicht, was Ihr Betriebssystem tun wird. " Eine externe Chance ist, dass die Datei nur auf nicht POSIX-kompatiblen Systemen gelöscht wird. Also ja, echter Code sollte das überprüfen!
Dave

Ich habe gerade linux.die.net/man/3/rename überprüft und es bestätigt, dass Linux es POSIX-konform handhabt: "Wenn das alte Argument und das neue Argument in dieselbe vorhandene Datei aufgelöst werden, wird rename () erfolgreich zurückgegeben und führt keine andere aus Aktion."
Dave

Ich ging mit der Debian-Manpage: "Wenn oldpathund newpathsind vorhandene feste Links, die auf dieselbe Datei verweisen, dann rename()tut das nichts und gibt einen Erfolgsstatus zurück" - wenn die Zeichenfolgen identisch sind, verweisen sie auf dieselbe Datei.
Toby Speight

3

Vitsy + * sh, 15 Bytes

iG:`?r.iG' mr',

Erläuterung

iG:`?r.iG' mr',
i               Push -1 to the stack. (this assumes that no arguments are passed)
 G              Get the use name of the class specified by the top item of the
                stack. (-1 refers to the origin class, so this class)
  :             Duplicate stack and jump to it.
   `            Read a file with the current stack as its name, replacing the stack
                with the file's contents.
    ?           Shift one stack to the right.
     r          Reverse the current stack.
      .         Write a file with the name specified by the top stack and the
                contents as the second-to-top stack.
       iG       Get the name of the current class again.
         ' mr'  Push 'rm ' to the stack.
              , Execute the current stack as a command.

Beachten Sie, dass für diese Einreichung die nicht sichere Version von Vitsy verwendet werden muss (nicht bei Try It Online möglich!)


3

Perl 5, 18 Bytes

Ein bisschen wie der Ruby (run perl nameofscript):

rename$0,reverse$0

Die Berücksichtigung eines möglichen Pfades ist hässlicher (47 Bytes)

($a,$b)=$0=~/(.*\/)?(.*)/;rename$0,$a.reverse$b

1
Hallo und willkommen bei PPCG! Toller erster Beitrag!
NoOneIsHere

2

V , 29 26 Bytes

:se ri
izyw:!mv z "
dd

Da dies nicht druckbare Dateien enthält, ist hier ein Hex-Dump:

00000000: 3a73 6520 7269 0a69 127a 1b79 773a 216d  :se ri.i.z.yw:!m
00000010: 7620 127a 2012 220a 6464                 v .z .".dd

Hinweis: Dies kann nicht auf v.tryitonline.net ausgeführt werden, da TIO keinen Dateizugriff zulässt.

Erläuterung:

:se ri            "Turn on 'reverse mode' (all text is inserted backwards)
i<C-r>z<esc>      "Enter the path to the file in reverse
yw                "Yank a word. This first word is the name we will save the new file as

"Run an "mv" in the terminal with the contents of register 'z' (the path to the file)
"And the contents of register '"' (the word we yanked)
:!mv <C-r>z <C-r>"

dd                "Delete a line so that we don't have any text printed.

2

Python 3, 105 Bytes

import os;a=__file__.split('\\')[::-1][0].split('.');os.rename('.'.join(a),'.'.join([a[0][::-1],a[1]]))

-Alex.A hat 1 Byte entfernt.

-Digital Trauma zeigte mir os.rename (), das 62 Bytes wegnahm.

-muddyfish hat 7 Bytes entfernt.


Ich denke, Sie können ein Byte speichern, indem Sie das Leerzeichen nach dem Komma in derimport
Alex A.

import os,sys;f=sys.argv[0];os.rename(f,f[::-1])sollte den Trick für 48 Bytes tun
Digital Trauma

Wenn Sie f [:: - 1] ausführen, wird nicht nur der Dateiname, sondern der gesamte Pfad umgekehrt. Vielen Dank jedoch, dass Sie mir die Funktion os.rename () vorgestellt haben.
Magenta

@Magenta Gibt bei mir sys.argv[0]nur den Dateinamen ohne Pfad zurück, wenn das Skript direkt in einem eigenen ausgeführt wird. Helka gab an, dass dies in Ordnung ist
Digitales Trauma

@DigitalTrauma Als ich das Programm selbstständig ausführte, gab sys.arg [0] den vollständigen Pfad zurück. Ich füge eine zweite Lösung hinzu, in der sys.argv [0] nur der Dateiname ist.
Magenta

2

PHP, 84, 7054 Bytes

rename($f=__FILE__,strrev(basename($f,$e='.php')).$e);


BEARBEITEN: 14 Bytes entfernt dank insertusernameherein den Kommentaren
BEARBEITEN: 16 Bytes entfernt dank Martijnin den Kommentaren


2
Sie können es runter 70 Bytes : rename($f=__FILE__,__DIR__."/".strrev(pathinfo($f)[filename]).".php");.
insertusernamehere

Hervorragend !!! aber dein code ist besser, wow du hast 31 bytes
tttony

Kannst du es nicht relativ machen? Wir würden 7 Bytes sparen:rename($f=__FILE__,"./".strrev(pathinfo($f)[filename]).".php");
Martijn

oder noch kleiner:rename(__FILE__,strrev(basename(__FILE__,'.php')).'.php');
Martijn

Cool! Hinzufügen von Vars Ich habe jetzt 54 Bytes
TTTONY

2

PowerShell, 39 Byte

mi *(-join((ls).name)[-5..-999]+'.ps1')

Hallo und willkommen bei PPCG! Schöner erster Beitrag!
23.

2

Python 2 , 41 Bytes

import os;s=__file__;os.rename(s,s[::-1])

Demo auf Bash.

Python ist die Dateierweiterung wirklich egal, also können wir einfach den gesamten Dateinamen spiegeln.



1

Perl 6 ,  70   27 Bytes

Wenn es in einem anderen Arbeitsverzeichnis arbeiten müsste, bräuchten Sie so etwas:

$_=$*PROGRAM;.rename: .basename.flip.IO.absolute: .absolute.IO.dirname

Da das Arbeitsverzeichnis dasselbe Verzeichnis wie das Programm ist, kann es auf folgende Weise vereinfacht werden:

$_=$*PROGRAM;.rename: .flip

Erläuterung:

$_ = $*PROGRAM;  # IO::Path object

$_.rename:
    $_.basename
      .flip      # reverse characters
      .IO        # turn into an IO object (IO::Path)
      .absolute: # turn it into an absolute path Str in the following dir
        $_.absolute.IO.dirname

1

JavaScript (Node), 108 104 68 Bytes

36 Bytes gespart, dank Downgoat!

Windows-Version:

require("fs").rename(F=__filename,F.split(/.*\\|/).reverse().join``)

Andere Version:

require("fs").rename(F=__filename,F.split(/.*\/|/).reverse().join``)

@Upgoat Ich brauche nicht, ich glaube nicht. Ich jsstimme am Ende des Dateipfads überein, dem ein Zeichen vorangestellt ist. Dies wird immer ein ..
Conor O'Brien

1

JavaScript ES6 (Node.js) 70 Bytes

Kein Regex Yay!

require("fs").rename(a=__filename,[...a].reverse().join``.split`/`[0])

Jede Hilfe wird geschätzt


1

PowerShell v4 +, 68 Byte

$a,$b=($c=(ls).Name)-split'\.';mv $c "$(-join($a[$a.length..0])).$b"

Funktioniert nur, weil das Skript sich garantiert von alleine in einem Verzeichnis befindet. Führt einen ls(Alias ​​für Get-ChildItem) aus und nimmt das .Nameder resultierenden Objekte. Wir speichern , dass in $cund dann -splitauf wörtlichen Zeitraum die Dateinamen und Erweiterung zu erhalten, und speichern Sie die in $aund $bdargestellt.

Als nächstes ist die mv(Alias für Move-Item) Befehl, wo wir bewegen $czu $a(umgekehrt) .$b.

Beispiel

PS C:\Tools\Scripts\golfing\reverse> ls

    Directory: C:\Tools\Scripts\golfing\reverse

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         6/13/2016   7:58 AM         88 reverse.ps1

PS C:\Tools\Scripts\golfing\reverse> .\reverse.ps1

PS C:\Tools\Scripts\golfing\reverse> ls

    Directory: C:\Tools\Scripts\golfing\reverse

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         6/13/2016   7:58 AM         88 esrever.ps1

1

Python (2.7 oder 3.4+), 61 49 Bytes

Ich glaube, das ist in der Nähe der optimalen Python-Lösung:

import os;a=__file__;os.rename(a,a[-4::-1]+".py")

Inspiriert von s4b3r6der Antwort, verwendet aber List Slicing anstelle von Reverse und speichert __file__in einer Variablen, um Bytes zu sparen, wenn es zweimal verwendet wird.

Hinweis: Dies setzt voraus, dass der Dateiname immer ist *.py. Eine etwas allgemeinere Lösung, die mit jeder zweistelligen Dateierweiterung umgehen kann a[-3:], ist das Ersetzen ".py"auf Kosten von 1 zusätzlichen Byte.

Update: 12 Bytes mit dem List Slicing Trick a[-4::-1]gespeichert, um die Dateierweiterung zu entfernen, anstatt sie zu teilen und dann mit umzukehren a.split(".")[0][::-1].


1

Powershell, 112 Bytes

Ich werde die Unix-Cmds nicht schlagen, nur meine zwei Pence zum Spaß hinzufügen :-)

gci * | % { $n=($_.basename[-1..-(($_.basename).length)] -join “”)+$_.Extension; mv -Path $_.Fullname -Dest $n }

Willkommen bei PPCG! Wir fordern, dass die Antworten ihre Punktzahl anzeigen, daher habe ich sie für Sie bearbeitet. Sie können Ihren Code auch formatieren, indem Sie ihn markieren und die Schaltfläche auswählen, die wie Klammern aussieht {}, oder indem Sie 4 Leerzeichen vor Ihrem Code einfügen.
FryAmTheEggman

0

PowerShell, 50 Byte

mv *(-join($f=(ls).BaseName)[$f.Length..0]+'.ps1')

Es gibt nur eine Datei, daher hat der mv *Shell-Platzhalter nur ein Ergebnis. Der (ls).basenameZielname listet alle Dateien auf (Alias ​​für 'dir'), ruft die BaseName-Eigenschaft auf - und da es nur eine Datei gibt, entpackt PowerShell das Array mit 1 Element in eine Zeichenfolge. Speichern Sie diesen Dateinamen in $fund indizieren Sie ihn mit einem Countdown, und -joindie umgekehrten Zeichen werden zu einer Zeichenfolge. Fügen Sie das obligatorische .ps1Suffix hinzu.


0

AutoIt, 45 Bytes

$a=@ScriptName
FileMove($a,StringReverse($a))

0

Python 2.7, 68 Bytes

import os; a = __ file __; os.rename (a, a.split ("\\") [- 1] [: - 3] [:: - 1] + ". py")

Dies ist wahrscheinlich das Beste, was ich bekommen kann. Ich habe mich nur als falsch erwiesen.


0

Python (2 & 3), 88 bis 78 Bytes

import os;os.rename(__file__,''.join(reversed(__file__.split(".")[0]))+".py"))

Nutzt die Tatsache aus, dass der Dateiname von sys.argv angegeben wird (da das Arbeitsverzeichnis der Ordner ist, in dem sich die Datei befindet) und verwendet os.rename. Ärgerlicherweise gibt reverse einen Iterator zurück, daher müssen wir join verwenden.

Bearbeiten: 10 Bytes mit __file__ anstelle von sys.argv [0] gespeichert, wie von @muddyfish an @DigitalTrauma vorgeschlagen.



0

Visual Basic-Skript, 44 Bytes

WScript.Echo(StrReverse(WScript.ScriptName))

Beispielausgabe für die aufgerufene Datei reverse.vbs(Run with cscript):

sbv.esrever


0

SmileBASIC 60 Bytes

P$=PRGNAME$()FOR I=1-LEN(P$)TO.Q$=Q$+P$[-I]NEXT
RENAME P$,Q$

Alternative:

P$=PRGNAME$()T$=P$*1WHILE""<T$Q$=Q$+POP(T$)WEND
RENAME P$,Q$
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.