Trump'ın duvarı inşa etmesine yardım et!


68

Trump'ın inşa ettiği duvara ihtiyacı var ve yapacaksın! Duvarını en verimli şekilde inşa etmek için, kullanmanız için basit, tekrarlanabilir bir model yarattım:

    __   __    
   |  |_|  |   
___|       |___
-   -   -   -  
 - - - - - - - 
- - - - - - - -
———————————————

Trump sana kaç tane duvar parçasına ihtiyacı olduğunu söyleyecek ve sen de bunun gibi görünmesi için onları inşa edeceksin.

İşte kalıp:

    __   __     <-- 4-2-3-2-4          ' _ _ '
   |  |_|  |    <-- 3-1-2-1-1-1-2-1-3  ' | |_| | '
___|       |___ <-- 3-1-7-1-3          '_| |_'
-   -   -   -   <-- 1-3-1-3-1-3-1-1    '- - - - '
 - - - - - - -  <-- 1-1-...-1-1        ' - -...- - '
- - - - - - - - <-- 1-1-...-1-1        '- - ... - -'
——————————————— <-- 15                 Unicode U+2014

Giriş her zaman> 0 olan bir tam sayı olacaktır.

Test durumları:

1
    __   __    
   |  |_|  |   
___|       |___
-   -   -   -  
 - - - - - - - 
- - - - - - - -
———————————————

2
    __   __        __   __    
   |  |_|  |      |  |_|  |   
___|       |______|       |___
-   -   -   -  -   -   -   -  
 - - - - - - -  - - - - - - - 
- - - - - - - -- - - - - - - -
——————————————————————————————

5
    __   __        __   __        __   __        __   __        __   __
   |  |_|  |      |  |_|  |      |  |_|  |      |  |_|  |      |  |_|  |
___|       |______|       |______|       |______|       |______|       |___
-   -   -   -  -   -   -   -  -   -   -   -  -   -   -   -  -   -   -   -
 - - - - - - -  - - - - - - -  - - - - - - -  - - - - - - -  - - - - - - - 
- - - - - - - -- - - - - - - -- - - - - - - -- - - - - - - -- - - - - - - -
———————————————————————————————————————————————————————————————————————————

Bu hızlı yapmanız gerektiğinden, mümkün olan en kısa programı yazın!

Eğer yardım ederse, önce mücadeleyi yazdım, en son unvan;)

Yanıtlar:


9

05AB1E , 38 bayt

•4H’*»È%f·ù„áÅ'4•4B3ÝJ"_ -|"‡8ô€ûvy¹×»

Çevrimiçi deneyin!

•4H’*»È%f·ù„áÅ'4•     # Push '1724427993555739020619095486300160'
4B                    # Convert to base 4 (turns it into an 8x8 bitmap).
  3ÝJ"_ -|"‡          # Replace digits 0-3 with _, , -, or |.
            8ô        # Split into pieces of 8.
              €û      # Palindromize each piece.
                vy¹×» # For each row, dupe it n times (hori) and print it.

1724427993555739020619095486300160, Base-4'e dönüştürülmüş:

11110011111311300003111121112111121212122121212100000000

11110011111311300003111121112111121212122121212100000000 karakterleri değiştirildi:

__ | |____| - - - - - -- - - - ________

Önceki desen 8 parçaya bölünür:

    __  
   |  |_
___|    
-   -   
 - - - -
- - - - 
________

Ardından palindromize ve tekrarlama ile gerektiği kadar uzun.


29

CJam, 52 bayt

F,ri*"s@;b6(MBZF,fu"128b6b"_ 
|-—"f=N/ff=zN*

Bir sürü yazdırılamayan ASCII karakterini içerir. İlk dizenin değişmezine itilen hexdump ise:

01 73 06 40 3B 62 36 28 1E 4D 07 42 5A 14 1B 46 2C 66 75

Burada dene!

açıklama

Yukarıdaki hexdump, bu listeyi elde etmek için bir baz-128 numarası olarak yorumlanır, daha sonra baz 6'ya dönüştürülür:

