Сделай мне пасхальное яйцо!


29

Нет, не те ^^vv<><>BAпасхальные яйца, настоящие пасхальные яйца, которые мы красим.

Вот (ужасно нарисованное) яйцо.

  __
 /  \
/    \
|    |
\____/

На Пасху мы их раскрашиваем узорами. Как это:

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

Соревнование

Если вы хотите нарисовать яйцо, напечатайте нарисованное яйцо с помощью символа (для печати ascii).

Примеры:

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

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

Спекуляции

  • Конечные переводы строк / пробелы разрешены.

8
Почему отрицательный голос? Если вам не нравится этот вопрос, уменьшите голосование и оставьте, пожалуйста, причину.
Мэтью Ро,

2
Одной из возможных причин может быть то, что они не считают эту задачу достаточно ясной или понятной. Я бы сказал, что это достаточно ясно и буквально не тривиально. Тем не менее, я тоже не особо взволнован.
Джон Дворак

17
Задача будет очень тривиальной на большинстве языков. Яйцо слишком короткое, чтобы в игре было много оригинальности. На мой взгляд, это неинтересная задача (она не была помещена в «песочницу», потому что вы, похоже, бойкотируете «песочницу», потому что я не знаю, по каким причинам), поэтому я ее понижаю.
Дада

25
Проголосовал за то, что такие простые задачи отлично подходят для начинающих, таких как я, в гольф.
Лохматый

7
Пуф! Ты пасхальное яйцо. (Извините, не удержался)
Джордж Камминс

Ответы:


16

Brain-Flak , 270 268 266 + 1 = 267 байт

+1 от -cфлага

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

Попробуйте онлайн!

Я собирался написать объяснение, но сначала я вздремнул и забыл, как работает эта мысль. Твоя догадка так же хороша как и моя.


14
Это лучшее объяснение, которое я когда-либо читал здесь. +1
Дэвид Конрад

12

Python 2, 62 байта

Супер прямолинейный. Попробуйте онлайн .
-1 байт, спасибо @ mbomb007

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


@ mbomb007 Хороший, спасибо
Мертвый Опоссум

2
Вы можете сохранить два байта с помощью лямбда-функции, подобной этой
Keerthana Prabhakaran

@KeerthanaPrabhakaran Я не уверен, что лямбды в порядке для испытаний ASCII
Мертвый Опоссум

1
В чем проблема использования лямбда в вызовах ascii? как они вообще связаны? : o
Киртана Прабхакаран

10

Древесный уголь , 30 26 16 байт

Благодаря байту, сохраненному после создания формы, два байта сохранены

__↗¹←↑¹↖²↓_‖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

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
Я вижу, что Деннис часто этим пользуется, но я впервые чувствую, что действительно понял это; время не прошло даром! Вы дали мне 1 единицу обучения.
Волшебная Урна Осьминога

1
Ну, это один из моих детей :)
Джонатан Аллан

6

Сед, 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`#`)

  • 4 байта сохраняются путем перемещения назначения s=c+cпеременной внутри первого набора {}.
  • 2 байта были сохранены с помощью c+=cвместо s=c+c& s=s+s, отчасти благодаря Нейлу, который заметил это улучшение в то время, когда я его делал.

Нарисуй свой!


Было бы немного лучше, если бы вы поместили эти данные в <pre><code>s. Хорошая работа, хотя.
Мэтью Ро,

Спасибо, @SIGSEGV. Консоли сохраняют пробелы и, по крайней мере, по умолчанию используют моноширинный шрифт, поэтому нет необходимости выводить в pre.
Лохматый

1
Почему нет c+=c?
Нил

Спасибо, @Neil, я просто редактировал это в себе, но я обновлю еще раз, чтобы дать тебе также кивок.
Лохматый

@Arnauld Вам не нужно считать f=\nчасть для подсчета байтов. Вот так бегает фрагмент.
AdmBorkBork

5

Алиса , 53 52 байта, неконкурирующая

Спасибо Лео за косвенное сохранение 1 байта.

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

Попробуйте онлайн!

К сожалению, мне пришлось исправить ошибку с y(транслитерацией), чтобы сделать эту работу, поэтому я отметил ее как неконкурентную.

объяснение

