Fammi un uovo di Pasqua!


29

No, non il ^^vv<><>BAtipo di uova di Pasqua, vere uova di Pasqua che dipingiamo.

Ecco un uovo (terribilmente disegnato).

  __
 /  \
/    \
|    |
\____/

A pasqua, li dipingiamo con motivi. Come questi:

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

La sfida

Dato un carattere (ascii stampabile) per dipingere l'uovo, stampare l'uovo dipinto.

Esempi:

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

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

Specifiche

  • Sono consentite nuove righe / spazi finali.

8
Perché il downvote? Se questa domanda non ti piace, fai un
Matthew Roh,

2
Una potenziale ragione potrebbe essere che non pensano che questo compito sia abbastanza chiaro o abbastanza chiaro. Direi che è abbastanza chiaro e nemmeno letteralmente banale. Detto questo, non sono nemmeno particolarmente entusiasta.
John Dvorak,

17
La sfida sarà molto banale nella maggior parte delle lingue. L'uovo è troppo corto per consentire molta originalità nel golf. Secondo me, è una sfida poco interessante (che non è stata sottoposta a sandbox, perché sembra che tu stia boicottando la sandbox perché non so per quali motivi), quindi la declassamento.
Dada,

25
È stato votato perché semplici sfide come questa sono ottime per i principianti come me che vogliono giocare a golf.
Shaggy,

7
PUF! Sei un uovo di Pasqua. (Mi dispiace, non ho potuto resistere)
George Cummins

Risposte:


16

Brain-Flak , 270 268 266 + 1 = 267 byte

+1 dalla -cbandiera

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

Provalo online!

Stavo per scrivere una spiegazione, ma prima ho fatto un pisolino e ho dimenticato come funziona tutto questo. La tua ipotesi è buona come la mia.


14
Questa è la migliore spiegazione che abbia mai letto qui. +1
David Conrad,

12

Python 2, 62 byte

Super diretto. Provalo online .
-1 byte, grazie a @ mbomb007

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


@ mbomb007 Bene, grazie
Dead Possum,

2
Puoi salvare due byte usando la funzione lambda in questo modo
Keerthana Prabhakaran,

@KeerthanaPrabhakaran Non sono sicuro che le lambda siano OK per le sfide ASCII
Dead Possum

1
qual è il problema nell'uso di lambda nelle sfide ASCII? come sono persino imparentati !? : o
Keerthana Prabhakaran,

10

Carbone di legna , 30 26 16 byte

Due byte salvati grazie a @Neil riempiendo dopo aver creato la forma

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

Provalo online!

Spiegazione

Il programma funziona creando prima la metà destra dell'uovo, quindi riflettendola per generare la metà sinistra.

__↗¹                          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

←_↘può essere solo ↓_, ma in realtà si può riempire dopo si riflette per 16 byte: __↗¹←↑¹↖²↓_‖M←¤S.
Neil,

@Neil Grazie per avermi fatto conoscere¤
Kritixi Lithos il

9

Gelatina , 24  22 byte

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

Provalo online!

Come?

Ḥ;“ ¶/\|_”“Ṁ¢Ṛ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
Nomino la tua spiegazione per la spiegazione più lunga di un singolo byte.
Magic Octopus Urn

Sembra che sia diventato un atomo abbastanza utile, ho pensato di concedergli un po 'di tempo sotto i riflettori!
Jonathan Allan,

2
Vedo che Dennis lo usa molto, questa è la prima volta che mi sembra di averlo capito; il tempo non è stato sprecato! Mi hai dato 1 unità di apprendimento.
Magic Octopus Urn

1
Bene, è uno dei miei bambini :)
Jonathan Allan,

6

Sed, 43 caratteri

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

Esecuzione di esempio:

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

È esattamente quello che ho scritto, solo pochi secondi più veloce.
Riley,

6

JavaScript (ES6), 53 49 47 byte

Sono sicuro di poter spremere un po 'di più da questo - dover scappare dalla \s mi dà fastidio.

f=

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

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

  • 4 byte salvati spostando l' s=c+cassegnazione variabile all'interno della prima serie di {}.
  • 2 byte salvati usando c+=cinvece di s=c+c& s=s+s, grazie in parte a Neil che ha notato questo miglioramento mentre lo stavo realizzando.

Dipingi il tuo!


Sarebbe un po 'meglio se metti questi input in <pre><code>s. Bel lavoro però.
Matthew Roh,

Grazie, @SIGSEGV. Le console preservano lo spazio bianco e, per impostazione predefinita, utilizzano almeno un carattere a spaziatura fissa, quindi non è necessario eseguire l'output a pre.
Shaggy,

1
Perché no c+=c?
Neil,

Grazie, @Neil, lo stavo solo modificando da solo, ma lo aggiornerò di nuovo per dare anche un cenno del capo.
Shaggy,

@Arnauld Non è necessario contare la f=\nparte per il conteggio dei byte. È solo così che funziona lo snippet.
AdmBorkBork,

