没有A的字母A


69

您的任务是单独显示字母“ A”,除了在程序和/或代码段中不能避免的任何形式的尾随换行符以外,其他任何内容都不能显示。允许返回(而不是打印)的代码。

字母“ A”的小写和大写版本均可接受(即unicode U + 0061或unicode U + 0041。其他非Unicode的字符编码也是允许的,但是无论哪种方式,代码的结果输出必须是拉丁字母“ A”,并且没有任何相似或象形文字)

你一定不能使用任何以下字符的代码中,无论字符编码的你选择:

  • A ”,无论是大写还是小写。

  • U ”,无论是小写还是大写。

  • X,无论是大写还是小写。

  • +

  • 0

  • 1个

  • 4

  • 5

  • 6

  • 7

  • 9

禁止作弊,漏洞等。

由于这是,因此,遵循所有规则的最短解决方案(以字节为单位)是赢家。


有效性检查器

该堆栈代码片段检查以确保您的代码不使用受限字符。对于某些字符编码,它可能无法正常工作。

var t = prompt("Input your code.");

if (/[AaUuXx+&#0145679]/.test(t)) {
  alert("Contains a disallowed character!");
} else {
  alert("No disallowed characters");
}

JSFiddle上还提供了确保您没有禁止使用的字符的堆栈片段。

排行榜


7
@ColdGolf您似乎对函数说“是”,但是函数不显示,它们通常会返回。
xnor

2
最终包含一个变量a也足够好吗?
Ton Hospel '16

1
我不是这个意思。假定执行变量分配的代码将不包含任何禁止的字符。我只是想了解“通过印刷以外的方式进行显示”所涵盖的内容。如果“从函数返回”没问题,那么“分配给变量”呢?
Ton Hospel '16

1
为什么是那些特殊字符?
immibis

7
@immibis A有明显的原因。U对于Unicode转义字符串(\u0041is A),X对于十六进制转义字符串(\x41),+对于Unicode序数(U+0041),&对于HTML实体,#因为我实际上不知道,65是的十进制序数A41是的十六进制序数A97是的十进制序数a,以及0之前的一些原因。
Mego

Answers:


86

Pluso,1个字节

o

Pluso Esolangs页

Pluso包含一个以值1开头的累加器。它使用两个命令,p用于增加累加器(mod 27),而o则将当前值打印为大写ASCII字符,AZ或空格(其中1-26表示分别为AZ和0表示空格。

作为累加器从1开始,该命令ö没有事先p将输出


14
欢迎来到PPCG!我建议您在答案中添加解释,以防链接因任何原因而终止。
TheBikingViking

添加说明。等待主持人批准。
KPM

2
感谢您的推荐(和欢迎),我已经更新了答案,其中包括简短的解释。
cdw

我只是想让你成为666代表。对于那个很抱歉。
艾丹·皮尔斯

5
这是否因为不能进行素数检查而未能通过“是esolang”测试吗?
魔术章鱼缸

155

Python 2,14个字节

print`3<3`[~3]

该表达式3<3给出布尔值False,反引号给出其字符串表示形式'False'。从这里,仍然要提取字母a。Python是0索引的,因此aat是index 1,这是一个禁止的字符。可以表示为3-2,但是有一个较短的方法。Python允许从背面索引-1,最后一个条目的索引, -2之前一个的索引,依此类推。我们需要index -4,但4也是一个禁止的数字。但是,我们可以将它表示为~3使用比特补~,这给-n-1~n


7
那是一个非常酷的解决方案。另外,您不能[2]代替[~3]吗?
DJMcMayhem

6
@DJMcMayhem不幸的是,它的索引是0 [1]
xnor

4
...为什么14“被禁止”的数字?
克里斯·西里菲斯

4
挑战的规则如此。
xnor

20
我现在甚至考虑将“〜0”读取为“从背面零索引的第一个元素”。我不知道为什么我们会用“1”的符号在Python ....
PascalVKooten


48

PHP,9 6字节

<?=O^_^Q;

9个字节:受@Ton Hospel的回答启发。另外,它还具有看起来像Kaomoji的额外好处。:-)

6个字节的改进版本:

<?=~¾;

其中¾的十六进制代码为0xBE(将文件保存到 Latin-1编码而不是 UTF-8!很重要)。


替代版本是f^E^b
伊斯梅尔·米格尔

是的,9字节的解决方案非常丰富。我以y ^'8'和x ^'9'开头,不幸的是必须将数字强制转换为字符串,否则它将XOR生成的类型为整数。
YetiCGN

23
脸部+1^_^
Cyoce '16

6字节版本不打印A。它打印=A
UTF-8

1
我现在知道这个谜的答案:在UTF-8中,“四分之三”代码点被编码为两个字节:0xC2 0xBE,0xBE与ISO-8859-1中的相同。我注意到,当我将其保存到Linux机器上的文件中时,该文件是7 bytes,我可以使用UTF-8通过SSH访问该文件。因此,使用Latin-1编码保存脚本,它将是6个字节,并且不会输出=字符。
YetiCGN


32

Brainfuck,16个字节

-[-[---<]>>-]<-.

这是基于Esolang的159的Brainfuck算法

在线尝试!


3
这...这是巫术。
科纳·奥布莱恩

3
此解决方案使用索引为-1的单元格,并非所有的Brainfuck解释器都支持该单元格,这将导致崩溃。您可以在此处运行它以查看fatiherikli.github.io/brainfuck-visualizer/…–
Cody

37
@Cody在PPCG上,语言是由其实现定义的。只要有一个解释程序可以按要求运行,它就是一个有效的解决方案。
丹尼斯

3
要避免这些禁忌字符有多难?
哈根·冯·埃岑

1
@HagenvonEitzen我不得不花点时间找到可以避免的算法+。(打印A的最短方法是>+[+[<]>>+<+]>.),但是要感谢Esolang上的常量列表,所以不太难。
丹尼斯

30

JavaScript(ES6),17 16 14字节

感谢尼尔,节省了两个字节!

_=>` ${-_}`[2]

返回的第二个字符 NaN,即a

这是我能想出最短A43个 42字节:

_=>`${[][`constr${`${!_}`[2]}ctor`]}`[-~8]

谁说成为混淆者对打高尔夫球毫无帮助?不是我!

说明

第一个,深入。

_=>` ${-_}`[2]

-_是NaN,因为_未定义。要以字符串形式获取,需要以下之一:

-_+""
`${-_}`
(-_).toString()

最后一个太长,第一个使用+。因此,我们使用第二个。现在,a索引为1。这是没有好处的,因为1被禁止。但是,作为模板字符串,我们可以在其中放置一个空格以使其位于index处2,从而使我们留有余地` ${-_}`


第二个,深入。

_=>`${[][`constr${`${!_}`[2]}ctor`]}`[-~8]

这是一个傻瓜。

_=>`                                `[-~8]

这是内部模板字符串的第9个字符,-~8等于9。在这种情况下,此模板字符串仅用于字符串化。这是内部表达式,介于之间${...}

[][`constr${`${!_}`[2]}ctor`]

让我们扩展一下:

(new Array())[`constr${`${!_}`[2]}ctor`]

这从一个空数组获取属性。当然,此属性是模板字符串,但是它周围有一些文本。大致相当于:`constr${${!""}[2]}ctor`

"constr" + `${!_}`[2] + "ctor"

内部反过来等效于:

(!_).toString()[2]

!_true(因为_undefined!undefined === true),和字符串化是"true"。我们得到它的第二个字符u;我们必须以这种方式获得它以避免显式放置u我们的代码。

因此,此内部位等效于:

"constr" + "u" + "ctor" === "constructor"

因此,我们得到了Array的构造Array函数,即函数。我不能明确地把它放下来,因为它包含禁止的A。现在,对Array函数进行字符串化生成"function Array() { [native code] }"

回到原始代码:

_=>`${[][`constr${`${!_}`[2]}ctor`]}`[-~8]

如我们所见,这等效于:

_=>Array.toString()[-~8]

相当于:

_=>Array.toString()[9]

最后等于:

_=>"A"

1
@ColdGolf没关系。
科纳·奥布莱恩

2
添加混淆说明会违反混淆器的原理吗?我很好奇这是如何工作的。
trichoplax

2
@trichoplax我想在这里展示我的方法不会有什么害处;)我为这两种方法都添加了解释。
科纳·奥布莱恩,

