Platziere ein Segelflugzeug!

17

Dies:

Bildbeschreibung hier eingeben

ist ein Segelflugzeug .

In Conways Game of Life ist der Gleiter ein berühmtes Muster, das sich schnell über das Brett bewegt. Für die heutige Herausforderung werden wir ein ASCII-artiges Game of Life-Brett zeichnen und ein Segelflugzeug darauf platzieren.

Das Board, mit dem wir beginnen, ist folgendes:

|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|

Dieses Board besteht vollständig aus Rohren |und Unterstrichen _und ist 10x10 groß. Sie müssen ein Programm oder eine Funktion schreiben, die zwei Ganzzahlen, 'x' und 'y', enthält und dieselbe Karte mit einem Gleitschirm an diesen Koordinaten ausgibt. Wenn Sie zum Beispiel einen Gleiter an der Position (1, 1)(0-indiziert) hatten, müssen Sie Folgendes ausgeben:

|_|_|_|_|_|_|_|_|_|_|
|_|_|*|_|_|_|_|_|_|_|
|_|_|_|*|_|_|_|_|_|_|
|_|*|*|*|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|

Sie können davon ausgehen, dass der Gleitschirm niemals außerhalb der Grenzen platziert wird, sodass sich sowohl x als auch y immer im [0-7]Bereich befinden. Sie können auch wählen, die Koordinaten 1-indiziert zu nehmen, aber Sie müssen dies in Ihrer Antwort angeben. In diesem Fall liegen die Eingänge immer im [1-8]Bereich. Hier sind einige Beispiele (alle 0-indiziert):

0, 0:
|_|*|_|_|_|_|_|_|_|_|
|_|_|*|_|_|_|_|_|_|_|
|*|*|*|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|

7, 7:
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|*|_|
|_|_|_|_|_|_|_|_|_|*|
|_|_|_|_|_|_|_|*|*|*|

7, 4:
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|*|_|
|_|_|_|_|_|_|_|_|_|*|
|_|_|_|_|_|_|_|*|*|*|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|

5, 2:
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|*|_|_|_|
|_|_|_|_|_|_|_|*|_|_|
|_|_|_|_|_|*|*|*|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|

Wie üblich können Sie Ihre E / A in jedem vernünftigen Format übernehmen. Dies schließt ein, ist aber nicht beschränkt auf einen String mit Zeilenumbrüchen, ein Array von Strings, ein 2D-Array von Strings oder das Schreiben in eine Datei / STDOUT. Sie können auch auswählen, in welcher Reihenfolge x und y aufgenommen werden sollen.

Da dies , sind Standard-Schlupflöcher verboten und machen den kürzesten Code, den Sie können!

DJMcMayhem
quelle
Können wir ändern, welche Ecke die Position des Segelflugzeugs identifiziert?
Stephen
@StephenS Nein, die Koordinaten sollten angeben, wo die linke obere Ecke des Segelflugzeugs beginnt.
DJMcMayhem
2
the glider is a famous pattern that slowly traverses across the boar.. Langsam? Es ist das sich in der Diagonale am schnellsten bewegende Objekt in GoL. Es erreicht 1/4 der Lichtgeschwindigkeit.
Christoph
1
@Christoph, guter Punkt, wir können beobachten, dass sich die Länge nicht in Fahrtrichtung zusammenzuziehen scheint, aber ich kenne keine Möglichkeit, die Masse bei relativistischen Geschwindigkeiten zu messen.
Wossname

Antworten:

5

V , 31 , 30 Bytes

10O±°_|ÀGjjÀ|3r*kr*kh.Í*ü_/|&

Probieren Sie es online!

Hexdump:

00000000: 3130 4fb1 b05f 7c1b c047 6a6a c07c 3372  10O.._|..Gjj.|3r
00000010: 2a6b 722a 6b68 2ecd 2afc 5f2f 7c26       *kr*kh..*._/|&

Dies nimmt Eingaben als Programmargumente an und ist 1-indiziert.

Erläuterung:

10O                         " On the following 10 lines, insert:
   ±°_                      "   10 '_' characters
      |                     "   And a '|'
       <esc>                " Return to normal mode
            ÀG              " Go to the a'th line
              jj            " Move down two lines
                À|          " Go to the b'th column
                  3r*       " and replace the next 3 characters with asterisks
                     k      " Move up a line
                      r*    " And replace this char with an asterisk
                        kh  " Move up a line and to the left
                          . " And repeat the last change we performed (replace with asterisk)
                            "
Í                           " On every line, substitute:
 *                          "   An asterisk
  ü                         "   OR
   _                        "   An underscore
    /                       " With:
     |&                     "   A bar followed by the matched pattern
