ASCII-verbundene Sechsecke


21

Überblick

Ordnen Sie die Sechsecke bei einer gegebenen Anzahl von Sechsecken in einer zusammenhängenden Form innerhalb der Grenzen eines 50 x 50 ASCII-Kunstbilds an. Die Form, die Sie wählen, kann beliebig sein - was auch immer Sie für das Golfen am besten geeignet finden -, solange es verbunden ist. Es können Löcher vorhanden sein, sofern diese größer als ein Sechseck sind (andernfalls ist die Anzahl der Sechsecke nicht eindeutig).


Layout

Alle Sechsecke müssen in der folgenden Form vorliegen (nur diese Größe und Ausrichtung ist gültig):

 __
/  \
\__/    Note there are 2 underscores per horizontal edge.

Zwei Sechsecke sind direkt verbunden, wenn sie eine Kante teilen:

 __               __
/  \__           /  \
\__/  \          \__/
   \__/    or    /  \
                 \__/

Zwei Sechsecke sind nicht verbunden, wenn sie nur einen Scheitelpunkt teilen:

 __  __
/  \/  \
\__/\__/

Das Teilen einer halben Kante zählt ebenfalls nicht als verbunden:

 __
/  \
\__/
 /  \
 \__/

Eine Sammlung von Sechsecken wird verbunden, wenn ein Pfad von einem Sechseck zu einem anderen existiert, wobei nur direkt verbundene Sechsecke verwendet werden.

Löcher

Ein sechseckgroßes Loch in einer zusammenhängenden Sammlung von Sechsecken zählt als Sechseck, sodass jedes ASCII-Kunstwerk eine eindeutige Sechseckzahl aufweist.

Dies zählt nicht als Loch, da das potenzielle Loch ein einzelnes Sechseck ist:

    __
 __/  \__
/  \__/  \
\__/  \__/
/  \__/  \
\__/  \__/
   \__/      7 hexagons (not 6 with a hole)

Dies tut zählt als ein Loch , da es nicht auf ein einzelnes Sechseck entspricht:

    __
 __/  \__
/  \__/  \__
\__/  \__/  \
/  \__   \__/
\__/  \__/  \
   \__/  \__/
      \__/      8 hexagons with a hole

Ein- und Ausgabe

Eingang

Eine ganze Zahl von 1 bis 255.

Ausgabe

Eine ASCII-Zeichenfolge, die die Anzahl der eingegebenen Sechsecke darstellt, die wie oben beschrieben verbunden sind.

  • Die Anzahl der Zeilen (durch Zeilenvorschub getrennte Teilzeichenfolgen) beträgt höchstens 50 plus einer zusätzlichen optionalen nachgestellten Zeile.
  • Die Reihen müssen nicht gleich lang sein, aber jede darf höchstens 50 lang sein.
  • Zeilen mit Nulllänge können über oder unter der verbundenen Form vorhanden sein, vorausgesetzt, die Gesamtzahl der Zeilen überschreitet 50 nicht.
  • Nur-Leerzeichen-Zeilen können über oder unter der verbundenen Form vorhanden sein, sofern die Gesamtzahl der Zeilen 50 nicht überschreitet.
  • Links von der Form können Leerzeichen angezeigt werden, sofern die Zeilenlänge 50 nicht überschreitet (die Form muss nicht links ausgerichtet sein).
  • Leerzeichen können rechts von der Form angezeigt werden, sofern die Zeilenlänge 50 nicht überschreitet.
  • Alle Zeichen, die nicht Teil der verbundenen Form sind, müssen Leerzeichen oder Zeilenumbrüche sein.

Vorausgesetzt, die Ausgabe ist korrekt, muss sie nicht von einem Lauf zum nächsten konsistent sein.

Beispiele

Eingang: 6

Gültige Ausgaben:

 __    __    __
/  \__/  \__/  \__
\__/  \__/  \__/  \
   \__/  \__/  \__/

 __    __
/  \__/  \
\__/  \__/
/  \__/  \
\__/  \__/
   \__/

          __
 __      /  \
/  \__   \__/
\__/  \__/  \
   \__/  \__/
      \__/
      /  \
      \__/

Ungültige Ausgaben:

    __
 __/  \__
/  \__/  \
\__/  \__/
/  \__/  \
\__/  \__/
   \__/      Invalid for 6 as the centre hole counts as a 7th hexagon.

 __    __    __      __
/  \__/  \__/  \    /  \
\__/  \__/  \__/    \__/
   \__/  \__/                Invalid as the 6 hexagons are not connected.

 __    __    __  __
