Выкопай мне мороженое, пожалуйста


13

Сделай мне мороженое, пожалуйста

У нас в Новой Англии множество отличных мест для мороженого. Большинство из них закрыты на зиму, так что ...

   .-@@-.
  (======)
 (--------)
(==========)
(__________)
 \/\/\/\/\/
  \/\/\/\/
   \/\/\/
    \/\/
     \/

ЦЕЛЬ Вывести вышеупомянутый конус мороженого точно. (или вернуть его из функции)

Это код гольф, поэтому самый короткий ответ выигрывает


Это кажется странным вызовом, не будет ли выполнение этого в виде строкового литерала технически решением для некоторых интерпретируемых языков, таких как JS / Python?
Джейкоб Перси

2
@JacobPersi Это классическая проблема сложности колмогоров , где цель состоит в том, чтобы максимально сжать заданную строку, жесткое кодирование, вероятно, не слишком гольфы
Mr. Xcoder

6
@MichaelDorgan многие языки были придуманы для игры в гольф кода, но это не должно отговаривать вас от ответов на производственных языках - здесь предлагается высказывать интересные ответы, и ответ на iCeCrEaMCoNeних не будет одним из таких. На этом сайте даже было правило, что вы не можете отвечать на языке (или использовать функцию), более новый, чем задача, но его заменили на «не произносите тривиальные ответы». В конце концов, эти языки игры в гольф существуют просто для удовольствия :)
dzaima

3
Понял. Я недавно ответил на это в Arm Assembler. Очевидно, что не собираюсь побеждать, но, тем не менее, весело :)
Майкл Дорган

1
@StevenH. Вот мета пост - он несколько стар, но многие до сих пор его не видели
dzaima

Ответы:


10

SOGL V0.12 , 24 байта

u%⅝⁾⁷‰┘Η:⅛6s⁹№K⌠RΝīL°‘§╬

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

Простое решение для сжатия:

....‘    push "@-.¶===(¶----(¶=====(¶_____(¶\/\/\¶/\/\¶\/\¶/\¶\"
     §   pad with spaces and reverse horizontally
      ╬  palindromize with 0 overlap and mirroring the characters

Нет версии для сжатия - гораздо дольше, так как сжатие SOGL работает хорошо для этого



8

PowerShell , 85 байт

"   .-@@-.
  (======)
 (--------)
($('='*10))
($('_'*10))"
1..5|%{" "*$_+'\/'*(6-$_)}

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

ИЛИ

PowerShell , 85 байт

"   .-@@-.
  (======)
 (--------)"
'=','_'|%{"($($_*10))"}
1..5|%{" "*$_+'\/'*(6-$_)}

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

Выбирайте. В обоих случаях первые три строки не имеют достаточного количества байтов для какого-либо сжатия в PowerShell.

В первом случае используется умножение строк для получения каждой из 10-ти строк =и _строк, а во втором - умножение цикла и цикла. В любом случае, последняя линия образует конус, зацикливание от 1до5 каждой итерации, выводя соответствующее количество пробелов, за которым следует соответствующее количество частей конуса.

Все эти строки остаются в конвейере, и неявное Write-Outputзавершение программы дает нам новую строку между элементами бесплатно.


7

V , 48 46 байт

i\/5ñ>GÄXa/\ñS³ .-@@-.
  (¶=)
 (¸-)
(±=)
(±_)

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

HexDump:

00000000: 695c 2f1b 35f1 3e47 c458 612f 5cf1 53b3  i\/.5.>G.Xa/\.S.
00000010: 202e 2d40 402d 2e0a 2020 28b6 3d29 0a20   .-@@-..  (.=). 
00000020: 28b8 2d29 0a28 b13d 290a 28b1 5f29       (.-).(.=).(._)

7

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

@-.⸿E=-=⁺×ι⁺³κ)×_⁵P↙⁶)⸿‖M←¤/\

Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:

@-.⸿

Напечатайте правую половину первой строки.

E=-=⁺×ι⁺³κ)

Для каждого из символов =-=повторите 3 раза для первого и дополнительного времени для каждого последующего символа, затем добавьте a ), печатая каждый результат в отдельной строке.

×_⁵

Печать 5 _с.

P↙⁶

Распечатайте край конуса.

)⸿

Напечатайте финал )и поместите курсор внутри конуса.

‖M←

Зеркальное отражение половины конуса.

¤/\

Заполните тело конуса.


7

Python 2 , 86 байт