DJMcMayhem
quelle
Zwei Fragen: Was? und wie?
Pureferret
1
@ Pureferret zwei Antworten: Golf Sprachen, Wissenschaft (oder er schrieb V XD)
Christopher
1
@ Pureferret Ich habe eine Erklärung hinzugefügt.
DJMcMayhem
2

Jelly , 37-35 Bytes

ȷ2b1
Ḍ+“£Æßæç‘Ṭ+¢s⁵j3;0$€Fṭ0ị“_*¶|”

Probieren Sie es online!

Wie es funktioniert

ȷ2b1                             - the literal [1,1,1,1,...,1,1,1] with 100 elements
Ḍ+“£Æßæç‘Ṭ+¢s⁵j3;0$€Fṭ0ị“_*¶|”   - input (x,y)
Ḍ                                - convert (x,y) to 10*x+y
 +                               - add, to get the five "*" positions,
  “£Æßæç‘                        - the literal [2,13,21,22,23]
         Ṭ                       - return an array with those positions as truthy elements
          +¢                    - Now we format: pad to length 100 with the above literal
            s⁵j3                 - add newlines (represented by 3) to each set of 10
                ;0$€F            - add pipes (represented by 0) to each
                     ṭ0          - add a 0 to the beginning
                       ị“_*¶|”   - index into the string “_*¶|”
fireflame241
quelle
1
Wie tippst / generierst du deine Programme?
RobotCaleb
1
@RobotCaleb: Im Allgemeinen Kopieren-Einfügen von der Jelly-Codepage . Ich führe sie auf dem TIO-Nexus aus, wenn ich nicht auf meinem Hauptcomputer bin, und einen Klon des Jelly-Repositorys auf meinem Hauptcomputer.
fireflame241
2

Python 2 , 151 Bytes

Wird mehr Golf spielen.

def f(x,y):r,x=[list('|_'*10+'|')for i in[1]*10],x*2;r[y][x+3]=r[y+1][x+5]=r[y+2][x+1]=r[y+2][x+3]=r[y+2][x+5]='*';print'\n'.join(''.join(i)for i in r)

Probieren Sie es online!

total menschlich
quelle
Wenn Sie zu Python 3 wechseln möchten, können Sie 3 Bytes sparen, indem Sie [*'|_'*10+'|']anstelle des list()Aufrufs verwenden.
L3viathan
2

Perl 6 , 88 Bytes