[1 1 1 1 0 0 1 1 1 0 0 2
 1 1 1 3 1 1 3 0 3 1 1 3 2
 0 0 0 3 1 1 1 1 1 1 1 3 2
 4 1 1 1 2
 1 4 2
 4 1 2
 5]

Bunun için, biz eşleme uygulamak 0 → _, 1 → space, 2 → \n, 3 → |, 4 → -, 5 → —. Bu bize dize alır:

    __   __
   |  |_|  |
___|       |
-   
 -
- 
—

Her satırın "dönemi" oluşur; yani " -"almak için beşinci çizgiyi dönüştürebiliriz " - - - - - - - ".

Ardından, bu alt programı yürüttük:

N/               Split into lines.
  Ff*            Repeat each line 15 times (to cycle it).
     Ff<         Take the first 15 chars of each line.
        rif*     Repeat these chars input() times.
            N*   Join lines.

(Yeni sürüm bunu biraz farklı bir şekilde yapıyor, çünkü kafamı çok iyi dolamıyorum, çünkü kullanıyor ff=.)


21
Bu da
anlamadım

4
Bu dil özellikle bu cevap için yapıldı mı?
Erdal G.

5
@ErdalG. Hayır. CJam gerçekten bir PPCG düzenli ( aditsu ) tarafından yapılmış olmasına rağmen , bir süredir buralardaydı. Sitenin her yerinde bulabilirsiniz. :)
Alex A.

@AlexA. Tamam, şimdi daha fazla mantıklı. Ben burada oldukça yeniyim, teşekkürler! :)
Erdal G.

@ErdalG. Zevkle. Siteye Hoşgeldiniz!
Alex A.

13

JavaScript (ES6), 116 115 bayt

n=>"__   __    n|  |_|  |   n|       |___n -  n- n -n—".split`n`.map(l=>l.repeat(15).slice(-15).repeat(n)).join`
`

@Neil sayesinde bir bayt kaydedildi !

açıklama

@Mauris 'CJam yöntemiyle hemen hemen aynı , ancak karakter eşlemesi olmadan.

Duvar parçaları formatta:

__   __    
|  |_|  |   
|       |___
 -  
- 
 -
—

çünkü her bir çizgiyi 15 kez tekrarlarsanız, şunları alırsınız:

...    __   __    __   __    __   __    
... |  |_|  |   |  |_|  |   |  |_|  |   
... |       |___|       |___|       |___
 -   -   -   -   -   -   -   -   -   -  
          - - - - - - - - - - - - - - - 
           - - - - - - - - - - - - - - -
                         ———————————————

ve sadece son 15 karaktere dilimleme yaptıktan sonra:

    __   __    
   |  |_|  |   
___|       |___
-   -   -   -  
 - - - - - - - 
- - - - - - - -
———————————————

Ungolfed

n=>

  // array of wall line parts
  "__   __    n|  |_|  |   n|       |___n -  n- n -n—".split`n`

  .map(l=>       // for each wall line
    l.repeat(15) // repeat the line 15 times to create a complete wall line
    .slice(-15)  // each wall piece is only 15 characters long
    .repeat(n)   // repeat the wall n times
  )
  .join`
`                // output the resulting wall

Ölçek


.slice(-15)Bunun yerine bir bayt kaydedebilir misiniz ?
Neil

Düzeltme kolaydır, yalnızca soldaki asgari bölüm yerine sağdaki minimum kısmı kullanın:__ __ n| |_| | n| |___n - n- n -n—
Neil

Çok zekice, güzel iş!
J Atkin

@Neil Ah, haklısın. Bahşiş için teşekkürler!
user81655

5

Jolf , 135 bayt

Önemli ölçüde golf yapılabilir. Güzel baskıyı kapatın ve daha iyi sonuç almak için çıktıyı temizleyin. Burada dene! . Ayrıca, keyfi bir sayıyı daha kolay sınamak için bunu kullanın.

oHpAt++++++++++++*"    __   __    "jH*"   |  |_|  |   "jH*"___|       |___"jH*j"-   -   -   -  "H*+*" -"7' jH*"- - - - - - - -"jH*M35j'—