5

Alice , 53 52 byte, non competitiva

Grazie a Leo per il risparmio indiretto di 1 byte.

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

Provalo online!

Sfortunatamente, ho dovuto correggere un bug con y(traslitterazione) per farlo funzionare, quindi l'ho contrassegnato come non competitivo.

Spiegazione

L'idea di base è quella di creare una stringa dell'uovo ma con ~come segnaposto per due copie dell'input. Tuttavia, gli altri caratteri dell'input non sono particolarmente amichevoli per le stringhe di Alice, perché quelli non possono contenere avanzamenti di riga e tutti /\_|dovrebbero scappare (perché sono trattati come specchi e pareti). Quindi posso salvare alcuni byte usando anche i segnaposto per questi, e poi traslitterli. I segnaposto per /\_|sono .[^{, che sono semplicemente il personaggio giusto prima di quello che rappresentano. Per l'alimentazione di linea che sto usando }.

Ora il codice ... l'intero programma può essere risolto in modalità Ordinale poiché abbiamo solo bisogno di elaborazione di stringhe e nessuna elaborazione di numeri interi. Inoltre, non abbiamo bisogno di alcun flusso di controllo condizionale. L'intero programma può essere espresso in modo lineare. La struttura generale del programma è questa:

/...//
@....

In un tale programma, l'IP rimbalza su e giù attraverso la ...sezione, eseguendo prima solo la metà dei caratteri. Quindi i due /alla fine spostano l'IP a destra di una cella, in modo che sulla via del ritorno esegua l'altra metà (rimbalzando di nuovo su e giù) fino alla @fine del programma. Quindi se apriamo la divertente struttura a zigzag nel mezzo, il programma che stiamo eseguendo sembra davvero così:

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

Andiamo attraverso questo:

"  ^^} .~[}.~~[}{~~{}[^^^^."
      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 è qui !! Questa lingua sembra elegante
Conor O'Brien,

@ ConorO'Brien grazie. Ho già risolto alcune vecchie sfide nel caso tu voglia vedere più campioni. :)
Martin Ender,

4

PowerShell , 50 49 48 byte

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

Provalo online!

Semplice sostituzione della stringa in una stringa letterale. Non c'è molto spazio per il golf.

-1 byte grazie a HyperNeutrino; -1 byte grazie ai mozzi


4

Carota , 34 byte, non competitiva

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

Non competitiva perché ho appena corretto un bug con l'interprete nel principale spazio bianco che non veniva mostrato.

Provalo online qui .

Innanzitutto, siamo in modalità cursore, dove ogni personaggio viene spinto nella "pila". E infine la "pila" viene stampata come output.

In modalità cursore, #invia l'input, quindi le istanze di #vengono sostanzialmente sostituite con l'input (FYI #è un programma cat a un byte).


4

SOGL V0.12 , 21 18 16 byte

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

Provalo qui!

L'intero programma è il seguente compresso:

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

dove ŗviene sostituito con l'input.

Anche quasi 13 byte funzionano, ma fa cose non necessarie con determinati input.


Devi dipingere l'uovo. (ovvero riempi l'interno dell'uovo con dei caratteri)
Matthew Roh,

@SIGSEGV - Si spiega che ciò si ottiene sostituendo gli spazi con l'input e sostituendo i trattini con spazi con il codice@,ŗ -@ŗ
Jonathan Allan

SOGOL sarà presto al TIO?
Jonathan Allan,

@JonathanAllan Se qualcuno ci riesce, allora sì.
dzaima,

Parla con Dennis nella stanza dei talk-tryitonline-net .
Jonathan Allan,

3

05AB1E , 34 33 32 byte

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

Provalo online!

Spiegazione

„__                               # 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"_ |/\"¹«‡,per 32, completamente diverso però. Questo mi ha falsificato fuori e mi ha fatto pensare che potevo usare palindromize ... Accidenti il fatto che ())(e /\\/sono palindromi.
Magic Octopus Urn

1
@carusocomputing: dovresti pubblicarlo separatamente. È abbastanza diverso da essere interessante da solo :)
Emigna

3

Python 3.6 , 53 byte

lambda x:fr'''  __
 /{2*x}\
/{4*x}\
|{4*x}|
\____/'''
  • Funzione senza nome che prende il carattere xe restituisce una stringa.
  • Usa le f-string di Python 3.6 come alternativa aggiuntiva alle versioni precedenti .format(): le {}parti racchiuse della f-stringa sono codice da valutare.
  • La stringa è anche una stringa r e una virgoletta tripla che salva un byte su:

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

Non riesco a vedere un interprete online per Python 3.6 però.
Provalo su repl.it (dice 3.5 ma è 3.6)



3

Brainfuck - 257 byte 181 byte

Golfed: versione live clicca qui

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

Non sono un golfista professionista però. Questo è il mio tentativo per quanto posso ricordare: D

Produzione:

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

Ungolfed (+ commenti):

; 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 byte (Grazie a Emigna / Adnan)

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

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

Versione a 29 byte (più intelligente senza iterazione necessaria anche per la codifica di nuove righe):

05AB1E , 29 byte (Emigna)

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

Provalo online 2!


Estensione di 26 byte del suggerimento di Emigna, usando S per separare i caratteri in un array, quindi a [b] per interpolare ogni cifra con la posizione corrispondente nell'array precedente. Questa è essenzialmente una traslitterazione saggia (intelligente).

05AB1E , 26 byte (Adnan)

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

Provalo online 3!


1
Si tratta di 3 byte in meno. Più simile alla tua risposta della mia :)
Emigna

