Quine Challenge I


12

ท้าทาย

ในภารกิจนี้คุณต้องเขียนโปรแกรมที่จะป้อนจำนวนเต็ม N (-1e9 <= N <0 && 0 <N <= + 1e9)จากนั้นคำนวณT = (abs (N)% M + 1)ถ้า N เป็นค่าบวกจากนั้นส่งออกอักขระ T-th จากจุดเริ่มต้นและส่งออกอักขระ T-th จากส่วนท้ายของแหล่งที่มาของคุณ

M คือขนาดของแหล่งที่มาของคุณเป็นไบต์

ตัวอย่าง:หากแหล่งที่มาของคุณคือ:abcd efg/hi

การป้อนข้อมูล:

 2

เอาท์พุท:

 c

อินพุต :

-3

เอาท์พุท:

g 

อินพุต :

-9249678

เอาท์พุท:

b 

อินพุต :

-11

เอาท์พุท:

i 

ข้อ จำกัด

  • อย่าใช้การดำเนินการใด ๆ ของไฟล์
  • คุณสามารถใช้ภาษาที่คุณเลือกได้
  • พยายามหลีกเลี่ยงหรือไม่ใช้การส่ง 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 (Linux 32 บิต, 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

เฮ้เด็ดมาก และสิ่งที่ตลกแม้ว่าจะเป็นภาษาที่แตกต่างกันมากดูเหมือนว่าจะคล้ายกับโซลูชัน GolfScript 44 ตัวอักษรของฉัน
aaaaaaaaaaaa

1
@Debanjan: ฉันดูเหมือนจะไม่สามารถที่จะห่อหัวของฉันไปรอบ ๆ รูปแบบหมายเลข คุณสามารถให้สายการตรวจสอบที่เหมาะสมหรือไม่ (คำแถลงปัญหาจะเป็นที่ที่ดี)
JB

+1 นั่นคือแอนเวิร์สที่สองของคุณ "ไม่ถูกต้อง" ที่นี่ (การเขียนโค้ดที่ชาญฉลาด) ที่คุ้มค่าต่อการ
ปฏิวัติ

@Eevenx: สำหรับบันทึกอีกอันหนึ่งใช้ได้ในเวลาที่โพสต์
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

Quines สนุกกว่าก่อนการประดิษฐ์ภาษาไดนามิก

แก้ไข: สำหรับ whiners นี่คือ GolfScript quine "ของจริง" ไม่ใช้ `และ ~ สำหรับการแยกวิเคราะห์อินพุตเท่านั้น

GolfScript ที่ใช้งานไม่ได้ 44 ตัวอักษร

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

ขอให้สังเกตว่ามันเป็นสายเดียวกันซ้ำสองครั้งดังนั้นตัวอักษรสตริงเพียงแค่ต้อง'แฮ็คข้างหน้ามันและมันพร้อมใช้งาน


1
ฉันไม่รู้จัก GolfScript แต่ความคิดเห็นของคุณผลักดันให้ฉันคิดว่ารหัสของคุณเอียงไปทางหมวดหมู่ "การดำเนินการ FILE" ของข้อ จำกัด สนใจที่จะขยายอวัยวะภายในของมัน?
JB

ความมหัศจรรย์เกิดขึ้นจากการใช้ตัวดำเนินการ `โดยทั่วไปฉันกำหนดฟังก์ชั่นเก็บไว้ในตัวแปรแปลงฟังก์ชั่นให้เป็นตัวแทนสตริงของตัวเอง (` ทำอย่างนั้น) แล้วฉันเรียกใช้ฟังก์ชั่นซึ่งสามารถทำภารกิจให้สำเร็จได้ ตามที่มันมีอวัยวะภายในของตัวเอง
aaaaaaaaaaaa

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

3
ฉันแน่ใจว่านรกจะไม่ลองอันนี้ในภาษาแอสเซมบลี ...
JB

6
เกานั้น ผมได้ลองหนึ่งในภาษาประกอบนี้
JB

2

Lenguage 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] เป็น: 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) รวบรวม: [: 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

Runic Enchantmentsขนาด 17 ไบต์

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

ลองออนไลน์!

เพียงแค่ใช้ quine มาตรฐานเพื่อสร้างสตริงโปรแกรมจากนั้นใช้โอเปอเรเตอร์แบบโมดูโลแบบสตริง1เพื่อรับตัวอักษรที่ดัชนีที่กำหนด

  1. ,"หาร" คำสั่งตัดสตริงขึ้นเป็นชิ้น (ตรรกะผกผันเพียงพอของ*การทำซ้ำสตริงxครั้ง), +concatenates และ-เอาxตัวละครจากปลาย (ตรงกันข้ามตรรกะพอ+) ดังนั้น%คำสั่งจะใช้บทบาทของcharAt(x): การดำเนินการสตริงพื้นฐานเพียงอย่างเดียวที่เหลืออยู่ (หลังจากการดำเนินการเหมือนสแต็คที่ถูกจัดการโดยคำสั่งเดียวกันที่จัดการกับสแต็กเช่นlขนาดของสแต็กนั้นคือความยาวของสตริง)

0

JavaScript (ES6), 28 ไบต์

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

ควินที่ปรับเปลี่ยน

คุ้มค่ามีขนาดใหญ่กว่า 28 จะถูกจัดการโดย%28ค่าน้อยกว่า 0 .substr()จะถูกจัดการโดย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.