Зіткнути сердиту качку


56

Ніхто не зовсім впевнений, що >:Uпризначений представляти смайлик , але багато вчених вважають, що це схоже на розлючену качку . Припустимо, що так.

Завдання

Враховуючи ціле n від 0 до 3 включно, надрукуйте або поверніть

quack

якщо n = 0,

>:U

якщо n = 1,

     U   U
>  : U   U
 >   U   U
>  : U   U
      UUU

якщо n = 2, або

                  >:U         >:U
>:U               >:U         >:U
   >:U       >:U  >:U         >:U
      >:U         >:U         >:U
         >:U      >:U         >:U
      >:U         >:U         >:U
   >:U       >:U  >:U         >:U
>:U               >:U         >:U
                     >:U>:U>:U

якщо n = 3.

Ви можете припустити, що введення завжди буде дійсним. У виході не повинно бути провідного простору, але будь-яка кількість проміжного простору є нормальною. Качки (за можливим винятком @cobaltduck) не мають толерантності до лазівки. Виграє найкоротший код у байтах.


90
Спочатку я думав "а, що таке качка?". На щастя, ви надали посилання на сторінку Вікіпедії.
Аднан

6
"Качки не мають толерантності до лазівки". Але ти птах не качка, це означає, що ми можемо використовувати лазівки? : P
Пуховик

6
@Downgoat Nope. Крім того, це редагування було зовсім непотрібним, тому я повернув його назад.
Алекс А.

6
@Downgoat s /: P />: U /
ETHproductions

7
"Качки не мають толерантності до лазівки". Це, мій друже, небезпечний стереотип. Якби я не знав твоїх намірів, я можу образитися.
cobaltduck

Відповіді:


19

CJam, 108 90 85 байт

"quack"">:U":D"scT¦{$ì"{269b22bSf*D}:F~[ZYB].*s.+s5/"ÿ3nÜïS{JÐø¦yûn"F*33/z]ri=zN*

Зауважте, що деякі символи не можна друкувати. Спробуйте в Інтернеті!

Фон

Перші два виходи є несжимаючими в CJam.

Стиснення останнього виходу просте. Після зняття всіх каналів рядків ми можемо розділити отриманий рядок при виникненні >:Uта обчислити довжину кожного результуючого рядка пробілів.

Це призводить до масиву

[18 9 0 15 9 3 7 2 9 6 9 9 9 6 9 6 9 9 3 7 2 9 0 15 9 21 0 0 0]

яку ми можемо ефективно зберігати, перетворюючи її з бази 22 в базу 269, отримуючи цифри

[255 12 51 110 220 239 83 123 74 208 248 166 121 251 110 17]

Оскільки кожна цифра менше 256 , ми можемо зберігати її як один байт.

Нарешті, стиснення третього результату стає простішим, якщо ми переносимо рядки та стовпці:

 > > 
  >  

 : : 

UUUU 
    U
    U
    U
UUUU

Перераховуючи ще раз пробіли між символами без пробілу, ми отримуємо масив

[1 1 3 8 1 6 0 0 0 5 4 4 0 0 0 0 0]

що стає

[115 159 99 84 166 123 36 236 6]

при перекодуванні від бази 22 до бази 269.

Як це працює

"quack"   e# Push the first output.

">:U":D   e# Push the second output, and save it in D.

e# Push [115 159 99 84 166 123 36 236 6] as bytes.

"scT¦{$ì"

{         e# Define a code block:
  269b22b e#   Transcode from base 269 to base 22.
  Sf*     e#   Replace each digit with a string of that many spaces.
  D       e#   Push D.
}         e#
:F~       e# Save the block in F. Execute it.
[ZYB]     e# Push [3 2 11].
.*        e# Vectorized repeat; push [">>>" "::" "UUUUUUUUUUU"].
s         e# Flatten the array of strings.
.+        e# Append the nth character to the nth string of spaces.
s5/       e# Flatten and split into chunks of length 5.