1
@ OldBunny2800号a是一个禁止字符,位于中toUpperCase
科纳·奥布莱恩

3
我最初以为是Perl。
2016年

29

六边形,4字节

嗨,lmao?非常适合打高尔夫球的语言哈哈。码:

B(;@

在线尝试!

更具可读性的形式:

 B (
; @ .
 . .

这会将字母的ASCII值(B即66)放入当前内存边缘。它使用减去它(并用打印;。之后,使用终止程序@

强制路径图片:

在此处输入图片说明


8
“更具可读性” +六角形= ???
并非查尔斯(Charles)

18

果冻,3 个字节

ØWḢ

在线尝试!

这个怎么运作

ØWḢ  Main link. No arguments.

ØW   Yield "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_".
  Ḣ  Head; extract the first character.

果冻,4个字节

l-ṾṂ

在线尝试!

这个怎么运作

l-ṾṂ  Main link. No arguments.

l-    Take the logarithm of 0 with base -1. Yields (nan+infj).
  Ṿ   Uneval; yield the string representation, i.e., "nanıinf".
   Ṃ  Take the minimum, returning 'a'.

1
太糟糕了,第二种方法更长。._。
丹尼斯

6
感谢您加入第二种方法。美丽
trichoplax

18

实际上,2个字节

úF

在线尝试!

说明:

úF
ú   lowercase English alphabet
 F  first element

你是作者吗?我以前没看过这种语言。
loa_in_

我已经看到它在挑战中突然弹出了几次。我认为它是网站上所有高尔夫语言中最聪明的名称:-)我最近一直在看《西服》,发现它非常适合哈维。
corsiKa

17

CJam,3个字节

'@)

在线尝试!

这个怎么运作

'@   Push the character '@' on the stack.
  )  Increment its code point, yielding 'A'.

12

泡泡糖 1字节

"

要么

B

每个人似乎都忘记了它的存在。


以前从未使用过Bubblegum,所以也许请原谅我的无知,但是在哪里可以找到Bubblegum的文档?另外,我尝试了两个答案的bubblegum.tryitonline.net,但似乎没有输出任何内容。
凯文·克鲁伊森

1
@KevinCruijssen Doc:esolangs.org/wiki/Bubblegum TIO似乎仅接受源代码的
十六进制转储

啊,那是我的问题;不使用hexdump。感谢和+1是最短的单字节答案(与Pluso并列)。
凯文·克鲁伊森

@KevinCruijssen有一个1字节的Pluso答案。但是,它具有一些奇怪的站点规则问题。
jimmy23013 '16

10

Perl,9 8字节

仍允许使用xor,但say不允许。因此对于9个字节:

print$/^K

但是,使用输出到STDERR会得到8个字节:

die~"\x9e\xf5"

用其文字版本替换\x9e\xf5。或使用以下命令生成可执行文件:

perl -e 'printf q(die~"%s"),~"a\n"' > a.pl

@ColdGolf:我不清楚。您的意思say是只要参数的构造不使用禁止的字符,我就可以使用(包含a)进行打印?
Ton Hospel '16

“但是,您不得在代码中使用以下任何字符:* A,不管是大写还是小写。” 从那,我会print "No using the letter with code point 65";
haykam '16

@ColdGolf是以任何方式回答问题的意思吗?
hobbs

10

> <>,6个字节

'|;o-$

这将创建一个字符串,反弹并再次反向创建,翻转前两个堆栈项并减去:'|' (124)减';' (59)是“ A”(65)

在线尝试


2
真好!我得到'$-o;|的几乎是一样的,但是没有弹跳。(|;o-$'也有效。)
randomra

