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 Sè- 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.