Amerika'ya tırmanın


11

Artık diğer kullanıcılar Trump'ın duvarı inşa etmesine yardımcı oldular , tırmanma zamanı.

Bu, rasgele yerleştirilmiş muhafazalarla bir tırmanma duvarı çıkarmanız gereken bir ascii sanat mücadelesidir.

Tırmanma duvarı, her biri 3 ila 10 muhafaza ve 5 panel yüksekliğinde olan panellerden oluşur. Her panel 4 karakter yüksekliğinde ve 10 karakter uzunluğundadır

Kullandığımız |duvar kenarını (arête) 'i temsil etmek ve -panel kenarları temsil etmek. Panellerin köşeleri ile gösterilir +ve muhafazalar olarak gösterilir o.

Son olarak, duvarın America!üstünde ve Mexicoaltında olması gerekir .

Girdinin çalışması için gerekli olmadıkça programınız girdi almamalı ve aşağıdakine benzer bir şey çıktılamalıdır

Bu bir örnek çıktıdır:

  America!
+----------+
|  o       |
|    o o   |
| o    o   |
|  o    o  |
+----------+
|  o       |
|    o o   |
| o    o   |
|  o    o  |
+----------+
|  o       |
|    o o   |
| o    o   |
|  o    o  |
+----------+
|  o       |
|    o o   |
| o    o   |
|  o    o  |
+----------+
|  o       |
|    o o   |
| o    o   |
|  o    o  |
+----------+
   Mexico

Bu kafa karıştırıcı olabilir, bu yüzden aşağıda daha net yapılandırılmıştır

Giriş

Zilcho. Kesinlikle girdi almamalısınız.

Çıktı

5 panelden oluşan bir ascii-art tırmanma duvarı, her biri 6 satır x 12 sütun America!üstte Mexicoortalanmış ve altta ortalanmış. Her panel, program tarafından rastgele oluşturulan özdeş bir desene sahiptir. Panel deseni, 3 ile 10 arasında rastgele dağıtılmış rasgele sayıda muhafazadan oluşur.

kurallar

  • Girdiye izin verilmiyor
  • "Yerleşik yok" diyebilirim, ancak dilinizde bunun için bir yerleşik varsa, bunu otomatik olarak kazanan olarak kabul edeceğim.
  • Bu çok kısa kod (bayt cinsinden) kazanır.
  • Muhafazasız çıkış, yine muhafazasız olmak üzere yukarıdakiyle tamamen aynı olmalıdır.
  • Rastgele burada tanımlanan rastgele

5
Rastgele, tekdüze rastgele anlamına mı geliyor, yoksa olası her düzen için sıfırdan farklı bir gerçekleşme şansı mı gerekiyor, yoksa yalnızca en az iki olasılığım olmalı mı?
Pavel

@ Notts90 Aynı olmalı ve rastgele bir miktar seçmelidir. Bu mesajda bahsedildi, ancak rastgelelik tanımlanmadı.
Pavel

2
Her panelin farklı olması durumunda bunun daha iyi bir meydan okuma olacağını düşünüyorum.
Shaggy

3
İşte tam burada Sandbox ile ilgili sorunum. Orada bir aydan fazla bir süre boyunca bu meydan okuma vardı ve sadece orada benim mesajları temizlemek için karar verdik. Bu yüzden, her sorunun çözüldüğünü ve bunun gerçekleştiğini düşünerek bunu gönderiyorum!
15'te caird coinheringaahing

1
@WORNGALL Sahte haberler! Yalanlar! Rastgele çok önemlidir. Trumpscript, gördüğünüz en iyi RANDOM JENERATÖRÜNE sahiptir. (Tek yapmanız gereken cumhurbaşkanının heyecan beslemesine bağlantı!)
Level River St

Yanıtlar:


5

Jöle , 65 57 bayt

Yeni kodlu , iki kodlu tam sayı dizgi değişmezinin ilk kullanımı ( ⁽¥0= 2049)

