Faça-me um ovo de Páscoa!

29

Não, não é o ^^vv<><>BAtipo de ovos de Páscoa, ovos de Páscoa reais que pintamos.

Aqui está um ovo (terrivelmente desenhado).

  __
 /  \
/    \
|    |
\____/

Na Páscoa, pintamos com padrões. Como estes:

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

O desafio

Dado um caractere (ascii imprimível) para pintar o ovo, imprima o ovo pintado.

Exemplos:

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

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

Especificações

  • Novas linhas / espaços à direita são permitidos.
Matthew Roh
fonte
8
Por que o voto negativo? Se você não gostar desta pergunta, faça voto negativo e deixe um motivo, por favor.
Matthew Roh
2
Um motivo potencial pode ser que eles não achem que essa tarefa seja suficientemente clara ou suficientemente clara. Eu diria que é claro o suficiente, e também não é literalmente trivial. Dito isto, também não estou particularmente animado.
John Dvorak
17
O desafio será muito trivial na maioria dos idiomas. O ovo é muito curto para permitir muita originalidade no golfe. Na minha opinião, é um desafio desinteressante (que não foi colocado na caixa de areia, porque você parece estar boicotando a caixa de areia porque eu não sei por que razões);
Dada
25
Promovido porque desafios simples como esse são ótimos para iniciantes como eu entrar no golfe.
Shaggy
7
POOF! Você é um ovo de páscoa. (Desculpe, não pude resistir)
George Cummins

Respostas:

16

Flacidez cerebral , 270 268 266 + 1 = 267 bytes

+1 da -cbandeira

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

Experimente online!

Eu ia escrever uma explicação, mas tirei uma soneca primeiro e esqueci como todo esse pensamento funciona. Seu palpite é tão bom quanto o meu.

Assistente de Trigo
fonte
14
Esta é a melhor explicação que eu já li aqui. 1
David Conrad
12

Python 2, 62 bytes

Super direto. Experimente online .
-1 byte, graças a @ mbomb007

print r'''  __
 /~\
/~~\
|~~|
\____/'''.replace('~',input()*2)
Gambá morto
fonte
11
62 bytes
mbomb007
@ mbomb007 Bom, obrigado
Dead Possum
2
Você pode salvar dois bytes usando a função lambda como este
Keerthana Prabhakaran
@KeerthanaPrabhakaran Não tenho certeza se as lambdas são aceitáveis ​​para desafios ascii #
Dead Possum
11
qual é o problema em usar lambda em desafios ascii? como eles estão relacionados? : o
Keerthana Prabhakaran
10

Carvão , 30 26 16 bytes

Dois bytes salvos graças ao @Neil preenchendo após fazer a forma

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

Experimente online!

Explicação

O programa funciona criando primeiro a metade direita do ovo e depois refletindo-o para gerar a metade esquerda.

__↗¹                          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
Kritixi Lithos
fonte
←_↘pode ser apenas ↓_, mas na verdade você pode preencher depois de refletir por 16 bytes: __↗¹←↑¹↖²↓_‖M←¤S.
31517 Neil
@Neil Obrigado por me apresentar a #¤
Kritixi Lithos
9

Geléia , 24  22 bytes

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

Experimente online!

Quão?

Ḥ;“ ¶/\|_”“Ṁ¢Ṛ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:  __
                                         /~~\
                                        /~~~~\
                                        |~~~~|
                                        \____/
Jonathan Allan
fonte
3
Eu indico sua explicação para a explicação mais longa de um único byte.
Urna de polvo mágico
Parece ter se tornado um átomo bastante útil, pensei que eu daria algum tempo no centro das atenções!
Jonathan Allan
2
Vejo Dennis usá-lo muito, é a primeira vez que sinto que realmente entendi; o tempo não foi desperdiçado! Você me deu 1 unidade de aprendizado.
Magic Octopus Urn
11
Bem, é um dos meus bebês :)
Jonathan Allan
6

Sed, 43 caracteres

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

Exemplo de execução:

bash-4.3$ sed 's:.:  __\n /&&\\\n/&&&&\\\n|&&&&|\n\\____/:' <<< '★'
  __
 /★★\