e# Push [255 12 51 110 220 239 83 123 74 208 248 166 121 251 110 17] as bytes.

"ÿ3nÜïS{JÐø¦yûn"

F         e# Execute F.
*         e# Join the resulting array of strings of spaces, separating by ">:U".
33/       e# Split into chunks of length 33.
z         e# Zip; transpose rows with columns.

]         e# Wrap the entire stack in an array.
ri        e# Read a token from STDIN and interpret it as an integer.
=         e# Retrieve the element at the corresponding index.
z         e# Zip; transpose rows with columns or map "string" to ["string"].
N*        e# Join, separating by linefeeds.

2
Мені подобається зайве :Dміж двома струнами.
Згарб

7
@Zgarb Він задобрив великого качка-пана. Качка зараз посміхається.
Олексій А.

7
Я переглянув сторінку, думаючи: "172 ... 162 ... 182 ... Я можу перемогти все це. Зачекайте, 90? О, це Денніс Неперевершений ..."
ETHproductions

22

Java, 303 286 байт

Збережено 17 байт завдяки @VoteToClose!

Насправді це не було найкоротшим, я просто подумав, що буде цікаво спробувати на Java.

Створює список змінних рядків, що представляють загальні рядки, потім створює масив усіх виходів, після чого друкує правильний.

String a(int y){String n="\n",d=">:U",A=" ",B=A+A,C=B+B,D=C+C,a="U"+B+" U"+n,G=D+A,H=C+B,c=d+G+d+n,E=B+A,F=C+E;String[]z={"quack",d,C+A+a+">"+B+": "+a+" >"+E+a+">"+B+": "+a+C+B+"UUU",D+D+B+c+d+D+F+c+B+A+d+F+d+B+c+H+d+G+c+G+d+H+c+H+d+G+c+E+d+F+d+B+c+d+D+F+c+D+D+C+A+d+d+d};return z[y];}

Безголівки:

String a(int y) {
    String n = "\n", d = ">:U", A = " ", B = A + A, C = B + B, D = C + C,
            a = "U" + B + " U" + n, G = D + A, H = C + B, c = d + G + d + n,
            E = B + A, F = C + E;
    String[] z = { "quack", d, C + A + a + ">" + B + ": " + a + " >" + E + a + ">" + B + ": " + a + C + B + "UUU", D + D + B + c + d + D + F + c + B + A + d + F + d + B + c + H + d + G + c + G + d + H + c + H + d + G + c + E + d + F + d + B + c + d + D + F + c + D + D + C + A + d + d + d };
    return z[y];
}

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


2
Це добре виглядає! Приємний перший пост, і ласкаво просимо до PPCG!
Conor O'Brien

@AlexA. Дякую за те, що повідомили мені, що я виправив це.
FlyingPiMonster

2
@ kittycat3141 Виглядає чудово. Гарне рішення та дякую за участь у моєму виклику! :)
Олексій А.

Виявляється , що D+Aі C+Bз'являються досить часто , щоб бути golfed далі в 2 -х нових змінних. Також я маю на увазі найменше відчуття, що використання масиву з циклом for може допомогти, але я ще не зрозумів, як ще ...
Addison Crump

9

05AB1E , 162 159 157 байт

Код

Чорт, занадто довго, але це хоча б щось:

">:U"VI3Qið16×7166b1ð:0Y:DUJ,Yð13×JD?X,3838b1ð:0Y:D?X,16255b1ð:0Y:D?X,16367b1ð:0Y:4F?X,}ð21×Y3×J,}¹2Qið4×" U   U"©J,">  :"®JD," >  "?®,,ð6×'U3×J,}¹iY,}"quack

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


Пояснення

Перша частина коду існує ">:U"V, яка встановлює Yцей рядок. Після цього ми просто перевіряємо, чи вхід дорівнює 3. Це робиться в I3Qiчастині. Якщо рівні, друкуємо гігантську сороку:

N = 3