1
@randomra哦,是的!那肯定跑得更快,所以做得很好
torcado

10

Ruby,15个12字节

$><<to_s[-3]

1
您可以保存2个字节,将其更改$><<p ,使p to_s[-3]
Ephi

@Ephi p调用inspect其参数,因此输出将被引用,这将取消其资格。
约旦

我错过了挑战的那一部分,因为我认为这是一个有趣的信息,所以我会
保留

10

Java,55个字节

void f(){System.err.write('c'-2);System.err.println();}

由于必须打印代码,因此需要两个内置编写器之一。System.out很好,因为它包含uSystem.err工作,但是。

下一个障碍是Java对charand 的处理int。由于不允许将其强制转换为,char因为它包含a,并且由于'c' - 2被提升为int,因此需要另一种机制。System.err是一个PrintWriterwrite(char)方法但没有的方法write(int)。放置'c' - 2在其中会强制其char不进行任何投射。

最终,每次我运行程序时,缓冲区的缓冲System.err都不会像预期的那样刷新,并且程序什么也不打印。所以我不得不手动冲洗它。但是,System.err.flush()不允许这样做,所以我调用了println()它隐式刷新基础流。


9

MATL,5个字节

YNVH)

在线尝试

说明

YN      % Creates a NaN value (not a number)
V       % Convert it to a string
H)      % Grab the second letter ('a')
        % Implicitly display the result

我原来的答案是使用预先定义的字面直接的方法lY2,其产生'A'...'Z',然后选择第一个元素,'A'

lY2l)

9

Javascript,18个字节 16个字节 12个字节 11个字节

` ${!2}`[2]