->\x,\y{(^10 »*»i X+ ^10).map:{<|* |_>[$_!=
(1-2i|2-i|0|1|2)+x+y*i+2i]~"|
"x(.re==9)}}
  • Für die Darstellung der Koordinaten werden komplexe Zahlen verwendet.

  • ^10 »*» i X+ ^10 generiert das Gitter aller komplexen Zahlen mit ganzzahligen Komponenten von Null bis Neun.

  • Gibt eine Liste von Zeichenfolgen zurück, von denen jede eine Zeile enthält.

Sean
quelle
Interessanterweise wusste ich nicht, dass Perl Nicht-ASCII verwendet. Was macht »das? Wie ist es codiert?
DJMcMayhem
1
Es ist nur Unicodes RIGHT POINTING GUILLEMET, U + 00BB, in UTF-8 codiert. In Perl 6 kann es genauso gut als zwei spitze Klammern geschrieben werden >>, aber das ist die gleiche Anzahl von Bytes wie das Guillemet, daher bevorzuge ich letzteres, da es meiner Meinung nach ein wenig edler aussieht. Was das angeht, verwandelt es den Operator, den es umgibt, in einen "Hyperoperator", der paarweise auf die Listen oder Werte auf beiden Seiten angewendet wird. Hier multipliziert es jedes Element des Bereichs 0-9mit iGeben 0, i, 2i, ..., 9i.
Sean
1

Haskell , 96 Bytes

r=[0..9]
x#y=['|':(r>>=(\i->[last$'_':['*'|elem(i-x,j-y)$zip[1,2,0,1,2][0,1,2,2,2]],'|']))|j<-r]

Nimmt zwei Ganzzahlen ( xund y) auf und gibt eine Liste mit Strings zurück, dh eine 2D-Liste mit Typ [[Char]].


Testsuite:

import System.Environment

main :: IO ()
main = do
    args <- getArgs
    let (x, y) = (read $ args !! 0, read $ args !! 1)
    mapM_ putStrLn (x#y)
Augmented Fourth
quelle
1

Mathematica, 115 113 Bytes

x(a="|_"~Table~10~Table~10;(a[[##]]="|*")&@@(#+x)&/@({{0,1,2,2,2},{1,2,0,1,2}});""<>Riffle[#<>"|"&/@a,"\n"])

wo

Dies nimmt Eingaben im {row, col}Format an und ist 1-indiziert, kann aber in 0-indiziert umgewandelt werden, ohne dass Bytes hinzugefügt werden müssen.

Einige Notizen:

  1. \n ist ein Newline-Zeichen und benötigt 1 Byte.
  2. ist \[Function], dauert 3 Bytes.
  3. ist \[Transpose], dauert 3 Bytes.

Beachten Sie, dass "Array von Zeichenfolge" zulässig ist, so dass ich nur entfernen kann Riffle, gibt

Mathematica, 98 97 Bytes

x(a="|_"~Table~10~Table~10;(a[[##]]="|*")&@@(#+x)&/@({{0,1,2,2,2},{1,2,0,1,2}});#<>"|"&/@a)
user202729
quelle
1

Java 8, 165 144 Bytes

x->y->{String r="";for(int i=0,j;++i<11;r+="\n")for(r+="|",j=0;++j<11;)r+=(i==x&j==y+1)|(i==x+1&j==y+2)|(i==x+2&j>=y&j<y+3)?"*|":"_|";return r;}

Erläuterung:

Probieren Sie es hier aus.

x->y->{                  // Method with two integer parameters and String return-type
  String r="";           //  Result-String
  for(int i=0,j;++i<11;  //  Loop (1) over the rows
     r+="\n|")           //    And after each iteration add a new-line to the result-String
    for(r+="|",          //   Start by appending "|" at the start of the line
      j=0;++j<11;        //   Loop (2) over the columns
      r+=(i==x&j==y+1)|(i==x+1&j==y+2)|(i==x+2&j>=y&j<y+3)?
                         //    If this coordinate should contain a '*'
        "*|"             //     Append "*|"
       :                 //    Else:
        "_|"             //     Append "_|"
    );                   //   End of loop (2)
                         //  End of loop (1) (implicit / single-line body)
  return r;              //  Return the result-String
}                        // End of method
Kevin Cruijssen
quelle
1
Erklärung hat anderen Code als Ihre Antwort? Schauen Sie sich die erste Zuordnung zu r an.
Computronium
@Computronium Ups, danke fürs mitbekommen, behoben. Die Abschiedszählung war korrekt, die Erklärung war korrekt, der TIO-Link war korrekt, aber die eigentliche Antwort war immer noch die alte falsche.
Kevin Cruijssen
1

JavaScript (ES6), 99 Byte

x=>y=>eval('for(i=0,o="";i<101;o+=((d=i-x-y*10)==1|d==12|d>19&d<23?"|*":"|_")+(++i%10?"":`|\n`))o')

Übernimmt die Eingabe per Currying: f(5)(2)für x = 5, y = 2. Koordinaten sind nullindexiert.

Testschnipsel

f=
x=>y=>eval('for(i=0,o="";i<101;o+=((d=i-x-y*10)==1|d==12|d>19&d<23?"|*":"|_")+(++i%10?"":`|\n`))o')

xi.oninput=yi.oninput=_=>O.innerHTML=f(xi.value)(yi.value)
O.innerHTML=f(xi.value=5)(yi.value=2)
<style>*{font-family:Consolas;}input{width:2.5em;}</style>
x: <input id="xi" type="number" min="0" max="7">,
y: <input id="yi" type="number" min="0" max="7">
<pre id="O">

Justin Mariner
quelle
0

SOGL , 23 Bytes

LIΖ|_ΟL∙.«."¾'┼ΞΧ⌠²‘5nž

Hinweis: Dies setzt voraus, dass die Eingabe 1-indiziert ist

Erläuterung:

LI                       push 11
  Ζ|_                    push "|" and "_"
     Ο                   make an altrenates string [with 11 separators, which are "|" and parts "_"]
      L∙                 get an array of 10 of those
        .«               take input and multiply by 2 (x pos)
          .              take input (y pos)
           "¾'┼ΞΧ⌠²‘     push "_|*|__|_|**|*|*" - the glider in the map
                    5n   split into an array with items of length 5
                      ž  replace in the 1st [grid] array at positions [inp1*2, inp2] to 2nd array [glider]
dzaima
quelle
0

Python 2 , 133 Bytes

x,y=input()
a=[[z for z in'_'*10]for o in'|'*10]
b=a[y+2]
a[y][x+1]=a[y+1][x+2]=b[x]=b[x+1]=b[x+2]="*"
for b in a:print o+o.join(b)+o

Probieren Sie es online!

ElPedro
quelle
0

Kohle , 28 Bytes

UO²¹χ|_J×N²N“ "}IyE%%mLBMφ/”

Probieren Sie es online! Link zum ausführlichen Modus zur Beschreibung.

Nur ASCII
quelle
Ich bin enttäuscht, dass Holzkohle nicht ist, na ja ... Nur ASCII;)
Beta Decay
Sie können die entfernen , |_bevor die \neine komprimierte Byte zu speichern. (Ich habe verschiedene Druckmethoden für den Gleitschirm ausprobiert, aber keine hat Bytes gespeichert.)
Neil,