打印代码的最后,中间和第一个字符


60

挑战很简单:按顺序打印程序源代码的最后,中间和第一个字符。

假设n字符的源长度和1索引,中间字符的定义如下:

  • 如果n是偶数,则打印n/2-th和n/2 + 1-th字符。(abcdef == cd
  • 如果n为奇数,则打印(n-1)/2 + 1第-个字符。(abcde == c

规则

  • 如果没有输入,则以形式打印源代码中的最后,中间和第一个字符[last][middle][first]。这将是3-4个字符长。
  • 输出不得包含任何尾随空格。但是,如果空白是第一个,中间或最后一个字符,则必须这样打印。
  • 源代码必须为n >= 3字符长。
  • 代码必须包含>= 3唯一字符。
  • 禁止出现标准漏洞。
  • 这是,因此以字符为单位的最短解决方案获胜。

样品

# Form: [code] --> [output]
xyz --> zyx
abcd --> dbca
1 --> # not allowed: too short
abcde --> eca
aaabb --> # not allowed: not enough unique characters
System.out.print("S;pr"); --> ;prS
this is a test --> ts t
123[newline]45 --> 53[newline]1

挑战提案


6
也许只有我一个人,但是“代码必须包含> = 3个唯一字符。” 建议程序的所有字符都应该是唯一的,而您只需要至少3个不同的字符即可。
Grzegorz Oledzki

4
@Belhenix少于三个唯一字符允许解决方案像121多种语言一样简单。
Khuldraeseth na'Barya

2
如果有人能找到用于-求反的基于堆栈的语言并使用换行符隐式打印,那\n1-就是三分法。到目前为止,我的搜索没有结果。
Khuldraeseth na'Barya

3
@Belhenix空格肯定是可能的,它具有足够的唯一有效字符(空格,换行符,制表符)。
bigyihsuan

2
现在无法通过58个答案来更改它,但是要求“代码的第一个字母必须与代码的最后一个字母不同”将排除很多琐碎的答案,包括当前的最高答案。这可能是“> = 3个唯一字符的意图”,但实际上并不十分困难。
manassehkatz

Answers:


171

JavaScript,9个 7字节

N=>a=-N

输出: NaN

在线尝试!


4
非常聪明。这是我试图采取的策略,但是不能偶然发现一种错误输出足够多的语言。
ouflak

49
这是我在这里见过的最好的Javascript答案之一
丹尼尔

21

,17字节

wWWwwwVVwWWwWWWww

在线尝试!

-2个字节,感谢jimmy23013。

输出www。草除了会忽略所有字符wWv。因此,两个Vs被忽略;他们在那里是为了确保中间角色是w–我不知道如何输出vW在Grass中……我本可以用另一个角色代替V,但是V保留了代码的美感。


1
幸运的是,中间字符最终是aw而不是av或W –我不知道如何在Grass中输出v或W…… ” Lol。xD我试图在Whitespace中做类似的事情,也只有三个字符(空格,制表符,换行符),但是不幸的是我并不那么幸运。.幸运的是,我可以简单地添加一些尾随的no-op来修复它。
凯文·克鲁伊森

@KevinCruijssen如果中间字符是其他任何东西,我可能会在中间添加一堆xs(或Grass忽略的任何其他非Grass字符)以将a w移到正确的位置。
罗宾·赖德

啊,我是个白痴。我也可以插入一个非空白字符,而空白将被忽略。;)-2个字节感谢您。
凯文·克鲁伊森

1
17个字节wWWwww  wWWwWWWww
jimmy23013

@ jimmy23013谢谢!并且感谢您的贴士 ; 我需要它来了解您的工作!我将空格更改为Vs,因为我觉得它更漂亮。;-)
罗宾·赖德

17

头脑操,17字节

U-[>+<-UU--]>...U

在线尝试!

使用unprintables可以减少到7个字节: ␀..␀_.␀


1
在规则之内,但是BF不用U作指示。从功能上讲,代码为-[>+<---]>.,因此预期输出为.--,但不会输出。
bigyihsuan

16
@bigyihsuan,但是源代码中仍然包含Us,并且此解释器愉快地忽略了它们。是否应该不计算每个包含注释或多个空格(或与语言无关的其他答案)的答案?
dzaima

1
不是U-[>+<-UU--]>...U吗?在当前形式下,代码仅显示一个U
Helena

