我的波浪灯


13

在移动时,我摔坏了灯。现在,我需要一个新的。为我做灯是您的工作!我不确定我想要多大的尺寸,尽管我知道我想要一个弯曲的尺寸。

您的程序/功能必须输入数字,并打印出带有那么多弯头/凸点的灯。

例子:

输入:2

输出:

/-\
 ()
 ()
/ __ \

输入:3

输出:

/-\
 ()
 ()
 ()
/ __ \

输入:5

输出:

/-\
 ()
 ()
 ()
 ()
 ()
/ __ \

规则:

  • 0和负数无关紧要
  • 要使灯具有更多的多样性(这一挑战),您必须更改灯罩。
    • 它们必须为4个字符宽和1个字符高。
    • 它们可以是任何形状,包括非灯罩形状。
    • 它们不能包含空格。
    • 底座必须保持不变。
  • 您必须在灯罩上显示示例输入和输出。
  • 最短的代码胜出!

但是它根本不会弯曲!如果输入> 5使它变得混乱,那会很喜欢。
Optimizer

22
我投票了。我认为这是一种无聊的ASCII艺术。中间有一个重复的部分,各部分之间没有重叠,它们也太短而无法压缩。它只是形式ABBB..BBBC。更改部分的要求仅意味着人们将使用较短的内置字符串。
xnor 2015年

7
你们都可以停止投票了!我认为OP收到了消息。
xnor

1
@xnor我为这个可怜的家伙感到抱歉。这可能是有史以来最受欢迎的问题之一:/ i.stack.imgur.com/T4A7X.jpg
Beta Decay

1
我自己没有以任何方式投票,但是鉴于与Draw ASCII Lightning Bolt相似,我可以理解投票者。稍微扭曲一下,例如为更高的灯管增加底座,或者仅在每个第n个花形上重复装饰,都会使它有些不同。
manatwork

Answers:


4

Pyth-16个字节

由于N已预先初始化,因此对阴影使用引号。

*N4VQ+d`();"/__\

在这里在线尝试

* 4            String repetition 4x, implicit print
 N             Preinitialized to Quote
VQ             For N in range(Q)
 +             String concat
  d            Space
   `()         Repr of empty tuple
;              Close for loop
"/__\          Implicitly print string, implicit close quote

5个样本:

""""
 ()
 ()
 ()
 ()
 ()
/__\

7

雪人0.2.0,42个字符

)vg10sB]"[--]
"sP:" ()
"sP;bR"/__"sP92wRsP

样品运行:

llama@llama:...Code/snowman/ppcg53483lamp$ snowman lamp.snowman
5
[--]
 ()
 ()
 ()
 ()
 ()
/__\

所以我只注意到,当我解决这个挑战时,我忘记了实现在字符串中转义反斜杠的功能。在下一版本中,这肯定是一件事情,但是现在,这是我打印最后一行的内容:

"/__"sP92wRsP

92是反斜杠的ASCII代码,wR将其包装在数组中,现在我可以用它打印,sP因为Snowman中的“字符串”实际上只是数字数组。


7
你想造雪灯吗?
Alex A.

3

> <>43 41 38字节

"\__/"aiv
"&-1v!?:<&a" ()
~"!_\
?!;o>l

通过代码点(例如空格)输入32。这使用程序自身代码的一部分作为灯罩,从而产生类似于卫星天线的效果:

~\_!
 ()
 ()
 ()
 ()
 ()
/__\

(建议@randomra)

对于另外三个字节,我们可以更改第三行以添加更多自定义项:

"\__/"aiv
"&-1v!?:<&a" ()
__\"\~"/
?!;o>l

由于缺少更好的放置方式,因此产生了一种向上方发射光的灯:

\__/
 ()
 ()
 ()
 ()
 ()
/__\

3

R,54 52 46字节

cat("RRRR",rep(" ()",scan()),"/__\\",sep="\n")

在此版本中,输入输出几乎混合在一起:

{in / out} PUT:

> cat("RRRR",rep(" ()",scan()),"/__\\",sep="\n")
1: 4
2: 
Read 1 item
RRRR
 ()
 ()
 ()
 ()
/__\

编辑1-2个字节,感谢@manatwork注释。
编辑2-6个字节。完整的信誉再次归@manatwork


1
除了外观外没有改变:" /_\\"应该是"/__\\"。顺便说一句,那\r有必要吗?
manatwork '16

@manatwork它确实改变了灯脚的形状,使其更稳定+您关于\r节省我两个字节的评论!应该已经重新阅读了我的代码!谢谢 !
弗雷德里克

1
嗯...奇怪的工具。不能使其非交互地工作。无论如何,cat("RRRR",rep(" ()",scan()),"/__\\",sep="\n")似乎可以工作。
manatwork '16

@manatwork:好吧...我从来没有想过这可能行得通!这确实是一个不错的解决方案。R充满惊喜!
弗雷德里克

BonjourFrédéric,如果您仍然活跃在PPCG上,则可以保存5个字节
JayCe '18



2

JavaScript ES6,34个字节

i=>`|==|
${` ()
`.repeat(i)}/__\\`

换行很重要

输入5的示例:

|==|
 ()
 ()
 ()
 ()
 ()
/__\

2

sed,28个字节

s#.# ()\n#g
s#^\|$#/__\\\n#g

一元输入。阴影是显而易见的选择(与底色相同)。

测试运行

$ echo -n 111 | sed -f lamp.sed
/__\
 ()
 ()
 ()
/__\

1

Gema:30个字符

*=gema\n@repeat{*;\ ()\n}/__\\

样品运行:

bash-4.3$ gema '*=gema\n@repeat{*;\ ()\n}/__\\' <<< 3
gema
 ()
 ()
 ()
/__\

1

jq:30个字符

(29个字符的代码+ 1个字符的命令行选项。)

8888,(range(.)|" ()"),"/__\\"

样品运行:

bash-4.3$ jq -r '8888,(range(.)|" ()"),"/__\\"' <<< 3
8888
 ()
 ()
 ()
/__\

在线测试-r不支持通过URL 传递-自己检查Raw Output。)


1

C,54个字节

f()用所需的灯泡高度呼叫。

f(n){for(puts("||||");n--;puts(" ()"));puts("/__\\");}

在ideone上尝试。

5的示例输出:

||||
 ()
 ()
 ()
 ()
 ()
/__\

1

Pyke,15个字节

" ()"~mQAD"/__\

在这里尝试!

     ~m         - 1000
" ()"           -  " ()"
       QAD      - duplicate(^) input times
          "/__\ - "/__\"

输出:

1000
 ()
 ()
/__\


1

空格,169字节

[S S S N
_Push_0][T  N
T   T   _Read_STDIN_as_integer][S S S T S T T   T   S S N
_Push_92_\][S S S T S T T   T   T   T   N
_Push_95__][S N
S _Duplicate_95__][S S S T  S T T   T   T   N
_Push_47_/][N
S S N
_Create_Label_LOOP][S S S N
_Push_0][T  T   T   _Retrieve_at_address_0][S S S T N
_Push_1][T  S S T   _Subtract][S N
S _Duplicate][S S S N
_Push_0][S N
T   _Swap_top_two][T    T   S _Store_at_address_0][N
T   T   S N
_If_neg_Jump_to_Label_PRINT][S S S T    S T S N
_Push_10_newline][S S S T   S T S S T   N
_Push_41_)][S S S T S T S S S N
_Push_40_(][S S S T S S S S S N
_Push_32_space][N
S N
N
_Jump_to_Label_LOOP][N
S S S N
_Create_Label_PRINT][S S S T    S T S N
_Push_10_newline][S S S T   S S S S T   N
_Push_33_!][S N
S _Duplicate_33_!][S N
S _Duplicate_33_!][S N
S _Duplicate_33_!][N
S S T   N
_Create_Label_LOOP_2][T N
S S _Print_as_character][N
S N
T   N
_Jump_to_Label_LOOP_2]

字母S(空格),T(制表符)和N(换行符)仅作为突出显示而添加。
[..._some_action]仅作为说明添加。

在线尝试(仅使用空格,制表符和换行符)。

伪代码中的解释:

将所有字符以相反的顺序压入堆栈,然后循环打印它们。

Integer i = STDIN as input
Push "\__/" to the stack
Start LOOP:
  i = i - 1
  if(i is negative):
    Go to function PRINT
  Push "\n)( " to the stack
  Go to next iteration of LOOP

function PRINT:
  Push "\n!!!!" to the stack
  Start LOOP_2:
    Print top as character to STDOUT
    Go to next iteration of LOOP_2

注意:i上面的伪代码在的每次迭代中都存储回堆中LOOP,因为我们不想将其保留在堆栈上以在最后打印。


1

画布,8 字节

(×_¶/e⟳║

在这里尝试!

说明:

(×        repeat "(" input times
  _¶/e    encase it on both sides in "_\n/"
          the 1st line is surrounded in "_" and the second ends and starts with "/"
      ⟳   rotate the string clockwise without changing characters
       ║  palindromize horizontally with 0 overlap

1

05AB1E17 15 13 11 字节

„ (и„/_.ø)˜∞

-2个字节(17→15),这要归功于@EriktheOutgolfer
@dzaima的Canvas答案启发后,-2字节(13→11)。

上限与基数(/__\)相同。

说明:

 (            # Literal string " ("
   и           # Repeat " (" the input amount of times
               #  i.e. " (" and 3 → [' (',' (',' (']
    „/_        # Literal string "/_"
             # Surround the list of " (" with "/_" on both ends
               #  i.e. [' (',' (',' ('] → ['/_',[' (',' (',' (',' ('],'/_']
         ˜     # Flatten this list
               #  i.e. ['/_',[' (',' (',' ('],'/_'] → ['/_',' (',' (',' (','/_']
              # Mirror each item
               #  i.e. ['/_',' (',' (',' (','/_'] → ['/__\',' () ',' () ',' () ','/__\']
               # And output the list new-line delimited (implicitly due to the mirror)

旧的13个字节的答案:

„/_D (Iиs)˜∞

在线尝试。


1

Excel,31个字节

匿名工作表函数,将输入作为范围内的数字[A1]并输出到调用单元格。

这盏灯具有音乐性,可帮助您充实和放松自己的一天。

="/\
"&REPT(" ()
",A1)&"/__\"

输出量

我爱灯


1

PowerShell 5.1, 28 26字节

感谢Mazzy 2个字节

8008;," ()"*"$args";"/__\"

由于阴影可以是任何4个字符,因此使用数字可以节省一对引号。最难的部分是找到漂亮的阴影。

输出:

PS C:\Users\ItsMe\Desktop> .\scratch.ps1 4
8008
 ()
 ()
 ()
 ()
/__\

漂亮的灯罩)
mazzy

1
试试这个8008;," ()"*"$args";"/__\"
mazzy

1

Python 2,36个字节

print"-"*4+"\n ()"*input()+"\n/__\\"

对于输入4:

----
 ()
 ()
 ()
 ()
/__\

请注意,对于Python,使用管道的任何灯罩要少一个字节。

-1个字节感谢@Alex!


1
我认为,如果将灯罩更改为单个字符并乘以4,则可以节省一个字节:print"-"*4+"\n ()"*input()+"\n/__\\"
Alex


0

SWI-Prolog,73 60字节

a(X):-write(golf),writef("%r",["\n ()",X]),write("\n/__\\").

a(5). 输出

golf
 ()
 ()
 ()
 ()
 ()
/__\

0

朱莉娅,36个字节

n->print("|~~|\n"*" ()\n"^n*"/__\\")

这将创建一个未命名函数,该函数将整数作为输入并输出到stdout。

例:

julia> f(4)
|~~|
 ()
 ()
 ()
 ()
/__\

0

Bash + coreutils,37个字节

yes ' ()'|sed '1i####
'$1'{a/__\\
q}'

换行是必需的,并以字节总数计。需要GNU sed。

跑:

./squiggly_lamp.sh 2

输出:

####
 ()
 ()
/__\



0

爪哇7 11,84 83 37个字节

n->"i!!i\n"+" ()\n".repeat(n)+"/__\\"

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

用途i!!i为上限。¡!!¡看起来更好,但要多两个字节。

说明:

n->                    // Method with integer parameter and String return-type
  "i!!i\n"             //  Return the cap + new-line
  " ()\n".repeat(n)    //   appended with " ()" and a new-line `n` amount of times
  "/__\\"              //   append with "/__\"




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.