n=10
while n:print['\/'*n,'('+35/n*2*'-=_='[n%4]+')','.-@@-.'][-2%n/4].center(12);n-=1

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

Отработка решения Линн .


-2%n/4это так круто :) Вы ищете такие выражения вручную или запускаете какой-то перебор?
Линн

1
@ Линн, я бегал за брутфорсером. Я также сделал это для 35/n*2, что он нашел, так 5*7/n*2как он не знает многозначных чисел.
xnor

1
О, это здорово. Я хотел бы увидеть исходный код!
Линн


5

05AB1E , 42 байта

•3[ÜAʒg‰ŽÎ<\¦•6¡εS"-.@(=_"sèJ∞}'\∞5LRׂ˜.C

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


1026344463000063444446355555 - теперь это номер мороженого, потому что никто другой не использовал его.


Full program: •3[ÜAʒg‰ŽÎ<\¦•6¡εS"-.@(=_"sèJ∞}'\∞5LRׂ˜.C
current >> •  ||  stack: []
current >> 6  ||  stack: [1026344463000063444446355555]
current >> ¡  ||  stack: [1026344463000063444446355555, '6']
current >> ε  ||  stack: [['102', '3444', '30000', '344444', '355555']]
For each: S"-.@(=_"sèJ∞
Full program: S"-.@(=_"sèJ∞
current >> S  ||  stack: ['102']
current >> "  ||  stack: [['1', '0', '2']]
current >> s  ||  stack: [['1', '0', '2'], '-.@(=_']
current >> è  ||  stack: ['-.@(=_', ['1', '0', '2']]
current >> J  ||  stack: [['.', '-', '@']]
current >> ∞  ||  stack: ['.-@']
stack > ['.-@@-.']
Full program: S"-.@(=_"sèJ∞
current >> S  ||  stack: ['3444']
current >> "  ||  stack: [['3', '4', '4', '4']]
current >> s  ||  stack: [['3', '4', '4', '4'], '-.@(=_']
current >> è  ||  stack: ['-.@(=_', ['3', '4', '4', '4']]
current >> J  ||  stack: [['(', '=', '=', '=']]
current >> ∞  ||  stack: ['(===']
stack > ['(======)']
Full program: S"-.@(=_"sèJ∞
current >> S  ||  stack: ['30000']
current >> "  ||  stack: [['3', '0', '0', '0', '0']]
current >> s  ||  stack: [['3', '0', '0', '0', '0'], '-.@(=_']
current >> è  ||  stack: ['-.@(=_', ['3', '0', '0', '0', '0']]
current >> J  ||  stack: [['(', '-', '-', '-', '-']]
current >> ∞  ||  stack: ['(----']
stack > ['(--------)']
Full program: S"-.@(=_"sèJ∞
current >> S  ||  stack: ['344444']
current >> "  ||  stack: [['3', '4', '4', '4', '4', '4']]
current >> s  ||  stack: [['3', '4', '4', '4', '4', '4'], '-.@(=_']
current >> è  ||  stack: ['-.@(=_', ['3', '4', '4', '4', '4', '4']]
current >> J  ||  stack: [['(', '=', '=', '=', '=', '=']]
current >> ∞  ||  stack: ['(=====']
stack > ['(==========)']
Full program: S"-.@(=_"sèJ∞
current >> S  ||  stack: ['355555']
current >> "  ||  stack: [['3', '5', '5', '5', '5', '5']]
current >> s  ||  stack: [['3', '5', '5', '5', '5', '5'], '-.@(=_']
current >> è  ||  stack: ['-.@(=_', ['3', '5', '5', '5', '5', '5']]
current >> J  ||  stack: [['(', '_', '_', '_', '_', '_']]
current >> ∞  ||  stack: ['(_____']
stack > ['(__________)']
current >> '  ||  stack: [['.-@@-.', '(======)', '(--------)', '(==========)', '(__________)']]
current >> ∞  ||  stack: [['.-@@-.', '(======)', '(--------)', '(==========)', '(__________)'], '\\']
current >> 5  ||  stack: [['.-@@-.', '(======)', '(--------)', '(==========)', '(__________)'], '\\/']
current >> L  ||  stack: [['.-@@-.', '(======)', '(--------)', '(==========)', '(__________)'], '\\/', '5']
current >> R  ||  stack: [['.-@@-.', '(======)', '(--------)', '(==========)', '(__________)'], '\\/', [1, 2, 3, 4, 5]]
current >> ×  ||  stack: [['.-@@-.', '(======)', '(--------)', '(==========)', '(__________)'], '\\/', [5, 4, 3, 2, 1]]
current >> ‚  ||  stack: [['.-@@-.', '(======)', '(--------)', '(==========)', '(__________)'], ['\\/\\/\\/\\/\\/', '\\/\\/\\/\\/', '\\/\\/\\/', '\\/\\/', '\\/']]
current >> ˜  ||  stack: [[['.-@@-.', '(======)', '(--------)', '(==========)', '(__________)'], ['\\/\\/\\/\\/\\/', '\\/\\/\\/\\/', '\\/\\/\\/', '\\/\\/', '\\/']]]
current >> .  ||  stack: [['.-@@-.', '(======)', '(--------)', '(==========)', '(__________)', '\\/\\/\\/\\/\\/', '\\/\\/\\/\\/', '\\/\\/\\/', '\\/\\/', '\\/']]
   .-@@-.
  (======)
 (--------)