1
@Flater是的,在这里它们是用来使挑战变得更容易的,但这不是代码高尔夫标签的全部目的吗?通过添加前导/尾随空格,仅此一个答案就使他们的工作变得更容易,并且通常在这里,在代码高尔夫球中,任何遵循规则的内容都是允许的(并且,如果我不得不猜测,是否存在禁止不使用字符的规则(客观地定义(已经几乎是不可能的)了,这意味着挑战可能仍会以0分徘徊,并且可能也会关闭)。
dzaima

2
您为什么不简单地使用ÿ-.ÿ..ÿ?那是可打印且简短的。
多利安

17

莎士比亚编程语言,119字节

 ,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]
Ajax:  You big big big big big cat.Speak thy.Speak thy.Speak thy. 

在线尝试!

打印三个空格。没有打印空间:

莎士比亚编程语言,227字节

,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:You is the sum of a big big big big big big cat a big pig.
You is the sum of you a large huge large big pig.
Speak thy.Speak thy.You is the sum of you a big pig.Speak thy.

在线尝试!

就像我的免换行符INTERCAL答案一样,它的构造是通过取消对代码的后半部分进行查询,直到程序的最后一个字符与中间字符相同(尽管在这种情况下,它也不是第一个字符)。比赛。(我不确定是否可以用更少的字节构造46个字节,或者是否可以打高尔夫球前半部分的其他部分。)


2
我没想到莎士比亚会出现。太好了
bigyihsuan

1
希望我可以为了学习这种语言而+1!
斯蒂尔兹

1
即使在在线解释器的调试输出消息中,作者的幽默感也显示出来:警告在第2行:预期“注意”
dlatikay

1
第二个版本为163个字节,结尾为!
罗宾·赖德

1
@UnrelatedString好,谢谢!完成
罗宾·赖德

14

Python 2中13 11个字节


print' t' 

要使空白清晰:

$ xxd solution.py
0000000: 0a70 7269 6e74 2720 7427 20           .print' t'
$ python2 solution.py | xxd
0000000: 2074 0a                                t.

在线尝试!

-2个字节,感谢wastl!


6
两者都输出尾随空格(换行符),这是不允许的。Python 2替代品:在线尝试!
wastl

另外,我也不认为这是有效的:Python要求您在代码末尾添加一个空换行符。
Geza Kerecsenyi

5
@GezaKerecsenyi据我了解,源代码末尾的换行符只是一个建议。参见PEP8。
mypetlion

1
@GezaKerecsenyi 只是一个指南
mbomb007

@wastl谢谢!固定。
TF场

11

RProgN 2,3个字节

1
0

在线尝试!

我认为这是有效的吗?


我正在猜测10被推到堆栈上,然后在程序末尾隐式弹出了打印?是的,它是有效的
bigyihsuan

2
@bigyihsuan我也在猜这个;我不懂这种语言,我只是回想起它是这样的:p
dzaima

@dzaima哈哈,当您发布答案时,您甚至都不知道它是如何工作的。xD在包装盒[quine]规则改变之前,我确实曾几次遇到过旧挑战而遇到过RProgN 。
凯文·克鲁伊森

我相信这tac在Linux上是多语言的。
tsh

11

05AB1E7 5 字节


„ RR

输出R \n

@Neil的Batch答案中汲取灵感得到-2个字节,因此请确保也对他进行!

在线尝试。

@Grimy替代5 字节


12,1

输出12\n

在线尝试。

最初的7 个字节答案:

'?„«'«?

输出?«'

在线尝试。

说明:

          # No-op newline
 R       # Push 2-char string " R"
   R      # Reverse this string to "R "
          # (output the result implicitly with trailing newline)

          # No-op newline
12,       # Print 12 with trailing newline
   1      # Push a 1 (no implicit printing, since we already did an explicit print)

'?       '# Push 1-char string "?"
  „«'    '# Push 2-char string "«'"
     «    # Concatenate them both together
      ?   # Output without trailing newline




7

Excel,9个字节

=("))=" )

这么多括号。

注意:返回的中间字符实际上可以是任何字符,因为它是代码的中间部分。


括号!(灯泡)我被最后一个角色困住了"。做得好!
韦尔尼施

谢谢!这也是我试图弄清楚的事情,然后我记得括号会起作用。
威廉波特

6

Ruby,6个字节


p " "

在线尝试!

输出结果" "加上换行符。该代码以a结尾",中间两个字符为and ",并且以换行符开头。


3
我喜欢您的徽章,我相信这是N²上的灰度xor。我生成了几乎相同的图片来帮助我解决Euler Nim项目。您的徽章有故事吗?
达米安

1
好赶上!我喜欢在会议期间使用单线生成图片来“涂鸦”;xor是早期的最爱。
历史学家

6

DOS / Windows批处理语言,9个字节

@echo @o@

欢迎参加Code Golf&Coding挑战堆栈交换,+ 1不错!
A _


5