/  \__/  \__/  \/  \
\__/  \__/  \__/\__/
   \__/  \__/           Invalid as vertex touching does not count as connected.

 __    __       __
/  \__/  \     /  \
\__/  \__/     \__/
/  \__/  \
\__/  \__/
   \__/       Invalid as the 6 connected hexagons are not the only visible characters.

Gewinnen

Die kürzeste gültige Antwort in Bytes gewinnt.


Bestenliste

(mit Martins Leaderboard-Snippet )


Ich fürchte, jeder wird das erste Beispiel für ein Ausgabemuster verwenden, da es wahrscheinlich am einfachsten zu implementieren ist.
Fatalize

1
@Fatalize meine Beispiele funktionieren nur für eine Eingabe von 6. Für die Eingabe 255einer horizontalen Reihe von Sechsecken wird in einem 50 x 50 ASCII-Kunst nicht passen.
Trichoplax

Sie können sich immer noch einfach zurückschleifen und die Zeilen unterhalb jedes Mal füllen, wenn Sie die 50-Zeichen-Grenze erreichen
Fatalize

1
@Fatalize Die Herausforderung besteht darin, die Anzahl der Bytes im Code zu minimieren. Mir macht es nichts aus, wenn die Muster einfach sind, es wird nur interessant sein zu sehen, was die Leute probieren und was zu verschiedenen Sprachen passt.
Trichoplax

@Fatalize: Ich weiß nicht, ob es kurz ist oder nicht, aber eine "interessantere" Antwort könnte eine tatsächliche Suche durchführen, um herauszufinden, wo Sechsecke platziert werden können und somit eine interessantere Ausgabe zu erhalten.
Alex Van Liew

Antworten:


13

CJam, 64 57 55 Bytes

" __
/  \
\__/"N/{_SS/\+_47>S3*f{\+}_2>\@?}q~(*]:..e>N*

Teste es hier.

Dies erzeugt spaltenweise das folgende Muster :

 __    __    __    __    __    __
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/
\__/  \__/  \__/  \__/  \__/  \
/  \__/  \__/  \__/  \__/  \__/
\__/  \__/  \__/  \__/  \__/  \
/  \__/  \__/  \__/  \__/  \__/
\__/  \__/  \__/  \__/  \__/  \
/  \__/  \__/  \__/  \__/  \__/
\__/  \__/  \__/  \__/  \__/

Erläuterung

Dies basiert auf Dennis ' exzellentem Tipp , mit .e>dem eine ASCII-Kunstausgabe aus mehreren Stücken zusammengesetzt wird. Wie er sagt, .e>nimmt er das elementweise Maximum von zwei Arrays (oder Strings), und da Leerzeichen den niedrigsten Zeichencode haben, können wir dies verwenden, um andere Zeichen in ein String-Gitter einzufügen. Wenn die beiden Arrays nicht die gleiche Länge haben, werden die überflüssigen Elemente des längeren Arrays einfach unverändert kopiert. Dies bedeutet, dass die verschiedenen Muster nicht einmal dieselbe Größe haben müssen. Um dies auf zweidimensionale Arrays anzuwenden (weil wir die Zeilenumbrüche nicht bis zum Ende einfügen möchten), wenden wir an.e> paarweise auf Zeilen an, was ergibt..e> .

Die Grundidee des Codes besteht darin, NKopien eines einzelnen Sechsecks zu generieren , das an die richtige Position verschoben wurde. Wir "bewegen" das Sechseck vertikal, indem wir Leerzeilen voranstellen und horizontal, indem wir Leerzeichen voranstellen. Sobald wir fertig sind, falten wir alle Kopien zusammen und verwenden das Schöne:..e> (wahrscheinlich dem längsten Operator, den ich jemals in einem CJam-Programm verwendet habe) zusammen.

Hier ist der Code:

" __
/  \
\__/"N/    e# Get a 2D character grid of the hexagon.
{          e# Read input N, repeat this block N-1 times.
  _        e#   Make a copy, so we leave the last hexagon on the stack.
  SS/\+    e#   Prepend two empty lines.
  _47>     e#   Make a copy and discard the first 47 lines.
  S3*f{\+} e#   Prepend 3 spaces to each line. This copy has been moved back to
           e#   the top and one column to the right.
  _2>      e#   Make a copy and discard another two lines.
  \@?      e#   If any lines were left after that, pick the copy in the next column,
           e#   otherwise, stay in the same column.
}q~(*      
]:..e>     e# Wrap all the hexagons in an array and fold them into a single grid.
N*         e# Join them with newline characters.