(==========)
(__________)
 \/\/\/\/\/
  \/\/\/\/
   \/\/\/
    \/\/
     \/
stack > ['   .-@@-.\n  (======)\n (--------)\n(==========)\n(__________)\n \\/\\/\\/\\/\\/\n  \\/\\/\\/\\/\n   \\/\\/\\/\n    \\/\\/\n     \\/']

•3[ÜAʒg‰ŽÎ<\¦•               | Pushes 1026344463000063444446355555 to the stack.
-----------------------------+-------------------------------------------------
6¡                           | Split on 6's.
-----------------------------+-------------------------------------------------
  ε             }            | Loop on each piece to create the top of the icecream...
   S                         | Split into single chars.
    "-.@(=_"sè               | Substitute in the correct symbol for each number.
              J∞             | Join, then mirror.
-----------------------------+-------------------------------------------------
                 '\∞         | Push \/.
                    5LR      | Push [5,4,3,2,1]
                       ×     | Multiply '\/' by each 5,4,3,2 and 1.
                        ‚˜   | Join top to bottom.
                          .C | Center w/ newlines.


3

C 171 байт

i;p(c,n,o){for(printf("%*c",o,i?32:40);n--;)printf(c);puts(i?"":")");}f(){p(".-@@-.",i=1,3);--i;p("=",6,3);p("-",8,2);p("=",10,1);p("_",10,1);for(i=6;--i;)p("\\/",i,6-i);}

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

C, 146 байтов

f(){puts("   .-@@-.\n  (======)\n (--------)\n(==========)\n(__________)\n \\/\\/\\/\\/\\/\n  \\/\\/\\/\\/\n   \\/\\/\\/\n    \\/\\/\n     \\/");}

Просто печатает жестко закодированную строку.

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


1
Вы можете сделать лучше, чем это, я думаю ...
cleblanc

2

Python 2 , 104 байта

Заимствовал уловку из ответа Джонатана Фреха , и спасибо ему за то, что он спас мне несколько байтов.

print"   .-@@-.\n  (======)\n "+"(%s)\n"*3%("-"*8,"="*10,"_"*10),
i=5
while i:print(6-i)*" "+"\/"*i;i-=1

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


Python 2 , 108 байт

print"""   .-@@-.
  (======)
 (--------)
(==========)
(__________)"""
i=5
while i:print(6-i)*" "+"\/"*i;i-=1

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




2

Perl 5 , 92 байта

say'   .-@@-.
  (======)
 (--------)
(==========)
(__________)';$_='\/'x6;say while s%\\/% %

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


Вам не нужно считать входные данные в счет байтов? В противном случае просто
введите

Там нет ввода. Это был просто остаток TIO от того, чем я занимался.
Xcali

круто, понял спасибо.
cleblanc

+1. Вы можете сохранить пару, используя декодирование RLE, но я не смог использовать его ;в качестве разделителя для s///работы по некоторым причинам. На мобильном телефоне, поэтому ничего не могу сделать слишком много! Попробуйте онлайн!
Дом Гастингс


1

Python 3, 202 байта

Это довольно ужасно, это больше байтов, чем просто определение строки и даже печать.

print("   .-@@-.")
print("  ("+"="*6+")")
print(" ("+"-"*8+")")
print("("+"="*10+")")
print("("+"_"*10+")")
print(" "+"\/"*5)
print("  "+"\/"*4)
print("   "+"\/"*3)
print("    "+"\/"*2)
print("     \/")

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


6
Можно использовать \nвместо отдельных printзаявлений
Nissa

148 байт, используя этот подход
Mr. Xcoder

7
Добро пожаловать в PPCG!
AdmBorkBork

