给我个复活节彩蛋!


29

不,不是^^vv<><>BA那种复活节彩蛋,我们画的是真正的复活节彩蛋。

这是一个(鸡蛋)。

  __
 /  \
/    \
|    |
\____/

在复活节,我们用图案画它们。像这些:

  __
 /--\
/----\
|----|
\____/
  __
 /%%\
/%%%%\
|%%%%|
\____/
  __
 /~~\
/~~~~\
|~~~~|
\____/

挑战

给定一个字符(可打印的ascii)来画鸡蛋,请打印画的鸡蛋。

例子:

&:
  __
 /&&\
/&&&&\
|&&&&|
\____/

#:
  __
 /##\
/####\
|####|
\____/

眼镜

  • 尾随换行符/空格是允许的。

8
为什么要下票?如果您不喜欢这个问题,请拒绝投票,然后留下原因。
马修·卢

2
一个潜在的原因可能是他们认为这项任务不够清楚或不够清楚。我想说的很清楚,而且从字面上看也不是微不足道的。也就是说,我也不是特别兴奋。
John Dvorak

17
在大多数语言中,挑战将是微不足道的。鸡蛋太短,无法打高尔夫球。在我看来,这是一个无趣的挑战(尚未进行沙盒测试,因为您似乎因为我不知道是什么原因而抵制沙盒),因此,我对此表示反对。
达达

25
之所以被推荐,是因为像这样的简单挑战非常适合像我这样的初学者轻松参加高尔夫球比赛。
毛茸茸的

7
OF!你是个复活节彩蛋。(对不起,无法抗拒)
乔治·康明斯

Answers:


16

脑高射炮270 268 266 + 1 = 267个字节

-c标志+1

(((((((((({}<(((([(()()())]((((((((((({}){}){}){}){}[()]))<>)<>{}())))))<>)<>(((()()()()()){}))({}()){})<>)<>>))))<<>({}<>)((()()()()()){})<>({}<>)>))))<<>((({})<>)({})<((()()()()()){})>[()()])>))<>((((({})<>)[(()()()()())({}){}])<((()()()()()){})<>((({}<>){}()))>))

在线尝试!

我本来要写一个解释,但是我先小睡了一下,却忘记了整个思考的原理。你的猜测和我的一样。


14
这是我在这里读过的最好的解释。+1
大卫·康拉德

12

Python 2,62个字节

超级直截了当。在线尝试
-1字节,感谢@ mbomb007

print r'''  __
 /~\
/~~\
|~~|
\____/'''.replace('~',input()*2)


@ mbomb007好人,谢谢
Dead Possum

2
您可以通过使用lambda函数一样保存两个字节
Keerthana普拉巴卡兰

@ KeerthanaPrabhakaran我不确定lambda是否适合ASCII挑战
Dead Possum

1
在ASCII挑战中使用lambda有什么问题?它们甚至有什么关系!?:o
Keerthana Prabhakaran

10

木炭30 26 16字节

制作完形状后通过填充@Neil节省了两个字节

__↗¹←↑¹↖²↓_‖M←¤S

在线尝试!

说明

该程序首先创建鸡蛋的右半部分,然后将其反射以生成左半部分。

__↗¹                          Write the two bottom _s and write the /
←↑¹                           Move left and write the |
↖²                            Then write two \s
↓_                            And the top _
‖M←                          Reflect the canvas to the left
¤S                           Fill the shape with the string input

←_↘可以只是,↓_但实际上您可以在反射16个字节后填写:__↗¹←↑¹↖²↓_‖M←¤S
尼尔,

@Neil感谢您向我介绍¤
Kritixi Lithos 17/12/28

9

果冻24  22 字节

Ḥ;“ ¶/\|_”“Ṁ¢ṚR;ḳ}AṠ’ṃ

在线尝试!

怎么样?