Daha sonra bir açıklama ekleyeceğim.


6
@Connor O'Brien bu açıklamaya nasıl bakıyor, eta nedir: D
Rohan Jhunjhunwala

5

Haskell, 116 118 108 bayt

h n=take(n*15).cycle
f n=unlines$h n.h 1<$>lines"    __   __\n   |  |_|  |\n___|       |\n-   \n -\n- \n—"

Kullanım örneği:

*Main> putStr $ f 3
    __   __        __   __        __   __    
   |  |_|  |      |  |_|  |      |  |_|  |   
___|       |______|       |______|       |___
-   -   -   -  -   -   -   -  -   -   -   -  
 - - - - - - -  - - - - - - -  - - - - - - - 
- - - - - - - -- - - - - - - -- - - - - - - -
—————————————————————————————————————————————

Bu, burada diğer cevaplarla aynı stratejiyi kullanır: duvarın her bir çizgisi, desenin bir çevrimidir, örneğin ikinci son satır için "-" (çizgi + boşluk). Her bir deseni tekrarlayın, bir duvar segmenti almak için 15 karakter, tekrarlayın ve segmentler için 15*nkarakter alın n.

Düzenleme: @Mauris 10 bayt bulundu. Teşekkürler!


Alt satırda bir ASCII çizgi değil - (U + 2014); Bunun 2 bayt kaybettiğin anlamına geldiğini düşünüyorum.
Lynn,

@ Mauris: haklısın. Onu düzeltti. Öğrendiğin için teşekkürler.
nimi

4 + 3 + 3 bayt tasarrufu yaparak gerçekte 1-3 satırları için süreleri sonlandırabilirsiniz. (Benim CJam cevabım aynı şeyi yapar.)
Lynn

@ Mauris: ah evet, çünkü ilk döngü 15 karakterden sonra kesiliyor. Teşekkürler!
nimi

4

Bash + Linux yardımcı programları ( 247 186 180 bayt)

read x
for i in {1..7}
do
tail -n +7 $0|gzip -dc|sed -nr "$i s/(.*)/$(printf '\\1%.0s' $(seq 1 $x))/p"
done
exit
ˈ ELzVSPPPȏǑ
\@\D񵠚k>ĄÚ ܋ɀÜ@r²uٞ5L! 󰰹͠  

Yazdırılamayan karakterler yukarıdaki betiğin yapımında cömertçe kullanıldığından, işte bir hexdump:

