Tìm i ^ n, cho n


27

Các thách thức

Trong càng ít ký tự càng tốt, tìm giá trị của i ^ n, với n, một số nguyên dương lớn hơn 0. Điều này nên được xuất ra dưới dạng Chuỗi.

Đối với những người không biết, tôi được định nghĩa sao cho i ^ 2 = -1. Vì thế:

  • tôi ^ 1 = tôi
  • tôi ^ 2 = -1
  • tôi ^ 3 = -i
  • tôi ^ 4 = 1

Điều này sau đó lặp lại ..

Quy tắc

  • Nếu ngôn ngữ của bạn hỗ trợ các số phức, đừng sử dụng bất kỳ hàm hoặc số học nào có thể giải quyết vấn đề này.
  • Không chính xác điểm nổi là tốt cho các câu trả lời sẽ trả về số thập phân, nhưng đầu vào số nguyên sẽ cho kết quả chính xác

Điểm thưởng

-5 nếu bạn có thể làm việc với giá trị trong đó n cũng âm

-15 nếu bạn có thể tính ra giá trị cho bất kỳ số thực nào (phần thưởng này bao gồm -5 từ phần thưởng trên)

Chúc may mắn!


1
Trong định dạng nào chúng ta trở lại chính xác? Thông qua chức năng đầu ra hay thiết bị xuất chuẩn?
tự hào

@proudhaskeller Thẻ wiki liệt kê các giá trị mặc định cho điều đó. Trừ khi có quy định khác, các chức năng và chương trình đều ổn, đầu vào thông qua đối số chức năng, STDIN hoặc đối số dòng lệnh và đầu ra thông qua STDOUT hoặc giá trị trả về của hàm. Các chức năng không phải được đặt tên.
Martin Ender

1
@ MartinBüttner nhưng nếu tôi chọn đầu ra chức năng, đầu ra nên được định dạng / lưu trữ như thế nào mà không có số phức riêng trong ngôn ngữ của tôi?
tự hào

16
@BetaDecay Số nguyên dấu phẩy động là gì? oO
Martin Ender

2
@ MartinBüttner Haha từ sai: / Số dấu phẩy động sau đó
Beta Decay

Câu trả lời:


15

Ruby, điểm -2

(13 byte, tiền thưởng -15)

->n{[1,90*n]}

Các tính năng bao gồm: không có lỗi làm tròn! (nếu bạn chuyển đầu vào dưới dạng Rational)


được đăng bởi tác giả, Kezz101

Nếu bạn hỗ trợ bất kỳ số thực nào, bạn có thể xuất ra dưới bất kỳ hình thức phức tạp hợp lệ nào.

Điểm số tiêu cực làm cho adrenaline của tôi vội vã. Do đó, các quy tắc bị lạm dụng được sử dụng để đạt được mục tiêu cao cả này.

Tạo một hàm ẩn danh và xuất ra một mảng với 2 mục đại diện cho một số phức ở dạng cực (đơn vị góc: độ).


4
"Ruby, -2 byte" .....
FantaC

3
Vì vậy, việc tải xuống 1.000.000.000.000 lần này có cho tôi 2TB dung lượng ổ cứng miễn phí không? Nghe có vẻ là một thỏa thuận tốt đối với tôi.
Chương trình Redwolf

^ Trình duyệt của tôi bị hỏng trước khi tôi thành công để làm điều đó. Có thể thử một "quả bom zip" với tập tin bên trong? (Trích xuất nó giúp tiết kiệm không gian.)
A̲̲

15

CJam, 12 ký tự - 5 = 7

1'iW"-i"]li=

Kiểm tra nó ở đây.

Hỗ trợ đầu vào tiêu cực.

1              "Push 1.";
 'i            "Push the character i.";
   W           "Push -1.";
    "-i"       "Push the string -i.";
        ]      "Wrap all four in an array.";
         li    "Read STDIN and convert to integer.";
           =   "Access array. The index is automatically taken module the array length.";

Kết quả được in tự động vào cuối chương trình.

Toán học, 22 20 19 ký tự - 15 = 4