1
@Emigna che la traslitterazione diretta usando le nuove righe è un'idea nuova, mi piace; questo potrebbe onestamente eliminare 5 byte da molte delle mie soluzioni esistenti.
Magic Octopus Urn


1
@adnan - subdolo subdolo ...
Magic Octopus Urn

Sento che quasi tutte le mie risposte hanno bisogno di credito Admigna, non conoscerei davvero la lingua senza entrambi i tuoi esempi costanti.
Magic Octopus Urn

2

PHP, 51 byte

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

PHP, 58 byte senza interruzioni di riga fisiche

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

eseguilo con l' -Ropzione

61 byte

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

Memorizza il valore raddoppiato; rimuovere lo spazio non necessario; usa il carattere letterale newline: pastebin.com/EghdAYMf
manatwork

@manatwork Grazie, non ho davvero pensato a raddoppiare l'ingresso
Jörg Hülsermann

salvare 7 byte con interruzioni di riga fisiche e non sfuggire alle barre rovesciate (l'ultimo non deve comunque sfuggire). Oh e btw: -Rnon è un parametro, è un'opzione.
Tito

@Titus odio le interruzioni di linea fisiche Fatto
Jörg Hülsermann

@Titus, giusto, anche se man phpli chiama parametro : "È anche possibile elaborare l'input standard riga per riga usando il parametro -R o -F."
manatwork

2

BF, 142 140 byte

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

Questo è diviso su due linee per chiarezza; la nuova riga non viene conteggiata.

È abbastanza facile scrivere questo genere di cose in BF, ma non è banale come ottimizzare l'ordine delle celle per ridurre al minimo i movimenti. Ho scritto una sceneggiatura di bruto-forcer per provare tutte le combinazioni e trovare la più breve, e l'ho giocata un po 'per spiegare un'opportunità di golf che non avevo incluso nel brute-forcer.


@JoKing Ti suggerisco di postarlo come risposta separata, perché sembra molto diversa dalla mia.
Esolanging Fruit

2

Brainfuck , 114 byte

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

Provalo online!

Ho usato BF Crunch qui per trovare un modo più ottimale per generare i singoli personaggi.


2

C (gcc) , 95 88 85 byte

Grazie ad Albert per -7 byte

Grazie anche a ceilingcat -3 byte

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

Provalo online!


Non dichiarare *qsemplicemente annidalo nel tuo for-loop per salvare 5 byte. char*s;f(c){for(s=" __\n /11\\\n/1111\\\n|1111|\n\\____/\n";*s;putchar(*s^49?*s:c),s++);}
Albert Renshaw,

Puoi anche salvare altri 2 byte sopra quello dichiarando *sall'interno dell'argomento della dichiarazione del for-loop:f(c){for(char*s=" __\n /11\\\n/1111\\\n|1111|\n\\____/\n";*s;putchar(*s^49?*s:c),s++);}
Albert Renshaw,

Puoi radere anche un altro byte controllando un carattere ASCII che abbia un valore numerico di una cifra. 1è 49in ASCII ma sono 2 byte, usa qualcosa con un valore compreso tra 0 e 9, ad esempio il carattere di tabulazione `` è valore ASCII 9.
Albert Renshaw,

Suggerisci *s;f(c){for(sinvece dif(c){for(int*
ceilingcat il

1

SpecBAS - 70 byte

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

?è una scorciatoia per il PRINTcomando e l'apostrofo sposta il cursore sulla riga successiva.



1

Python, 59 byte

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

1

Lua, 66 byte

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

((([[#Azzeccato]])))




1

[R], 65 byte

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

Abbastanza spettacolare, ne trovi uno più corto in R ... È il tuo gsub di base


1

C ++ 208 byte

In risposta ai commenti: questo è un re-post completo.

#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 byte


golfed

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

Leggibile non golfato

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

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

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

Uscite

  • v1.0 - 56 bytes- Soluzione iniziale.

Gli appunti

I risultati stampati all'interno del link fornito non sembreranno pretesi, a causa del carattere utilizzato non monospace.


1

C (gcc) , 87 byte

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 senza stdio.h provoca avvisi ma nessun errore, consentendo la compilazione corretta.

Spiegazione

Dichiarazione Printf che racchiude tutto in una riga, formattando il carattere decorativo con% c.

Provalo online


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.