Я люблю сардины


33

Я люблю сардины, их не хватает, как и мой компьютер Omnilang 5000, который не зависит от языка.

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

В этом задании вы будете нести ответственность за создание программ на основе следующих параметров:

Вход

Число (от 0 до 10) и буква от одного из следующих «LR» (обозначающих соответственно «Левый» или «Правый») Например: 3Lили 5R; как это ввести в программу, зависит от вас.

Выход

Открытая банка сардин с сардинами, обращенными в указанном направлении, с ключом (обозначенным %символом « ») и очищенной крышкой (свернутая банка на конце, обозначенным знаком « @»), расположенной в верхней части банки.

  • Все сардины должны быть направлены в направлении, указанном на входе.
  • Все сардины будут иметь тела длиной пять символов между жаброй (" )" или " (") и хвостом " ><"
  • Ключ и очищенный рулон крышки всегда будут направлены в направлении, противоположном сардинам.
  • Олово должно иметь трехмерный вид, как показано ниже в примерах.
  • Минимальная высота банки составляет 3 сардины в высоту. Таким образом, если число меньше 3, должна быть показана банка с сардинами высотой 3 с введенным количеством сардин в нем. В противном случае в банке должно быть указано максимальное количество сардин, указанное во входных данных. Таким образом, ввод 0Rили 0Lпокажет пустую банку сардины.
  • Любой другой вход, который не может быть проверен, ничего не показывает.

Например, для " 3L"

 __________
(__________@%
|<*)_____><||
|<*)_____><||
|<*)_____><||
'==========''

