我爱沙丁鱼


33

我喜欢沙丁鱼,我吃不完,所以我的计算机Omnilang 5000也是如此,它与语言无关。

为了让我的计算机体验沙丁鱼的乐趣,我决定向他提供许多程序,这些程序可以在屏幕上以各种方向显示沙丁鱼罐头,并最多显示十个沙丁鱼。

在此挑战中,您将负责根据以下参数创建程序:

输入

一个数字(介于0到10之间)和以下“ LR”之一的字母(分别表示“左”或“右”),例如:3L5R;如何将此输入到程序中取决于您。

输出量

打开的沙丁鱼罐头,沙丁鱼面朝指示的方向,其键(用“ %”字符表示)和去皮的盖子(用“ @”字符表示的末端卷起锡)位于锡的顶部。

  • 所有沙丁鱼必须面向输入所指示的方向。
  • 所有沙丁鱼的bodies体(“ )”或“ (”)与尾巴“ ><” 之间将有五个字符长的身体。
  • 钥匙和去皮的盖卷将始终与沙丁鱼相反。
  • 锡必须具有3-D外观,如下例所示。
  • 锡的最小高度为3个沙丁鱼。因此,如果数字小于3,则必须显示锡罐高度为3的沙丁鱼,并在其中输入沙丁鱼的数量。否则,锡必须是输入中指示的高沙丁鱼数量。因此,输入0R0L将显示一个空的沙丁鱼罐头。
  • 其他无法验证的输入将不会显示任何内容。

例如,对于“ 3L

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

对于“ 7R

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

对于“ 2L

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

对于“ 0R

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

0L

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

无效的输入将不返回任何内容...

  • 这是代码高尔夫球,因此最少的字符数将赢得这一挑战。
  • 照常没有漏洞

Answers:


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<

在线尝试,或在鱼游乐场观看!从STDIN读取“ L”或“ R”,并假定沙丁鱼数量已经在堆栈中(需要-v3个字节的标志)。

因为我当然必须在> <>中编写它。


3
在Fish中编写此解决方案的灵感来自……
WallyWest '17

鱼游乐场如何运作?我无法运行它。我在哪里放置输入?
JAD

@JarkoDubbeldam,将代码复制到窗口中并提交后,您需要将沙丁鱼的数量放在“初始堆栈”(模拟-v标志)的位置,并将方向(“ L”或“ R”)放在“给定”下输入程序”,然后单击“给定”。(我已经编辑了答案,希望可以使它变得更加清楚。)
不是一棵树

1
Awesome:D调试期间也必须很棒
JAD

15

Emojicode456个 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 '17

...为什么这种语言甚至存在?我的意思是,我喜欢它,但是为什么呢?您花了多长时间学习它?
泰勒·斯科特

1
@TaylorScott 1)不知道,我没有创建它。2)确实几个小时
betseg

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为右。

感谢notjagan和Officialaimm,使用lambda魔术-84字节


1
174个字节(sorta被@officialaimm忍者了)。
notjagan

1
进一步减少到161个字节!
notjagan


1
@officialaimm非常引人入胜,如果提供负值,它会扩大锡的大小,但不会放入沙丁鱼。–
Pavel

3
@凤凰是的。不过没关系,因为OP已经指定了range 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

钓鱼不在“ 在线试用”上,但是在链接的esolangs页面上的Ruby中有一个解释器。

这是我在Fishing中制作的第一个程序-实际上,这是我在任何2D语言中制作的第一个程序-因此它可能会短很多。欢迎打高尔夫球(尽管没有人给我任何考虑,即使我也不知道我刚刚写的内容,我也不会感到惊讶)。

这是程序用于输入的路径的GIF 1R(抱歉,质量低下):

GIF

(这是使用我制作的解释程序创建的;据我所知,没有公开可用的程序可以“可视化”钓鱼)


C和D语法似乎助长了肿胀……是否有任何速记可以减少这种情况?
WallyWest '17

实际上,这似乎是它们不可或缺的一部分……有趣的语言选择!:)
WallyWest '17

4

木炭,49字节

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

在线尝试!链接是详细版本的代码。第一个参数是沙丁鱼的数量,第二个参数是方向(0 =左,1 =右)。


辛苦了,尼尔。感谢您提供编译器链接!
WallyWest '17

2
不用了,谢谢@Dennis创建的TIO为您生成了所有样板。
尼尔

3

SOGL V0.1251 48 个字节

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

在这里尝试!
预期输入是第一个数字,即计数,第二个数字是-以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。
伊恩H.17年

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'>);

感谢用户ThePirateBay节省了-11个字节-感谢Zacharý-4个字节


1
可以删除#define指令中的括号吗?我没有测试,但似乎不需要它们。

1
可以c!=82c-82在任何情况下,你使用它?
扎卡里

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 '17

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;}

在线尝试!

以整数和char(L,R)作为参数,并输出结果字符串。

啊。不得不处理一些令人讨厌的字符串常量,可悲的是,您不能只string * length在C#中执行。而且使用的方法new string(char, length)将不值得字节成本。


该算法的工作原理如下:

  1. 开始时,我们将确定沙丁鱼是面向右还是面向左,因为随后我们将相应地格式化字符串。我们为顶部创建一个字符串,并使用一些条件运算符在L和R透视图之间切换。
  2. 然后,我们创建一个循环,该循环至少运行3次,最大剩余输入时间。这样,如果盒子中的沙丁鱼少于3个,我们可以创建空白空间。
  3. 在此循环内,我们根据透视图设置字符串格式,如果h > i,则在其中放入一个沙丁鱼。如果为i >= h,则通常会有一个沙丁鱼的空白区域。
  4. 最后,我们创建框的底部,并再次根据透视图设置格式。

1

Perl 5,167 + 1(-n)= 168字节

($n,$d)=/(\d+)([LR])/ or die;say('R'eq$d?(reverse$_)=~y/()></)(<>/r:$_)for" __________  ","(__________@%",("|<*)_____><||")x$n,("|          ||")x(3-$n),"'==========''"

在线尝试!


1

的JavaScript(ES6),283个 273 269 251字节

@WallyWest节省了10个字节

保存4个字节,删除多余的括号

@ThePirateBay节省了18个字节

在标准库中缺少字符串反转的问题。定义一个函数,该函数接受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 '17年

@WallyWest谢谢!通过拉出函数并if...else if使用解构分配将更改为嵌套三元,从而减少了17个字节。不过我没主意...
Jared Smith

1
@WallyWest我_两次使用该函数,一次用于10个下划线(两次使用),一次用于10个等号,因此在函数中使用它可以节省一个字节。并且除非我使用错误的模板字符串,否则使用它们而不是串联要多3个字节
加里德·史密斯

1
@WallyWest感谢您的提示,并删除了一些不必要的括号,节省了14个字节。
加里德·史密斯

1
@Zacharý完成了。如果我不喜欢让互联网上的陌生人开心,那么我就不会成为SE。
加里德·史密斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.