⁽¥0ṃ⁾+-W
“K2X)»Ṅø40RẊ<8X+3¤s⁵ị⁾o j@€⁾||Yṭ¢µṄ€5¡Ṗ;⁷“Ç€:;#»

Girdi almayan ve duvarı basan tam program.

Çevrimiçi deneyin!

Nasıl?

⁽¥0ṃ⁾+-W - Link 1, panel separator: no arguments
⁽¥0      - literal 2049
    ⁾+-  - literal "+-"
   ṃ     - convert 2049 to base "+-" as if they were [1,0]
       W - wrap in a list   -> ["+----------+"]

“K2X)»Ṅø40RẊ<8X+3¤s⁵ị⁾o j@€⁾||Yṭ¢µṄ€5¡Ṗ;⁷“Ç€:;#» - Main link: no arguments
“K2X)»                                           - "  America!"
      Ṅ                                          - print with line feed
       ø                                         - niladic chain separation
        40                                       - literal 40
          R                                      - range -> [1,2,...,40]
           Ẋ                                     - random shuffle
                 ¤                               - nilad and link(s) as a nilad:
             8X                                  -   random integer between 1 and 8
                3                                -   literal 3
               +                                 -   add
            <                                    - less than? (vectorises)
                   ⁵                             - literal 10
                  s                              - split into chunks of length 10
                     ⁾o <-- a space              - literal "o "
                    ị                            - index into
                           ⁾||                   - literal "||"
                        j@€                      - join with reversed @rguments
                              Y                  - join with line feeds
                                ¢                - call last link (1) as a nilad
                               ṭ                 - tack left to right
                                 µ               - call that p... (monadic chain separation)
                                    5¡           - repeat five times:
                                   €             -   for €ach (separator & panel)
                                  Ṅ              -     print with trailing line feed(separator and panel):
                                      Ṗ          - pop (just the separator now)
                                        ⁷        - literal line feed
                                       ;         - concatenate
                                                 - unused value printed
                                         “Ç€:;#» - "   Mexico"
                                                 - implicit print

4
Bu şimdiye kadar gördüğüm en uzun jöle programı.
Pavel

Belirsizlik değişti. Senin kalmana izin vermek için 3-10 ile karar verdim.
14'te caird coinheringaahing

İçin +1 )o <-- a space. Gerçekten beni güldürdü!
15'te caird coinheringaahing

@Phoenix kısaldı, ama yardım edemem ama yine de daha kısa olması gerektiğini düşünüyorum.
Jonathan Allan

@ Satan'sSon neredeyse bir uzay hunisi!
Jonathan Allan

4

PHP, 138 Bayt