Для " 7R"

   __________
 %@__________)
 ||><_____(*>|
 ||><_____(*>|
 ||><_____(*>|
 ||><_____(*>|
 ||><_____(*>|
 ||><_____(*>|
 ||><_____(*>|
 ''=========='  

Для " 2L"

 __________
(__________@%
|<*)_____><||
|<*)_____><||
|          ||
'==========''

Для " 0R"

   __________
 %@__________)
 ||          |
 ||          |
 ||          |
 ''=========='

" 0L"

 __________
(__________@%
|          ||
|          ||
|          ||
'==========''

Неверный ввод ничего не вернет ...

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

Ответы:


39

> <> , 250 235 + 3 = 238 байт

</~?{"  __________"a:="L"i&
o/?=1l
:/}rv?{~$?{"()__________@%":
l< o/?=1
:&oa/&~$?(3$@0-3:
/!?:</"||><_____(*>|"av?@:$-1
 /=?/v"|<*)_____><||"a/
 \2lo/
\~&
\>:?!\1+$::{a"|"{?:"          ||"{?~
<\?=2 lo
"'":~/~?{"''==========":?{
;!?lo<

Попробуйте онлайн или посмотрите на рыбной площадке ! Читает "L" или "R" из STDIN и предполагает, что количество сардин уже находится в стеке (требуется -vфлаг для +3 байта).

Потому что, конечно, я должен был написать это в> <>.


3
Написание этого решения в Fish вдохновлено ...
WallyWest

Как работает рыбная площадка? Я не могу заставить его бежать. Где я могу разместить вход?
JAD

@JarkoDubbeldam, скопировав код в окно и отправив его, вам нужно указать количество сардин, где написано «начальный стек» (имитирующий -vфлаг), а направление («L» или «R») под «дать вход в программу "затем нажмите" дать ". (Я отредактировал ответ, чтобы, надеюсь, прояснить это.)
Не дерево

1
Круто: D Должно быть хорошо и во время отладки
JAD

15

Эмоджикод , 456 448 байт

🐋🚂🍇🐖🐟d🚂🍇🍦a😛0d🍊a🍇😀🔤 __________❌n(__________@%🔤🍉🍓🍇😀🔤  __________❌n%@__________)🔤🍉🔂i⏩0🐕🍇🍊a🍇😀🔤|<*)_____><||🔤🍉🍓🍇😀🔤||><_____(*>|🔤🍉🍉🍊▶️4🐕🍇🔂i⏩0➖3🐕🍇🍊a🍇😀🔤|          ||🔤🍉🍓🍇😀🔤||          |🔤🍉🍉🍉🍊a🍇😀🔤'==========''🔤🍉🍓🍇😀🔤''=========='🔤🍉🍉🍉

Принимает 2 аргумента: первый - линии, второй - направление (0 или 1).

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

«Читаемая» версия без гольфа и версия с псевдокодом:

🐋 🚂 🍇
  🐖 🐟  d 🚂  🍇
    🍦 a  😛 0 d

    🍊 a 🍇
      😀 🔤 __________❌n(__________@%🔤
    🍉
    🍓 🍇
      😀 🔤  __________❌n%@__________)🔤
    🍉

    🔂 i ⏩ 0 🐕 🍇
      🍊 a 🍇
        😀 🔤|<*)_____><||🔤
      🍉
      🍓 🍇
        😀 🔤||><_____(*>|🔤
      🍉
    🍉

    🍊 ▶️ 4 🐕 🍇
      🔂 i ⏩ 0  ➖ 3 🐕  🍇
        🍊 a 🍇
          😀 🔤|          ||🔤
        🍉
        🍓 🍇
          😀 🔤||          |🔤
        🍉
      🍉
    🍉

    🍊 a 🍇
      😀 🔤'==========''🔤
    🍉
    🍓 🍇
      😀 🔤''=========='🔤
    🍉
  🍉
🍉

👵
extendclass int { // this makes the first argument be an int without declaring it
  func 🐟(int d) {
    const a = 0 == d // a bool

    if a {
      print " __________\n(__________@%"
    }
    else {
      print "  __________\n%@__________)"
    }

    for i in range(1, arg) {
      if a {
        print "|<*)_____><||"
      }
      else {
        print "||><_____(*>|"
      }
    }

    if 4 > arg {
      for i in range(0, arg - 3) {
        if a {
          print "|          ||"
        }
        else {
          print "||          |"
        {
      }
    }

    if a {
      print "'==========''"
    }
    else {
      print "''=========='"
    {
  }
}
👵

2
Никогда раньше не сталкивался с Emojicode, но это ум с чертом ... Сумасшедший! Любить это!
WallyWest

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

1
@TaylorScott 1) ​​не знаю, я не создал его. 2) действительно несколько часов
бетсег

6

Python 2 , 155 байт

lambda x,y,t='_'*10:'\n'.join(x[::1-2*y]for x in[' %s  '%t,'()'[y]+t+'@%']+['|'+('<>**)(%s><<>'%t)[y::2]+'||']*x+['|'+' '*10+'||']*(3-x)+["'"+'='*10+"''"])

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

Вход состоит из кортежа длиной 2. Первый элемент указывает количество сардин. Второй элемент указывает направление; 0для левого, 1для правого.

-84 байта, используя лямбда-магию благодаря notjagan и officialaimm


1
174 байта (там Сорта получил ниндзя от @officialaimm).
Notjagan

1
Получил еще 161 байт!
notjagan


1
@officialaimm достаточно интересно, что если получить отрицательное значение, он увеличивает размер банки, но не вводит сардины.
Павел

3
@ Феникс Да. Это не имеет значения, так как OP указал диапазон 0 to 10. PS` -10` напечатал бы пустую жесть, потому что это означает, что были 10сардины, но вы уже съели их. : D
officialaimm

5

Рыбалка , 1311 байт

v+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC?CCCDCC[CCCCCCCCCCCCCCCCCCCCC?CCCCCCCCCCCCCCCCCCCC[CCC[CCCCC?CCCC?DDDDD[CCCCCCCCCCCCCCCCCCC?CCCCCCCCCCCCCCCCC[?CCCCCCCCCCCCCCCC_
  `3`n{n{In{I{`L`{`  __________ `}}!{{rD}}D{{NE`%@__________)`}}!{{E`(__________@%`}}D{{NDE}}}}={d}}!  d  D{{{{{`><_____(*>`}}!{{E`<*)_____><`}}D!{{{E`|`P}PE`||`ND
                                   [DDDDDD|                     [DDDDDDDDDDDDDDDDDDDD|   D     [C?CDDDDDDDDCCCCCCCCCCCCCCCCCCC[DDDDDDDDDDDDDDDDD|[CCCCCCCCCCCCCCCC_
                                                                                         D      }=d [^+Cv-|{{{{{`          `}}                    {{{E`||`P}PE`|`ND
                                                                                         D       [CCCCCCCCCCCCCCCCCCC?DDDDDDDDD+CCCC                              D
                                                                                         D        E`''=========='`{{{= }}}r{{{ [CCCC                              D
                                                                                         D                           [^CCCCCCCv|}}}N                              D
                                                                                         |DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD]

Принимает входные данные stdinв форме:

5
R

Рыбалка не включена в Try It Online , но на Ruby на связанной странице esolangs есть переводчик.

Это первая программа, которую я сделал в Рыбалке - фактически, это первая программа, которую я сделал на любом двумерном языке - так что она может быть намного короче. Приветствуются советы по игре в гольф (хотя я не удивлюсь, если никто не даст, учитывая, что даже я не знаю, какого черта я только что написал).

Вот GIF-путь, который программа использует для ввода 1R(извините за низкое качество):

GIF

(Это было создано с использованием созданного мной интерпретатора; насколько я знаю, нет общедоступных программ, которые "визуализируют" рыбалку)


Синтаксис C и D выглядит так, как будто он способствует раздутию ... Есть ли какие-либо сокращения, чтобы уменьшить это?
WallyWest

Фактически, поцарапайте это, похоже, что они являются неотъемлемой частью кода ... Интересный выбор языка! :)
WallyWest

4

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

A⌈⟦Iθ³⟧ζBχ²_←↓(↓ζ'×=χ''↖P↑ζ←↑ζ@%FN“#∨‹VB“«ji”FN‖T

Попробуйте онлайн! Ссылка на подробную версию кода. Первый аргумент - количество сардин, второй - направление (0 = слева, 1 = справа).


Отличная работа, Нил. Спасибо за предоставление ссылки на компилятор!
WallyWest

2
Не благодарите меня, спасибо @Dennis за создание TIO, который генерирует весь шаблон для вас.
Нил

3

SOGL V0.12 , 51 48 байтов

!gX⁴‘gj⁰%!⁵‘b⌡"κN╥█*≤⌡║)‘3b-"÷AZ⁴‘∙_"Χccσ«‘⁰e?±↔

Попробуй здесь!
Ожидается, что в качестве 1-го числа будет указано число, а 2-го - влево или вправо, представленное 1 или 0.

Объяснение:

..‘..‘                          push 2 compressed strings - the 1st two lines of the box - "  __________ " and "%@__________)"
      b⌡                        input times do
        "..‘                      push a line with a sardine - "||><_____(*>|"
            3b-                 push 3-input
               "..‘∙            get an array of that many "||          |"
                    _           put all the arrays contents on the stack
                     "..‘       push "''=========='" - the last line
                         ⁰      wrap all of that in an array
                          e?    if the 2nd input [is not 0]
                            ±↔    reverse the array horizontally

2

R, 334 байта, 311 байтов

s=function(n,d){
a="__________"
b="'=========='"
if(d == "L"){cat(paste(c(" ",a,"\n(",a,"@%\n",rep("|<*)_____><||\n",n),rep("|          ||\n",max(c(3-n,0))),b,"'\n"),collapse=""))} else {cat(paste(c("  ",a,"\n%@",a,")\n",rep("||><_____(*>|\n",n),rep("||          |\n",max(c(3-n,0))),"'",b,"\n"),collapse=""))}}

Функция принимает числовое значение для n и строку для направления.

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


1
Вы можете вставить свой код в TIO , где люди могут также проверить ваш код :), он также отображает количество ваших байтов, которое в данном случае составляет 310.
Ян Х.

2

C ++, 307 296 292 байта

#include<string>
auto z(int n,char c){std::string r=c-82?" __________\n(__________@%\n":"  __________\n%@__________)\n";int l=0;for(;l<n;++l)r+=c-82?"|<*)_____><||\n":"||><_____(*>|\n";for(;l<3;++l)r+=c-82?"|          ||\n":"||          |\n";r+=c-82?"'==========''":"''=========='";return r;}

Использование :

z(<number of sardines>,<'L' or 'R'>);

-11 байтов сохранено благодаря пользователю ThePirateBay -4 байта благодаря Zacharý


1
Можете ли вы удалить скобки в #defineдирективе? Я не проверял это, но кажется, что в них нет необходимости.

1
Может c!=82быть c-82в каждом случае, где вы его используете?
Zacharý

1

Python 2 , 287 байт

n,d=input()
t,a,b,c,e,k=' __________   ','(__________@% ','|<*)_____><|| ','|          || ',"'=========='' ",'\n'
print[t+k+a+k+k.join([b]*n)+k+k.join([c]*(3-n))+k*(n<3)+e,t[::-1]+k+a[::-1].replace(*'()')+k+k.join([b[::-1].replace(*')(')]*n)+k+k.join([c[::-1]]*(3-n))+k*(n<3)+e[::-1]][d]

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

Входные данные через запятую кортеж чисел этого формата: 2, 1. Первое число - это количество рыбы, а второе - 0 для левого и 1 для правого.

Это началось как попытка превзойти другой ответ (я полностью думал, что смогу), но это отстой. : P Если бы кто-нибудь смог сделать это с головы до хвоста и помочь в игре в гольф (я виню в этом в 12 часов), я был бы рад.


Большая попытка, тем не менее!
WallyWest

1

C # (.NET Core), 289 байт

(h,d)=>{var l=d=='L';string r=(l?" ":"  ")+"__________\n"+(l?"(":"%@")+"__________"+(l?"@%":")")+"\n";for(int i=0;i<(h>3?h:3);i++){r+=(l?"|":"||")+(i<h?(d=='L'?"<*)_____><":(d=='R'?"><_____(*>":"")):"          ")+(l?"||":"|")+'\n';}var b=(l?"'":"''")+"=========="+(l?"''":"'");return r+b;}

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

Принимает целое число и символ (L, R) в качестве параметров и выводит результирующую строку.

Тьфу. Пришлось иметь дело с некоторыми раздражающими строковыми константами, к сожалению, вы не можете просто сделать string * lengthв C #. И метод с new string(char, length)не стоил бы байтовой стоимости.


Алгоритм работает следующим образом:

  1. В начале мы определяем, смотрят ли сардины вправо или влево, так как мы будем соответственно форматировать наши строки. Мы создаем строку для вершины с некоторыми условными операторами для переключения между перспективой L и R.
  2. Затем мы создаем цикл, который запускается минимум 3 раза, а время левого ввода максимум. Таким образом, мы можем создать пустое пространство, если у нас в коробке будет менее 3 сардин.
  3. Внутри этого цикла мы форматируем строку в зависимости от перспективы, а также, если h > iмы помещаем в нее сардины. Если i >= h, там будет пустое место, где обычно будет сардина.
  4. В конце мы создаем нижнюю часть окна, снова отформатированный в соответствии с перспективой.


1

JavaScript (ES6), 283 273 269 251 байт

Сохранено 10 байтов благодаря @WallyWest

Сохранено 4 байта, удаляя лишние парены

Сохранено 18 байт благодаря @ThePirateBay

Страдает от отсутствия обращения строк в стандартной библиотеке. Определяет функцию, которая принимает входные данные nдля количества рыбы и dдля направления. Бросает, если dне "L" или "R".

(n,d,_=c=>c.repeat(10),x=_(`_`),z=a=>a.reverse``.join``)=>
([p,q,g,r,s]=d>`L`?d>`R`?[]:[`)`,`(`,`>`,z,y=>z(y.split``)]:
[`(`,`)`,`<`,a=>a.join``,y=>y],` ${x}
`+r([p,x,s(`@%`)])+`
`+(r([`|`,g,`*`,q,`_____`,`><`,`||`])+`
`).repeat(n)+r([`'`,_(`=`),`''`]))

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


Добро пожаловать в PPCG! Мы надеемся, что вам здесь понравится ... Давайте посмотрим, что мы можем сделать, чтобы вы набрали меньше очков ... Отличное начало!
WallyWest

@WallWest спасибо! Срезал еще 17 байтов, вытаскивая функцию и заменяя if...else ifвложенные троицы с назначением деструктурирования. У меня нет идей ...
Джаред Смит

1
@WallyWest Я использую _функцию дважды, один раз для 10 знаков подчеркивания (которое используется дважды), один раз для 10 знаков равенства, поэтому наличие ее в функции экономит мне байт. И если я не использую строки шаблона неправильно, их использование вместо конкатенации будет на 3 байта больше .
Джаред Смит

1
@WallyWest спасибо за подсказку, что и удаление ненужных паренов сэкономило 14 байт.
Джаред Смит

1
@ Захарий готов. Если бы мне не нравилось радовать незнакомцев в Интернете, я бы не был на SE.
Джаред Смит
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.