Hadi Tenis oynayalım


45

Birdenbire gerçekten tenis oynamak istiyorum, ama ne yazık ki bir mahkemem yok!

Sürpriz! Geldiğin yer burası.

Benim için bir tenis kortu yazdırmanız gerekiyor, ancak gizli nedenlerden dolayı mümkün olan en az baytta yapmak zorundasınız.

Tenis kortu

---------
|       |
---------
|   |   |
xxxxxxxxx
|   |   |
---------
|       |
---------

Bu , bayt cinsinden en kısa kod kazanır!


1
İzleyen newline izin veriliyor mu?
Outgolfer Erik

1
Satır 2 ve 8'deki büyük boşluklar sekmeler kullanılarak yapılabilir mi?
FlipTack

3
@ Flp.Tkc, sanmıyorum. Bence zaten verilen altı cevaptaki hiç kimse bunu bilmediğinden haksızlık olacağını düşünüyorum.
Daniel,

2
Bu kadar kısa bir çıkış dizesi için şaşırtıcı derecede zor bir iştir! Bunu sevdim. :)
Lynn

7
Bu zorluğa "Dennis mahkemesi" diyebilirsiniz çünkü herkes zaten kimin kazanacağını bilir ... :)
RudolfJelin

Yanıtlar:



13

Python 2, 65 bayt

s='-','|'+' '*7,'-','|   ','x'
for i in s+s[3::-1]:print(i*9)[:9]

Flp.Tkc bir bayt kaydetti.


Bu biraz çılgınca dilimleme. Güzel!
Gurupad Mamadapur

Bir bayt kaydetmek '|'+' '*7için ikinci dize için kullanabilirsiniz s!
FlipTack

12

05AB1E ,29 27 26 bayt

'-9ש'|ð4׫Dûs®s¨¨ûû'x5×»û

Çevrimiçi deneyin!

'-9ש                      Push "---------" and store it as temporary value
     '|ð4׫Dûs             Push palindromized("|    ") = "|       |"
                           and push "|    "
              ®            Push "---------" again
               s¨¨û        Strip the last 2 characters from "|    " and push palindromized("|  ") = "|   |"
                   û       Palindromize last item -> "|   |   |"
                    'x5×   Push "xxxxx"
                        »  Join everything with newlines
                         û Palindromize the result and implicitly display it

9'-×D'|4ð׫©ûs®¨'|«û5'x×»ûbiraz refactoring denedi, 26
kıramazsın


7

Python 3 - 73 72 bayt

d=b,a,c='|       |','-'*9,'|   |   |'
print(a,*d,'x'*9,c,a,b,a,sep='\n')

Python 3,6 - 75 bayt

x=f"{'-'*9}\n|{' '*7}|\n{'-'*9}\n|   |   |\n"
print(x,'x'*9,x[::-1],sep='')

Kredi flp-tkc'ye gidiyor . Teşekkür ederim :)

Burada dene!


6

/// , 64 56 bayt

/f/---//e/   //a/fff
|ee |
fff
//d/|e|e|
/adxxxxxxxxx
da

Çevrimiçi deneyin!

Başka bir 56 baytlık çözüm:

/f/---//e/|   //a/fff
e    |
fff
//d/ee|
/adxxxxxxxxx
da


6

Jöle , 25 bayt

“¡⁵÷ḞȯḤɼ’b4ị“- x|”s5ŒBŒḄY

TryItOnline!

1,3,1 çeyreklik mahkeme tekrarını kullanmayı umuyordum, ancak bunu daha az sıkıştıramıyorum (ham versiyon 28:) “ßṂuB’b4s3x“¢¤¢‘ị“- x|”ŒBŒḄY.

Nasıl?

“¡⁵÷ḞȯḤɼ’b4ị“- x|”s5ŒBŒḄY - Main link: no arguments
“¡⁵÷ḞȯḤɼ’                 - base 250 number: 375116358919167
         b4               - convert to base 4:
                                [1,1,1,1,1,0,2,2,2,2,1,1,1,1,1,0,2,2,2,0,3,3,3,3,3]
           ị“- x|”        - index into character list "- x|" (1-based):
                                "-----|    -----|   |xxxxx"
                  s5      - split into chunks of length 5:
                               ["-----","|    ","-----","|   |","xxxxx"]
                    ŒB    - bounce (vectorises):
                               ["---------","|        |","---------","|   |   |","xxxxxxxxx"]
                      ŒḄ  - bounce (non-vectorising version):
                               ["---------","|        |","---------","|   |   |","xxxxxxxxx","|   |   |","---------","|        |","---------"]
                        Y - join with line feeds:
                          - implicit print