<?=($p=str_pad)("  America!",349,strtr("
+----------+
|0|
|1|
|2|
|3|",str_split(str_shuffle($p($p(o,rand(3,10),o),40)),10)))."   Mexico";

Çevrimiçi deneyin!

Expanded

<?=($p=str_pad)("  America!",349, 
#fill the string till a length of 349 with
strtr("
+----------+
|0|
|1|
|2|
|3|",
# before replace the digits with strings in the array
str_split(str_shuffle($p($p(o,rand(3,10),o),40)),10))) 
# make a string with o length 3- 10 fill it with spaces to length 40
# shuffle the resulting string and split it into a array of strings with length 10
."   Mexico"; # add the end

4

JavaScript (ES6), 194 160 bayt

(h=0,g=p=>h>2?p:g(p.replace(/ /g,_=>" o"[(h+=s=Math.random()>.8)<11&s])))=>`  America!
${t=`+----------+
`}${g(`|          |
`.repeat(4)+t).repeat(5)}   Mexico`

Dene

Muhafaza düzenleri, aşağıdaki Snippet'te 2 saniyede bir değişecektir.

f=
(h=0,g=p=>h>2?p:g(p.replace(/ /g,_=>" o"[(h+=s=Math.random()>.8)<11&s])))=>`  America!
${t=`+----------+
`}${g(`|          |
`.repeat(4)+t).repeat(5)}   Mexico`
o.innerText=f()
setInterval("o.innerText=f()",2e3)
<pre id=o>


açıklama

  • Herhangi bir girdi almamasına rağmen, varsayılan değerlere sahip 2 parametreye sahip olan anonim bir işlev oluştururuz:
    • hbaşlangıç ​​değeri verilen 0; bu, onları eklemeye gittiğimizde paneldeki muhafaza sayısını tutacaktır.
    • gBu, panelde rastgele bekletme düzeni oluşturmak için kullanacağımız özyinelemeli bir işlevdir. Biraz sonra buna geri döneceğiz.
  • Ana işlev gövdesinde, ile başlayan bir şablon hazır bilgisi çıkarırız America!\n.
  • Daha sonra panel bölücüsünü ( +----------+\n) oluşturur ve bunu değişkene atarız t, bunu işlemdeki çıktıya ekleriz.
  • Ardından, panelin ( | |\n) tek bir satırını oluşturuyoruz, 4 kez tekrarlayıp ekliyoruz t.
  • gParametreyi yukarıdaki adımdan bağımsız değişken olarak geçirerek çağırırız p.
  • Şimdi, tutma deseni için. İçinde g:
    • h>2(Yani, 3 veya daha fazla bilgi muhafazamız olup olmadığını) kontrol ederiz.
    • Öyleyse, dizeyi döndürürüz p.
    • Değilse, gtekrar çağırıyoruz , bu kez pargüman olarak değiştirilmiş bir kopyasını geçiriyoruz .
    • Modifiye kopyası pvardır replaceher yerine, üzerinde kullanılan yöntemi <space>bir karakterleri <space>veya odize karakter indeksi (0 veya 1) başvurarak <space>o.
    • Karakter indeksini
      1. Math.random()0 ile 1 arasında ondalık bir sayı döndüren çağrı özel.
      2. Bunun büyük olup olmadığını kontrol etme .8. Panelde 40 boşluk olmaları ve sadece maksimum 10 bekletme olması, bunu yapmak ambarların panel boyunca dağılımını iyileştirir ( .75daha doğru olurdu, ama umarım bana uğruna imtiyaz verirsiniz) bayt tasarrufu!).
      3. Bu kontrolün boole değeri değişkene atanır s.
      4. s, bir tamsayıya (0 veya 1) zorlanır ve içine eklenir h.
      5. Biz kontrol hartık 11'den az (yani, şu anda tutan az 10 var) ve eğer sdoğruydu.
      6. Bu boolean da bir tamsayıya zorlanır ve bize dizede bir dizin verir.
  • Çıktımıza geri dönün! Döndürülen dizeyi g5 kez tekrarlıyoruz .
  • Ve sonra Mexicoişleri bitirmek için dizenin sonuna ekleyin . Uf!

Alternatif

Ve sadece meydan okumaya güzel bir katkı yapacağını düşündüğüm için: Sadece 12 ekstra bayt için, her bir panelde, hepsi aynı olmak yerine, benzersiz bir tutma düzenine sahip olabiliriz.

(g=(p=`|          |
`.repeat(4)+t,h=0)=>h>2?p:g(p.replace(/ /g,_=>" o"[(h+=s=Math.random()>.8)<11&s]),h))=>`  America!
${t=`+----------+
`}${g()+g()+g()+g()+g()}    Mexico`

Dene

Yine, muhafazaların desenleri her 2 saniyede bir değişecektir.


3

Pyth - 58 57 bayt, muhtemelen 47

Ks(b\+*\-T\+*+++b\|*dT\|4)J<.SxdmdK+3O8+*s.e?/Jk\obK5<K13

Dene

Eski çözümün açıklaması (Zamanım olduğunda güncelleyeceğim):

J+++b\+*\-T\+K+J*+++b\|*dT\|4=Y<.SxdmdK+3O8+*s.e?/Yk\obK5J
J+++b\+*\-T\+                                                Create the +----------+, and store as J
             K+J*+++b\|*dT\|4                                Create a full panel (minus bottom border, and without holes), store as K
                                  xdmdK                      Get indices of spaces
                                .S                           Create random permutation of these indices
                               <       +3O8                  Get first several indices (a random number from 3 to 10)
                                             s.e?/Yk\obK     Replace space with 'o' at these indices
                                           +*           5J   Create 5 copies, and add bottom border

Ben hala teknik olarak kuralları takip ederken 47 alabilirim:

JhO2Ks(b\+*\-T\+*+++b\|.S+*\oJ*d-TJ\|4)+*K5<K13

Burada, delik sayısı hala rastgele seçilir ({4,8} kümesinden) ve bu deliklerin konfigürasyonu rastgele seçilir (her satırın aynı olduğu konfigürasyon kümesinden)

Dene


2

Mathematica, 201 bayt

c=Column;s=RandomSample[Tuples[{" ",o," "," "},10],4];t="+----------+";w=c[{t,c[Row/@Table[AppendTo[s[[i]],"|"];PrependTo[s[[i]],"|"],{i,Length@s}]]}];c[Flatten@{"  America!",Table[w,5],t,"   Mexico"}]

Test edemediğim bir dili kullanmak için +1?
caird coinheringaahing

@ Satan'sSon, çoğu Mathematica programını burada Wolfram Sandbox'ta ücretsiz olarak çalıştırabilirsiniz . (Yapıştırın ve shift-enter tuşlarına basın.)
Bir ağaç değil

Baskı söz konusu olduğunda, bu site komik bir şekilde yazdırılır. Özel charachters kullandığından çıktı bozuk ...
J42161217 18:17

1

Powershell (255 Bayt)

echo "  America!"
for($l=0;$l-lt4;$l++){$a=," "*12;$a[0]="|";$a[11]="|";$i=get-random -Max 10 -Min 6;$j=get-random -Max 5 -Min 1;$a[$i]=$a[$j]="o";$b+=($a-join"")}
for($k=0;$k-lt5;$k++){echo +----------+($b-join"`n")} 
echo +----------+`n"   Mexico" 

1

Python 2 , 259 224 221 218 bayt

from random import*
b=[' ']*40
for x in sample(range(40),randint(3,10)):b[x]='o'
a=["+"+"-"*10+"+"]+['|'+''.join(o)+'|'for o in[b[x*10:x*10+10]for x in 0,1,2,3]] 
print'\n'.join(['  America!']+a*5+[a[0]]+['   Mexico'])

Repl.it adresinde deneyin

-35 @ Satan'sSon bazı ipuçları dahil - teşekkürler!

@Wondercricket sayesinde -3


Baytları tbir değişkene kaydetmek yerine çıktılar vererek kaydedebilir ve boşlukları America!ve sonrasında kaldırırsanız Mexico? print" America!" <NEWLINE> d,a,b,c=[" Mexico"],["+"+"-"*10+"+"],[" "]*40,0?
Caird coinheringaahing

Teşekkürler @ Satan'sSon. Bu bir "lunchbreak özel" ve zaman geldiğimde muhtemelen biraz daha kapalı golf olabilir. İpuçları için tekrar teşekkürler.
ElPedro

Ayrıca , işlevlerinizi from random import*r.
içeri

Teşekkürler @Wondercricket. Bunu
özlemeyi

Şeytan yardımcı oldu! (Her şey için ilk ve son kez> :(
caird coinheringaahing

0

Python 2, 197 bayt

from random import*
n=randint(3,10)
s=list('o'*n+' '*(40-n))
shuffle(s)
t=10
S='+'+'-'*t+'+'
print'\n'.join(['  America!']+([S]+['|'+''.join(s[x:x+t])+'|'for x in range(0,40,t)])*5+[S,'   Mexico'])
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.