Кодируй мне печенье


16

Вызов

Кодировать файл ASCII cookie в соответствии с входными данными.

вход

  • Печенье вид. Это одна из трех строк: «Обычная», «Шоколадная» или «Ореховая». Может быть аргументами функции, стандартным (или ближайшим аналогом) или файловым аргументом.

Выход

  • ASCII печенье. См. ниже.

Должно быть

     ___
    /   \
    |   |
    \___/

для простого ввода,

     ___
    /. .\
    | . |
    \___/

для ввода шоколада и, наконец,

     ___
    /^  \
    |^ ^|
    \___/

для ввода орехов.

Дополнительная информация

  • Это мой первый вызов, он настолько прост, насколько это возможно. Конструктивная обратная связь с благодарностью.
  • Используйте любые средства, чтобы сделать это.
  • Задние пробелы в порядке.
  • Это кодовое соревнование по гольфу, поэтому выигрывает самый короткий вход в конце 9 дней (среда, 12 августа 2015 года).

Спасибо!

Победителем является Якуб, использующий Pyth с 41 байтом. Спасибо всем, кто участвовал. Теперь я поставлю перед собой задачу решить более сложные задачи.


7
Это хорошо, но довольно просто. Это может быть значительно улучшено, если потребуются пользовательские данные для диаметра или количества файлов cookie каждого типа. Должны ли шоколадные чипсы и орехи быть в месте в соответствии с примерами? (с переменным диаметром, возможно, они могут быть случайными.) Тем не менее, это плохая форма, чтобы изменить задачу после публикации. Я предлагаю вам либо: 1. оставить все как есть, либо 2. удалить его, подумать еще об этом и / или опубликовать его в meta.codegolf.stackexchange.com/q/2140/15599, а затем сделать репост позже.
Уровень Река Сент-

1
Разрешение нескольких начинок могло бы стать еще одним способом сделать это более интересным. С другой стороны, простые вызовы часто принимают активное участие. Кстати, два файла cookie имеют пробел в начале выборки. Это, вероятно, не намеренно?
Рето Коради

1
Я сделал небольшое изменение, чтобы отменить отступ, чтобы у всех файлов cookie были одинаковые начальные пробелы. Я предполагаю, что четыре ведущих пробела являются проблемой форматирования и не требуются? Вы должны указать, разрешены ли начальные / конечные символы новой строки. Я бы предложил запретить ненужные пробелы, за исключением разрешения дополнительного завершающего перевода строки.
Уровень Река St

1
Будут ли функции разрешены?
MayorMonty

1
После того, как @steveverrill открыл мне глаза , это, кажется, просто упрощенная версия. Хотите написать код снеговика? , Некоторые дополнительные требования, такие как упомянутый переменный диаметр, действительно улучшат его.
manatwork

Ответы:


4

Pyth, 42 41 байт

X" ___
/d a\\
|cac|
\___/"G.>"^X .  .^"Cz

Попробуйте онлайн: Regular Input / Test Suite

Объяснение:

 "..."                      template string
X     G                     replace "a..z" in ^ with:
                   Cz         convert z to an integer (base 256 of ord(char))
       .>"^X .  .^"           rotate "^X .  .^"
                              ["Plain"     -> " .  .^^X", 
                               "Chocolate" -> ".  .^^X ", 
                               "Nuts"      -> " .^^X . "]

7

Руби, 73