Sin[t=π#/2]i+Cos@t&

Đây là một chức năng ẩn danh, bạn có thể sử dụng như

Sin[t=π#/2]i+Cos@t&[15]

(Hoặc chỉ định nó để fnói, và sau đó làm f[15].)

Hỗ trợ thực tế và cho kết quả chính xác cho đầu vào số nguyên.

Lưu ý rằng ikhông phức tạp Mathematica của tôi (đó là I). Nó chỉ là một biến không xác định.

Ngoài ra, mặc dù thứ tự của biểu thức, Mathematica sẽ sắp xếp lại đầu ra thành R+Cidạng.


Bạn không cần 4%. Nó có thể được thực hiện tự động.
jimmy23013

@ user23013 tiện lợi :)
Martin Ender

8
Không nên tách rời hai câu trả lời?
Justin

@Quincunx Có lẽ ... ban đầu cả hai đều ở CJam, đó là lý do tại sao tôi đưa họ vào cùng một câu trả lời. Nhưng cái thứ hai không hợp lệ, vì vậy tôi đã chuyển nó đến Mathicala, nhưng để nó ở nơi nó đang ở. Nếu mọi người khăng khăng tôi có thể chia họ ra.
Martin Ender

Và bạn có thể lưu một nhân vật bằng cách sử dụng nó f@15thay vì f[15].
orome

14

Con trăn 2 - (24-5) = 19

lambda n:'1i--'[n%4::-2]

Hầu hết tín dụng thuộc về @ user2357112, tôi chỉ đánh golf câu trả lời của anh ấy từ các bình luận về câu trả lời này thêm một chút.

Giải thích: Bắt đầu tại chỉ mục n%4trong chuỗi '1i--'. Sau đó lặp lại theo các bước của hai trên mỗi chữ cái trong chuỗi. Vì vậy, ví dụ, n=6sẽ bắt đầu ở chỉ số 2, đầu tiên -, sau đó bỏ qua ivà lấy 1, để trả về -1.

@xnor đã chỉ ra một giải pháp có cùng độ dài:

lambda n:'--i1'[~n%4::2] 

Pyth - (14-5) = 9

Tôi dường như chỉ có thể nhận được 14, bất kể tôi cố gắng đảo ngược / lát / vv như thế nào. : '(

%_2<"1i--"h%Q4

Về cơ bản giống như câu trả lời của python ở trên, nhưng trong 2 bước, bởi vì pyth không hỗ trợ các tùy chọn lập chỉ mục đầy đủ của python. Hãy thử trực tuyến.

Tôi sẽ đi nói chuyện với isaacg về lập chỉ mục Pyth;)


Không phải con trăn lambdacần được gán cho một biến? Ít nhất, để gọi nó, bạn cần bao quanh nó bằng dấu ngoặc đơn, thêm hai byte để có thể gọi nó (lambda...)(n).
mbomb007

@ mbomb007 Theo meta điều này có thể chấp nhận được. Mã ở đây tạo ra một chức năng thực hiện nhiệm vụ cần thiết. Lambdas ẩn danh được sử dụng tương đối thường xuyên trong python cho các chức năng như mapsorted.
FryAmTheEggman

11

TI-BASIC (NSpire) - 5 (20 ký tự-15)

cos(nπ/2)+sin(nπ/2)i

Nếu bạn muốn nhận một giá trị trả về phức tạp, hãy thay thế iở cuối bằng (phức i).


@ MartinBüttner TI-Basic dường như sử dụng một số loại 'Biểu thức' và các phương thức tích hợp trả về kết quả chính xác cho các loại này.
Shujal

Tôi hiểu rồi, tất cả đều tốt rồi. ;)
Martin Ender

Điều gì về quy tắc "Nếu ngôn ngữ của bạn hỗ trợ các số phức, đừng sử dụng bất kỳ hàm hoặc số học nào có thể giải quyết vấn đề này." + i là số học
edc65

@ edc65 + thực sự là một hoạt động phức tạp. Tuy nhiên, nếu bạn không thích điều đó, hãy thay thế bằng một bình thường i. Nếu biến ikhông được xác định, bạn sẽ nhận được số phức, chỉ với ithay vì . Tôi chỉ tính riêng phần thực và phần ảo.
Shujal

1
@Shujal Trong trường hợp đó, tôi nghĩ bạn vẫn nên sử dụng i. Sự phức tạp tôi thậm chí không phải là nhân vật mà câu hỏi yêu cầu và nó sẽ giúp bạn tiết kiệm hai byte, do đó, ít nhất bạn sẽ ràng buộc với tôi;).
Martin Ender

7

Tuyệt vời , 43 byte

Không thực sự là một người chiến thắng, nhưng Marbelous là niềm vui. :)

}0
^0
=0&2
&1
}0
^1\/
=0&02D3169
\/\/&0&1&2