Основная идея состоит в том, чтобы создать строку яйца, но ~в качестве заполнителя для двух копий ввода. Тем не менее, другие символы ввода не особенно удобны для строк Алисы, потому что они не могут содержать перевод строки, и все из /\_|них должны быть экранированы (потому что они рассматриваются как зеркала и стены). Поэтому я могу сохранить некоторые байты, используя для них также заполнители, а затем транслитерировать их. Заполнители для /\_|являются .[^{, которые просто символ прямо перед тем, который они представляют. Для перевода строки я использую }.

Теперь код ... вся программа может быть решена в обычном режиме, так как нам нужна только обработка строк, а не целые числа. Кроме того, нам не нужен поток условного контроля. Вся программа может быть выражена линейно. Общая структура программы такова:

/...//
@....

В такой программе 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 это здесь !! Этот язык выглядит изящно
Конор О'Брайен

@ ConorO'Brien спасибо. Я уже наложил на него некоторые старые вызовы на случай, если вы захотите увидеть больше образцов. :)
Мартин Эндер

4

PowerShell , 50 49 48 байт

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

Попробуйте онлайн!

Простая замена строки в буквальную строку. Не много места для игры в гольф.

-1 байт благодаря HyperNeutrino; -1 байт благодаря wubs


4

Морковь , 34 байта, неконкурирующая

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

Не конкурирует, потому что я только что исправил ошибку с интерпретатором в начальных пробелах, которые не показывались.

Попробуйте это онлайн здесь .

Во-первых, мы находимся в режиме каретки, где каждый персонаж помещается в «стек». И, наконец, «стопка» выводится на печать.

В режиме каретки сдвигает #ввод, поэтому экземпляры в #основном заменяются вводом (FYI #- однобайтовая программа cat).


4

SOGL V0.12 , 21 18 16 байтов

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

Попробуй здесь!

Вся программа сжата:

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

где ŗзаменяется на вход.

13 байт почти тоже работает, но он делает ненужные вещи с определенными входами ..


Вы должны покрасить яйцо. (т.е. заполнить яйцо внутри символов)
Мэтью Ро

@SIGSEGV - Объясняется, что это достигается путем замены пробелов входными @,ŗ -@ŗ
Джонатан Аллан

Будет ли SOGOL в TIO в ближайшее время?
Джонатан Аллан

@JonathanAllan Если кто-то может получить это там, тогда да.
Дзайма


3

05AB1E , 34 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 ... Черт тот факт , что ())(и /\\/являются палиндромами.
Волшебная Урна Осьминога

1
@carusocomputing: Вы должны опубликовать это отдельно. Это достаточно отличается, чтобы быть интересным
само

3

Python 3.6 , 53 байта

lambda x:fr'''  __
 /{2*x}\
/{4*x}\
|{4*x}|
\____/'''
  • Безымянная функция, принимающая символ xи возвращающая строку.
  • Использует f-строки Python 3.6 в качестве дополнительной альтернативы более ранней версии .format()- {}вложенные части f-строки представляют собой код, подлежащий оценке.
  • Строка также является 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 байт

Golfed: Живая версия нажмите здесь

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

Я не профессиональный гольфист, хотя. Это моя попытка, насколько я помню: D

Выход:

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

Ungolfed (+ комментарии):

; 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 байт (Спасибо Эмигне / Аднану)

•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 байт (Эминья)

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

Попробуйте онлайн 2!


26-байтовое расширение предложения Emigna, используя S для разделения символов в массив, затем a [b] для интерполяции каждой цифры с соответствующим местоположением в предыдущем массиве. По сути, это поэлементная транслитерация (умная).

05AB1E , 26 байт (Аднан)

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

Попробуйте онлайн 3!


1
Это на 3 байта короче. Больше похоже на ваш ответ, чем на мой :)
Emigna

1
@ Emigna, что прямая транслитерация с использованием новых строк - новая идея, мне это нравится; это могло бы честно выбить 5 байтов из многих моих существующих решений.
Волшебная урна осьминога


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

@manatwork Спасибо, я не особо задумывался о двойном вводе
Йорг Хюльсерманн

сохранить 7 байтов с физическими переносами строк и не экранировать обратную косую черту (последний в любом случае не нуждается в экранировании). Да, и кстати: -Rэто не параметр, это опция.
Тит

@ Titus я ненавижу физические разрывы строк Готово
Йорг Хюльсерманн

@Titus, правда, хотя и man phpназывает их параметром : «Также возможно обрабатывать стандартный ввод строка за строкой, используя параметр -R или -F.»
manatwork

2

BF, 142 140 байт

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

Это разбито на две строки для ясности; новая строка не засчитывается.

Это довольно легко написать такого рода вещи в BF, но нетривиально, как оптимизировать порядок ячеек, чтобы минимизировать движение. Я написал сценарий грубой силы, чтобы попробовать все комбинации и найти самую короткую, и немного поиграл в гольф, чтобы учесть возможность игры в гольф, которую я не включил в грубую игру.


@ JoKing Я предлагаю вам опубликовать это как отдельный ответ, потому что он, кажется, сильно отличается от моего.
Esolanging Fruit


2

C (gcc) , 95 88 85 байт

Спасибо Альберту за -7 байт

Спасибо также и потолок-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++);}
Альберт Реншоу

Вы также можете сохранить еще 2 байта поверх этого, объявив *sвнутри аргумента объявления цикла for:f(c){for(char*s=" __\n /11\\\n/1111\\\n|1111|\n\\____/\n";*s;putchar(*s^49?*s:c),s++);}
Альберт Реншоу

Вы также можете сбрить еще 1 байт, проверив наличие символа ASCII, числовое значение которого составляет одну цифру. 1находится 49в ASCII, но это 2 байта, используйте что-то со значением от 0 до 9, например, символ табуляции `` является значением ASCII 9.
Альберт Реншоу

Предложить *s;f(c){for(sвместоf(c){for(int*
потолок кошка

1

SpecBAS - 70 байт

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

?является сокращением для PRINTкоманды, и апостроф перемещает курсор на следующую строку.




1

Луа, 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 байт


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

Ungolfed читаемый

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

релизы

  • v1.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);}

printf без stdio.h выдает предупреждения, но не выдает ошибок, что позволяет выполнить успешную компиляцию.

объяснение

Оператор printf, который объединяет все в одну строку, форматируя символ декорации с помощью% c.

Попробуйте онлайн


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.