1

Желе , 74 72 байта

5RU⁾\/ẋ
5R×⁶ż¢Y
3,6,8,10,10j1ż“ “.-@@-.¶  (“=“)¶ (“-“)¶(“=“)¶(“_“)¶”P€;¢

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

Объяснение:

5RU⁾\/ẋ    Link 1. Generate list of "\/"s for cone.
5RU        Range 5, reverse. Gets [5,4,3,2,1].
   ⁾\/     Literal string "\/".
      ẋ    Repeat. Gets ["\/\/\/\/\/","\/\/\/\/","\/\/\/","\/\/","\/"].

5R×⁶ż¢Y    Link 2. Generate rest of cone.
5R         Range 5. Gets [1,2,3,4,5].
  ×⁶       Repeat " " that many times. Gets [" ","  ","   ","    ","     "]
    ż¢     Zip that with the ¢ones. Gets a list of alternating space and cones.
      Y    Join with newlines. This puts it all together for the big cone.

3,6,8,10,10j1ż“ “.-@@-.¶  (“=“)¶ (“-“)¶(“=“)¶(“_“)¶”P€;¢    Link 3. Generate the top and put it on the cone.
10,10,8,6j1;1U                                                Generate list 3,1,6,1,8,1,10,1,10. Does this by joining [10,10,8,6] with ones, appending a one, and reversing.
               “   .-@@-.¶  (“=“)¶ (“-“)¶(“=“)¶(“_“)¶”        List of strings. This separates the completed parts from the non completed parts.
              ż                                               Zip 'em together. Gets [number, string, number, string, ...]
                                                      P€      Get the product of €ach. This completes the non completed strings by repeating them.
                                                        ;¢    Attach the ¢one to the end.

1

Mathematica, 117 байт

Column[Join[{".-@@-."},"("<>#<>")"&/@{"="~(T=Table)~6,"-"~T~8,"="~T~10,"_"~T~10},T[""<>T["\/",i],{i,5,1,-1}]],Center]


Выходы
введите описание изображения здесь

Вы можете проверить это на песочнице wolfram (хотя используемые ими шрифты могут немного исказить результат)


Интересно, \/что это особый характер. Я не мог найти, для чего он используется, поэтому я спросил на Mma.SE: mathematica.stackexchange.com/q/200673/61597
lirtosiast




1

C 165 байт

y,x,z;f(){for(puts("   .-@@-.");y++<9;)for(;x=++x%14;)z=y+3-y/4,putchar(x<13?y<5?x-7^z-1?7-x^z?abs(x-7)<z?y<4?y&1?61:45:95:32:40:41:x+y>16|y-x>3?32:x+y&1?92:47:10);}

1

Кубы , 345 336 байт

⇒@@@
RU+30f1+3-00@-2+3@+4@@-4@+2-3@-110@+31-4@@+2-4@+10f1f1-3+0@-400@+31-4@+2-4@+3-10f1f1@@-4+1@-400@+11@+10f1f1f1@-3+0@-400@+11@+4110@f1f1f1-22@-400@+31-4@+220@-43@+43@-43@+43@-43@+43@-43@+43@-43@-4000@+31-4@@+220@-43@+43@-43@+43@-43@+43@-43@-4000@+31-4f1+220@-43@+43@-43@+43@-43@-4000@+31-4f1@+220@-43@+43@-43@-4000@+31-4f1@@+220@-43@

Найдено с помощью этого инструмента и используется для поиска и замены, с парой пользовательских оптимизаций.

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


Альтернативный метод:

391 байт (не изменяет куб)

+5/1+3@@@:1/1+5@5.0+2@@5.0-2@-4@:5/1+3@@:4/1+4@:5+2/1+51@@@@@@:5/1+4@:1/1+1@:5/1+3@:4/1+4@5.05.05.05.05.05.05.05.0:5/1+4@:1/1+1@:4/1+4@:5+2/1+51@@@@@@@@@@:5/1+4@:1/1+1@:4/1+4@:5/1+55@@@@@@@@@@-51@:1/1+1@:5/1+3@:2/1+55@-5@+5@-5@+5@-5@+5@-5@+5@-5@:1/1+1@:5/1+3@@:2/1+55@-5@+5@-5@+5@-5@+5@-5@:1/1+1@:5/1+3@@@:2/1+55@-5@+5@-5@+5@-5@:1/1+1@:5/1+3@@@@:2/1+55@-5@+5@-5@:1/1+1@:5/1+3@@@@@:2/1+55@-5@

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