Đây là một chương trình đọc đầu vào dưới dạng một số nguyên từ đối số dòng lệnh đầu tiên. Lưu ý rằng đầu vào được lấy modulo 256, nhưng điều này không ảnh hưởng đến tính hợp lệ của kết quả đối với đầu vào lớn hơn 255, vì 256 chia hết cho 4.

Giải trình

Marbelous là ngôn ngữ lập trình 2D, mô phỏng "viên bi" (giá trị byte) rơi vào một loạt các thiết bị. Bảng được tạo thành từ các ô rộng 2 ký tự (các thiết bị), có thể xử lý các viên bi. Tất cả mọi thứ rơi ra khỏi đáy của một bảng được in thành STDOUT.

Chúng ta hãy đi qua các thiết bị đang sử dụng:

  • }0là nơi đối số dòng lệnh đầu tiên đi. Tôi đã sử dụng hai phiên bản của thiết bị này, vì vậy tôi nhận được hai bản sao của giá trị đầu vào (cùng một lúc).
  • ^nkiểm tra nbit thứ của đá cẩm thạch đầu vào (trong đó n=0bit có trọng số thấp nhất) và tạo ra 1hoặc 0tùy thuộc vào bit.
  • =0kiểm tra sự bình đẳng với 0. Nếu đá cẩm thạch đầu vào bằng nhau, nó chỉ rơi thẳng qua, nếu nó không được đẩy sang phải.
  • \/ là một thùng rác, vì vậy nó chỉ nuốt viên bi đầu vào và không bao giờ tạo ra bất cứ thứ gì.
  • 2Dlà mã ASCII của -, 31là mã ASCII của 169 là mã ASCII của i.
  • Các &nđồng bộ hóa. Bộ đồng bộ hóa đặt một viên bi cho đến khi tất cả các bộ đồng bộ hóa có cùng nmột viên bi, tại thời điểm đó tất cả chúng sẽ để viên bi được lưu trữ của chúng rơi qua.

Vì vậy, trong thực tế, những gì tôi làm là giữ ba ký tự có liên quan trong ba bộ đồng bộ hóa và giải phóng chúng tùy thuộc vào cách các bit quan trọng nhất được đặt trong đầu vào.

Để biết thêm thông tin, xem dự thảo spec .


1
Tôi thật sự thich cai nay! Những âm thanh đáng sợ fab tôi sẽ sớm kiểm tra nó sớm thôi :)
Kezz101

3
@ Kezz101 Chúng tôi đã có một bản thảo thông số kỹ thuật tại đây
Martin Ender

Ồ tốt đẹp Trông thật thú vị
Kezz101

Đừng quên rằng bạn có thể cung cấp đầu vào cho bảng chính trên dòng lệnh, vì vậy bảng này có thể được sử dụng nguyên trạng.
Sparr

1
@overactor Hừm, tôi không biết ... xuất ra các ký tự bổ sung (ngay cả khi chúng không thể in được) dường như vẫn vi phạm định dạng đầu ra đối với tôi. Có thể có giá trị một câu hỏi meta mặc dù.
Martin Ender

6

JavaScript (ES6) 29-5 = 24

Hỗ trợ năng lượng tiêu cực.

f=n=>(n&2?'-':'')+(n&1?'i':1)

ES5:

function f(n){return (n&2?'-':'')+(n&1?'i':1)}

Đúng, ngắn hơn ( f=n=>[1,'i',-1,'-i'][n%4]). Nhưng nó ít gợi cảm hơn và nó sẽ không hỗ trợ các thế lực tiêu cực. Nó phụ thuộc vào tiền thưởng tôi đoán.
Michael M.

Không, 29 byte. Tiêu cực được hỗ trợ với mã này.
Michael M.

Liệu JS có một toán &tử bitwise không? Nếu vậy bạn có thể làm &3cho một hoạt động modulus-4 thực sự. Chỉnh sửa: có vẻ như nó &2được sử dụng trong câu trả lời của bạn ...
frageum

5

Python 28 byte - 5 = 23

Hỗ trợ đầu vào -ve.

Giả sử các hàm lambda được chấp nhận (Cảm ơn FryAmTheEggman!):

lambda n:n%4/2*'-'+'1i'[n%2]

mặt khác 31 byte - 5 = 26

print[1,"i",-1,"-i"][input()%4]