00000000  72 65 61 64 20 78 0a 66  6f 72 20 69 20 69 6e 20  |read x.for i in |
00000010  7b 31 2e 2e 37 7d 0a 64  6f 0a 74 61 69 6c 20 2d  |{1..7}.do.tail -|
00000020  6e 20 2b 37 20 24 30 7c  67 7a 69 70 20 2d 64 63  |n +7 $0|gzip -dc|
00000030  7c 73 65 64 20 2d 6e 72  20 22 24 69 20 73 2f 28  ||sed -nr "$i s/(|
00000040  2e 2a 29 2f 24 28 70 72  69 6e 74 66 20 27 5c 5c  |.*)/$(printf '\\|
00000050  31 25 2e 30 73 27 20 24  28 73 65 71 20 31 20 24  |1%.0s' $(seq 1 $|
00000060  78 29 29 2f 70 22 0a 64  6f 6e 65 0a 65 78 69 74  |x))/p".done.exit|
00000070  0a 1f 8b 08 00 45 4c 7a  56 02 03 53 50 50 50 88  |.....ELzV..SPPP.|
00000080  8f 87 11 0a 5c 40 5c 03  44 f1 35 60 5a 81 2b 3e  |....\@\.D.5`Z.+>|
00000090  1e c4 04 83 1a 20 9b 4b  17 c8 40 c2 5c 40 02 19  |..... .K..@.\@..|
000000a0  72 a1 72 75 b9 1e 35 4c  21 1e 01 00 f3 30 f0 f9  |r.ru..5L!....0..|
000000b0  8d 00 00 00                                       |....|
000000b4

4

PowerShell, 103 100 karakter (diskte 105 bayt, ürün reçetesiyle 102)

Hemen hemen @ user81655 yöntemiyle aynı .

Param($c)'    __   __n   |  |_|  |n___|       |n-   n -n- n—'-split'n'|%{($_*15).Substring(0,15)*$c}

Ungolfed versiyonu

# Assign input to variable,
Param($c)

# Split array of wall parts and send them down the pipeline
'    __   __n   |  |_|  |n___|       |n-   n -n- n—' -split 'n' |
    ForEach-Object { # For each piece of wall
        ($_*15) # Repeat the line 15 times to create a complete wall line
        .Substring(0,15) # Each wall piece is only 15 characters long
        *$c # Repeat the wall n times
    }

Kullanım örneği

PS> .\TrumpWall.ps1 3
    __   __        __   __        __   __    
   |  |_|  |      |  |_|  |      |  |_|  |   
___|       |______|       |______|       |___
-   -   -   -  -   -   -   -  -   -   -   -  
 - - - - - - -  - - - - - - -  - - - - - - - 
- - - - - - - -- - - - - - - -- - - - - - - -
—————————————————————————————————————————————

1
97 bayt:param($c);' __ __n | |_| |n___| |n- n -n- n—'-split'n'|%{-join($_*15)[0..14]*$c}
mazzy

4

PHP 5.4, ( 182 175 karakter)

foreach(['    __   __    ','   |  |_|  |   ','___|       |___','-   -   -   -  ', ' - - - - - - - ','- - - - - - - -','———————————————'] as$d)echo str_repeat($d,$argv[1])."\n";

Ungolfed Versiyonu

$s=['    __   __    ',
    '   |  |_|  |   ',
    '___|       |___',
    '-   -   -   -  ',
    ' - - - - - - - ',
    '- - - - - - - -',
    '———————————————'
];
foreach($s as $d) {
    echo str_repeat($d,$argv[1])."\n";
}

[7 karakter tarafından Blackhole önerisini kaydetti. ]

Daha az bayt ancak daha fazla karakter içeren başka bir sürüm

PHP 5.4, (176 karakter, 178 bayt)

foreach(['    __   __    ','   |  |_|  |   ','___|       |___','-   -   -   -  ',' - - - - - - - ','- - - - - - - -',str_repeat('—',15)] as$d)echo str_repeat($d,$argv[1])."\n";

15 m-dash örneğini str_repeat işlevli bir tire ile değiştirin


2
1) Bir değişken tanımlamayın $s, doğrudan döngünüzde kullanın: foreach([…,…] as $d)2) Daha önce belirtilmemiş olan boşluğu kaldırın $d: foreach(… as$d)3) Bunun yerine bir yeni satır kullanın "\n".
Karadelik

Siz bayım gerçeği tasvir etmiyorsunuz. Kodunuz 182 karakter, ancak 212 bayt tutar.
Tschallacka

@MichaelDibbets, Üzgünüz, baytlar vs karakterler değiştirildi, değiştirildi
kuldeep.kamboj

1
gibi bir şey kullanmak mothereff.in/byte-counter bayt saymak
Tschallacka

3

C, 148 bayt

#define q 16843009
i;p[]={-1,q*17,q*68,q*16,-8388417,8577152,3936000};
f(n){for(i=n*105;i--;i%(15*n)||puts(""))putchar(" -|_"[p[i/15/n]>>i%15*2&3]);}

Puan, daha önce f(n)açıklığa dahil edilmek için gereksiz yeni çizgiyi hariç tutar .

büyü sayıları, psırasıyla taban 0,1,2,3 dizisinden yeniden oluşturulan taban 4'teki duvar karakterlerini kodlar." -|_"

16843009hex içinde 0x1010101. bu, içlerindeki hatlar için kullanılır -.

Bu _kod tarafından kodlandığından 3, alt satır, -1ayarlanan tüm bitlerin sayısı olan basitçe kodlanabilir 1.


Güzel, ancak #define qdeğerleri kullanmadan ve sadece kod yazarak 3 byte tasarruf edebilirsiniz .
Johan du Toit

2

Vitsy , 121 bayt

Bunu nasıl yaptığım, her bir satırın giriş zamanlarında birer birer erişerek, bana her bir satırın içeriğiyle ilgili yığınlar vermesidir. Sonra her seferinde bir satır çıktı. Biri daha derinlemesine bir açıklama yapmamı istiyorsa, sadece sor (şu an hediyeleri açıyorum, bu yüzden ...).

V0v7\[v1+v&V\[vDvm]a]y\[?Z]
"    __   __    "
"   |  |_|  |   "
"___|       |___"
4\["-   "]Xr
6mXr" "
8\["- "]X
"—"e\D

Çevrimiçi deneyin!


2

PHP5.5, 182 172 bayt 168 bayt

@ kuldeep.kamboj'ın cevabına dayanarak, bunu yazdığım an aslında 212 byte olan 182 karakter. Duvarın biraz daha yüksek olmasını isterdim, sonra biraz daha optimizasyon yapabilirdim ;-)

bu, @ JörgHülsermann sayesinde 168 bayttır

$r='str_repeat';$d=$r(' -',7);$x='   ';foreach(["$x __   __ $x","$x|  |_|  |$x","___|$x$x |___","-$x-$x-$x-  ","$d ","-$d",$r('—',15)] as$z){echo$r($z,$argv[1])."
";}

Bu bir 172 bayttır

$r='str_repeat';$d=$r(' -',7);$x=$r(' ',3);foreach(["$x __   __ $x","$x|  |_|  |$x","___|$x$x |___","-$x-$x-$x-  ","$d ","-$d",$r('—',15)] as$z){echo$r($z,$argv[1])."
";}

Bu bir 182 bayttır :-)

$r='str_repeat';$d=$r(' -',7);$x=$r(' ',4);foreach([$x.'__   __'.$x,'   |  |_|  |   ','___|       |___','-   -   -   -  ',$d.' ','-'.$d,$r('—',15)] as$z){echo $r($z,$argv[1]).'
';}

asılsız versiyon

$r='str_repeat';
$d=$r(' -',7);
$x=$r(' ',3);
$s=["$x __   __ $x",
    "$x|  |_|  |$x",
    "___|$x$x |___",
    "-$x-$x-$x-  ",
    "$d ",
    "-$d",
    $r('—',15)
];
foreach($s as $z) {
  echo$r($z,$argv[1])."
";
}

as öncesi boşluğu kaldır ve parantezleri kaldır -3 Bytes
Jörg Hülsermann 27:17

$x=$r(' ',3);kısaltılabilir$x=' ';
Jörg Hülsermann

Foreach döngüsü için parantezlere ihtiyacınız yoktur ve '$ z` yazabildiği kadaras$z
Jörg Hülsermann 28:17