基于改进jsfuck基础知识(必须弄清楚如何更换+使用-)。

不打高尔夫球?

好吧,至少是带有注释的版本(请注意,该版本可能不会运行):

` ${      // whitespace to make "a" the third letter
  !2      // returns false
}`        // convert to string "false"
[2]       // index the third letter in " false" (note the whitespace)

旧解决方案:

`${![]}`[-(-!![])]

您可以用减号之间的空格替换括号。
PurkkaKoodari'8

@ Pietu1998:我注意到,3允许所以用无聊的老替换整个事情3-21
slebetman

感谢Conor O'Brien的回答,节省了一个字节
slebetman '16

1
嗯,没有冒犯,但这几乎是我的答案。除非您使用false代替NaN并且不使用函数。
科纳·奥布莱恩

8

Vim,16 13 11 10击键

感谢H Walters保存了两个密钥

感谢DJMcMayhem节省了另一个!

:h%<cr>jvyZZp
:h%<cr> #open help for percent
jvy     #move down one char (to the letter "a"), visual mode the character, yank
ZZ      #exit help for percent
p       #put yanked character

很好的方法!
YetiCGN '16

2
节省3个字节;代替:h<cr>尝试:h%<cr>。那是一个额外的字符,但是您最终会获得对的帮助%,将光标放在a上。因此,您可以从此处替换33llj
H Walters

道歉,明显的错字(节省2个字节)
H Walters

您可以使用ZZ而不是:q<cr>保存另一个。
DJMcMayhem

8

R,27 12字节

编辑:新版本,来自@Jarko Dubbeldam的一个绝妙想法

LETTERS[T*T]

相当有趣的挑战!

基本上,这需要26th包含大写字母的反向向量的元素(LETTERS,这是R的内置向量)

先前版本s(相同的字节数)

L=LETTERS;rev(L)[length(L)]
rev((L=LETTERS))[length(L)]

1
有点晚了,但是您可以用保存很多LETTERS[T*T]T进行1数值运算时取值。
JAD

我找到了一个更短的解决方案!
朱塞佩

从技术上讲,这不是解决方案---打印'[1]“ a”'而不是'
a'– JDL

8

> <>7 4个字节

感谢Teal pelican,节省了3个字节

"-o.

在线尝试!

说明

"-o."   # pushes the string "-o."
-       # subtracts the charcode of o from the charcode of . (dot), 111-46=65
o       # prints as character
.       # tries to pop 2 coordinates to jump to, but as nothing is left on the stack
        # the program ends in an error

我会做的"B"1-o;
DanTheMan '16

@DanTheMan那应该是更明显的解决方案。我想知道为什么我没有想到:P
Emigna '16

@DanTheMan:-结束Dan发表的内容,您可以将其进一步减少到;“ 1-o; B或更好的” + o;&“,因为这两种情况都允许制作这5个字节:)-您甚至可以将其设置为4个字节,但有错误;“-o。
蒂尔鹈鹕

@Tealpelican:太好了!在此类挑战中,使用字符串通常最短,但我什至没有考虑:)
Emigna

当我看到Dan的评论时,它使我想起了类似的旧挑战,所以只使用了相同的概念:)
蓝绿色鹈鹕

7

Vim,2个击键

vim -u NONE然后运行以下命令(-u NONE关闭自定义)

i<up>

当vim在兼容模式下运行时,箭头键无法正确解释。<up>得到解释<esc>OA,将以下内容置于插入模式。哪一个会留下(带有几个尾随的换行符)

A

i 开始插入模式。
<up>退出插入模式,在上方打开一行,然后在缓冲区中输入A

人们在野外遇到这种情况的例子。https://stackoverflow.com/questions/6987317/while-moving-the-cursor-across-a-vim-process-open-in-a-tmux-session-every-now-a/6988748#6988748


读的时候我笑了。这是一项很好的工作。我知道但没有想到的强大武器。
udioica

6

Brainfuck,192个 19字节

----[>---<----]>--.

感谢@NinjaBearMonkey帮助我节省了hella字节

-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -----------------------------------------。

我不太擅长Brainfuck,所以我确定有一个较短的解决方案,但是它的工作原理是将值递减到0以下,将字节翻转,然后继续下去直到降到'A',然后打印。


1
不是认真的竞争对手。如果您真的不喜欢高尔夫,那么投票者可能会反转他们的投票
Destructible Lemon

即使有65个加号,计数到65也不会短很多吗?
NinjaBearMonkey '16

2
不允许使用“ +”,所以我不得不倒退
Cody