5

J, 70 54 51 50 bayt

Zgarb sayesinde bir bayt kaydedildi!

9 9$'-| |-| | |x| | |'#~3 9 1 7{~4#.inv 1851926050

Sıkıştırılmış bir RLE kullanarak bazı standart sıkıştırma tekniği.

   9 9$'-| |-| | |x| | |'#~3 9 1 7{~4#.inv 1851926050
---------
|       |
---------
|   |   |
xxxxxxxxx
|   |   |
---------
|       |
---------

Yeniden sıralama ve bir byte tasarrufu:9 9$'-| |-| | |x| | |'#~3 9 1 7{~4#.inv 1851926050
Zgarb

@Zgarb ah, güzel!
Conor O'Brien,

4

Ruby, 60 bayt

-4.upto(4){|i|puts''.rjust(9,%w{x |%3s - |%7s -}[i.abs]%'')}

Ungolfed

-4.upto(4){|i|                    #iterate -4 to 4.
   puts''.rjust(9,                #Print the null string right justified to length 9 padded by repititions of
   %w{x |%3s - |%7s -}[i.abs]%'') #the string from the %w{} array modified like sprintf by the % operator
}                                 #so that %Ns is replaced by N spaces.

4

bash / Unix araçları, 58 57 bayt

dc<<<4o16i3FFFFp20002prp20202p15555pszpszfp|tr 0-3 ' x|-'

İstenilen çıktıda newline dışında yalnızca dört karakter görünür ve her satırın bir baz-4 numarası olarak kodlanmasına izin verilir. Bu sayılar daha sonra kısaltması için, betiğe onaltılık olarak yazılmıştır.

Unix hesaplayıcı dc, hem taban-16'dan taban-4'e dönüşüm hem de satırların doğru yerlerde kolayca tekrarlanmasını sağlamak için yığın manipülasyonu için kullanılır.

Düzenleme: Karakterleri kodlamak için kullanılan 4 temel basamağın ikisini değiştirerek, bir önceki bayttan bir bayt daha kısa tr komutuna izin vererek bir bayt kapalı.


4

JavaScript, 85 bayt

console.log('---|  ---| |xxx| |---|  ---'.replace(/(.)((.).)/g,'$1$3$3$2$3$3$3$1\n'))

4

JavaScript (ES6), 86 84 83 81 bayt

Neil sayesinde 2 bayt kaydedildi

a=`---------
`;a+=`|       |
`+a;b=`|   |   |
`;console.log(a+b+`xxxxxxxxx
`+b+a)

Alternatif yöntem # 1, 93 bayt

console.log('01232101242421512424210123210'.replace(/./g,n=>`-
|  x`[n].repeat('911739'[n])))

Alternatif yöntem # 2, 86 bayt

Neil tarafından önerilen:

console.log(`-${s=`
       |
-
   |
`}x${s}-`.replace(/.*/g,s=>s.repeat(9).slice(-9)))

Alternatif yöntem # 3, 91 bayt

Özyinelemeli bir yaklaşım:

console.log((f=(n,c=`xxxx
|   |   |
---------
|       |
`[n]||'-')=>~n--?c+f(n)+c:'x')(43))

Bunu birkaç bayttan tasarruf etmek için bir işlev yapabilirsiniz.
Conor O'Brien,

@ ConorO'Brien Buradaki çıktının sadece iade edilmesine izin verildiğinden emin değilim: Bir tenis kortu basmanız gerekiyor
Arnauld

Basit çalışma uzunluğu kodlaması, alternatif yönteminizden daha kısa bir bayttır: console.log('-9\n| 7|\n-9\n| 3| 3|\nx9\n| 3| 3|\n-9\n| 7|\n-9'.replace(/.\d/g,s=>s[0].repeat(s[1])))( \naçıkça newline ile değiştirin ).
Neil

Başka bir 92-bayt formülasyon console.log('-\n |\n-\n |\nx\n |\n-\n |\n-'.replace(/.*/g,s=>s.repeat(9).slice(-9))).
Neil

Maalesef, yorumumda |görünen tek boşluk yerine, her biri için uygun şekilde 7 veya 3 boşluk olması gerekiyordu .
Neil

4

SOGL 0.5 , 24 23 20 bayt (rekabet etmeyen)

 -9*"D√⅜‘⁴"Hοr‘¹q x9*o±

Açıklama:

"'|⁶.f,‘9n_h¹q x9*o±
"'|⁶.f,‘              pushes "------------------|       ||   |   |"
        9n            splits into chunks of 9
                       stack: [["---------","---------","|       |","|   |   |"]]
          _           puts all the contents of the array into the stack
                       stack: ["---------","|       |","---------","|   |   |"]
           h          swaps the 2nd from top with 3rd from top
            ¹         turns back into array
                       stack: [["---------","|       |","---------","|   |   |"]]
             q        outputs the array without popping it from stack
               x      push "x"
                       stack: [["---------","|       |","---------","|   |   |"], "x"]
                9*    repeat it 9 times
                       stack: [["---------","|       |","---------","|   |   |"], "xxxxxxxxx"]
                  o   output that
                   ±  reverse the array
implicitly output the reversed array

Peki sıkıştırılmış dize nasıl çalışır?

Base250'den binary'e dönüştürülen dize 1000000100111110010100001110100000001100010001

ve yaklaşık olarak ne yapar:

100 boxstring (a custom dictionary string with chars " -/\|_\n")
000010 choose only the "-"s
01111 with length of 15+(different chars used)+2 = 18 chars
there is only 1 char type, so results in "------------------"
100 another boxsting
101000 choosing " " and "|"
01110 with length of 14+(different chars used)+2 = 18 chars
100000001100010001 the data; 0 = " " and 1 = "|"
has "------------------" and "|       ||   |   |" and just joins them together

Rekabetçi değil, çünkü dil mücadeleyi aşıyor. Ve bu zorluk sadece bir günlük. Dün bir şey yapmam gerektiğini biliyordum. Bunu dilim için bir test olarak yaptım ve göndermemek için iyi oldu. Eminim bu daha çok golf oynamaktadır.



3

Javascript (ES6), 86 bayt:

Bir = `---------
| |
--------- `b =` | | |
`; Console.log (a +`
'+ B + `xxxxxxxxx
'+ B + a)

Burada test edin:

a=`---------
|       |
---------`;b=`|   |   |
`;console.log(a+`
`+b+`xxxxxxxxx
`+b+a)


Sen başlangıcında bir yeni satır eklenerek 4 bayt kaydedebilir bPeşinde yeni satır kaldırabilirsiniz bu aracı olarak xxxxxxxxxve aralarında eklemek Şunu ave b. Sen ayarlayarak daha 3 bayt kaydedebilirsiniz aiçin ---------ilk ve daha sonra kendisine ikinci satırı ve bir bitiştirme.
Neil


3

PHP, 66 62 bayt

Orijinal cevap budur (66 bayt):

<?=$a="---------
|       |
---------
|   |   |
xxxx",x,strrev($a);

Bilinmeyen sabit nedeniyle bir uyarı oluşturur x. İhbar ayarlayarak baskı altına alınabilir error_reporting=0bölgesi php.iniveya komut satırında:

$ php -d error_reporting=0 tennis.php

Çıktının son satırı yeni satır karakteriyle bitmiyor.


@Titus tarafından önerilen bir iyileştirmeyi iyileştiren güncellenmiş cevap (62 bayt):

<?=$a=($b="---------
|   ")."    |
$b|   |
xxxx",x,strrev($a);

Bir yapılandırma dosyası olmadan çalıştır (varsayılan olarak error_reporting=0bu şekilde):

$ php -n tennis.php

Kodun her iki sürümü de dizgeye gömülü yeni satırlar içeriyor (1 bayttan daha kısa \n) ve açılmıyoruz.


1
Bildirimler varsayılan yapılandırmada kapatılmıştır; gerek yok -d error_reporting=0, sadece kullanın -n.
Titus,

Ben 66 sayarım <?=$a=($b="---------\n|").".... Onları 65 ile yapabilirsin .
Titus,

@Titus Önerinizi beğendim. :-) ' -ndan çok daha kısadır -d error_reporting=0Aslında, cevabında sadece 66 faydalı karakter var. Bunları kullanarak saydım ls -lve vidosyanın yeni bir satırla bitmesi için yapılandırıldığımı unuttum . Gelişiminizi geliştirdim ve 3 bayt daha sıktım. Teşekkür ederim.
axiac

2

PHP, 72 bayt

<?=$a="---------
",$b="|       |
$a",$c="|   |   |
","xxxxxxxxx
$c$a$b";

Neredeyse biraz hesaplamaktan daha kısa olduğu için bundan nefret ediyorum.


2

Ruby, 52 bayt

puts [b=[a=?-*9,"|%8s"%?|,a],c="|   |   |",?x*9,c,b]

İkili simetri kullanılarak, çizgiler şunlardır:, 0-1-0 / 2-3-2 / 0-1-0döngü kolayca açılabilir ve iç içe geçmiş liste çıktıda düzleştirilir.


2

Pyke, 28 26 25 bayt

\|ddsssd7*.X--||"R\x5*nJs

Burada dene!

       d7*                -    " " * 7
          .X--||"         -   grid(^, corners="-", sides="-", left="|", right="|")
\|dds                     -     "|  "
     s                    -    palindromise(^)
      s                   -   palindromise(^)
                  \x5*    -   "x" * 5
                      nJ  -  "\n".join(^)
                        s - palindromise(^)

2

05AB1E, 25 bayt

'-9ש'|ð4׫û®…|  ûû'x5×»û

CP-1252 kodlamasını kullanır . Çevrimiçi deneyin!

Açıklama:

'-9×                       # Push "---------"
    ©                      # Store in register_c
     '|ð4׫                # Push "|    "
           û               # Palindromize, giving "|       |"
            ®              # Retrieve from register_c
             …|            # Push "|  "
                 ûû        # Palindromize twice, giving "|   |   |"
                   'x5×    # Push "xxxxx"
                       »   # Join by newlines
                        û  # Palindromize
                           # Implicit print

2

Vim, 32 bayt

9i-^[Y3pO||^[7i ^[YGPkP4lr|YpO^[9ix^[

Bu, tenis kortunu vim tamponuna basacaktır. ^MEnter tuşunu (0x0d) temsil eder ve ^[Escape tuşudur (0x1b). Bu tuş vuruşlarını / kodlarını bir dosyaya kaydederek ve çalıştırarak çalıştırabilirsiniz.

vim -s <filename> -u NONE

Stdout'a yazdırma

Bunun yerine stdout'a yazdırılması gerekiyorsa, arabellek dosyasını bir dosyaya kaydedebilir ("a" vimkullandım bash) catve tenis kortunu yazdırmak için programın yanı sıra kullanacağınız kabuğunu (kullandım ) kullanabilirsiniz . stdout (51 bayt):

9i-^[Y3pO||^[7i ^[YGPkP4lr|YpO^[9ix^[:w!a|sil !cat %^M:q^M

Önceki sürümle aynıdır, ancak :w!a|sil !cat %^M:q^Msonuna eklenir


2

J, 36 bayt

9$'-'([,(' '4}]),[,],'x',:])9$'|   '

Bu, J kullanmanın standart yolu olan REPL üzerinde çalışır:

   9$'-'([,(' '4}]),[,],'x',:])9$'|   '
---------
|       |
---------
|   |   |
xxxxxxxxx
|   |   |
---------
|       |
---------

41 bayt ile sonucu STDOUT'a yazdırabilirim:

echo 9$'-'([,(' '4}]),[,],'x',:])9$'|   '

Çevrimiçi deneyin!

açıklama

Tenis kortunu her defasında bir sıra inşa ediyorum.

9$'-'([,(' '4}]),[,],'x',:])9$'|   '
                            9$'|   '  The string repeated to length 9: y = '|   |   |'
  '-'(                     )          Apply this verb to x = '-' and y:
                     'x',:]            y with a row of 'x'-chars above it.
                                       This is a 2x9 matrix, and "," now works by
                                       prepending new rows to it.
                   ],                  Prepend another y.
                 [,                    Prepend x, which is repeated to a row of length 9.
        (' '4}]),                      Prepend y with 4th character replaced by a space.
      [,                               Prepend x again.
                                      Now we have this 6x9 matrix:
                                       ---------
                                       |       |
                                       ---------
                                       |   |   |
                                       xxxxxxxxx
                                       |   |   | 
9$                                    Repeat it to have 9 rows.

2

PowerShell , 67 66 bayt

($a='-'*9)
($b="|       |")
$a
($c="|   "*2+"|")
'x'*9
$c
$a
$b
$a

Çevrimiçi deneyin!

Sadece bazı string çarpma, değişken ayarlama ve boru hattına kopya yerleştirmek için parens içine alındıklarından emin olma. Write-OutputProgram tamamlamadaki varsayılan bize ücretsiz arasında yeni satırlar verir.

Açık bir bayt tasarrufu için @ ConnorLSW teşekkürler.


$(' '*7)Aslında 8 karakter, sadece | |boşluk olarak yapmak için daha kısa olurdu .
17'de colsw

@ConnorLSW Oh, haha. Bariz golf için teşekkürler! : D
AdmBorkBork

sadece ToLower()diğer
cevabımdaki

1

Python 2,75 bayt

a,b,c='-'*9,'|       |','|   |   |'
for e in[a,b,a,c,'x'*9,c,a,b,a]:print e

@GurupadMamadapur'dan ödünç alınan değişkenleri kullanır

75 için alternatif

a,b,c='-'*9,'|       |','|   |   |'
print'\n'.join([a,b,a,c,'x'*9,c,a,b,a])

1

Emacs, 43 35 tuş vuruşlarını

M-9 x RET: dokuz x, dönüş
C-SPC: ayar işareti
| M-3 SPC | M-3 SPC | RET: boru, üç boşluk, boru, üç boşluk, boru, dönüş
M-9 - RET: dokuz tire, dönüş
| M-7 SPC | RET: boru, yedi boşluk, boru, dönüş
M-9 - RET: dokuz tire, dönüş
C-x C-x: değişim noktası ve işaret, bölge seçme
M-w: bölge kopyala
C-p: önceki satır
C-y: yank kopyalanan metin
M-x rev-r RET: execute reverse-regioncommand


1

Lua, 82 Bayt.

y=[[---------
|       |
---------
]]z="|   |   |\n"io.write(y,z,"xxxxxxxxx\n",z,y)

Birçok yöntem denedim, ancak bu galibi kanıtladı.


1

Pushy , 33 bayt

Bu sorunun 33 öneri vardı ve 33 cevabı vardı, bu yüzden sadece 33 baytlık bir çözüm yollamam gerekiyordu ...

9:45;T`|    `wT`|   |`4dT5:120;w"

Çevrimiçi deneyin!


açıklama

Kod, anlaşılmasını kolaylaştırmak için çeşitli bölümlere ayrılabilir. İlk kısım şöyle çalışır:

9:45;    \ Push the char '-' 9 times
T        \ Push 10, which is a linefeed
`|    `  \ Push these charcodes

Yığın şimdi:

---------
|

Ayna operatörü, wdaha sonra, bütün yığını yansıtır ve aşağıdakileri üretir:

---------
|       |
---------

Sonra:

T        \ Push a linefeed
`|   |`  \ Push these chars
4d       \ Copy the last 4 characters
T        \ Push a linefeed
5:120;   \ Push the char 'x', 5 times

Yığın şimdi tenis kortuna benzemeye başlıyor:

---------
|       |
---------
|   |   |
xxxxx

Bunu bitirmek için, ayna operatörünü bir wkez daha kullanıyoruz ve bu da tüm tenis kortunu üretmek için bu ipi yansıtıyor.

---------
|       |
---------
|   |   |
xxxxxxxxx
|   |   |
---------
|       |
---------

Şimdi kalan tek şey, "karakter tarafından yapılan yazdırmaktır .


1

Unix Kabuğu; dc ve tr kullanarak; 55 bayt: (Mitchell Spector çözeltisi Optimizasyonu)

dc<<<4o16i3FFFFp20002prp20202p15555psrfrp|tr 0-3 ' x|-'

Diğer Çözümler: sed kullanımı; 81 Bayt;

echo "---|  ---| |xxx| |---|  ---"|sed "s/\(.\)\(.\)\(.\)/\1\2\2\2\3\2\2\2\1\n/g"

Dc işlevinde kullanma: 88 Bayt

b(){ dc<<<2o16i1${1}p|tr '01' ' '$2;};(b FF -;b 01 \|;b FF -;b 11 \|)>f;cat f;b FF X;tac f

veya

b(){ echo "obase=2;$1"|bc|tr '01' ' '$2;};(b 511 -;b 257 \|;b 511 -;b 273 \|)>f;cat f;b 511 X;tac f 

Bc işlevinde kullanılması: 99 Bayt

b(){ echo "obase=2;$1"|bc|tr '01' ' '$2;};(b 511 -;b 257 \|;b 511 -;b 273 \|)>f;cat f;b 511 X;tac f 

1

Powershell, 56 bayt

(('-'*9),'|       |'+'-'*9+'|   |   |'+'x'*9)[0..4+3..0]

Açıklama: mahkemenin basit yarısı

Alternatif, 68 bayt

('-----','|    '+'-'*5+'|   |'+'x'*5)[($r=0..4+3..0)]|%{-join$_[$r]}

Açıklama: mahkeme çeyreği, hem satır hem de sütun görüntüleme için aynı endeksleri kullanır

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.