Ḥ;“ ¶/\|_”“Ṁ¢ṚR;ḳ}AṠ’ṃ - Main link: character c  e.g. '~'
Ḥ                      - double c: ['~','~']
  “ _¶/\|”             - string literal: [' ','_',<newline>,'/','\','|']
 ;                     - concatenate c:  [['~','~'],' ','_',<newline>,'/','\','|']
          “Ṁ¢ṚR;ḳ}AṠ’  - base 250 number: 3067183430901851641706
                     ṃ - base decompression with reversed @rguments:
                       -     take the number and convert it to a base length(the list)
                       -     then index (1-based) into that same list.
                       -     i.e.: 3067183430901851641706 in base 7
                                 = 22003241534115361163500004
                                   indexed into [['~','~'],' ','_',<newline>,'/','\','|']
                                 = [' ',' ','_','_',<newline>,' ','/',['~','~'],'\',<newline>,'/',['~','~'],['~','~'],'\',<newline>,'|',['~','~'],['~','~'],'|',<newline>,'\','_','_','_','_','/']
                       - implicit print:  __
                                         /~~\
                                        /~~~~\
                                        |~~~~|
                                        \____/

3
我提名您的解释 为单个字节的最长解释。
魔术章

它似乎已经成为一个方便的原子,以为我会花点时间关注它!
乔纳森·艾伦

2
我看到Dennis经常使用它,但这是我第一次真正了解它。时间没有浪费!您给了我1个学习单元。
魔术章鱼缸

1
好吧,这是我的孩子之一:)
乔纳森·艾伦

6

Sed,43个字符

s:.:  __\n /&&\\\n/&&&&\\\n|&&&&|\n\\____/:

样品运行:

bash-4.3$ sed 's:.:  __\n /&&\\\n/&&&&\\\n|&&&&|\n\\____/:' <<< '★'
  __
 /★★\
/★★★★\
|★★★★|
\____/

这正是我写的,只是快了几秒钟。
莱利

6

JavaScript(ES6),53 49 47字节

我敢肯定,我可以从中得到更多\好处-必须逃避s令我很烦。

f=

c=>`  __
 /${c+=c}\\
/${c+=c}\\
|${c}|
\\____/`

console.log(f`-`)
console.log(f`%`)
console.log(f`~`)
console.log(f`&`)
console.log(f`#`)

  • 通过将s=c+c变量分配移到第一组内节省4个字节{}
  • 通过使用c+=c而不是s=c+c&节省了2个字节s=s+s,这要部分归功于Neil在我进行这项改进的同时发现了这一改进。

自己绘画!


如果将这些输入放在<pre><code>s中会更好一些。干得好。
马修·罗

谢谢@SIGSEGV。控制台保留空白,并且至少默认情况下至少使用等宽字体,因此无需输出为pre
毛茸茸的

1
为什么不c+=c呢?
尼尔

谢谢,@ Neil,我只是自己编辑一个,但我会再次更新以向您致意。
毛茸茸的

@Arnauld您无需f=\n为字节计数计算该部分。这只是片段的运行。
AdmBorkBork

5

Alice53 52字节,无竞争

感谢Leo间接保存1个字节。

/o *^i}'.*[;.h~r}}~"{.[^\\
@"S .^~ y~a}~~.["{!~"}^^^

在线尝试!

不幸的是,我必须修复y(音译)错误才能使其正常工作,因此我将其标记为不竞争。

说明

基本思想是创建一个鸡蛋串,但将其~用作输入的两个副本的占位符。但是,输入的其他字符对于Alice字符串并不是特别友好,因为这些字符不能包含换行符,并且所有这些字符/\_|都需要转义(因为它们被视为镜像和墙)。因此,我也可以通过使用占位符来保存一些字节,然后再对它们进行音译。占位符的/\_|.[^{,这仅仅是他们所代表的一个前右侧的字符。对于换行,我正在使用}

现在的代码...整个程序可以在Ordinal模式下解决,因为我们只需要字符串处理而无需整数处理。此外,我们不需要任何条件控制流。整个程序可以线性表示。该程序的一般结构是这样的:

/...//
@....

在这样的程序中,IP通过该...部分上下反弹,首先仅执行一半字符。然后,最后两个/将IP右移一个单元格,以便在返回的过程中它执行另一半(再次上下跳动),直到最终@终止程序。因此,如果我们在中间展开有趣的之字形结构,则我们正在执行的程序将如下所示:

"  ^^} .~[}.~~[}{~~{}[^^^^.""!}"r.h~;a*y'~i.*So

让我们来看一下:

"  ^^} .~[}.~~[}{~~{}[^^^^."
      This first string is simply the egg template I've talked about.
"!}"  Push this string. It covers all the characters we need to replace
      in the template except ~.
r     Range expansion. Turns '!}' into '!"#$...z{|}'.
.     Duplicate.
h~;   Split off the first character, swap it to the top and discard it.
a*    Append a linefeed.
      We've now basically rotated the string to the left, but appended
      a linefeed instead of the exclamation mark we've shifted off.
      This maps each character in the string to the next one, except }
      which gets mapped to a linefeed.
y     Transliterate. Since the strings have the same length, this just maps
      each character in the first string to the corresponding character in
      the second string, replacing all of our placeholder characters.
'~    Push "~".
i.*   Read the input and duplicate it.
S     Substitute all "~" with the doubled input.
o     Output the result.

:D它在这里!这种语言看起来很漂亮
Conor O'Brien

@ ConorO'Brien谢谢。如果您想查看更多样本,我已经在它上面加上了一些较旧的挑战。:)
Martin Ender

4

PowerShell50 49 48字节

'  __
 /11\
/1111\
|1111|
\____/'-replace1,$args

在线尝试!

直接将字符串替换为文字字符串。打高尔夫球的空间不大。

-1字节归功于HyperNeutrino; -1个字节感谢wubs


4

Carrot,34字节,无竞争

  __
 /##\\
/####\\
|####|
\\____/

不竞争,因为我只是修复了领先者空白中解释器的错误而未显示。

在这里在线尝试。

首先,我们处于插入符号模式,其中每个字符都被推送到“堆栈”中。最后,“堆栈”被打印为输出。

在插入符号模式下,#推送输入,因此的实例#基本上被输入替换(FYI #是一字节的cat程序)。


4

SOGL V0.1221个 18 16 字节

0≈⁾‛≤¦¶W?5┼EB§  ‘

在这里尝试!

整个程序压缩如下:

  __
 /ŗŗ\
/ŗŗŗŗ\
|ŗŗŗŗ|
\____/

在哪里ŗ被替换为输入。

13字节几乎也可以工作,但是对于某些输入它不需要做任何事情


你得把鸡蛋涂上油漆。(即用字符填充鸡蛋的内部)
马修·鲁

@SIGSEGV-据解释,这是通过用输入替换空格并用代码替换破折号来实现的@,ŗ -@ŗ
Jonathan Allan

SOGOL会很快出现在TIO吗?
乔纳森·艾伦

@JonathanAllan如果有人可以到达那里,那就可以。
dzaima


3

05AB1E34 33 32字节

„__I244S×'/ì'\«`©¦¨'|.ø®R¹'_‡).c

在线尝试!

说明

„__                               # push "__"
   I244S×                         # push a list of the input repeated 2 and 4 and 4 times
         '/ì                      # prepend "/"
            '\«                   # append "\"
               `                  # split list to separate items
                ©                 # store a copy of the last one in register
                 ¦¨               # remove first and last item of the string
                   '|.ø           # surround with pipes
                       ®R         # retrieve the string from register and reverse it
                         ¹'_‡     # replace input with "_"
                             ).c  # print each line centered

•jÀňiXƒÐ[Z•6B6ôvy5ÝJ"_ |/\"¹«‡,对于32,虽然完全不同。这种伪造了我,并让我觉得我可以用palindromize ......该死的事实,())(并且/\\/是回文。
Magic Octopus Urn'Apr

1
@carusocomputing:您应该将其单独发布。它的区别足以使它本身变得有趣:)
Emigna

3

Python 3.6、53字节

lambda x:fr'''  __
 /{2*x}\
/{4*x}\
|{4*x}|
\____/'''
  • 未命名函数,接收字符x并返回字符串。
  • 使用Python 3.6的f字符串作为早期版本的附加替代-f字符串.format(){}封闭部分是要评估的代码。
  • 该字符串也是r字符串,用三引号引起来,可以节省一个字节:

lambda x:f'  __\n /{2*x}\\\n/{4*x}\\\n|{4*x}|\n\____/'

我看不到Python 3.6的在线解释器。
repl.it上尝试(说3.5,但它是3.6)



3

Brainfuck- 257字节 181字节

高尔夫:直播版请点击这里

+++++++[>++++++<-]>[>+>++>++>++<<<<-]>+++++>>>>++++++++++[>+++>+<<<++++<+<+>>>-]>++<<<--<+>>>,>..<<<<..>>>>>.<.<<<<<.>>>>..<<.>>>>.<<<<<<.>>>>....<<.>>>>.<<<.>....<.>>>.<<<<.<....<.

我不是职业高尔夫球手。据我所记得,这是我的尝试:D

输出:

  __ 
 /XX\ 
/XXXX\ 
|XXXX| 
\____/ where X is the given char.

取消高尔夫(+评论):

; chars:
; _ 95
; / 47
; \ 92
; | 142
; min val = 42 (7 times 6)

; lets do some math
+++++++[>++++++<-]> ; effectively 7 times 6

; now lets copy this to the next pointers multiplying by 2 
the subsequent ones after the 1st
[>+>++>++>++<<<<-]

>+++++
>>>

> ; empty space starting from this pointer
++++++++++[>+++>+<<<++++<+<+>>>-]
>++<
<<--<+
>>>,
>..<<<<..>>>>>.<.
<<<<<.
>>>>..<<.>>>>.
<<<<<<.>>>>....<<.>>>>.
<<<.>....<.
>>>.<<<<.<....<.

2

05AB1E32 29 26字节(感谢Emigna / Adnan)

•jÀňiXƒÐ[Z•6B6ôvy5ÝJ¹"_ |/\ÿ"‡,

在线尝试!

•jÀňiXƒÐ[Z•6B6ô # Push ['110011', '135541', '355554', '255552', '400003']
vy               # For each encrypted block...
  5ÝJ            # Push 012345.
     ¹"_ |/\ÿ"   # Push "_ |/\{input_char}".
              ‡, # Swap the charsets.

29字节版本(由于对换行符进行编码,因此也需要更智能的无迭代方法):

05AB1E,29个字节(Emigna)

•P£<r7»TwDšç6•5ÝJI"
_/ÿ\|"‡.c

在线尝试2!


Emigna建议的扩展长度为26个字节,使用S将字符分成一个数组,然后使用a [b]将每个数字与上一个数组中的相应位置进行插值。这本质上是逐元素的音译(智能)。

05AB1E,26个字节(Adnan)

"
_/ÿ\|"•P£<r7»TwDšç6•Sè.c

在线尝试3!


1
短了3个字节。比我的答案更类似于您的答案:)
Emigna '17

1
@Emigna认为使用换行符直接音译是一个新主意,我喜欢那个;老实说,这可能会使我现有的许多解决方案减少5个字节。
魔术八达通Ur


1
@adnan- 偷偷摸摸的偷偷摸摸的...
魔术

我觉得几乎所有答案都需要功劳Admigna,如果没有两个不变的例子,我就不会真正了解该语言。
魔术章鱼缸

2

PHP,51字节

$a.=$a=$argn;echo"  __
 /$a\
/$a$a\
|$a$a|
\____/";

PHP,58字节,无物理换行符

$a.=$a=$argn;echo"  __\n /$a\\\n/$a$a\\\n|$a$a|\n\\____/";

-R选项运行

61字节

echo strtr("  __\n /88\\\n/8888\\\n|8888|\n\\____/",8,$argn);

存储值增加了一倍;删除不必要的空间;使用文字换行符:pastebin.com/EghdAYMf
manatwork '17

@manatwork谢谢我还没有真正考虑双输入
约尔格Hülsermann

使用物理换行符保存7个字节,并且不转义反斜杠(反之,最后一个不需要转义)。哦,顺便说一句:-R不是参数,而是选项。
泰特斯

@Titus我讨厌物理换行符完成
约尔格Hülsermann

@Titus,对,尽管man php将它们称为参数:“也可以使用参数-R或-F逐行处理标准输入。”
manatwork

2

BF,142140字节

++++[->++++<]>[->+++>++++++>+>++++++>++>++++++++<<<<<<],>->---->------>->..<..<.>>.<<<<.<..
>>.>.<<.<....>>.>.>>>----.<....>.<<<.<.>>....<<<.

为了清楚起见,将其分为两行。换行符不计算在内。

用BF编写这种东西相当容易,但是如何优化单元格的顺序以最小化移动也不是一件容易的事。我编写了一个蛮力脚本来尝试所有组合并找到最短的组合,然后我打了一下高尔夫球,以说明我没有包括在蛮力中的高尔夫机会。


@JoKing我建议您将其作为单独的答案发布,因为它似乎与我的非常不同。
Esolanging Fruit '18

2

brainfuck,114个字节

-----[[<+>->++>++<<]->]<+++++++++++<+..<..>>.<.<<.>>,..<---.>>.<<<.>>....<.>>.<<<<---.>>>....<<<.>>>>.<<.+++....<.

在线尝试!

我在这里使用BF Crunch来找到一种生成单个角色的最佳方法。


2

C(gcc)95 88 85字节

感谢Albert -7个字节

也感谢ceilingcat -3个字节

f(c){for(int*s=L"  __\n /00\\\n/0000\\\n|0000|\n\\____/\n";*s;s+=printf(*s%6?s:&c));}

在线尝试!


不要声明*q只是将其嵌套在您的for循环中以节省5个字节。 char*s;f(c){for(s=" __\n /11\\\n/1111\\\n|1111|\n\\____/\n";*s;putchar(*s^49?*s:c),s++);}
艾伯特·伦肖

您还可以*s在for循环的声明参数中声明以下内容,以节省2个字节:f(c){for(char*s=" __\n /11\\\n/1111\\\n|1111|\n\\____/\n";*s;putchar(*s^49?*s:c),s++);}
Albert Renshaw

您也可以通过检查数字值为一位的ASCII字符来再剃除1个字节。149在ASCII但是这2个字节,使用的东西,从0-9的值,例如制表字符``是ASCII值9
艾伯特·伦肖

建议*s;f(c){for(s而不是f(c){for(int*
ceilingcat

1

SpecBAS-70字节

1 INPUT a$:  ?"  __"'" /";a$*2;"\"'"/";a$*4;"\"'"|";a$*4;"|"'"\____/"

?PRINT命令的简写,并且撇号将光标移动到下一行。



1

Python,59个字节

lambda n:r'''  __
 /a\
/aa\
|aa|
\____/'''.replace('a',n*2)

1

Lua,66个字节

print((([[  __
 /ee\
/eeee\
|eeee|
\____/]]):gsub("e",io.read())))

((([[#搞定了]])))




1

[R],65个字节

cat(gsub('x',scan(,''),"  __\n /xx\\\n/xxxx\\\n|xxxx|\n\\____/"))

不太引人注目,请在R中找到一个较短的...这是您的基本gsub


1

C ++ 208字节

回应评论:这是一个完整的重新发布。

#include<iostream>
using namespace std;int main(){char e;cin>>e;cout<<"  __  \n";cout<<" /"<<e<<e<<"\\ "<<endl;cout<<"/"<<e<<e<<e<<e<<"\\"<<endl;cout<<"|"<<e<<e<<e<<e<<"|"<<endl;cout<<"\\____/ \n";return 0;}

1

C#,56字节


打高尔夫球

i=>"  __\n /i\\\n/ii\\\n|ii|\n\\____/".Replace("i",i+i);

不打高尔夫球

i => 
   "  __\n /i\\\n/ii\\\n|ii|\n\\____/"
      .Replace( "i", i + i );

空头可读

i => 
   "  __\n /i\\\n/ii\\\n|ii|\n\\____/"

      // Replace every instance of 'i' with the input cloned twice
      .Replace( "i", i + i );

完整代码

using System;
using System.Collections.Generic;

namespace Namespace {
   class Program {
      static void Main( String[] args ) {
         Func<String, String> f = i => 
            "  __\n /i\\\n/ii\\\n|ii|\n\\____/"
               .Replace( "i", i + i );

         List<String>
            testCases = new List<String>() {
               "-",
               "%",
               "~",
               "o",
               " ",
         };

         foreach( String testCase in testCases ) {
            Console.WriteLine( $" Input: {testCase}\nOutput:\n{f( testCase )}\n" );
         }

         Console.ReadLine();
      }
   }
}

发布

  • 1.0 - 56 bytes-初始溶液。

笔记

由于所使用的字体不是等宽字体,因此提供的链接中的打印结果看起来不会像假装的那样。


1

C(gcc),87个字节

e(d){printf("  __\n /%c%c\\\n/%c%c%c%c\\\n|%c%c%c%c|\n\\____/\n",d,d,d,d,d,d,d,d,d,d);}

没有stdio.h的printf会引起警告,但不会出错,从而可以成功进行编译。

说明

Printf语句将所有内容填充为一行,并用%c格式化修饰符。

在线尝试


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.