Thử thách tôi


12

Thử thách

Trong tác vụ này, bạn phải viết chương trình sẽ nhập đầu vào một số nguyên N (-1e9 <= N <0 && 0 <N <= + 1e9) , sau đó tính T = (abs (N)% M + 1) , nếu N là dương sau đó xuất ký tự T-th từ đầu khác xuất ký tự T-th từ cuối nguồn của bạn.

M là kích thước của nguồn của bạn tính bằng byte.

Ví dụ: Nếu nguồn của bạn là:abcd efg/hi

Đầu vào:

 2

Đầu ra:

 c

Đầu vào :

-3

Đầu ra:

g 

Đầu vào :

-9249678

Đầu ra:

b 

Đầu vào :

-11

Đầu ra:

i 

Những ràng buộc

  • Không sử dụng bất kỳ thao tác FILE nào
  • Bạn có thể sử dụng bất kỳ ngôn ngữ nào bạn chọn
  • Cố gắng tránh hoặc tốt hơn là không sử dụng đệ trình 1 byte, vì nó làm hỏng tất cả niềm vui.
  • Giải pháp ngắn nhất sẽ thắng!

EDIT: Báo cáo sự cố đã được sửa đổi để có thể đánh giá các giải pháp bằng cách sử dụng dữ liệu thử nghiệm ngẫu nhiên (và cùng dữ liệu cho tất cả các giải pháp), do đó, vui lòng cập nhật giải pháp của bạn cho phù hợp, xin lỗi vì sự bất tiện (nếu có).


Trong trường hợp kiểm tra ví dụ đưa ra nếu đầu vào là 5 hoặc -7 , đầu ra phải là một khoảng trắng: "" (không có dấu ngoặc kép).
Quixotic

Nếu N bằng 0 thì sao?
aaaaaaaaaaaa

@eBusiness: Cảm ơn bạn đã chỉ ra rằng, tôi đã thay đổi báo cáo vấn đề, tôi không nghĩ $ 0 $ có thể xảy ra ngay bây giờ :-)
Quixotic

3
Nó tiếp tục là một ánh xạ lạ, bây giờ một nhân vật bị bỏ qua khi nhảy từ 0 đến 1 : -2 -> / -1 -> h 0 -> i 1 -> b 2 -> c. Nhưng ít nhất bản đồ bây giờ được nhất trí.
aaaaaaaaaaaa

1
Tôi đoán &&trong câu đầu tiên có nghĩa là một ||?
Paŭlo Ebermann

Câu trả lời:


12

lắp ráp x86 (cú pháp 32-bit Linux, AT & T): 548

Không có dòng mới ở cuối tệp:

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 "

Tôi đã biên dịch nó với gcc -nostartfiles -m32 qc1.S -o qc1

Xác minh, số dương:

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

Xác minh, số âm:

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

Chỉnh sửa đã đúng về sơ đồ đánh số kỳ lạ. Tôi nghĩ. Nó không thay đổi độ dài.


+ 1, Đó là công việc tuyệt vời để thực hiện việc này trong lắp ráp, nhưng một điều nhỏ tôi đã sửa đổi vấn đề để làm cho thử nghiệm được nhất trí, vì vậy hãy sửa đổi giải pháp của bạn như khôn ngoan, Cảm ơn.
Quixotic

Heh, khá tuyệt. Và một điều buồn cười, mặc dù có nhiều ngôn ngữ khác nhau nhưng điều này dường như giống với giải pháp GolfScript 44 ký tự của tôi.
aaaaaaaaaaaa

1
@Debanjan: Tôi thực sự dường như không thể quấn đầu xung quanh sơ đồ đánh số. Bạn có thể cung cấp các dòng xác minh thích hợp? (tuyên bố vấn đề sẽ là một nơi tốt đẹp)
JB

+1, đó là lần thứ hai "không hợp lệ" thứ hai của bạn ở đây (thông minh về môn đánh gôn) có giá trị nâng cao :)
E Mườix

@Eelvex: đối với hồ sơ, một cái khác có giá trị tại thời điểm nó được đăng.
JB

10

Whaddaya biết, HQ9 + làm cho sự trở lại tuyệt vời của nó!

Q

Không cần bận tâm lập chỉ mục khi chỉ có một nhân vật để lựa chọn!


Nó có bất kỳ đầu vào?
Quixotic

@Debanjan: chắc chắn:echo '-1' | hq9+ qc1
JB