1
Bạn không thể gọi nó chính xác. Bạn phải lưu trữ nó ở một nơi nào đó bạn có thể truy cập. Vì vậy, bạn có thể làm foo=...hoặc bạn có thể làm map(<your lambda>,range(10))để có được danh sách các giá trị i^ntừ 0-9.
FryAmTheEggman

2
Về cơ bản, bạn đang tạo một con trỏ hàm, nếu điều đó rõ ràng hơn: P
FryAmTheEggman

3
@DigitalTrauma: Có, mặc dù bạn có thể làm tốt hơn với các thủ thuật cắt chuỗi. Ví dụ , lambda n:'--1i'[n%4-2::2].
user2357112 hỗ trợ Monica

2
Để dịch bài đăng của user2357112: Lấy mọi ký tự khác '--1i'bắt đầu từ chỉ mục n%4-2. Khi python nhận được một chỉ số âm, nó sẽ bắt đầu rằng nhiều vị trí còn lại từ cuối mảng, và sau đó đi lên 0. Bằng cách này, 01đừng bao giờ nhấn các -dấu hiệu, trong khi 34làm.
FryAmTheEggman

1
lambda n:n%4/2*'-'+'1i'[n%2]Xóa khoảng trống và ngắn hơn :)
FryAmTheEggman

4

(Emacs) Lisp - 34

Chỉ để cho vui, trong (Emacs) Lisp:

(lambda(n)(elt[1 i -1 -i](% n 4)))

Nếu bạn muốn sử dụng nó, sử dụng một defunhoặc sử dụng funcall:

(funcall
 (lambda (n) (elt [1 i -1 -i] (% n 4)))
 4) => 1

(mapcar
 (lambda(n)(elt[1 i -1 -i](% n 4)))
 [0 1 2 3 4 5 6 7 8])
 => (1 i -1 -i 1 i -1 -i 1)

4

APL (Dyalog) , 8 ký tự - 15 điểm thưởng = điểm -7

Hàm tích hợp (và do đó bị cấm) là 0J1*⊢, nhưng điều này sử dụng phương thức của @ blutorange .

¯12○.5×○

Tác giả thách thức, Kezz101, đã viết :

Nếu bạn hỗ trợ bất kỳ số thực nào, bạn có thể xuất ra dưới bất kỳ hình thức phức tạp hợp lệ nào.

Điều này trả về một số phức dưới dạng aJb, đó là cách thông thường để APL hiển thị số phức.

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

Giải trình

¯12○ tìm vectơ đơn vị có góc tính bằng radian của

.5× một nửa lần

 đối số nhân với (hằng số vòng tròn)



3

Befunge-98, 41-5 = 36 35-5 = 30 32-5 = 27

