帮助特朗普筑墙!


68

特朗普需要建造隔离墙,而您将要做!为了最有效地构建他的墙,我创建了一个简单的可重复模式供您使用:

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

特朗普会告诉您他需要多少个墙段,然后您将它们构建为看起来像这样。

这是模式:

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

输入将始终是> 0的整数。

测试用例:

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

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

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

由于您需要快速执行此操作,因此请编写尽可能短的程序!

如果有帮助,我首先写挑战,最后写标题;)

Answers:


9

05AB1E,38个字节

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

在线尝试!

•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:

11110011111311300003111121112111121212122121212100000000

11110011111311300003111121112111121212121212212100000000替换了字符:

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

先前的模式分为8个部分:

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

然后,您将进行Palindromize,并通过重复使它达到所需的时间。


29

CJam,52个字节

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

包括一堆不可打印的ASCII字符。推入的第一个字符串文字的十六进制转储为:

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

在这里尝试!

说明

上面的十六进制转储被解释为以128为底的数字,然后转换为以6为底的数字,以获得以下列表:

[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]

对此,我们应用映射0 → _1 → space2 → \n3 → |4 → -5 → —。这为我们提供了字符串:

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

它由每一行的“句点”组成;也就是说,我们可以循环第五行" -"获得" - - - - - - - "

然后,我们执行以下子程序:

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.

(新版本以稍微不同的方式执行此操作,因为它使用,所以我实际上无法很好地将自己的头缠住自己ff=。)


21
这是什么我根本
康纳尔奥布莱恩

4
这种语言是专门为这个答案而设计的吗?
Erdal G.

5
@ErdalG。不会。尽管CJam确实是由PPCG常规(aditsu)制造的,但它已经存在了一段时间。您会在网站上找到所有内容。:)
Alex A.

@AlexA。好吧,现在更有意义。我在这里很新,谢谢!:)
Erdal G.

@ErdalG。我的荣幸。欢迎光临本站!
Alex A.

13

的JavaScript(ES6),116个 115字节

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

感谢@Neil节省了一个字节!

说明

@Mauris的CJam方法几乎相同,但没有字符映射。

墙壁零件的格式为:

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

因为如果每行重复15次,您将获得:

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

切成最后15个字符后,您将得到:

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

不打高尔夫球

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

测试


您可以.slice(-15)改用保存一个字节吗?
尼尔

修复很容易,只需使用右边的最小部分而不是左边的最小部分:__ __ n| |_| | n| |___n - n- n -n—
Neil

非常聪明,干得好!
J Atkin 2015年

@尼尔,你是对的。谢谢你的提示!
user81655

5

Jolf,135个字节

可以打很多高尔夫球。关闭漂亮的打印并清除输出以获得更好的结果。在这里尝试!。另外,使用可以更轻松地测试任意数字。

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

稍后将添加解释。


6
@Connor O'Brien,所以那个解释的eta是什么:D
Rohan Jhunjhunwala

5

Haskell中,116 118 108个字节

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

用法示例:

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

这使用与此处其他答案相同的策略:墙的每一行都是该模式的一个循环,例如,倒数第二行为“-”(破折号+空格)。重复每种模式,以15个字符为一个墙段,再重复一次,以15*n字符为n段。

编辑:@毛里斯发现10个字节。谢谢!


底线应为-(U + 2014),而不是ASCII破折号;我认为这意味着您将丢失2个字节。
林恩(Lynn)

@毛里斯:你是对的。修复。感谢您的发现。
nimi 2015年

您实际上可以提前终止1-3行的周期,节省4 + 3 + 3个字节。(我的CJam回答也做同样的事情。)
Lynn

@Mauris:是的,因为第一个循环在15个字符后被截断。谢谢!
nimi 2015年

4

击+ Linux实用程序(247个 186 180字节)

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! 󰰹͠  

由于在上面的脚本的构造中大量使用了不可打印的字符,因此这里是一个十六进制转储:

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个字符(磁盘上105个字节,无BOM的102个字符)

@ user81655方法几乎相同。

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

非高尔夫版本

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

