Bir planör yerleştirin!


17

Bu:

enter image description here

bir Planördür .

Conway'in Hayat Oyununda, planör , tahta boyunca hızla dolaşan ünlü bir modeldir. Bugünün meydan okuması için, bir ASCII sanat Oyun Hayatı Kurulu çizeceğiz ve üzerine bir planör yerleştireceğiz.

Başladığımız tahta şudur:

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

Bu tahta tamamen borulardan |ve alt _çizgilerden oluşur ve 10x10'dur. 'X' ve 'y' olmak üzere iki tamsayı alan ve aynı panoyu bu koordinatlarda bir planörle çıkaran bir program veya işlev yazmalısınız. Örneğin, konumda bir planör (1, 1)(0 dizinli) varsa, aşağıdakilerin çıktısını almanız gerekir:

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

Planörün asla sınırların dışına yerleştirilmeyeceğini varsayabilirsiniz, bu nedenle hem x hem de y her zaman [0-7]aralıkta olacaktır. Ayrıca 1 dizinli koordinatları almayı da seçebilirsiniz, ancak cevabınızda bunu belirtmeniz gerekir. Bu durumda, girişler her zaman [1-8]aralık dahilinde olacaktır . İşte bazı örnekler (tümü 0 dizinli):

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

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

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

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

Her zamanki gibi, ES'nizi makul bir biçimde alabilirsiniz. Bu, yeni satırları olan bir dizeyi, bir dizeyi, 2d dizeyi veya bir dosyaya / STDOUT'a yazmayı içerir, ancak bunlarla sınırlı değildir. Ayrıca hangi sırayı alacağınızı x ve y .

Bu , standart boşluklar yasaklanmıştır ve yapabileceğiniz en kısa kodu yapın!


Hangi köşenin planörün konumunu tanımladığını değiştirebilir miyiz?
Stephen

@StephenS Hayır, koordinatlar Planörün sol üst köşesinin nerede başladığını tanımlamalıdır.
DJMcMayhem


2
the glider is a famous pattern that slowly traverses across the boar.. Yavaşça? GoL'deki en hızlı diyagonal hareket eden nesnedir. Işık hızının 1 / 4'üne ulaşır.
Christoph

1
@Christoph, iyi bir nokta, uzunluğunun seyahat yönünde büzülmediğini gözlemleyebiliriz, ancak kitlesini göreceli hızlarda ölçmenin herhangi bir yolunu bilmiyorum.
Wossname

Yanıtlar:



5

V , 31 , 30 bayt

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

Çevrimiçi deneyin!

HexDump:

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

Bu, girdiyi program bağımsız değişkenleri olarak alır ve 1 dizine eklenir.

Açıklama:

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

İki soru: Ne? ve nasıl?
Pureferret

1
@Pferferret iki cevap: Golf dilleri, BİLİM (veya V XD yazdı)
Christopher

1
@ Purureret Bir açıklama ekledim.
DJMcMayhem

2

Jöle , 37 35 bayt

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

Çevrimiçi deneyin!

Nasıl çalışır

ȷ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 “_*¶|”

1
Programlarınızı nasıl yazıyorsunuz / oluşturuyorsunuz?
RobotCaleb

1
@RobotCaleb: genellikle Jelly kod sayfasından kopya yapıştırma . Onları ana makinemde değilken TIO bağlantısında ve ana bilgisayarımdaki Jelly deposunun bir klonunda çalıştırıyorum.
fireflame241

2

Python 2 , 151 bayt

Golf daha olacak.

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)

Çevrimiçi deneyin!


Python 3'e geçmek istiyorsanız [*'|_'*10+'|'], list()arama yerine kullanarak 3 bayt kaydedebilirsiniz .
L3viathan

2

Perl 6 , 88 bayt

->\x,\y{(^10 »*»i X+ ^10).map:{<|* |_>[$_!=
(1-2i|2-i|0|1|2)+x+y*i+2i]~"|
"x(.re==9)}}
  • Koordinatları temsil etmek için karmaşık sayılar kullanılır.

  • ^10 »*» i X+ ^10 sıfırdan dokuza kadar tamsayı bileşenlerine sahip tüm karmaşık sayıların ızgarasını oluşturur.

  • Her biri bir satır tutan dizelerin listesini döndürür.


İlginçtir, Perl'in ASCII dışı kullandığını bilmiyordum. Ne yapar »? Nasıl kodlanır?
DJMcMayhem

1
Sadece Unicode'un UTF-8 ile kodlanmış SAĞ NOKTA GUILLEMET'i, U + 00BB. Perl 6'da iki köşeli parantez olarak da yazılabilir >>, ancak bu guillemet ile aynı bayt sayısıdır, bu yüzden golf için ikincisini biraz daha klas bir IMHO'ya benzediğinden tercih ederim. Yaptığı işe gelince, çevreleyen operatörü her iki taraftaki listelere veya değerlere çift olarak uygulanan bir "hipermetresöre" dönüştürür. İşte, bu aralığın her elemanı çarpar 0-9tarafından ivererek 0, i, 2i, ..., 9i.
Sean

1

Haskell , 96 bayt

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]

İki tamsayı ( xve y) alır ve bir Strings listesi , yani 2B bir tür liste döndürür [[Char]].


Test odası:

import System.Environment

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


1

Mathematica, 115 113 bayt

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

nerede

Bu, girişi {row, col}biçim alır ve 1 dizinlidir, ancak bayt eklenmeden 0 dizinine dönüştürülebilir.

Bazı notlar:

  1. \n yeni satır karakteri, 1 bayt alır.
  2. olduğu \[Function], 3 bayt alır.
  3. olduğu \[Transpose], 3 bayt alır.

"Dize dizisine" izin verildiğini unutmayın, bu yüzden yalnızca Riffle , verir

Mathematica, 98 97 bayt

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

1

Java 8, 165144 bayt

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

Açıklama:

Burada deneyin.

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

1
Açıklamanın cevabınızdan farklı bir kodu var mı? R'nin ilk atamasına bakın.
Computronium

@ Compputronium Hata! Fark ettiğiniz için teşekkürler, düzeltildi. Güle güle sayımı doğruydu, açıklama doğruydu, TIO bağlantısı doğruydu, ama asıl cevap hala eski yanlıştı ..
Kevin Cruijssen

1

JavaScript (ES6), 99 bayt

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

Körükleme yoluyla girdi alır: f(5)(2)x = 5, y = 2 için. Koordinatlar sıfır endekslidir.

Test Parçacığı

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


0

SOGL , 23 bayt

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

not: bu girdinin 1 dizinli olmasını bekler

Açıklama:

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]


0

Charcoal, 28 bytes

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

Try it online! Link to verbose mode for description.


I'm disappointed that Charcoal isn't, well... ASCII-only ;)
Beta Decay

You can remove the |_ before the \n to save a compressed byte. (I tried several different ways of printing the glider but none saved any bytes.)
Neil
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.