Quine Challenge I


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
나는 &&첫 번째 문장에서 ||?
Paŭlo Ebermann

답변:


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

편집 은 이상한 번호 매기기 체계에 대해 올바르게 알았습니다. 내 생각 엔 길이는 바뀌지 않았습니다.


+1, 어셈블리 에서이 작업을 수행하는 훌륭한 작업이지만 테스트를 만장일치로 만들기 위해 문제를 수정 한 작은 것이므로 솔루션을 현명하게 수정하십시오. 감사합니다.
Quixotic

허, 꽤 멋지다. 그리고 재미있는 것은, 너무 다른 언어 임에도 불구하고 이것은 44 자의 GolfScript 솔루션과 비슷합니다.
aaaaaaaaaaaa

1
@ Debanjan : 번호 매기기 구성표로 머리를 감쌀 수없는 것 같습니다. 적절한 검증 라인을 제공 할 수 있습니까? (문제 진술은 좋은 곳이 될 것입니다)
JB

+1, 여기에 찬성 할만한 가치가있는 두 번째 "유효하지 않은"asnwer (코드 골프) :)
Eelvex

@ Elvex : 기록을 위해 다른 하나는 게시 당시 유효했습니다.
JB

10

Whaddaya는 HQ9 + 가 큰 성공을 거두었 다는 것을 알고 있습니다 !

Q

선택할 수있는 캐릭터가 하나 뿐인 경우 인덱싱을 귀찮게 할 필요가 없습니다!


입력이 필요합니까?
Quixotic

@Debanjan : 확실한 :echo '-1' | hq9+ qc1
JB

죄송합니다, 이것은 나에게별로 이해 가되지 않습니다 .PHP에 비슷한 솔루션 이 있지만이 유형의 솔루션이 모든 재미를 망치지 않습니까? 감사합니다
Quixotic

당신이하지 않는 당신이 그것을에 맞는 생각하지 않는 경우 동의, 당신은 알고있다! 공표 할 필요조차 없습니다. 내가 개인적으로 감사 하지는 않지만 당신은 그것을 공감할 수도 있습니다. ;-)
JB

아니, 그것은 :-) 난 그냥 뭔가 새로운 것을 배울 수 있기 때문에 또한 내가-투표까지 그것을하고 싶은 점을 명시하고, 받아 들일 또는 거부에 대한 아니에요
돈키호테

5

루비 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

역동적 인 언어가 발명되기 전에 Quines가 더 재미있었습니다.

편집 : 위너를 위해 여기에 "진짜"GolfScript quine이 있으며 입력을 구문 분석하는 데 사용되는`및 ~는 없습니다.

장애인 골프 스크립트 44 자

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

동일한 문자열이 두 번 반복되는 것이 얼마나 좋은지 확인하십시오. 따라서 문자열 리터럴 '은 그 앞에 해킹되어 있어야하며 사용할 준비가되었습니다.


1
GolfScript를 모르지만 귀하의 의견에 따라 귀하의 코드가 제약 조건의 "FILE 작업"범주에 의존한다고 생각합니다. 내부를 확장하고 싶으십니까?
JB

마술은`연산자를 사용하여 발생합니다. 기본적으로 함수를 정의하고 변수에 저장하고 함수를 자체 문자열 표현으로 변환 한 다음 함수를 실행하여 사소하게 작업을 완료 할 수 있습니다 문자열에 자체 내장이 있습니다.
aaaaaaaaaaaa

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

3
글쎄요, 저는 어셈블리 언어로 이것을 시도하지 않았을 것입니다 ...
JB

6
긁어 나는 어셈블리 언어에서이 하나를 시도해보십시오.
JB

2

길이, 4 바이트

소스 코드는 4 개의 널 바이트로 구성됩니다. 입력에 관계없이 출력은 널 바이트 여야하며 이는 하나의 .명령으로 수행됩니다 .


0

스몰 토크, 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) collect : [: 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 : 문자열
->')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('


소규모에 대한 설명 : thisContext 는 현재 스택 프레임으로, 메소드를 요청할 수 있으며 소스를 요청할 수 있습니다 .


0

룬 마법 , 17 바이트

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

온라인으로 사용해보십시오!

표준 quine을 사용하여 프로그램 문자열을 생성 한 다음 문자열 기반 모듈러스 연산자 1 을 사용하여 주어진 인덱스에서 문자를 가져옵니다 (기본적으로 음수 및 양수 표시, Python의 영향을받는 동작 지원).

  1. ,"분할"명령 삭감 조각으로 문자열까지 (논리 충분한 역 *문자열 복제 x번) +을 병합하고 -제거합니다의 x끝에서 문자 (논리적으로 충분히 역 +). 따라서 %명령은 다음과 같은 역할을 charAt(x)수행합니다. 남은 유일한 기본 문자열 작업 (스택을 처리하는 동일한 명령으로 스택과 같은 작업을 처리 한 후 (예 : 스택 l의 크기 는 문자열의 길이))

0

자바 스크립트 (ES6), 28 바이트

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

수정 된 quine.

28보다 큰 값은에 의해 처리되고 %280보다 작은 값은에 의해 처리됩니다 .substr().

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.