Зробіть мені писанку!


29

Ні, не ^^vv<><>BAвид писанок, справжні писанки, які ми фарбуємо.

Ось (жахливо намальоване) яйце.

  __
 /  \
/    \
|    |
\____/

На Великдень ми малюємо їх візерунками. Як ці:

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

Змагання

Давши персонажу (друкований асчі), щоб пофарбувати яйце, роздрукуйте намальоване яйце.

Приклади:

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

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

Технічні характеристики

  • Дозволені нові лінії / пробіли.

8
Чому потік? Якщо це питання вам не подобається, скажіть, будь ласка, причину, будь ласка.
Меттью Ро

2
Однією з можливих причин може бути те, що вони не вважають, що це завдання є достатньо зрозумілим або зрозумілим. Я б сказав, що це досить зрозуміло, і це буквально не банально. Це сказало, що я не особливо схвильований.
Джон Дворак

17
Виклик буде дуже тривіальним у більшості мов. Яйце занадто коротке, щоб дозволити багато оригінальності в гольфі. На мою думку, це нецікавий виклик (який ще не був пісочницею, тому що ти, здається, бойкотує пісочницю, я не знаю, з яких причин), тому я її схвалюю.
Дада

25
Завдяки тому, що такі прості виклики чудово підходять для початківців, як я, щоб полегшити гольф.
Кудлатий

7
POOF! Ти пасхальне яйце. (Вибачте, не втримався)
Джордж Куммінс

Відповіді:


16

Мозг-Флак , 270 268 266 + 1 = 267 байт

+1 від -cпрапора

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

Спробуйте в Інтернеті!

Я збирався написати пояснення, але я спершу подрімав і забув, як працює вся ця думка. Ваша здогадка така ж, як і моя.


14
Це найкраще пояснення, про яке я коли-небудь читав тут. +1
Девід Конрад

12

Python 2, 62 байти

Супер прямо-прямо. Спробуйте в Інтернеті .
-1 байт, завдяки @ mbomb007

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


@ mbomb007 Добре, дякую
Dead Possum

2
Можна зберегти два байти, скориставшись такою
Keerthana Prabhakaran

@KeerthanaPrabhakaran Я не впевнений, що лямбдаси добре для викликів ascii
Dead Possum

1
у чому проблема використання лямбда у викликах ascii? як вони навіть пов'язані !? : o
Keerthana Prabhakaran

10

Вугілля , 30 26 16 байт

Два байти збереглися завдяки @Neil, заповнивши після створення фігури

__↗¹←↑¹↖²↓_‖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
Я висуваю ваше пояснення щодо найдовшого пояснення одного байту.
Magic Octopus Urn

Здається, це стало досить зручним атомом, подумав, що я дам йому трохи часу в центрі уваги!
Джонатан Аллан

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. Консолі зберігають пробіл і, як мінімум, використовують односхилий шрифт, тому не потрібно виводити на "a" 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 це тут !! Ця мова виглядає вишукано
Conor O'Brien

@ ConorO'Brien дякую. Я вже вирізав деякі старі проблеми, якщо ви хочете побачити більше зразків. :)
Мартін Ендер


4

Морква , 34 байти, неконкурентна

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

Неконкурентований, тому що я просто виправив помилку з перекладачем у провідних пробілах, які не відображалися.

Спробуйте його онлайн тут .

По-перше, ми перебуваємо в режимі каретки, де кожен персонаж підштовхується до «стека». І нарешті "стек" друкується як вихід.

У режимі каретки #натискає на вхід, тому екземпляри в #основному замінюються на вхід (FYI #- це однобайтова програма для котів).


4

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

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

Спробуйте тут!

Уся програма стискається наступним чином:

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

де ŗзаміняється на вхід.

13 байт майже теж працює, але це робить непотрібні речі з певними входами ..


Ви повинні пофарбувати яйце. (тобто заповніть нутро яйця символами)
Меттью Ро

@SIGSEGV - Пояснюється, що це досягається заміною пробілів на вхід і заміною тире з пробілами кодом@,ŗ -@ŗ
Джонатан Аллан

Чи скоро SOGOL буде в TIO?
Джонатан Аллан

@JonathanAllan Якщо хтось може його отримати, то так.
dzaima


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, хоча зовсім інше. Це підробило мене і змусило мене думати, що я можу використовувати паліндромізацію ... Чорт про те, що ())(і /\\/є паліндром.
Чарівний Восьминіг Урна

1
@carusocomputing: слід розмістити його окремо. Це досить різне, щоб бути цікавим самостійно :)
Emigna

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

Гольф: Жива версія натисніть тут

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

Я хоч і не професійний гольфіст. Це моя спроба, наскільки я пам'ятаю: 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 байт (спасибі Emigna / Adnan)

•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 байт розширення пропозиції Еміньї, використовуючи S для розділення символів на масив, а потім [b] для інтерполяції кожної цифри з відповідним розташуванням у попередньому масиві. Це по суті елементарна транслітерація (розумна).

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

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

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


1
Це на 3 байти коротше. Більш схожа на вашу відповідь, ніж моя :)
Emigna

1
@Emigna, що пряма транслітерація за допомогою нових рядків - це нова ідея, мені це подобається; це може чесно збити 5 байт з багатьох моїх існуючих рішень.
Чарівний восьминога Урна


1
@adnan - підлий підлий ...
Чарівний восьминіг Урна

Я відчуваю, що майже всі мої відповіді потрібно зарахувати Admigna, я б не знав мови без обох ваших постійних прикладів.
Magic Octopus Urn

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 Дякую, я не дуже думав про подвійне введення
Jörg Hülsermann,

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

@Titus Я ненавиджу фізичні переломи на лінії, зроблено
Jörg Hülsermann,

@Titus, справа, хоч і man phpназиває їх параметром : "Також можна обробити стандартний рядок введення за рядком, використовуючи або параметр -R, або -F."
маніпулювання

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-loop: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*
roofcat

1

SpecBAS - 70 байт

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

?є скороченням для PRINTкоманди, і апостроф переміщує курсор до наступного рядка.




1

Луа, 66 байт

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

(((([[# #NailedIt]])))




1

[R], 65 байт

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

Pretty unspectacular, please find a shorter one in R... It's your basic gsub


1

C++ 208 bytes

In response to comments: This is a complete re-post.

#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


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 readable

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

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

Full code

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

Releases

  • v1.0 - 56 bytes - Initial solution.

Notes

The printed results within the link provided will not look like pretended, due to the font used not being monospace.


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 without stdio.h causes warnings but no errors, allowing successful compilation.

Explanation

Printf statement that crams everything into one line, formatting the decoration character with %c.

Try it online


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.