2

Python 3, 132 122 120 bayt

def f(n):[print((s*15*n)[:15*n])for s in['    __   __    ','   |  |_|  |   ','___|       |___','-   ', ' -', '- ', '—']]

Ungolfed:

def f(n):
    [print((s*15*n)[:15*n])for s in['    __   __    ',
                                    '   |  |_|  |   ',
                                    '___|       |___',
                                    '-   ',
                                    ' -',
                                    '- ',
                                    '—']]

Almak için boşlukları kaldırabilirsiniz )for s in[...
Cyoce

2

Python 2, (161 karakter, 191 bayt)

x=input();a=['    __   __    ','   |  |_|  |   ','___|       |___','-   -   -   -  ',' - - - - - - - ','- - - - - - - -','———————————————']
for i in a:print i*x

2

SOGL V0.12 , 32 bayt

→↔\ιδ»►℮⁰}▒║ΙOģΠp~⁵‘ ¾“ζ'¹*+'¹n*

Burada dene!

Açıklama:

...‘ ¾“ζ'¹*+'¹n*
...‘              push a string of the top 6 lines of 1 wall piece (no newlines)
     ¾“           push 8212
       ζ          convert to char from unicode codepoint
        '¹*       repeat 15 times
           +      add that to the previous compressed string
            '¹n   split into lines with length 15
               *  repeat horizontally input times