批量9个字符


@echo hh

中间和最后一个字符都是h,然后echo默认情况下会打印换行符,这是脚本的第一个字符。


5

PowerShell,3个字节

00000000: 0a0d 31                                  ..1

仅适用于Microsoft Windows。

不幸的是,输出为UTF-16中的8个字节。但是问题是输出字符而不是字节。可以说,UTF-16只是在PowerShell中表示字符的一种受支持的方式。它们的解释与ASCII文件没有什么不同。


这是一个明智的答案
疯狂

1
允许的原因是0x0a != 0x0d != 0x31:)
bigyihsuan

5

重击(15 11个字符)

echo -n e-e

打印出来

e-e
  • 通过不使用-4个字符 |rev

1
@racraman您建议的编辑echo<space>e<space><space>e将输出,e<space>e<newline>而不是e<space>e,因此我拒绝了。换行符是输出的一部分,这就是为什么GrzegorzOledzki使用该-n选项的原因。尝试echo -n e-e在线 VS 尝试echo e e网上。同样,请不要编辑其他人的答案。如果您有高尔夫建议,请发表评论。
凯文·克鲁伊森

也有11个字节printf pfp,但仅是因为由于中间字符的定义,我们需要两个空格,否则它将是10 ...
pLumo

5

ArnoldC,61个字节

IT'S SHOWTIME
TALK TO THE HAND "D I"
YOU HAVE BEEN TERMINATED

在线尝试!

在ArnoldC中的简单回答。第31个字节是字符串文字之前的空格。


5

欠载9字节 7字节

感谢Khuldraeseth na'Barya的改进解决方案!

W(SSW)S

据我所知,由于以下原因,这现在是不可改进的:

  • 第一个字符必须为无操作字符,因为每条其他指令都会由于堆栈为空而引发错误,但括号除外。但是,并非如此,因为在Underload中无法自行输出一个开括号。
  • 您需要至少使用5个字符将3个输出字符添加到堆栈中。
  • 您需要使用S来输出它。

在线尝试!


欢迎来到Code Golf SE!您可以跳过副本来节省几个字节,例如
Khuldraeseth na'Barya

5

莎士比亚编程语言163153字节

-10个字节感谢Jo King。

B,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:You is
the sum ofa Big Big Big BIG BIG cat a
CAT.Speak thy.You is twice you.Speak thy!SPEAK THY!

在线尝试!

我的第一个SPL答案!产出!BB

不相关字符串另一个 SPL答案;在该答案中,它们仅以119字节输出空格,或以227字节输出非空格字符。该字符介于两者之间,还输出非空格字符。

这里使用两个技巧:

  1. !.!25+1个),而的码点.是46。
  2. 加倍33会给出66的代码点B,即的编码点,因此播放标题为B,我需要第二个“ big”为“ Big”,因为SPL不区分大小写,因此可以使用。

由于我需要大写B字母和结尾的感叹号,所以我决定让Ajax在整个场景中大声喊叫。


4

CJam,7个字节

'@'' _@

在线尝试!


4
可以肯定的0 1 0是,它较短,并且具有三个不同的字符(我不想重新发布Jelly的方法:P)。
暴民埃里克

1
@EriktheOutgolfer好吧!但这就像您的答案,所以我将其保留不变
Luis Mendo

2
是的,这就是为什么我发表评论,并不想重复发表同一件事。(嗯...这可能是许多语言的最佳解决方案。)无论如何,您的语言也可能适用于其他地方!
暴民埃里克

4

Befunge-93,7个字节

.",  @0

在线尝试!

说明

输出是 0 .

.       pop value (0) from stack, output as number with a trailing space
 "      toggle string mode, wraps around and pushes every char to the stack
  ,     pop value (".") from stack, output as character 
        spaces are no-ops
     @  end the program
      0 trailing 0 to match the output


4

厨师,447字节

Last Middle First Milkshake.

This recipe prints its last, middle and first character.
You could also use it to make a milkshake. 

Ingredients.
76 ml milk
32 ml chocolate syrup
46 teaspoons vanilla ice cream

Method.
Liquefy vanilla ice cream.
Put the milk into 1st mixing bowl.
Put the chocolate syrup into 1st mixing bowl.
Put the vanilla ice cream into 1st mixing bowl.
Pour contents of the 1st mixing bowl into the 1st baking dish.

Serves 1.

在线尝试!

认真的提交 196 177字节

多亏了A__

R.

Ingredients.
82 l a
103 l b
46 l c

Method.
Put a into mixing bowl.
Put b into mixing bowl.
Put c into mixing bowl.
Pour contents of mixing bowl into baking dish.

Serves 1.