抱歉,我没看到。不过,制作191的方法仍然短得多。
NinjaBearMonkey '16

2
那是192字节的解决方案,我只是将其留给删除线而不是删除它,因为我认为从192变为19很有趣
Cody

6

JavaScript(ES6),21个字节

_=>(8^2).toString(22)

我最初尝试将其转换false为字符串来完成此操作,但是当时我花了23个字节。从那以后,我想出了一种较短的方法,这是14个字节:

_=>`!${!2}`[2]

我认为您不能A在规则下使用大写字母,因为您需要其中一个String.fromCharCode.toUpperCase(),两个都包含a


您可以使用JSF或使用计算属性的导数获得大写字母
Downgoat

1
@Downgoat Conor O'Brien已经展示了如何。
尼尔,

6

C,(19个)24个字节

感谢丹尼斯:

f(){printf("%c",88-23);}

相同长度:

f(){printf("%c",'C'-2);}

这也使小写:

f(){printf("%c",'c'-2);}

有一个19字节的解决方案作为修改其参数的函数,它有一个缺陷:

g(int*p){*p='C'-2;}

//Usage:

main(){
  int c; //cannot be char
  g(&c);
  printf("%c\n",c);
}

如果c声明了char,则g修改整体,int以使其粉碎堆栈,从而导致其他值被修改或程序因错误消息而中止。规避唯一的办法是宣布int c;main与打印"%c",但感觉就像一个漏洞。

较旧的解决方案

f(){printf("%c",'B'-2/2);} //26 bytes
f(i){i='B';printf("%c",--i);} //29 bytes
f(){int*i="B";int j[]={*i-(2/2),2-2};printf("%s",j);} //53 bytes

只是一个功能,因为main被禁止。


3
88-23应该保存几个字节。
丹尼斯

对于小写字母a,可以使用(333-33)/ 3-3。它不如'c'-2短,但为3er。33 * 3-2也可以。
rici

如果使用write()而不是printf,则可以使其成为一个程序;指定构建步骤,以确保您根本不针对任何libc进行链接;如果没有_start,则第一个符号将跳转到_exit,因此它是安全的。至少有一个版本的gcc将优化write()到直接的syscall中,而根本没有函数调用。
约书亚

根据您的IDE,您可以执行以下操作:printf("%c",~'ɦ');,尽管“ A”会带有重音符号
阿尔伯特·伦肖

@AlbertRenshaw ɦ是2个字节的字符
Karl Napf '17

6

dc,4个字节

833P

UCHAR_MAX溢出在登陆到65之前六次滚动了三遍表。


6

Lua,36个字节

这一次我花了一段时间,因为许多标准的Lua功能从规则(全部带走mathstring.charstring.matchpairs,甚至next

这利用了这样一个事实:Lua具有_VERSION通常以“ Lua”开头的全局Lua 5.1字符(例如,对于其他版本为,或类似的字符),因此,除非在非主流解释器上运行,否则第三个字符将为“ a”

print(({_VERSION:find("..(.)")})[3])

{...}[3]是,把结果的find其中还包括,其中它相匹配的索引,并且然后返回第三项是匹配的字符(a


1
print(({type{}:find".(.)"})[3]) 31个字节
Egor Skriptunoff

6

Haskell,10个字节

作为一个函数(或者说因为不需要输入而声明)

f=pred 'B'

绝招。在Ideone上尝试。 完整的程序是不可能的,因为这将需要包含一个main


我认为这是不正确的。该任务需要“打印”或“显示” A。您的函数只返回它,而链接的程序通过putChar使用来显示它u
nimi

您是对的,但是规则已经更新,现在从函数返回似乎没问题。
Laikoni '16

不,规则仍然说print和/或display
nimi

2
Dennis明确地询问从函数返回而不是打印是否可以,OP回答“是”,但是此后问题的措词仍未反映出来。我想我们仍然需要等待进一步的澄清。
Laikoni '16

1
OP确认A应打印/显示而不退还。
nimi


5

直流电 8 7字节

-1B感谢丹尼斯

88 23-P

压入88,压入23,相减,剩下65。将栈顶(65)打印为ASCII字符串,不包括换行符。

编辑:

这些是我想出的其他一些方法。基本上,它变成了“仅使用[238B-F]加法器而不使用加法器生成数字65和97”的游戏。具有讽刺意味的是,我发现最长的最有趣。

_Fdd/r-oC 2-n  # involves changing the base
2_2/8d*3*2/-P
Idd2/2/-2*on   # also changes base
2d8r^r_2/-P
8d*2_2/-P
B 3d**2-P
33 3*2-P
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.