/★★★★\
|★★★★|
\____/
homem a trabalhar
fonte
Foi exatamente o que escrevi, apenas alguns segundos mais rápido.
Riley
6

JavaScript (ES6), 53 49 47 bytes

Tenho certeza de que posso me livrar um pouco mais disso - ter que escapar do \s está me irritando.

f=

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

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

  • 4 bytes salvos movendo a s=c+catribuição de variável para o primeiro conjunto de {}.
  • 2 bytes salvos usando em c+=cvez de s=c+c& s=s+s, em parte graças a Neil, que percebeu essa melhoria ao mesmo tempo em que eu a fazia.

Pinte seus próprios!

Shaggy
fonte
Seria um pouco melhor se você colocar essas entradas em <pre><code>s. Bom trabalho embora.
Matthew Roh
Obrigado, @SIGSEGV. Os consoles preservam o espaço em branco e, por padrão, pelo menos, usam uma fonte monoespaçada, portanto, não é necessário gerar saída para a pre.
Shaggy
11
Por que não c+=c?
Neil
Obrigado, @ Nee, eu estava apenas editando isso em mim mesmo, mas vou atualizar novamente para lhe dar um aceno de cabeça também.
Shaggy
@ Arnauld Você não precisa contar a f=\nparte da contagem de bytes. Isso é apenas para que o trecho seja executado.
AdmBorkBork
5

Alice , 53 52 bytes, não concorrente

Agradecemos a Leo por economizar indiretamente 1 byte.

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

Experimente online!

Infelizmente, tive que corrigir um erro com y(transliteração) para fazer esse trabalho, por isso o marquei como não concorrente.

Explicação