Спочатку починається, з ð16×якого просто висувається 16 космічних символів. Після цього є номер 7166b. Це стосується ">:U "частини, за допомогою невеликої допомоги від Retina :). Я використовував цей скрипт для перетворення рядка у двійкове число. Після цього ми переходимо до тієї 1ð:0Y:частини, яка замінює кожного 1символом пробілу і кожного 0з Y, на який було встановлено >:U. Після цього ми Dускладнюємо цей рядок, зберігаємо його у Xкористуванні Uта Join стеком. Ми з'являємо це за допомогою ,, яке друкує повний рядок новим рядком. Всі інші після цього базуються на одному принципі. Оператор if закінчується на другій }.

Повну конверсію можна знайти тут .

N = 2

Тепер перевіряємо, чи вхід дорівнює 2. Це робиться в ¹2Qiчастині. Після цього, якщо дорівнює, натискаємо пробіл 4 рази за допомогою ð4×. Після цього натискаємо на " U U"рядок і зберігаємо її за допомогою ©(ідея кричуще вкрадена з Jelly: p). Ми знову Jзмащуємо стек і друкуємо це новим рядком. Після цього, ми поміщаємо "> :"рядок, витягти , " U U"використовуючи ®, Jойн стека і DДублювати цей рядок і надрукувати їх як на одній і тій же лінії.

Коротка вікторина, що це буде робити " > "?®,:?

Після друку вищевказаного рядка ми отримуємо дублікат другого рядка обличчя і роздруковуємо його (оскільки це те саме, що і другий рядок).

Остання частина, яку охоплює ця справа:

ð6×'U3×J,

ð6×        # Push the space character × 6
   'U3×    # Push the "U" character three times
       J,  # Join and print pop with a newline

N = 1

Це легше пояснити:

¹1QiY

¹1Qi   # Check if the input is equal to 1
    Y  # Push the magpie face
       # This is then implicitly printed

N = 0

¹0Qi"quack

¹0Qi        # Check if the input is equal to 0
    "quack  # Weird sound what magpies make
            # Implicitly printed

Пояснення plz? : P
Addison Crump

@VoteToClose Done :)
Аднан

"шлях занадто довгий"? Дивіться мою відповідь :-P
Луїс Мендо,

2
ТИЛИ, що сороки лукавлять. Мабуть.
Алекс А.

8

Віци , 172 171 159 байт

О, гуси. Якщо я хотів чимось проявити силу методів, я це отримав.

' 'V1+m
'kcauq'Z
'U:>'Z
58m5m6m'   > 'Z5m6m'UUU'68m
f3+bm9mamcm98m2m6bmcmam9mf6+8m3\[2m]
a'U   U'Z
' :  >'Z5m
Z2m98ma2m
\VZ
2mfbm
VVVZ2m78m2mVV7m
8m7m
68m2m9bm

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

Як це працює, називаючи різні методи протягом усього себе. Пояснення нижче:

' 'V1+m
' 'V      Save character literal ' ' as a permanent variable.
    1+    Add one to the top item of the stack (input + 1)
      m   Go to that index of code.

'kcauq'Z
'kcauq'   Push 'quack' to the stack.
       Z  Output everything in the stack as a char.

'U:>'Z
'U:>'Z    Ouput ">:U" with the same method as the previous line.

Now on to some more... interesting lines.

58m5m6m'   > 'Z5m6m'UUU'68m
5              Push space, push 4
 8m            Call the 8th line index.
               As we will soon see, the 8th line index duplicates the space
               the number of times specified by the number just before the call 
               (4 in this case)
   5m          Call the 5th line index.
               The 5th line index outputs the 'U   U' and a newline.
     6m        Call the 6th line index.
               The 6th line index outputs '>  : U   U' and a newline.
'   > 'Z       Output ' >   '.
        5m6m   Same method calls as before.
'UUU'          Push 'UUU'.
     68m       Push 6, then call the 8th line index. This gives us the correct padding.

