Зашифруйте мені печиво


16

Виклик

Кодуйте печиво типу ASCII відповідно до введених даних.

Вхідні дані

  • Вид печива. Це одна з трьох струн: "Звичайна", "Шоколадна" або "Горішки". Це можуть бути аргументи функції, stdin (або найближчий еквівалент) або аргументи файлів.

Вихідні дані

  • Cookie ASCII. Дивіться нижче.

Повинно бути

     ___
    /   \
    |   |
    \___/

для простого введення,

     ___
    /. .\
    | . |
    \___/

для введення шоколаду та нарешті

     ___
    /^  \
    |^ ^|
    \___/

для введення гайки.

Інша інформація

  • Це мій перший виклик, це так просто, як це може бути. Конструктивний зворотний зв'язок дуже цінується.
  • Використовуйте будь-які засоби для цього.
  • Трейлінг простору чудово.
  • Це виклик для гольфу з кодом, тому найкоротший запис в кінці 9 днів (середа, 12 серпня 2015 року) виграє.

Дякую!

Переможець стає Якубе, використовуючи Pyth з 41 байтом. Дякую всім, хто брав участь. Зараз я буду ставити перед собою завдання розв'язати складніші виклики.


7
Це приємно, але досить просто. Це можна значно покращити, вимагаючи введення користувачем діаметра або кількості файлів cookie кожного типу. Чи повинні шоколадні чіпси та горіхи знаходитись у відповідності до прикладів? (зі змінним діаметром, можливо, вони можуть бути випадковими.) Однак, це погана форма змінити завдання після публікації. Я пропоную вам або 1. залишити його таким, яким він є, або 2. видалити його, подумати трохи більше про нього та / або опублікувати його в meta.codegolf.stackexchange.com/q/2140/15599, а потім перезавантажити пізніше.
Рівень Рівер Сент

1
Дозволити кілька начинок могло бути ще одним способом зробити це ще цікавішим. Потім знову прості виклики часто отримують велику участь. До речі, два файли cookie мають провідний пробіл у вихідному екземплярі. Це, мабуть, не навмисно?
Рето Коради

1
Я вніс незначну редагування, щоб скасувати відступ, тому всі куки мають однаковий провідний пробіл. Я припускаю, що чотири провідні простори є проблемою форматування і не потрібні? Ви повинні вказати, чи дозволені провідні / зворотні нові рядки. Я б запропонував забороняти зайвий пробіл, за винятком дозволу необов'язкового проходження нового рядка.
Рівень річки Св.

1
Чи будуть дозволені функції?
Міський голова

1
Після того, як @steveverrill відкрив мені очі , це здається просто спрощеною версією Ви хочете кодувати сніговика? . Деякі подальші вимоги, як-от згаданий змінний діаметр, справді вдосконалили б його.
манастирська робота

Відповіді:



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]}
манатура

Забудь це. Ще раз trдоводиться коротше:->s{' ___↵/% \↵|% %|↵\___/'.tr ?%,'^. '[s.ord%3]}
маніпуляція

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

На жаль Ти правий. Це була швидка спроба BC (перед кавою). Надто рано, щоб помітити різницю в розміщенні фішок. :( (BTW, "%" не має нічого спільного з trсинтаксисом '. Просто персонаж не бере участь у мистецтві файлів 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

Гаразд, але я думаю, що я все-таки дотримуюся першого, а другий залишу таким, яким він є.
Лоуджо

@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\\___/"

Це функція анонімної стрілки. Він використовує довжину введення, щоб визначити, яке печиво малювати.

Пояснення:

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 символи. Спасибі.
Merin Nakarmi

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 символів / байт


Гольф

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

270 символів LUA 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

це моя друга відповідь на будь-які виклики
Алекс Аллен

"Який тип файлу cookie ви хочете" можна вийняти, він не потрібен. Це займає 39 байт прямо там.
The_Basset_Hound

Це проблема з кодовим гольфом. Спробуйте трохи скоротити код. Наприклад , Вам не потрібна первісна друк, скоротити cookieдо c, видалити пробілу під час МФСА, видалити ці непотрібні io.read()S, перша і остання рядок печива завжди те ж саме, ....
Jakube

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

@Jakube скоротив файли cookie до c
Alex Allen

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.