A idéia básica é criar uma sequência de ovos, mas com ~um espaço reservado para duas cópias da entrada. No entanto, os outros caracteres da entrada não são particularmente amigáveis ​​para as strings de Alice, porque elas não podem conter feeds de linha, e todas /\_|precisariam ser escapadas (porque são tratadas como espelhos e paredes). Para que eu possa salvar alguns bytes usando espaços reservados para eles também e depois transliterando-os. Os espaços reservados para /\_|são .[^{, que são simplesmente o caractere logo antes do que eles representam. Para o avanço de linha que estou usando }.

Agora o código ... todo o programa pode ser resolvido no modo Ordinal, pois precisamos apenas de processamento de strings e sem processamento de números inteiros. Além disso, não precisamos de nenhum fluxo de controle condicional. O programa inteiro pode ser expresso linearmente. A estrutura geral do programa é esta:

/...//
@....

Nesse programa, o IP salta para cima e para baixo na ...seção, primeiro executando apenas metade dos caracteres. Em seguida, os dois /no final movem o IP para a direita em uma célula, de modo que, no caminho de volta, ele execute a outra metade (novamente pulando para cima e para baixo) até finalmente @encerrar o programa. Portanto, se desdobrarmos a engraçada estrutura em zigue-zague no meio, o programa que estamos executando será realmente assim:

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

Vamos passar por isso:

"  ^^} .~[}.~~[}{~~{}[^^^^."
      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.
Martin Ender
fonte
: D está aqui !! Esta linguagem parece bacana
Conor O'Brien
@ ConorO'Brien obrigado. Eu já fiz alguns desafios mais antigos, caso você queira ver mais amostras. :)
Martin Ender
4

PowerShell , 50 49 48 bytes

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

Experimente online!

Substituição direta de string em uma string literal. Não há muito espaço para jogar golfe.

-1 byte graças ao HyperNeutrino; -1 byte graças aos wubs

AdmBorkBork
fonte
4

Cenoura , 34 bytes, não concorrente

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

Não concorrente porque eu apenas consertei o bug com o intérprete no espaço em branco à esquerda que não estava sendo mostrado.

Experimente online aqui .

Primeiro, estamos no modo de sinal de intercalação, onde cada personagem é empurrado para a "pilha". E, finalmente, a "pilha" é impressa como saída.

No modo de cursor, #empurra a entrada, de modo que as instâncias de #são basicamente substituídas pela entrada (FYI #é um programa de gato de um byte).

Kritixi Lithos
fonte
4

SOGL V0.12 , 21 18 16 bytes

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

Experimente aqui!

Todo o programa é o seguinte compactado:

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

onde ŗé substituído pela entrada.

13 bytes quase também funcionam, mas fazem coisas desnecessárias com determinadas entradas.

dzaima
fonte
Você tem que pintar o ovo. (ou seja, preencha o interior do ovo com caracteres)
Matthew Roh
@SIGSEGV - É explicado que isso é alcançado substituindo os espaços pela entrada e substituindo os traços por espaços pelo código @,ŗ -@ŗ
Jonathan Allan
A SOGOL estará no TIO em breve?
Jonathan Allan
@ JonathanAllan Se alguém pode chegar lá, então sim.
Dzaima
Fale com o Dennis na sala talk-tryitonline-net .
Jonathan Allan
3

05AB1E , 34 33 32 bytes

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

Experimente online!

Explicação

„__                               # 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
Emigna
fonte
•jÀňiXƒÐ[Z•6B6ôvy5ÝJ"_ |/\"¹«‡,para 32, completamente diferente. Isso me enganou e me fez pensar que eu poderia usar palindromizar ... Maldito seja ())(e /\\/são palindromes.
Urna de polvo mágico
11
@carusocomputing: você deve publicá-lo separadamente. É o suficiente diferente para ser interessante em seu próprio :)
Emigna
3

Python 3.6 , 53 bytes

lambda x:fr'''  __
 /{2*x}\
/{4*x}\
|{4*x}|
\____/'''
  • Função sem nome, levando o personagem x e retornando uma string.
  • Usa as strings f do Python 3.6 como uma alternativa adicional às versões anteriores .format()- o{} partes incluídas da string f são códigos a serem avaliados.
  • A string também é uma string r e tripla, economizando um byte:

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

Não consigo ver um intérprete online para Python 3.6.
Experimente em repl.it (diz 3.5, mas é 3.6)

Jonathan Allan
fonte
3

Brainfuck - 257 bytes 181 bytes

Golfed: versão ao vivo clique aqui

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

Eu não sou um jogador profissional de golfe. Esta é a minha tentativa, tanto quanto me lembro: D

Saída:

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

Ungolfed (+ comentários):

; 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
++++++++++[>+++>+<<<++++<+<+>>>-]
>++<
<<--<+
>>>,
>..<<<<..>>>>>.<.
<<<<<.
>>>>..<<.>>>>.
<<<<<<.>>>>....<<.>>>>.
<<<.>....<.
>>>.<<<<.<....<.
Lucca Ferri
fonte
2

05AB1E , 32 29 26 bytes (Agradecimentos a Emigna / Adnan)

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

Experimente online!

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

Versão de 29 bytes (mais inteligente sem iteração necessária devido à codificação de novas linhas):

05AB1E , 29 bytes (Emigna)

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

Experimente online 2!


Extensão de 26 bytes da sugestão de Emigna, usando S para separar os caracteres em uma matriz e, em seguida, [b] para interpolar cada dígito com o local correspondente na matriz anterior. Esta é essencialmente uma transliteração por elementos (smart).

05AB1E , 26 bytes (Adnan)

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

Experimente online 3!

Urna de polvo mágico
fonte
11
Isso é 3 bytes mais curto. Mais parecida com a sua resposta que o meu :)
Emigna
11
@Emigna, que a transliteração direta usando novas linhas é uma ideia nova, eu gosto disso; isso poderia honestamente derrubar 5 bytes de muitas das minhas soluções existentes.
Urna de polvo mágico
2
Para 26 bytes .
Adnan
11
@adnan - sorrateira sorrateira ...
Magic Octopus Urn
Sinto que quase todas as minhas respostas precisam ser creditadas Admigna, realmente não conheceriam o idioma sem os dois exemplos constantes.
Urna Mágica de Polvo
2

PHP, 51 bytes

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

PHP, 58 bytes sem quebras de linha físicas

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

execute isso com a -Ropção

61 bytes