f3+bm9mamcm98m2m6bmcmam9mf6+8m3\[2m]
f3+              Push 18.
   bm            Call the 11th line index.
                 The 11th line index calls the 8th line index (which we've already seen
                 in action) and then the 7th line index, which you can find and explanation
                 for below (it does a lot)
     9m          Call the 9th line index.
                 The 9th line index outputs '>:U               >:U         >:U' (explanation lower)
       am        Call the 10th line index.
                 ...I'm gonna stop explaining these and just tell you to go to the lines now. :P
         cm      Call the 12th line index.
9                Push space, push 9.
 8m              Call the 8th line index (explained below and before).
   2m            Call the 2nd line index.
     6           Push 6.
      bm         Call the 11th line index. We've finished up to '>:U      >:U         >:U' now.
cm               You guessed it! Call the 12th line index. (explanation below)
  am             Call the 10th line index. (explanation below)
    9m           Call the 9th line index. (explanation below)
f6+              Push space, push 19 21.
   8m            Call the 8th line index. (explanation below)
     3\[2m]      Call the 2nd line index thrice.

All of the rest of these methods are supporting methods now.

a'U   U'Z       Output 'U   U' followed by a newline.

' :  >'Z5m      Output '>  : U   U' followed by a newline.

Z2m98ma2m
Z               Output everything currently in the stack.
 2m             Call the 2nd line index.
   9            Push space, push 8.
    8m          Call the 8th line index. (explained below)
      a         Push a newline to the stack.
       2m       Call the 2nd line index.
                This handles the biggest angry duck face's faces showing the eyebrows and eyes.

\VZ
\V    Push space as many times as the top item specifies.
  Z   Output everything in the stack.

2mfbm
2m      Call the 2nd line index.
  f     Push space, push 14.
   bm   Go to the 11th line index.
        This handles the mouth and some parts of the eyebrows of the biggest duck face.

VVVZ2m78m2mVV7m
VVVZ              Output 3 spaces (and whatever was pushed before it)
    2m            Call the 2nd line index.
      7           Push space, push 6.
       8m         Call the 8th line index. (explained... above)
         2m       Call the 2nd line index.
           VV     Push 2 spaces.
             7m   Call the 7th line index.

8m7m     This is pretty damn self-explanatory if you've read this far.

68m2m9bm
6            Push space, push 5.
 8m          Call the 8th line index.
   2m        Call the 2nd line index.
     9       Push space, push 9.
      bm     Call the 11th line index.

Цей код смішний. Це багатослівна форма:

toggle single quote;
 ;
toggle single quote;
save top as permanent variable;
push 1;
add top two;
goto top method;
:toggle single quote;
k;
push 12;
push 10;
flatten top two stacks;
q;
toggle single quote;
output stack as chars;
:toggle single quote;
U;
clone current stack;
go forward;
toggle single quote;
output stack as chars;
:push 5;
push 8;
goto top method;
push 5;
goto top method;
push 6;
goto top method;
toggle single quote;
 ;
 ;
 ;
go forward;
 ;
toggle single quote;
output stack as chars;
push 5;
goto top method;
push 6;
goto top method;
toggle single quote;
U;
U;
U;
toggle single quote;
push 6;
push 8;
goto top method;
:push 15;
push 3;
add top two;
push 11;
goto top method;
push 9;
goto top method;
push 10;
goto top method;
push 12;
goto top method;
push 9;
push 8;
goto top method;
push 2;
goto top method;
push 6;
push 11;
goto top method;
push 12;
goto top method;
push 10;
goto top method;
push 9;
goto top method;
push 15;
push 6;
add top two;
push 8;
goto top method;
push 3;
repeat next instruction set top times;
begin recursive area;
push 2;
goto top method;
end recursive area;
:push 10;
toggle single quote;
U;
 ;
 ;
 ;
U;
toggle single quote;
output stack as chars;
:toggle single quote;
 ;
clone current stack;
 ;
 ;