使用范例

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

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

4

PHP 5.4,(182175个字符)

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

非高尔夫版本

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

[按照Blackhole的建议保存了7个字符。]

另一个版本,字节更少,字符更多

PHP 5.4,(176个字符,178个字节)

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

只需用str_repeat函数将15个m-dash实例替换为一个破折号


2
1)不要为定义变量$s,请在循环中直接使用它:foreach([…,…] as $d)2)删除之前的除非空格$dforeach(… as$d)3)使用换行符代替"\n"
Blackhole,2015年

先生,您不是在描述真相。您的代码共182个字符,但为212个字节。
Tschallacka

@MichaelDibbets,对字节和字符感到困惑,已修改
kuldeep.kamboj 2015年

1
使用诸如mothereff.in/byte-counter之类的东西来计数字节
Tschallacka

3

C,148字节

#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]);}

分数排除了不必要的换行符,在f(n)此之前为了清楚起见将其包括在内。

中的魔术数字p编码基数为4的墙的字符,分别从字符串0、1、2、3重建" -|_"

16843009以十六进制表示0x1010101。这用于其中的线-

因为_是由编码的3,所以底线可以简单地编码为-1,即所有位都设置为的数字1


很好,但是您可以通过不使用#define q值而仅对值进行硬编码来节省3个字节。
Johan du Toit

2

Vitsy,121字节

如何做到这一点,就是一次输入一次访问每一行,为我提供每行内容的堆栈。然后,我一次输出一行。如果有人希望我提供更深入的解释,请问(我目前正在打开礼物,所以...)。

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

在线尝试!


2

PHP5.5,182个 172字节 168个字节

基于@ kuldeep.kamboj的答案,当我写这篇文章时,实际上是212个字节,但是是182个字符。我希望墙高一点,然后我可以做更多的优化;-)

这是168个字节,这要感谢@JörgHülsermann

$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])."
";}

这是172个字节

$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])."
";}

这是182个字节:-)

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

非高尔夫版本

$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])."
";
}

在如之前取出空间和删除括号-3字节
约克Hülsermann

$x=$r(' ',3);可以缩短$x=' ';
约尔格Hülsermann

你不需要的括号内为foreach循环和`$如可以z`作为写as$z
约尔格Hülsermann

2

Python 3中,132 122 120个字节

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

取消高尔夫:

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

您可以删除空格以获取)for s in[...
Cyoce

2

Python 2,(161个字符,191个字节)

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

2

SOGL V0.12,32 个字节

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

在这里尝试!

说明:

...‘ ¾“ζ'¹*+'¹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

回到所有有关ascii的问题,并赞扬dzamia,让我在某个时候用SOGL击败了我所有的问题
Magic Octopus Urn

1

Vim,90键

假设输入本身在缓冲区中,则将执行以下操作(仅换行用于可读性)

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

这里^Mreturn^[escape^Kctrl+k^Vctrl+v

这很有可能会花很多时间,因为可能会有更好的方式来产生图案。


0

Java的11,236个 235 231 229字节

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","   ");}

在线尝试。
注意:Java 11尚未在TIO上,因此String.repeat(int)已使用repeat(String,int)(针对相同的字节数)进行了仿真。

说明:

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 +文件,92字节

将Powershell保存到get-trumpwall.ps1(40字节)

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

使用名称保存数据文件,f并且数据仅包含Unicode符号和Linux LF(52字节):

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

十六进制转储:

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             │                          ◙—››

使用范例

PS> .\get-trumpwall.ps1 5
    __   __        __   __        __   __        __   __        __   __
   |  |_|  |      |  |_|  |      |  |_|  |      |  |_|  |      |  |_|  |
___|       |______|       |______|       |______|       |______|       |___
-   -   -   -  -   -   -   -  -   -   -   -  -   -   -   -  -   -   -   -
 - - - - - - -  - - - - - - -  - - - - - - -  - - - - - - -  - - - - - - -
- - - - - - - -- - - - - - - -- - - - - - - -- - - - - - - -- - - - - - - -
———————————————————————————————————————————————————————————————————————————
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.