Xin lỗi, điều này không có ý nghĩa nhiều với tôi, tôi có một giải pháp tương tự trong PHP nhưng không phải loại giải pháp này làm hỏng tất cả những điều thú vị sao? Cảm ơn,
Quixotic

Bạn không cần phải chấp nhận nó nếu bạn không nghĩ rằng nó phù hợp, bạn biết đấy! Bạn thậm chí không phải nâng cấp nó. Bạn thậm chí có thể downvote nó, mặc dù tôi 'd cá nhân không đánh giá cao ;-)
JB

Không, đó không phải là về sự chấp nhận hay từ chối, tôi chỉ nêu rõ một điểm mà tôi muốn bỏ phiếu từ khi tôi học được điều gì đó mới :-)
Quixotic

5

Ruby 1.9, 66 ký tự

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

Không có nhiều sự khác biệt với một quine bình thường, thực sự.

  • Chỉnh sửa: Theo dõi các thông số kỹ thuật mới bây giờ.

5

GolfScript 26 ký tự

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

Quines đã vui hơn trước khi phát minh ra các ngôn ngữ động.

Chỉnh sửa: Đối với những người hay than vãn, đây là một câu đố GolfScript "thực", không có `và ~ chỉ được sử dụng để phân tích cú pháp đầu vào.

Khuyết tật GolfScript 44 ký tự

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

Lưu ý rằng nó độc đáo như thế nào với cùng một chuỗi được lặp lại hai lần, do đó, chuỗi ký tự chỉ cần một bản 'hack ở phía trước và nó đã sẵn sàng để sử dụng.


1
Tôi không biết GolfScript, nhưng nhận xét của bạn thúc đẩy tôi nghĩ rằng mã của bạn dựa vào danh mục các ràng buộc "Hoạt động FILE". Muốn mở rộng bộ phận bên trong của nó?
JB

Phép thuật xảy ra bằng cách sử dụng toán tử `, về cơ bản tôi xác định hàm, lưu trữ nó trong một biến, chuyển đổi hàm thành biểu diễn chuỗi của chính nó (` làm điều đó), và sau đó tôi chạy hàm, có thể hoàn thành nhiệm vụ một cách tầm thường vì nó có bộ phận riêng trong chuỗi.
aaaaaaaaaaaa

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

3
Chà, tôi chắc chắn rằng địa ngục sẽ không thử cái này bằng ngôn ngữ lắp ráp ...
JB

6
Cào đó. Tôi đã thử cái này trong ngôn ngữ lắp ráp.
JB

2

Chiều dài, 4 byte

Mã nguồn bao gồm 4 byte rỗng. Bất kể đầu vào, đầu ra do đó phải là một byte null, được thực hiện bằng một .lệnh.


0

Smalltalk, 94 90 59 52

ví dụ, trong lớp Object, biên dịch:

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

sau đó gửi q: <n> cho bất kỳ đối tượng nào; đây là một số nguyên:

xác minh:

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

hoặc tốt hơn:
(0 đến: 100) thu thập: [: n | 1 q: n] dưới dạng: Chuỗi
->')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 xuống To: -500) thu thập: [: n | 1 q: n] dưới dạng: Chuỗi
->')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('

giải thích cho những người không phải là Smalltalker:
thisContext là khung stack hiện tại, có thể được yêu cầu cho phương thức của nó , có thể được yêu cầu về nguồn của nó .


0

Bùa mê , 17 byte

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

Hãy thử trực tuyến!

Chỉ cần sử dụng quine tiêu chuẩn để tạo chuỗi chương trình, sau đó sử dụng toán tử modulo dựa trên chuỗi 1 để lấy ký tự tại một chỉ mục nhất định (vốn hỗ trợ các chỉ thị tiêu cực và tích cực, hành vi bị ảnh hưởng bởi Python).

  1. Lệnh ,"chia" cắt chuỗi thành nhiều phần (logic đủ nghịch đảo để *nhân đôi số xlần chuỗi ), +nối và -loại bỏ các xký tự từ cuối (một nghịch đảo đủ logic +). Vì vậy, %lệnh này đóng vai trò charAt(x): hoạt động chuỗi cơ bản duy nhất còn lại (sau khi các hoạt động giống như ngăn xếp được xử lý bởi cùng các lệnh liên quan đến ngăn xếp, ví dụ: llà kích thước của ngăn xếp có độ dài của chuỗi).

0

JavaScript (ES6), 28 byte

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

Một quine sửa đổi.

Giá trị lớn hơn 28 được xử lý bởi %28, giá trị nhỏ hơn 0 được xử lý bởi .substr().

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.