Mann, ich sollte wirklich eine dieser Golfsprachen lernen.
Alex Van Liew

@AlexVanLiew Das solltest du! :) Aber nicht, weil es Ihre Gewinnchancen beim Codegolf erhöht, sondern weil CJam eine schöne Sprache ist, in der es Spaß macht, zu programmieren, und ich kenne keine andere Sprache, in der die obige Lösung (die ich recht elegant finde) hätte Sinn gemacht. ;)
Martin Ender

Ich würde wahrscheinlich Pyth oder beides lernen; sind sie beide so ziemlich dasselbe oder ist einer besser als der andere?
Alex Van Liew

@AlexVanLiew Ich kenne nicht viel Pyth, aber ich weiß, dass sie weit davon entfernt sind, dasselbe zu tun. CJam ist eine Stack-basierte Sprache, während Pyth ursprünglich eine Kurzform für Python war (aber jetzt eine eigene Reihe von integrierten Funktionen hat). Pyth könnte leicht die Oberhand, wenn es um Golf geht, aber ich genieße persönlich wirklich in einem anderen Paradigma der Programmierung, so dass ich mit CJam hafte.
Martin Ender

Aha, ich verstehe. Ich kenne Python ziemlich gut, deshalb würde ich gerne Pyth lernen, aber wenn ich die Zeit dazu habe, werde ich CJam vielleicht auch ausprobieren!
Alex Van Liew

7

Python 2, 219 207 Zeichen

b=bytearray(' ');h=['__ ','/  \\','\\__/'];k=range;x=input();g=[b*50for _ in k(50)]
for i in k(x):
 c=i*3%48+1;r=(i*3+1)/48*2+i%2
 for m in k(i>15,3):n=m==0;g[r+m][c+n:c+4-n]=h[m]
print"\n".join(map(str,g))

Übernimmt die Eingabe für stdin.

Ziemlich einfach ein 50x50-Raster von Feldern erstellen und die Sechsecke gegebenenfalls einblenden. Nach dem 16. Sechseck, muss ich nicht die erste Reihe der h(das Sechseck als 2D - Array) , so verwende ich i>15auf den Bereich , auf 1 statt 0 beginnen c=i*3%48+1;r=(i*3+1)/48*2+i%2berechnet die c PALTE und r ow ich anfangen müssen. nist ein Boolescher Wert, der jedoch als Ganzzahl verwendet wird, um die Grenzen zu korrigieren (da er h[0]nur aus 3 Zeichen besteht, um das Überschreiben von Daten zu vermeiden).

Ich bin ziemlich zufrieden damit, ich habe seit der ersten Version etwa 50 Bytes gespart, vor allem, als ich mich an die a[x:y]=bSyntax erinnerte .

Ausgabe (n = 30):

  __    __    __    __    __    __    __    __
 /  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__
 \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \
 /  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/
 \__/  \__/  \__/  \__/  \__/  \__/  \__/  \
    \__/  \__/  \__/  \__/  \__/  \__/  \__/
(plus 44 lines of spaces each 50 wide)

Da nachfolgende Leerzeilen zulässig sind, habe ich die Erstellung von gso geändert , dass statt 50 bytearraySekunden nur 50 Sekunden erstellt werden. Dies entspricht 3+(x>1)+x/16*2der genauen Anzahl der erforderlichen Zeilen, wobei 12 Byte gespart werden.


6

Swift 2.0, 601 591 Bytes