&4%:01-`!4*+:2%'8*'1+\2/d*' +,,@

Hỗ trợ số nguyên âm. Sẽ không giành được bất kỳ giải thưởng nào với giải pháp này, nhưng bất cứ điều gì.

Nó chỉ chấp nhận một số làm đầu vào, thực hiện một số mánh khóe trên mô đun (điều này, thật bực bội, không hoạt động như mô đun thông thường cho các số âm trong trình thông dịch mà tôi đã sử dụng để kiểm tra nó) để làm cho âm bản hoạt động, và sau đó một số điều kiện ngớ ngẩn quyết định mỗi nhân vật nên là gì

Tôi chắc chắn rằng điều này có thể được đánh golf xuống nhiều hơn nữa. Hiện tại, đây là một giải pháp khác không chấp nhận tiêu cực, nhưng bù lại việc mất phần thưởng bằng cách rút ngắn hơn:

Befunge-98, 32 26 23

&4%:2%'8*'1+\2/d*' +,,@

Chỉnh sửa - Bây giờ lợi dụng thực tế là "-" là 13 (0xd) ký tự cách xa "".

Chỉnh sửa 2 - Bây giờ, một lần nữa, lợi dụng thực tế là "i" là 56 (0x38 hoặc '8) ký tự cách xa "1".


3

Điểm 8 của Java: 72

Trong Java, ngôn ngữ chơi golf tồi tệ nhất! Chơi gôn

java.util.function.Function s=n->{new String[]{"i","-1","-i","1"}[n%4]};

Mở rộng:

class Complex{

    java.util.function.Function s = n -> {new String[]{"i","-1","-i","1"}[n%4]};

}

Lưu ý: Tôi chưa quen với Java 8. Tôi cũng chưa có thời gian chạy cho nó. Xin vui lòng cho tôi biết nếu có bất kỳ lỗi cú pháp. Đây cũng là sân golf đầu tiên của tôi.

Chỉnh sửa: Đã xóa import.

Chỉnh sửa: Xóa khai báo lớp.

Một câu trả lời khác với số điểm = 87 - 15 = 72

java.util.function.Function s=n->{Math.cos(n*Math.PI/2)+"+"+Math.sin(n*Math.PI/2)+"i"};

Mở rộng:

class Complex{

    java.util.function.Function s = n -> {Math.cos(n * Math.PI/2) + " + " + Math.sin(n * Math.PI/2) + "i"};

}

Bạn có thể lưu một số với "nhập java.util. *"
Anubian Noob

@Anubian Noob Class Function có trong gói java.util.functionkhông java.util(hoặc tôi sai?).
TheNumberOne

Nhưng nếu bạn làm java.util.*việc .*tất cả mọi thứ phương tiện nhập khẩu theo gói. Giống như bạn hiện đang nhập tất cả các lớp trong fuctiongói.
Anubian Noob

5
@ Anubian Noob importchỉ nhập các lớp trong gói đó. Nó không nhập bất kỳ lớp nào từ các gói trong gói đó. Ví dụ, lớp Functionlà trong gói java.util.functionnhưng không phải trong gói java.util.
TheNumberOne

Ôi trời ơi, xin lỗi về điều đó.
Anubian Noob

3

MATLAB, 33 byte - 5 = 28

x={'i','-1','-i','1'};x(mod(n,4))

Mặc dù đó là một vài byte nữa (37-5 = 32), tôi thực sự thích cách tiếp cận này tốt hơn:

x='1i -';x((mod([n/2,n],2)>=1)+[3,1])

i^3-i, thay vì i, đoán nó chỉ thêm 1 char. - Sidenote cho các độc giả khác: không có quy tắc đầu tiên của thử thách, giải pháp Matlab sẽ chỉ dài 3 ký tự.
Dennis Jaheruddin

Vâng, đó là một lỗi đánh máy. Đã sửa! Cảm ơn bạn đã chú ý ... Ít nhất cách tiếp cận thứ hai (thú vị hơn một chút) là chính xác =)
Stewie Griffin

3

C 77

main(){int n;scanf("%d",&n);char c[]={n%4>1?'-':' ',~n%2?'1':'i',0};puts(c);}

Được cải thiện nhờ có Ruslan

C 74-5 = 69

Ồ và tất nhiên là cách tiếp cận rõ ràng nhất

main(){unsigned n,*c[]={"1","i","-1","-i"};scanf("%d",&n);puts(c[n%4]);}

2
Bạn có thể xóa dấu ngoặc đơn xung quanh n%2và sử dụng ~thay !vì vì phủ định ntrước, sau đó %ing với 2 sẽ cho kết quả tương tự, ít nhất là cho n<(1<<32)-1. Và C không yêu cầu xác định rõ ràng kiểu trả về cho hàm, vì vậy bạn có thể loại bỏ int ngay từ đầu. Và cũng sử dụng 0thay vì '\0'. Do đó -9 ký tự.
Ruslan

3

Tháng 10 47

let m n=List.nth["1";"i";"-1";"-i"](n mod 4);;

Không phải là một giải pháp giành giải thưởng, nhưng đây là lần đầu tiên tôi chơi golf, vì vậy tôi không chắc chắn chính xác những gì tôi đang làm. Tôi đã cố gắng sử dụng khớp mẫu, nhưng điều đó đã giúp tôi vượt qua 58.


3

Pari / GP , 19 byte - 5 = 14

CR[x]/(x2+1)

n->Str(i^n%(i^2+1))

iđây chỉ là một biểu tượng, không phải là đơn vị tưởng tượng (nằm Itrong Pari / GP).

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


2

Hồng ngọc 32-5 = 27

puts(%w[1 i -1 -i][gets.to_i%4])

Hoạt động cho quyền hạn tiêu cực!


Bạn có thể tầm thường chơi golf này nhiều hơn với puts %w[1 i -1 i][gets.to_i % 4].
lịch sử

2

Perl, 26 - 5 = 21

say qw(1 i -1 -i)[pop()%4]

hoạt động như một chương trình độc lập (đối số trên dòng lệnh) hoặc phần thân của hàm.


2

Java: 151 131-5 = 126

Chơi gôn

class A{public static void main(String[]a){int n=Integer.parseInt(a[0]);System.out.print(n%4==0?"1":n%4==1?"i":n%4==2?"-1":"-i");}}

Ung dung:

class A {
    public static void main(String[] a) {
        int n = Integer.parseInt(a[0]);
        System.out.print(n % 4 == 0 ? "1" : n % 4 == 1 ? "i" : n % 4 == 2 ? "-1" : "-i");
    }
}

Là một hàm: 72-5 = 67

Chơi gôn

void f(int n){System.out.print(n%4==0?"1":n%4==1?"i":n%4==2?"-1":"-i");}

Ung dung:

public void f(int n) {
    System.out.print(n % 4 == 0 ? "1" : n % 4 == 1 ? "i" : n % 4 == 2 ? "-1" : "-i");
}

Vâng, nhưng một câu trả lời Java khác - và chơi golf thậm chí còn tồi tệ hơn bao giờ hết. Nhưng bạn làm việc với những gì bạn có thể ...

EDIT : thêm phiên bản chức năng.

CHỈNH SỬA 2 : vì vậy, sau một chút thử nghiệm và sai sót, đây là phiên bản cố gắng thực hiện nó bằng cuốn sách mà không khám phá kẽ hở chu kỳ. Vì thế…

Java với tính toán giá trị: 146-15 = 131

Chơi gôn

class B{public static void main(String[]a){float n=Float.parseFloat(a[0]);System.out.print(Math.cos((n*Math.PI)/2)+Math.sin((n*Math.PI)/2)+"i");}}

Ung dung:

class B {
    public static void main(String[] a) {
        float n = Float.parseFloat(a[0]);
        System.out.print(Math.cos((n * Math.PI) / 2) + Math.sin((n * Math.PI) / 2) + "i");
    }
}

(ít nhất, tôi nghĩ rằng tôi có thể yêu cầu phần thưởng hàng đầu, sửa cho tôi cách khác)


bạn có thể giảm mã của mình, nếu bạn chuyển nó thành đối số chính.
dùng902383

@ user902383 Tôi luôn luôn có thể thực hiện một chức năng. Có lẽ sẽ đăng cả hai phiên bản, quá.
Rodolfo Dias

thực sự tôi đã suy nghĩ về việc phân tích cú pháp nó, vì vậy bạn sẽ cóint n = Integer.parseInt(a[0])
user902383

@ user902383 Daaaaamn, thậm chí không nhớ điều đó. giơ ngón tay cái lên
Rodolfo Dias

2

Con trăn - 31

print[1,'i',-1,'-i'][input()%4]

Tôi mới chỉ bắt đầu học trăn. Mặc dù tôi biết nó không tốt, nhưng đó là điều tốt nhất tôi có thể làm.


2

Haskell GHCi, 29 byte - 15 = 14

i p=[cos(p*pi/2),sin(p*pi/2)]

Sử dụng:

*Main> i 0
[1.0,0.0]
*Main> i pi
[0.22058404074969779,-0.9753679720836315]
*Main> i (-6.4)
[-0.8090169943749477,0.5877852522924728]

2

R , 29 - 5 = 24 byte

c(1,"i",-1,"-i")[scan()%%4+1]

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

Giống như hầu hết các phương thức ở trên, lấy modulo bằng 4 và tăng lên 1, vì các mảng của R được lập chỉ mục 1. Hoạt động cho số nguyên âm là tốt.

Tôi đã lo lắng về kết quả đầu ra hỗn hợp ở đây, nhưng Giuseppe chỉ ra rằng R ép buộc các kiểu số thành các kiểu chuỗi khi chúng được trộn lẫn.



@Giuseppe Hoàn toàn trống rỗng về điều đó. Mối quan tâm của tôi với điều đó là đầu ra được trộn kỹ thuật, nửa chuỗi, nửa số.
Sumner18

Không, R tự động ép numericcác loại characterkhi chúng được trộn lẫn! Cuốn sách của Hadley giải thích điều này khá tốt - chỉ cần Ctrl + F thành "Ép buộc" và bạn sẽ thấy nó, nhưng toàn bộ cuốn sách đáng để đọc (chủ yếu là cho mục đích không chơi gôn, nhưng đôi khi bạn chọn một hoặc hai mẹo, heheh )
Giuseppe


1

Haskell, 29 byte - 5 = 24

f n=words"1 i -1 -i"!!mod n 4

Hoạt động cho quyền hạn tiêu cực.

Tôi đã có một phiên bản miễn phí hoạt động, nhưng hóa ra nó thực sự dài hơn.

f=(words"1 i -1 -i"!!).(`mod`4)

1

Clojure ( 64 54 31 ký tự)

(defn i2n[n](println(case(mod n 4) 1 "i" 2 "-1" 3 "-i" 0 "1")))

Chỉnh sửa

Đề xuất của mỗi @ SeanAllred, đây là phiên bản sử dụng vectơ thay vì casehàm:

(defn i2n[n](println (["1" "i" "-1" "-i"] (mod n 4))))

Chỉnh sửa 2

Bằng cách dựa vào REPL để in ra bộ sưu tập kết quả và mã hóa hàm bằng #()phím tắt, chúng ta có thể giảm nó xuống

#(["1" "i" "-1" "-i"](mod % 4))

(Điều này thực sự nhiều hơn Clojure / Lisp-ish vì hàm bây giờ thực sự trả về kết quả được tạo, cho phép hàm được sử dụng với map, như trong

(map #(["1" "i" "-1" "-i"](mod % 4)) [0 1 2 3 4 5 6 7 8])

mà in

("1" "i" "-1" "-i" "1" "i" "-1" "-i" "1")

Chia sẻ và tận hưởng.


Thay vì sử dụng cấu trúc chọn, bạn có thể sử dụng một số loại mảng rõ ràng như trong câu trả lời của tôi không?
Sean Allred


1

C 105, là 117

char c[2];
int main()
{
int n,i,j=0;scanf("%d",&n);i=n%4;
i>1?c[j++]='-':c[j+1]='\0';
c[j]=i&1?'i':'1';
puts(c);
}

Nó thậm chí không biên dịch bởi vì bạn phải ngoặc đơn các bài tập sau :trong các ?:câu lệnh trong đơn giản C. Ngoài ra, điểm cần sử dụng 0==0khi bạn có thể sử dụng char đơn là 1gì? Và không cần trong ngoặc đơn trước ?. Ngoài ra, ?:tuyên bố cuối cùng có thể được rút ngắn c[j]=i&1?'i':'1';.
Ruslan

@Ruslan Trong CodeBlocks Mingw chỉ có 1 cảnh báo xung quanh i & 0. i & 0 == 0 là một thử nghiệm cho chẵn, nếu tôi thậm chí kết quả là 0 khác thì đó là 1.
bacchusbeale

Vâng, nhưng điểm quan trọng của việc sử dụng 0==0khi nó giống hệt là 1gì? Lưu ý rằng ==có quyền ưu tiên cao hơn &, nếu không, thử nghiệm (được cho là) ​​của bạn (i&0)==0sẽ luôn đúng.
Ruslan

1

PARI / GP , 26 - 5 = 21

n->Str([1,I,-1,-I][n%4+1])

n->cos(t=Pi*n/2)+I*sin(t)ngắn hơn một ký tự, nhưng không xử lý các câu trả lời chính xác. Tất nhiên n->I^nlà không được phép, và có lẽ cũng là của PARI powIs.


1

Thạch , 2 - 20 = -18 byte

ı*

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

Nó không sử dụng i ^ xnội dung nhưng nó sử dụng nội trang 1j**vì vậy không chắc chắn nếu được phép.


"Nếu ngôn ngữ của bạn hỗ trợ các số phức, đừng sử dụng bất kỳ hàm hoặc số học nào có thể giải quyết vấn đề này." Tôi nghĩ nó khá rõ ràng ...
hoàn toàn là

@totallyhuman Chà, dù sao thì tôi cũng không chắc là 1j nghĩa đen có bị cấm không?
Erik the Outgolfer

Vâng, nhưng số học ( *) là.
hoàn toàn là

1
@totallyhuman Hừm, có lẽ tôi sẽ thêm một phiên bản khác bên dưới, mặc dù "không sử dụng bất kỳ hàm hoặc số học nào có thể giải quyết vấn đề này" dường như gợi ý rằng tôi không thể sử dụng một công cụ tích hợp để thực hiện nhiệm vụ chính xác này ... BTW theo cách anh ấy diễn đạt nó khiến tôi nghĩ rằng bạn được khuyến khích sử dụng nghĩa 1jđen.
Erik the Outgolfer

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.