奎因挑战我


12

挑战

在此任务中,您必须编写一个程序,将输入整数N (-1e9 <= N <0 && 0 <N <= + 1e9),然后计算T =(abs(N)%M + 1),如果N为正,然后从源头开始输出第T个字符,否则从源末尾输出第T个字符。

M是您的源大小(以字节为单位)。

示例:如果您的来源是:abcd efg/hi

输入:

 2

输出:

 c

输入

-3

输出:

g 

输入

-9249678

输出:

b 

输入

-11

输出:

i 

约束条件

  • 不要使用任何FILE操作
  • 您可以使用任何选择的语言
  • 尽量避免甚至不要使用1字节提交,因为它会破坏所有乐趣。
  • 最短的解决方案获胜!

编辑:问题陈述已被修改,以便可以使用随机测试数据(和所有解决方案的相同数据)来判断解决方案,因此请相应地更新您的解决方案,对于给您带来的不便,我们深表歉意。


在给定示例测试用例中,如果输入是5-7,则输出应为单个空格:“”(不带引号)。
Quixotic

如果N为0怎么办?
aaaaaaaaaaaa

@eBusiness:感谢您指出,我更改了问题说明,我认为现在不会出现$ 0 $的问题:-)
Quixotic

3
它一直是一个奇怪的映射,现在字符从0跳转到1:时被跳过-2 -> / -1 -> h 0 -> i 1 -> b 2 -> c。但是至少现在映射是一致的。
aaaaaaaaaaaa

1
我想&&第一句话中的意味着是||
圣保罗Ebermann

Answers:


12

x86程序集(32位Linux,AT&T语法):548

文件末尾没有换行符:

pushl 8(%esp)
call atoi
mov $274,%ebx
cmp $0,%eax
jg a
dec %eax
a:cdq
idiv %ebx
cmp $0,%edx
jge p
add %ebx,%edx
p:add $s,%edx
cmp $s+273,%edx
jl l
push $34
mov %esp,%edx
l:mov $4,%eax
mov $1,%ebx
mov %edx,%ecx
mov $1,%edx
int $128
mov $0,%ebx
mov $1,%eax
int $128
s:.ascii "pushl 8(%esp)
call atoi
mov $274,%ebx
cmp $0,%eax
jg a
dec %eax
a:cdq
idiv %ebx
cmp $0,%edx
jge p
add %ebx,%edx
p:add $s,%edx
cmp $s+273,%edx
jl l
push $34
mov %esp,%edx
l:mov $4,%eax
mov $1,%ebx
mov %edx,%ecx
mov $1,%edx
int $128
mov $0,%ebx
mov $1,%eax
int $128
s:.ascii "

我用 gcc -nostartfiles -m32 qc1.S -o qc1

验证,正数:

$ for i in $(seq 548 1095); do ./qc1 $i; done | cmp - qc1.S && echo Good
Good

验证,负数:

$ for i in $(seq -1095 -548); do ./qc1 $i; done | cmp - qc1.S && echo Good
Good

Edit正确地处理了奇怪的编号方案。 我认为。 它没有改变长度。


+1,这是在组装过程中完成的出色工作,但是我做了一件小事,已经修改了问题,使测试无法通过,因此请同样修改您的解决方案,谢谢。
Quixotic

嘿,很酷。有趣的是,尽管语言如此不同,但这似乎与我的44个字符的GolfScript解决方案相似。
aaaaaaaaaaaa

1
@Debanjan:我真的似乎无法绕过编号方案。您能提供适当的验证行吗?(问题陈述会是一个好地方)
JB

+1,这是您的第二次“无效”请求(代码高尔夫明智),值得推荐:)
Eelvex 2011年

@Eelvex:记录下来,另一个在发布时是有效的。
JB

10

Whaddaya知道,HQ9 +回报丰厚

Q

只有一个字符可供选择时,无需打扰索引!


是否需要任何输入?
Quixotic