go forward;
toggle single quote;
output stack as chars;
push 5;
goto top method;
:output stack as chars;
push 2;
goto top method;
push 9;
push 8;
goto top method;
push 10;
push 2;
goto top method;
:repeat next instruction set top times;
save top as permanent variable;
output stack as chars;
:push 2;
goto top method;
push 15;
push 11;
goto top method;
:save top as permanent variable;
save top as permanent variable;
save top as permanent variable;
output stack as chars;
push 2;
goto top method;
push 7;
push 8;
goto top method;
push 2;
goto top method;
save top as permanent variable;
save top as permanent variable;
push 7;
goto top method;
:push 8;
goto top method;
push 7;
goto top method;
:push 6;
push 8;
goto top method;
push 2;
goto top method;
push 9;
push 11;
goto top method;

7

JavaScript (ES6), 163 байти

var solution =

n=>["quack",d=">:U",`5U3U
>2:1U3U
1>3U3U
>2:1U3U
6UUU`,`99090
096090
30702090
609090
906090
609090
30702090
096090
993000`][n].replace(/\d/g,c=>+c?" ".repeat(c):d)
<input type="number" oninput="R.textContent=solution(+this.value)"><pre id="R"></pre>

Пояснення

Використовує моє стиснення за допомогою JavaScript: кодування довжиною бігу. Цифри 1для 9відображення в тому численному просторі, 0карти на розлючене обличчя качки та будь-який інший символ залишаються однаковими.


1
Дуже вражаючий для мови, що не займається гольфом, але ряди прямо над і під центром n = 3, здається, відсутні.
ETHproductions

@ETHproductions На жаль, не впевнений, що там сталося. Виправлено зараз.
користувач81655

7

Japt, 116 105 102 99 96 байт

["quack""c)`+«öÂ[@=^Gñ`1]o2"mc r'4#¿+R "4z>2:z >2z>2:z6UUU"rz" U3U
" '1]®r'1">:U" r"%d"_SpZ}ÃgU

Містить недруковану версію. Перевірте це в Інтернеті!

Як це працює

Перші два рядки зовсім не стискаються. Третій стискається просто заміною кожного пробілу пробілів на його довжину, потім " U3U"на "z". Останній складніший:

  1. Замініть кожен пробіг по 2-9 пробілів на його довжину.
  2. Замініть >:Uна 1.
  3. Замініть 191\nна 4. ( 4не використовується ніде в рядку.)
  4. Зіставте кожен дійсний код байта ( 10- 255або 0A- FF) до символу за допомогою цього кодового коду.

Отриманий рядок має лише 21 19 байт, але декомпресія займає ще 31 29.

Після розпакування рядків ми просто забираємо елемент у положення U, вхід. (Масив розташований [0,3,2,1]тому, що є помилка, яка змушує його рахувати з кінця масиву замість початку.)

[                      // Create an array of the following:
  "quack"              //  "quack".

  "c)`+«öÂ[@=^Gñ`1]o2" //  Take this string (contains an unprintable).
                       //  Map each char to its char code.
                       //  This produces "994196431712461949164619431712419649931112".
  r'4#¿+R              //  Replace each "4" with the char code of "¿" (191) + a newline.

  "4z>2:z >2z>2:z6UUU" //  Take this string.
  rz" U3U\n"           //  Replace each "z" with " U3U\n".

  '1                   //  "1".
]
®              Ã       // Map each item by this function:
r'1">:U"               //  Replace each "1" with ">:U".
r"%d"_SpZ}             //  Replace each remaining digit Z with Z spaces.

gU                     // Get the item at index -U, wrapping. 
                       // (This should just be U, but there's a bug which negates it.)

5

MATL , 283 182 байт

101 байт збережено завдяки @Adnan!

При цьому використовуються десяткові числа для кодування індексів 0... 3до чотирьох символів для випадків 2 та 3. Десяткові числа, можливо, можуть бути стиснуті за допомогою кодування base-64, але шаркіт!