在线尝试!


看到Chef程序会让我想知道它的最低要求是什么。
bigyihsuan

@bigyihsuan看到我的编辑
user24343

您可以删除所有的“ the”,使程序仍然可以使用
A _

创建了一个工作程序。(177字节)
A _

4

Python 3,19 个字节 13个字节


print( ')(')

打印功能默认情况下会添加换行符,因此代码以换行符开头。代码的最后一个字符是“)”,因此首先打印。为了使字符数不均匀,请在打印功能的参数之前插入一个空格。请原谅代码的卑鄙。

输出: )(\n

在线尝试。


1
根据规则的工作方式,我可能有13个字节来处理您的答案:`print(“)(”)`注意,在上方有一个新行,printprint其后有一个空格")("。输出:)( 末尾有新行。
Hoog

谢谢,减少到13个字节!由于该问题专门针对空格而不是换行符,因此我假定尾随换行符(作为end打印功能的默认参数)不计在内。
jaaq

这会打印尾随的换行符,但不作说明。
A _

不知道换行符是否算作空格,但是我添加了第二个也是13字节的版本。
jaaq

1
是的,换行符算作空格,就像制表符和空格一样
Jo King

4

空格31 29字节

[S aS S T   S S S S S N
_Push_32][S N
S _Duplicate_32][S N
S _Duplicate_32][T  N
S S _Print_as_character][T  N
S S _Print_as_character][T  N
S S _Print_as_character]

-2个字节,感谢@RobinRyder

字母S(空格),T(制表符)和N(换行符)仅作为突出显示而添加。
[..._some_action]仅作为说明添加。

在线尝试(仅使用空格,制表符和换行符)。

包含无操作a符(可以是任何非空白字符)以使长度为奇数。它被添加到程序的前半部分之前,因此中间字符也是一个空格,因为如果中间字符位于程序的后半部分,它将变成换行符。在空白程序中,所有非空白字符都将被忽略。




3

Brain-Flak,11个字节

(((())))

在线尝试!

说明

我们需要将3件事放在堆栈上。最快的方法是在堆栈中放入3个1(或零)。现在,因为(代码点1)在Brain-Flak中不执行任何操作,我们可以将它们添加到程序的第一个中间和最后一个位置。现在,这感觉有点作弊,因此我认为这里还有另外两个答案。

打印大括号,31字节

( (((((()()()()()){}){}){}))())

在线尝试!

这个答案打印括号,这样打印出的字符实际上与代码相关,它确实有一个填充字符以使长度为奇数,所以我们只需要打印一个中间字符。

仅包含大括号,32字节

(((()((((()(()()){}){}){}){}))))

在线尝试!

这是一个仅括号的程序,源代码和(因此)输出都完全由括号组成(字符Brain-Flak实际上在乎)。


3

AsciiDots -9字节

.---$'.$.

输出: .$.

代码以a开头,以a .结束,.中间字符是a$。中间的单引号将点打印模式设置为直接将字符直接读取到输出流中。

可以将其缩小,但我开始怀疑它是否可以缩小。为了打印三个字符,必须使用单引号,因为双引号要求字符串的末尾才能输出。但是,这意味着单引号必须a)后跟三个字符,b)不能为中心字符。为了将其压缩到七个字节,我正在考虑尝试将点的开头用作打印字符之一(类似于AsciiDot的quine程序)。但是,我发现可用于打印的最短顺序是($'这将不得不在三个空格中打印四个字符,或者在四个空格中打印三个字符。我还尝试了一些另类的替代方法,例如尝试将点的值(为0)打印为字符之一。尽管可能有些系统可以工作,但我发现它们相当复杂且庞大。因此,我认为以上是最小的解决方案。(如果发现较小的内容,我会进行更新)


欢迎来到Code Golf SE!我弄了几分钟,得出了与您相同的结论。不错的第一篇文章!
Khuldraeseth na'Barya

1
备用9个字节- /'$'-.[newline]\.在线尝试!
Alion

3

MATLAB,13 15字节

disp(  ') d')

产出 ) d

先前版本(15个字节,输出不太严格):

'''';1;''''''''

产出 '''


我现在知道了,现在担心了。
小麦巫师

这个输出不是尾随空格吗?
桑契斯

@Sanchises nope,大小(ans)== 3
10

是的,但实际输出是ans =\n '''\n。通常这不是问题,但此挑战似乎设定了更严格的标准。但是后来我可能将挑战解释为错误的。
桑契斯

@Sanchises嗯,我明白了。我可能会误解codegolf认为的“输出”,那么,您的输出似乎是字面意义上由MATLAB格式化的输出
Oct18是
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.