@Debanjan:确定:echo '-1' | hq9+ qc1
JB

抱歉,这对我来说没有太大意义,我在PHP中有一个类似的解决方案,但是这种解决方案不会破坏所有的乐趣吗?谢谢,
Quixotic

你不具备接受它,如果你不觉得它适合,你懂的!您甚至不必投票。您甚至可以投票反对,尽管个人不感激;-)
JB

不,这不是关于接受还是拒绝,我只是在说一个观点,我也想投票,因为我学到了新的东西:-)
Quixotic

5

Ruby 1.9,66个字符

z=gets.to_i;s="z=gets.to_i;s=%p;$><<(s%%s)[z%%66]";$><<(s%s)[z%66]

实际上,与普通的奎纳丝并没有太大区别。

  • 编辑:立即遵循新规范。

5

GolfScript 26个字符

{':f`f'+1/\~.1<- 26%=}:f`f

在动态语言发明之前,五线组更加有趣。

编辑:对于细语,这是一个“真实的” GolfScript quine,没有`和〜仅用于解析输入。

残障人士GolfScript 44个字符

'"\x27"\+1/\~.1<- 22%='"\x27"\+1/\~.1<- 22%=

请注意,相同的字符串重复两次是多么好,因此字符串文字只需要'在其前面砍下即可使用。


1
我不了解GolfScript,但是您的评论使我认为您的代码倾向于约束的“文件操作”类别。想要扩大内部空间吗?
JB

神奇之处在于使用了`运算符,基本上我定义了一个函数,将其存储在变量中,将函数转换为它自己的字符串表示形式(`做到了),然后运行函数,它可以轻松地完成任务因为它在字符串中有自己的内脏。
aaaaaaaaaaaaa

+1:到Quines were more fun before the invention of dynamic languages.:-)
Quixotic

3
好吧,我敢肯定,地狱不会尝试用汇编语言来尝试这一点 ……
JB

6
刮一下。我确实用汇编语言尝试过这个。
JB,

2

语言,4个字节

源代码由4个空字节组成。不管输入如何,输出都应该是一个空字节,这由一条.指令完成。


0

Smalltalk,94 90 59 52

例如,在Object类中,编译:

q:n|s|s:=thisContext method source.^s at:n\\s size+1

然后发送q:<n>到任何对象;这里是一个整数:

验证:

1 q:0-> q
1 q:1->:
1 q:2-> n
...
1 q:-1->)
1 q:-2->)
1 q:-3-> 1

或更好:
(0至:100)收集:[:n | 1 q:n] as:String-
>')q:n|s m|s:=thisContext method source.m:=s size.^s at:(n>=0ifTrue:n-1\\m+1ifFalse:m-(0-n\\m))q:n|s m|'

(-1 downTo:-500)collect:[:n | 1 q:n] as:String-
>')m\\n-0(-m:eslaFfi1+m\\1-n:eurTfi0=>n(:ta s^.ezis s=:m.ecruos dohtem txetnoCsiht=:s|m s|n:q))m\\n-0('

非Smalltalkers的解释:
thisContext是当前的堆栈框架,可以要求其方法,可以要求其


0

符文附魔,17字节

"3X4+kSq:l͍iS%%@

在线尝试!

只是使用标准的quine生成程序字符串,然后使用基于字符串的模运算符1来获取给定索引处的字符(本机支持负数和正数,行为受Python影响)。

  1. ,“分”命令削减串分成组块(逻辑足够逆*复制串x倍),+会连接,并-移除了x字符从端部(一个逻辑足够逆+)。因此,该%命令的作用是charAt(x):仅剩基本的字符串操作(在由处理堆栈的相同命令处理类似堆栈的操作之后;例如,堆栈l的大小即字符串的长度)。

0

JavaScript(ES6),28个字节

f=n=>("f="+f).substr(n%28,1)

修饰的奎因。

大于28 %28的值由处理,小于0的值由处理.substr()

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.