Для випадку 3 використовується дуже приємний трюк, запропонований @Adnan: визначте двійкові послідовності для кодування кожного рядка, де 0і 1відповідають пробілу і >:Uвідповідно.

~?'quack'}G1=?'>:U'}G2=?' :>U'12336 8466480h2109488h8466480h4032h4YA47-)}268697600 67174401h16795656h67174464h67174912h67174464h16795656h67174401h14680064h"@BP48+]Xh49'>:U'YX48 32YXc

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


3
Як щодо в останньому випадку, використовуючи це , замінюючи 1прогалини і 0з >:Uрядка. Я не знаю, чи допоможе це.
Аднан

@Adnan Це гарна ідея!
Луїс Мендо

5
@Adnan Збережено 101 байт: -O
Луїс Мендо,

Це чудово! Дуже приємна відповідь! :)
Аднан

5

Кориця гумка, 76 байт

0000000: 6c33 502b 2c4d 4cce b636 54b3 b30a b536  l3P+,ML..6T....6
0000010: 5253 0081 5010 e6b2 5350 b082 3215 ecb0  RS..P...SP..2...
0000020: 8a42 1487 865a 1bab 2960 00a0 79c8 6c2e  .B...Z..)`..y.l.
0000030: 2026 a002 4221 0430 55c0 5938 cd40 9720   &..B!.0U.Y8.@. 
0000040: 6c06 6177 90e9 17ac 4102 4100            l.aw....A.A.

Не конкуруючий з тих пір, оскільки Cinnamon Gum був створений після цього виклику.

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

Пояснення

Перший байт lвказує режим: в цьому випадку він повідомляє Cinnamon Gum перейти в режим таблиці пошуку. Коричнева гумка потім розтискає решту струни (яка була стиснута zopfli --deflate) в це:

0&quack;1&>:U;2&     U   U
>  : U   U
 >   U   U
>  : U   U
      UUU;3&                  >:U         >:U
>:U               >:U         >:U
   >:U       >:U  >:U         >:U
      >:U         >:U         >:U
         >:U      >:U         >:U
      >:U         >:U         >:U
   >:U       >:U  >:U         >:U
>:U               >:U         >:U
                     >:U>:U>:U

Потім він розбивається на ;, додає кожну пару ключових значень (з &роздільником) у словник та виводить dictionary[input].


5

JavaScript ES6, 232 223 203 188 байт

Збережено 29 44 байти завдяки ETHproductions!

n=>[`quack`,r=`>:U`,`     U   U
>  : U   U
 >   U   U
>  : U   U
      UUU`,`00022
10022
0100 1  12
00122
20012
00122
0100 1  12
10022
0000211`.replace(/\d/g,N=>[g=`   `,r,g+g+g+r][N])][n]

Перевірте це!


Безумовно, це може бути atob'd ... якщо ні, 1чи 0можна перетворити на тризначний номер?
Пуховик

1
@Downgoat btoaing та тринадцять триваліші.
Conor O'Brien

Старий відповідь, але ви могли б заощадити , як 15 байт, змінюючи r+g+g+g+rдо g+g+g+rі коригування рядка відповідно.
ETHproductions

0

GML, 265 байт

Відмінна відповідь порту @ kittycat3141 з пропозицією додатково пограти ще двома новими змінними (які я назвав G і H) від @VoteToClose. Мені також вдалося скоротити його порівняно із сильно вираженим синтаксисом GML.

d=">:U"A=" "B=A+A;C=B+B;D=C+C;G=D+A;H=C+B;a="U"+B+" U"+"#"c=d+G+d+"#"E=B+A;F=C+E;x[0]="quack"x[1]=d;x[2]=C+A+a+">"+B+": "+a+" >"+E+a+">"+B+": "+a+H+"UUU"x[3]=D+D+B+c+d+D+F+c+B+A+d+F+d+B+c+H+d+G+c+G+d+H+c+H+d+G+c+E+d+F+d+B+c+d+D+F+c+D+D+C+A+d+d+d;return x[argument0]
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.