import Cocoa
var a=Int(Process.arguments[1])!,b="/  \\__".join([String](count:9,repeatedValue:""))+"/",c="\\__/  ".join([String](count:9,repeatedValue:""))+"\\",d=c.startIndex,e=c.endIndex,j=[c.stringByReplacingOccurencesOfString("\\",withString:" ").stringByReplacingOccurencesOfString("/",withString:" ").substringToIndex(advance(d,3*a,e)),b.substringToIndex(advance(d,3*a+a%2,advance(e,-1)))]
while a>0{j+=[c.substringToIndex(advance(d,3*a+1,e)),b.substringToIndex(advance(d,3*a+(a+1)%2,e)]
a<=16 ?j+=[" "+j.removeLast().substringFromIndex(advance(d,1))]:()
a-=16}
for l in j{print(l)}

Zu rennen: swift hexagons.swift 21

Ausgabe:

 __    __    __    __    __    __    __    __    
/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__
\__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \
/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/
\__/  \__/  \__/
   \__/  \__/  

Swift's substringToIndexund stringByReplacingOccurencesOfStringnimm so viele Charaktere auf ...


Ich kenne Swift überhaupt nicht, aber gibt es keine Möglichkeit, diesen sich wiederholenden String mit weniger Code zu konstruieren?
Reto Koradi

Die einzige Möglichkeit, eine Zeichenfolge zu wiederholen, ist mit stringByPaddingToLength. In diesem Fall sind die Zeichen jedoch 11 Zeichen länger als beim Eingeben der vollständigen Zeichenfolge.
David Skrundz

6
Ich sehe, dass Apple eine überaus ausführliche Verkettung von Zeichenfolgen mag. Nicht so schlecht wie stringByAppendingStringin Objective-C, aber trotzdem ...
Fatalize

Außerhalb des Codegolfs ist dies jedoch sehr hilfreich, da die Suche nach einer Methode so viel einfacher ist.
JustSid

4

C 238 Bytes

#define h(A) c[m+A/4][n+A%4]
i,m,n;
f(a)
{
    char c[50][51];
    for(i=0;i<50;i++)for(m=0;m<51;m++)c[i][m]=m-50?32:0;
    for(;a;)
        m=a/12*2,n=a%12*3,a--%2?m=a/12*2+1,n=a%12*3+3:0,
        h(1)=h(2)=h(9)=h(10)=95,h(4)=h(11)=47,h(7)=h(8)=92;
    for(;i;)puts(c-i--+50);
}

Nur die für die Anzahl der Zeichen erforderlichen Leerzeichen und Zeilenumbrüche werden berücksichtigt.

Es wird einfach eine Matrix aus Zeichen erstellt, diese in umgekehrter Reihenfolge gefüllt und dann das Ganze gedruckt.


2

JavaScript (ES6), 265 Byte

A=Array;f='forEach';U=x=1;y=0;a=A.from(A(51),_=>A.from(A(51),_=>' '));d=h=>(` __
/  \\
\\__/`.split`
`[f]((l,i)=>[...l][f]((c,j)=>{if('_/\\'.indexOf(a[x+i][y+j])<0)a[x+i][y+j]=c})),(x+=U*-2+1),(U=!U),(C-y<=3?((U=x+=2),y=0):y+=3),--h?d(h):a.map(d=>d.join``).join`
`)

Tesselliert Sechsecke in einer Reihe von links nach rechts, abwechselnd auf und ab - wie eine Wabe - bis das Ende einer Reihe erreicht ist.

Ungolfed mit Beschreibung (funktioniert in Firefox):

'use strict';
const CAP = 51;
var a = Array.from(Array(51), () => Array.from(Array(51),() => ' '))

function draw (hexagons, x, y, a, up) {
  // x, y (row, col) represents the current position of the cursor
  /*
  
    Here's a map of the first three iterations:
    
            01234567
     0        __
     1     __/  \__
     2    /  \__/  \
     3    \__/  \__/

    For the first 17 iterations, the cursor will be at:
    
      # | x | y
      ----------
      1 | 1 | 0
      2 | 0 | 3
      3 | 1 | 6
      4 | 0 | 9
      5 | 1 | 12
      6 | 0 | 15
      7 | 1 | 18
      8 | 0 | 21
      9 | 1 | 24
     10 | 0 | 27
     11 | 1 | 30
     12 | 0 | 33
     13 | 1 | 36
     14 | 0 | 39
     15 | 1 | 42
     16 | 0 | 45
     17 | 3 | 0      <- moves back to the first row

  */
` __
/  \\
\\__/`
  // split the hexagon into three lines
  .split('\n').forEach((line, index) => {
    // and for each line
    ;[...line].forEach((char, j) => {
      // if the cursor position (x, y) translated
      // by (index, j) is not already part of a hexagon
      // then replace it with the current (index, j) piece
      // of the hexagon
      /*
         0123
       0  __
       1 /  \
       2 \__/
       
      */
      if ('_/\\'.indexOf(a[x + index][y + j]) < 0)
        a[x + index][y + j] = char
    })
  })
  
  // `up` represents the next hexagon
  // if true, the next hexagon will be drawn attached to
  // the top right edge of the current hexagon
  if (up) {
    x -= 1
  // otherwise, it'll be drawn attached to the bottom right edge
  } else {
    x += 1
  }

  // move three columns to the right
  y += 3
  // change directions
  up = !up

  // if within the right boundary of the 51x51 matrix,
  // move back to the left edge and down 2 rows
  // and draw the next hexagon as an `up` hexagon
  if (51 - y <= 3) {
    y = 0
    x += 2
    up = true
  }

  // if hexagons > 0, then recurse and draw the next hexagon
  // otherwise, return the array (join the columns in each row, then join each row
  // by a new line)
  return --hexagons ?
    draw(hexagons, x, y, a, up)
    : a.map(d => d.join('')).join('\n')
}

var n = parseInt(prompt('Number to draw:'))
var r = draw(n, 1, 0, a, true)
document.write('<pre>' + r.replace(/\n/g, '<br>') + '</pre>')


2

Rubin, 120

->n{a=(1..50).map{' '*50}
n.times{|i|x=i%16*3
3.times{|j|a[47-i/16*2-x/3+j][x..x+3]=[' __ ','/  \\','\__/'][j]}}
puts a}

Erstellt ein Array aus 50 Zeichenfolgen mit 50 Leerzeichen und setzt dann 4 Zeichen in 3 Zeilen ein, um die Sechsecke hinzuzufügen:

" __ "
"/  \"
"\__/"

Da die erste Zeile Leerzeichen enthält, können wir nach dem Zeichnen eines Sechsecks kein weiteres darunter zeichnen, da die Leerzeichen die vorherigen Sechsecke überschreiben würden.

Daher werden die Sechsecke in Form einer 16x16-Raute (verzerrtes Rechteck) von unten nach oben und von links unten nach rechts oben geneigt hinzugefügt.

Die Saite " __ " wird dann mit zusätzlichen überschrieben \und /wo nötig.

Ungolfed im Testprogramm

g=->n{
  a=(1..50).map{' '*50}              #make an array of 50 strings of 50 spaces
  n.times{|i|                        #loop through all hexagons
    x=i%16*3                         #x coordinate of top left corner of hexagon, 16 per row
    3.times{|j|                      #loop through 3 lines to print hexagon.
      a[47-i/16*2-x/3+j][x..x+3]=    #47-i/16*2 : start at the bottom and work up. each row is 2 lines high and contains 16 hexagons. x/3 : slant upwards as the row moves right. 
       [' __ ','/  \\','\__/'][j]    #These are the symbols for each of the 3 lines required for a hexagon. [x..x+3] defines which characters have to be replaced in each string.
    }      
  }
  puts a                             #print to stdout
}

N=gets.to_i
g.call(N) 

Typische Ausgabe (n = 250)

Es sollten noch ein paar Zeilen Leerzeichen oben sein, um insgesamt 50 zu erhalten, aber ich weiß nicht, ob es eine Möglichkeit gibt, Stackexchange so zu formatieren, dass sie diese enthalten.

                                              __  
                                           __/  \ 
                                        __/  \__/ 
                                     __/  \__/  \ 
                            __    __/  \__/  \__/ 
                         __/  \__/  \__/  \__/  \ 
                      __/  \__/  \__/  \__/  \__/ 
                   __/  \__/  \__/  \__/  \__/  \ 
                __/  \__/  \__/  \__/  \__/  \__/ 
             __/  \__/  \__/  \__/  \__/  \__/  \ 
          __/  \__/  \__/  \__/  \__/  \__/  \__/ 
       __/  \__/  \__/  \__/  \__/  \__/  \__/  \ 
    __/  \__/  \__/  \__/  \__/  \__/  \__/  \__/ 
 __/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \ 
/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/ 
\__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \ 
/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/ 
\__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \ 
/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/ 
\__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \ 
/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/ 
\__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \ 
/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/ 
\__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \ 
/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/ 
\__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \ 
/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/ 
\__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \ 
/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/ 
\__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \ 
/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/ 
\__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/    
/  \__/  \__/  \__/  \__/  \__/  \__/  \__/       
\__/  \__/  \__/  \__/  \__/  \__/  \__/          
/  \__/  \__/  \__/  \__/  \__/  \__/             
\__/  \__/  \__/  \__/  \__/  \__/                
/  \__/  \__/  \__/  \__/  \__/                   
\__/  \__/  \__/  \__/  \__/                      
/  \__/  \__/  \__/  \__/                         
\__/  \__/  \__/  \__/                            
/  \__/  \__/  \__/                               
\__/  \__/  \__/                                  
/  \__/  \__/                                     
\__/  \__/                                        
/  \__/                                           
\__/                                              
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.