->s{' ___
/'+['^  \
|^ ^','. .\
| . ','   \
|   '][s[0].ord%3]+'|
\___/'}

Это анонимная лямбда-функция. Вот это в тестовой программе:

g=->s{' ___
/'+['^  \
|^ ^','. .\
| . ','   \
|   '][s[0].ord%3]+'|
\___/'}

puts g.call(gets)

Он просто использует первую букву типа cookie (в верхнем регистре) и получает его по модулю 3, чтобы получить индекс в диапазоне 0..2. Затем он возвращает строку, представляющую cookie, с соответствующими строками, вставленными в нужных местах.


Как вы думаете, что ordметод может сделать, если вы вызываете его для всей строки? Моей первой идеей было форматирование:->s{" ___\n/%1$s \\\n|%1$s %1$s|\n\\___/"%'^. '[s.ord%3]}
manatwork

Забудь это. Еще раз trоказывается короче:->s{' ___↵/% \↵|% %|↵\___/'.tr ?%,'^. '[s.ord%3]}
Манатворк

@ Manatwork спасибо за ваши предложения. Я пропустил s[0] --> s, мне никогда не приходило в голову попробовать это. Ваш код, похоже, не дает правильного ответа для случая с шоколадом, поскольку шоколадные чипсы находятся в разных местах, чем орехи. Тем не менее, там есть несколько полезных идей, которые я рассмотрю позже. Я не использовал trили %раньше.
Уровень Река Сент-

К сожалению. Вы правы. Это была быстрая попытка до нашей эры (до кофе). Слишком рано, чтобы заметить разницу в размещении фишек. :( (Кстати, «%» не имеет ничего общего с trсинтаксисом s. Это просто символ, не участвующий в искусстве cookie, который я использовал в качестве заполнителя.)
manatwork

4

Python 2.7.6, 99 байт

def c(t):n=hash(t)%3;return" ___\n/"+" ^."[n]+" "+"  ."[n]+"\\\n|"+[" ","^ ^"," . "][n]+"|\n\\___/"

Этот алгоритм основан на том факте, что hash(cookie)%3дает 0 когда cookie = "Plain", 1 когда cookie = "Nutи 2 когда cookie = "Chocolate. Если кто-нибудь знает способ сделать этот код короче, пожалуйста, дайте мне знать в комментариях.



«Используйте любые средства, чтобы сделать это». Да, необязательные аргументы допускаются.
The_Basset_Hound

Хорошо, но я думаю, что я все еще буду придерживаться первого и оставлю второе как есть.
Loovjo

@BetaDecay Я просто не думаю, что дополнительные аргументы действительно в духе кода-гольфа. Я действительно не знаю почему, я просто думаю, что этого нельзя допустить. Теперь, когда они имеют одинаковую длину, я удалил версию с необязательными аргументами.
Loovjo

3
@Loovjo Использование странных и необычных методов - весь дух кода гольфа :)
Beta Decay

3

С: 122

q(char *p){char *t,*m;int i=*p%3;t=i?i%2?". .":"   ":"^  ";m=i?i%2?" . ":"   ":"^ ^";printf(" ___\n/%s\\ \n|%s|\n\\___/",t,m);}

Объяснение после того, как я закончу играть в гольф.

Пример использования:

 int main(void){
 q("Plain");
 printf("\n");
 q("Nut");
 printf("\n"); 
 q("Chocolate");
 }

3

CJam, 49 48 байтов

" ___
/""^  ^ ^. . ."S7*+6/rci=3/"\
|"*"|
\___/"

Попробуйте онлайн в интерпретаторе CJam .

Как это устроено

" ___
/"

e# Push that string.

"^  ^ ^. . ."S7*+6/

e# Push that string, append 7 spaces and split into chunks of length 6.
e# This pushes ["^  ^ ^" ". . . " "      "].

rci

e# Read from STDIN, cast to character, then to integer.
e# "Plain", "Chocolate", "Nuts" -> 'P', 'C', 'N' -> 80, 67, 78

=

e# Select the corresponding element from the array.
e# Arrays wrap around in CJam, so for an array A of length 3,
e# A80= is A2=, A67= is A1= and A78= is A0=.

3/

e# Split into chunks of length 3.

"\
|"*

e# Join those chunks, using that string as separator.

"|
\___/"

e# Push that string.

В конце CJam автоматически печатает все элементы в стеке.


3

Javascript (ES6), 90

s=>" ___\n/"+(s.length-4?s.length-5?". .\\\n| . ":"   \\\n|   ":"^  \\\n|^ ^")+"|\n\\___/"

Это анонимная функция стрелки. Он использует длину входных данных, чтобы определить, какой файл cookie использовать.

Объяснение:

s=>
 " ___\n/" +               //build the first part of the cookie

 (s.length - 4 ?           //if the length is 4, this condition will evaluate to 0, which coerces to false. Otherwise it is true

      s.length - 5 ?            //if the length is 5, this evaluates to false; otherwise true

           ". .\\\n| . " :      //build the unique part of the Chocolate cookie, if length was not 5
           "   \\\n|   "        //build the unique part of the Plain cookie, if length was 5

      : "^  \\\n|^ ^"      //build the unique part of the Nuts cookie, if length was 4
 )

 + "|\n\\___/"             //build the last part of the cookie, and implicitly return the built string

Тестировать:

f=s=>" ___\n/"+(s.length-4?s.length-5?". .\\\n| . ":"   \\\n|   ":"^  \\\n|^ ^")+"|\n\\___/"

console.log(f("Nuts"))
console.log(f("Plain"))
console.log(f("Chocolate"))

3

Brainfuck, 481 447 436 байт

Почему бы не BrainFuck ?, программа, вероятно, может быть больше в гольфе, но я думаю, что это довольно аккуратно.

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

3

C # с отступом и переводом строки

using System;
class Cookie
{
    static void Main()
    {
      String E="",N="",C=Console.ReadLine();
      if(C=="P"){E="   ";N="   ";}
      if(C=="C"){E=". .";N=" . ";}
      if(C=="N"){E="^  ";N="^ ^";}
      Console.Write(" ___ \n/" + E + "\\ \n|" + N + "|\n\\___/");
    }
}

Гольф (225 персонажей)

using System;class X{static void Main(){String E="",N="",C=Console.ReadLine();if(C=="P"){E="   ";N="   ";}if(C=="C"){E=". .";N=" . ";}if(C=="N"){E="^  ";N="^ ^";}Console.Write(" ___ \n/" + E + "\\ \n|" + N + "|\n\\___/");}}[![enter image description here][1]][1]

1
Почему нет String C= Console.ReadLine(),E=... и т. Д.?
rpax

Привет @rpax, Ваш комментарий помог мне обрезать 2 символа. Благодарю.
Мерин Накарми

2

C # 6, 105 байт

Таким образом, почти дошло до этих 100 байтов, но я не знаю, где можно выжать последние несколько байтов: C

string C(string t)=>$" ___\n/{(t[0]=='C'?". .\\\n| . ":t[0]=='N'?"^  \\\n|^ ^":"   \\\n|   ")}|\n\\___/";

2

Pyth, 58 54 53 52 50 байт

+d*\_3p+\/j"\\
|"c@["^  ^ ^"*". "3*d6)Chz3\|"\___/

Я не думаю, что это может быть в гольфе больше. Я действительно пытался сжать это в менее чем 50 байтов


Быстрый и простой". . . " -> *". "3
Sp3000

Если вам интересно, я нашел хороший способ сделать это в 42 байта .
Якуб

2

JavaScript (ES6), 72 байта

Примерно так просто, как это получается ... новые строки считаются по 1 байту каждая.

f=s=>` ___
/${s[4]?s[5]?`. .\\
| . `:`   \\
|   `:`^  \\
|^ ^`}|
\\___/`

демонстрация

Поскольку это ES6, эта демонстрация пока работает только в Firefox и Safari.

f=s=>` ___
/${s[4]?s[5]?`. .\\
| . `:`   \\
|   `:`^  \\
|^ ^`}|
\\___/`

// Snippet stuff

A.innerHTML = f("Nuts");
B.innerHTML = f("Plain");
C.innerHTML = f("Chocolate");
<p>Nuts</p>
<pre id=A></pre>

<p>Plain</p>
<pre id=B></pre>

<p>Chocolate</p>
<pre id=C></pre>


2

Commodore 64 BASIC, 181 байт

10 INPUT A$
20 IF A$="PLAIN" THEN B$="/   \":C$="|   |"
30 IF A$="CHOCOLATE" THEN B$="/. .\":C$="| . |"
40 IF A$="NUTS" THEN C$="/^  \":C$="|^ ^|"
50 PRINT" ___":PRINT B$:PRINT C$:PRINT"\___/"

Примечания:

Вместо обратной косой черты \были использованы символы SHIFT-M, для косой черты /- SHIFT-N и для труб |- SHIFT-T. SHIFT-Z (карточный алмазный знак) использовался для^ . На самом деле символы не имеют значения, поскольку все они занимают один байт каждый.

Поскольку на C64 каждая команда (PRINT, INPUT, THEN и т. Д.) Занимает 2 байта в памяти (или даже хотя бы один, IIRC), язык BASIC стоил попробовать (однако, он занял больше байтов, чем я ожидал).

Размер программы рассчитывался путем измерения свободной памяти перед вводом программы (38909 байт) и после (38728 байт) с использованием PRINT FRE(0)+65536 команды, что дает разницу в 181 байт.

Код протестирован и скриншоты подготовлены с помощью этого инструмента: http://codeazur.com.br/stuff/fc64_final/ (GPL).

Скриншоты:

C64 скриншот 1

C64 скриншот 2


2

Lua 5,3, 113 байт 112 байт

c=io.read()print(' ___\n/'..(c=='plain'and'   \\\n|   'or c=='nut'and'^  \\\n|^ ^'or'. .\\\n| . ')..'|\n\\___/')

Он использует много троичных операторов и конкатенацию строк, и я выжал все пробелы, которые не являются частью самого вывода.


2

Java 258 217 символов / байт


Golfed

class C{public static void main(String[] a){p(" ___");if(a[0].equals("Chocolate")) {p("/. .\\");p("| . |");}if(a[0].equals("Nut")){p("/^  \\");p("|^ ^|");}p("\\___/");}static void p(String s) {System.out.println(s);}}

оригинал

class C {
    public static void main(String[] a) {
        p(" ___");
        if(a[0].equals("Chocolate")) {
            p("/. .\\");
            p("| . |");
        }
        if(a[0].equals("Nut")){
            p("/^  \\");
            p("|^ ^|");
        }
        p("\\___/");
    }
    static void p(String s) {
        System.out.println(s);
    }
}

1

LUA 270 символов 270 байтов

    c = io.read()
    if c == "plain" then
    print" ___"
    print"/   \\"
    print"|   |"
    print"\\___/"
    io.read()
    elseif c == "chocolate" then
    print" ___"
    print"/. .\\"
    print"| . |"
    print"\\___/"
    io.read()
    elseif c == "nut" then
    print" ___"
    print"/^  \\"
    print"|^ ^|"
    print"\\___/"
    end

это мой второй ответ на любые проблемы
Алекс Аллен

«Какой тип куки вы хотите» можно удалить, он не нужен. Это занимает 39 байтов прямо там.
The_Basset_Hound

Это вызов для игры в гольф. Попробуйте немного сократить свой код. Например, вам не нужна начальная печать, сокращайте cookieдо c, удаляйте пробелы во время ifs, удаляйте эти ненужные io.read()s, первая и последняя строки cookie всегда одинаковы, ....
Jakube

@BassetHound удалил заявление о печати
Алекс Аллен

@Jakube сократил печенье до c
Алекс Аллен

1

LOLCODE 265 символов

HAI
I HAS A T
GIMMEH T
VISIBLE " ___"
BOTH SAEM T AN "Chocolate", O RLY?
YA RLY
VISIBLE "/. .\"
VISIBLE "| . |"
OIC
BOTH SAEM T AN "Nut", O RLY?
YA RLY
VISIBLE "/^ ^\"
VISIBLE "|^  |"
OIC
BOTH SAEM T AN "Plain", O RLY?
YA RLY
VISIBLE "/   \"
VISIBLE "|   |"
OIC
VISIBLE "\___/"
KTHXBYE

Run

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