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.

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.


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)


@ 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

←_↘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:  __
                                         /~~\
                                        /~~~~\
                                        |~~~~|
                                        \____/

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\\____/:' <<< '★'
  __
 /★★\
/★★★★\
|★★★★|
\____/

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!


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.

: 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


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


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.


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

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



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
++++++++++[>+++>+<<<++++<+<+>>>-]
>++<
<<--<+
>>>,
>..<<<<..>>>>>.<.
<<<<<.
>>>>..<<.>>>>.
<<<<<<.>>>>....<<.>>>>.
<<<.>....<.
>>>.<<<<.<....<.

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!


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


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

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.


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


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!


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.



1

Python, 59 bytes

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

1

Lua, 66 bytes

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

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




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


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

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.


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


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.