Asci sanat sorularına geri dönüyor ve beni bir noktada SOGL ile tamamen yenmek için dzamia'yı geri çeviriyor
Magic Octopus Urn

1

Vim, 90 tuş

Girişin kendi başına bir tamponda olduğunu varsayarsak, aşağıdakiler iş yapar (yalnızca okunabilirlik için newline)

"aDi    __   __    ^M   |  |_|  |   ^M___|       |___^M^[
4i-   ^[xo-^[Y7P8JY2PxA ^[GVr^K-M^Vgg$d@aP

nerede ^Mbir ise return, ^[olan escape, ^Kolan ctrl+kve ^Volduğunu ctrl+v.

Deseni oluşturmanın çok daha iyi yolları olabileceğinden, bu oldukça muhtemeldir.


0

Java 11, 236 235 231 229 bayt

n->{String w[]={"","","","","","",""},t="- ".repeat(7);for(;n-->0;w[0]+="x __x__x ",w[1]+="x|  |_|  |x",w[2]+="___|xx |___",w[3]+="-x-x-x-  ",w[4]+=" "+t,w[5]+=t+"-")w[6]+="_".repeat(15);return"".join("\n",w).replace("x","   ");}

Çevrimiçi deneyin.
NOT: Java 11 henüz TIO'da değil, öyleyse (aynı bayt sayısı için) String.repeat(int)ile öykünüldü repeat(String,int).

Açıklama:

n->{                                // Method with integer parameter and String return-type
  String w[]={"","","","","","",""},//  Start with seven empty rows
         t="- ".repeat(7);          //  Temp String to reduce bytes
  for(;n-->0;                       //  Loop `n` amount of times:
    w[0]+="x __x__x ",              //   Append to the first row
    w[1]+="x|  |_|  |x",            //   Append to the second row
    w[2]+="___|xx |___",            //   Append to the third row
    w[3]+="-x-x-x-  ",              //   Append to the fourth row
    w[4]+=" "+t,                    //   Append to the fifth row
    w[5]+=t+"-")                    //   Append to the sixth row
    w[6]+="_".repeat(15);           //   Append to the seventh row
  return"".join("\n",w)             //  Join all rows by new-lines
          .replace("x","   ");}     //  Then replace all "x" with three spaces,
                                    //  and return the result

0

Powershell + dosya, 92 bayt

powershell'i get-trumpwall.ps1(40 bayta) kaydet

param($c);gc f|%{-join($_*15)[0..14]*$c}

veri dosyasını isimle kaydedin fve veriler Unicode sembolü ve yalnızca Linux LF (52 bayt) içerir:

    __   __
   |  |_|  |
___|       |
-   
 -
- 
—

altıgen dökümü:

0000000000: 20 20 20 20 5F 5F 20 20 │ 20 5F 5F 0A 20 20 20 7C      __   __◙   |
0000000010: 20 20 7C 5F 7C 20 20 7C │ 0A 5F 5F 5F 7C 20 20 20    |_|  |◙___|
0000000020: 20 20 20 20 7C 0A 2D 20 │ 20 20 0A 20 2D 0A 2D 20      |◙-   ◙ -◙-
0000000030: 0A E2 80 94             │                          ◙—››

Kullanım örneği

PS> .\get-trumpwall.ps1 5
    __   __        __   __        __   __        __   __        __   __
   |  |_|  |      |  |_|  |      |  |_|  |      |  |_|  |      |  |_|  |
___|       |______|       |______|       |______|       |______|       |___
-   -   -   -  -   -   -   -  -   -   -   -  -   -   -   -  -   -   -   -
 - - - - - - -  - - - - - - -  - - - - - - -  - - - - - - -  - - - - - - -
- - - - - - - -- - - - - - - -- - - - - - - -- - - - - - - -- - - - - - - -
———————————————————————————————————————————————————————————————————————————
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.