echo strtr("  __\n /88\\\n/8888\\\n|8888|\n\\____/",8,$argn);
Jörg Hülsermann
fonte
Armazene o valor dobrado; remova espaço desnecessário; usar caractere de nova linha literal: pastebin.com/EghdAYMf
manatwork
@manatwork Obrigado eu realmente não pensar em dupla entrada
Jörg Hülsermann
salve 7 bytes com quebras de linha físicas e não escape das barras invertidas (o último não precisa escapar de qualquer maneira). Ah e btw: -Rnão é um parâmetro, é uma opção.
Titus
@Titus eu odeio linebreaks físicas Feito
Jörg Hülsermann
@Titus, certo, embora man phpos chama de parâmetros : “É também possível processar a linha de entrada padrão por linha usando o parâmetro -r ou -F.”
manatwork
2

BF, 142 140 bytes

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

Isso é dividido em duas linhas para maior clareza; a nova linha não é contada.

É bastante fácil escrever esse tipo de coisa no AM, mas não é trivial como otimizar a ordem das células para minimizar o movimento. Escrevi um roteiro de brute-forcer para tentar todas as combinações e encontrar as mais curtas, e joguei-o um pouco para dar conta de uma oportunidade de golfe que não havia incluído no brute-forcer.

Esolanging Fruit
fonte
@JoKing, sugiro que você publique isso como uma resposta separada, porque parece muito diferente da minha.
Esolanging Fruit
2

brainfuck , 114 bytes

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

Experimente online!

Eu usei o BF Crunch aqui para encontrar uma maneira mais ideal de gerar os caracteres individuais.

Brincadeira
fonte
2

C (gcc) , 95 88 85 bytes

Agradecimentos a Albert por -7 bytes

Agradecimentos também a ceilingcat -3 bytes

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

Experimente online!

cleblanc
fonte
Não declare *qapenas aninhe-o diretamente no loop for para economizar 5 bytes. char*s;f(c){for(s=" __\n /11\\\n/1111\\\n|1111|\n\\____/\n";*s;putchar(*s^49?*s:c),s++);}
Albert Renshaw
Você também pode salvar mais 2 bytes em cima disso, declarando *sdentro do argumento de declaração do loop for:f(c){for(char*s=" __\n /11\\\n/1111\\\n|1111|\n\\____/\n";*s;putchar(*s^49?*s:c),s++);}
Albert Renshaw
Você pode barbear mais 1 byte também, procurando por um caractere ASCII que tenha um valor numérico de um dígito. 1está 49em ASCII, mas são 2 bytes, use algo com um valor de 0 a 9, por exemplo, o caractere de tabulação `` é o valor ASCII 9.
Albert Renshaw
Sugerir em *s;f(c){for(svez def(c){for(int*
ceilingcat 26/04
1

SpecBAS - 70 bytes

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

?é uma abreviação de PRINTcomando e o apóstrofo move o cursor para a próxima linha.

Brian
fonte
1

Python, 59 bytes

lambda n:r'''  __
 /a\
/aa\
|aa|
\____/'''.replace('a',n*2)
Rɪᴋᴇʀ
fonte
1

Lua, 66 bytes

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

((([[#Acertou em cheio]])))

Blab
fonte
1

Japt , 35 bytes

"  __
 /01
/001
|00|
1____/"d0U²1'\

Experimente online!

Solução de 41 bytes:

[S²'_²RS'/U²'\R'/U²²'\R'|U²²'|R'\'_²²'/]q

Experimente online!

Oliver
fonte
Agradável. Minha primeira tentativa foi este por 36 bytes, mas parece que usando dum byte mais curto.
ETHproductions
1

[R], 65 bytes

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

Consideravelmente espetacular, encontre um mais curto em R ... É o seu gsub básico

user11599
fonte
1

C ++ 208 bytes

Em resposta aos comentários: Esta é uma nova publicação completa.

#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;}
takintoolong
fonte
1

C # , 56 bytes


Golfe

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

Ungolfed

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

Ungolfed legible

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

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

Código completo

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();
      }
   }
}

Lançamentos

  • v1.0 - 56 bytes- Solução inicial.

Notas

Os resultados impressos no link fornecido não parecerão pretendidos, porque a fonte usada não é monoespaçada.

auhmaan
fonte
1

C (gcc) , 87 bytes

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

printf sem stdio.h causa avisos, mas não erros, permitindo uma compilação bem-sucedida.

Explicação

Declaração Printf que agrupa tudo em uma linha, formatando o caractere de decoração com% c.

Experimente online

Jake Reynolds
fonte