Mã đảo chữ


10

Hãy thử lại lần nữa.

Mục tiêu của cuộc thi này là tạo ra hai đoạn mã là đảo chữ cái của nhau (hai đoạn mã phải chứa cùng một byte theo thứ tự khác nhau) và chúng sẽ thực hiện các tác vụ sau:

  • Người ta phải kiểm tra xem một số được nhập là hạnh phúc hay là số nguyên tố , và đầu ra nếu số đó là (ví dụ, 7phải xuất happy prime4phải xuất sad non-prime).

  • Cái còn lại phải xuất kích thước mã của nó theo byte dưới dạng một từ (một chương trình 60 byte sẽ xuất ra sixty, một chương trình 39 byte sẽ xuất ra thirty-nine).

Nếu có bất kỳ sự làm rõ nào về các quy tắc, đừng ngần ngại nói với tôi.

Đây là một cuộc thi golf mã, vì vậy chương trình chiến thắng ngắn nhất!


Điều gì ngăn cản một người làm /*program1*/program2và sau đó program1/*program2*/? Tôi nghĩ bạn không nên cho phép bình luận.
William Barbosa

@WilliamBarbosa Tại sao? Đó sẽ khó có thể là một giải pháp tối ưu.
Martin Ender

Nhưng bạn cũng có thể chia sẻ một số phần và không chia sẻ những phần khác, điều này làm cho nó dễ dàng hơn nhiều
tự hào

1
@proudhaskeller Banning bình luận không giải quyết điều đó mặc dù. Bạn luôn có thể nhồi các ký tự thành các chuỗi, tên biến hoặc các phần của mã không được thực thi vì các lý do khác.
Martin Ender

1
FWIW, tôi không nghĩ bạn nên xóa bài đăng của chính mình. OP hay không, đó là một câu trả lời thú vị.
Dennis

Câu trả lời:


6

CJam, 80 49 48 ký tự

CẬP NHẬT : Lấy cảm hứng từ việc triển khai của Dennis để tính tổng bình phương các chữ số, đây là phiên bản ngắn hơn

Vui / buồn Thủ tướng / Không chính:

ri:T{Ab2f#:+}G*X="happy""sad"?STmp4*"non-prime">

Làm thế nào nó hoạt động:

ri:T                                "Read input as integer and store it in T"
    {       }G*                     "Run this code block 16 times"
     Ab                             "Convert the number into base 10"
       2f#                          "Calculate square of each digit"
          :+                        "Sum all the squared digits and put the sum on stack"
X=                                  "Compare the sum after 16th iteration to 1"
  "happy""sad"?                     "If sum is 1, put `happy` to stack, otherwise `sad`"
               ST                   "Put space on stack then put the value of T on stack"
                 mp4*               "Put 4 to stack if input is prime, otherwise 0"
                     "non-prime">   "Put `non-prime` to stack and slice out first four characters if the input number is prime"

bôn mươi tam

""A"forTy-eiGhT""ri:{b2#:+}*X=appsadSmp4*nnpm>"?

Cách thức hoạt động:

""                                  "Push empty string to stack"
  A                                 "Push 10 to stack"
   "forTy-eiGhT"                    "Push `forTy-eiGhT` to stack"
                "ri:....pm>"        "Push this string to stack too"
                            ?       "Keep `forTy-eiGhT` on stack and pop the other string"

Dùng thử trực tuyến

Chương trình đầu tiên đọc số từ STDIN


Giải pháp 80 ký tự gốc của tôi

Vui / buồn Thủ tướng / Không chính:

r:N{1/~]{i_*T+:T;}/T_s\1=:H!X):XK<&0:T;}g;H"happy""sad"?SNimp"prime"_"non-"\+?:Y

eigHTY

"eigHTY""r:N{1/~]{i_*T+:T}/_s\1=:H!X):XK<&0:T}happysad?SNmp";"prim_";"non-\?:+";

4

CJam, 50 49 byte

Hạnh phúc và thử nghiệm nguyên thủy

li_{Ab2f#:+}30*(T="happy""sad"?S@mp4*"non-prime">

Đọc một số từ STDIN. Cả hai bài kiểm tra chỉ hoạt động cho số nguyên 64 bit.

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

Chiều dài riêng

A"forTy-nine""l_{b2#:+}30*(=happsadS@mp4*pim>"?""

In forTy-chín .


+1 cho cải tiến 31 byte và "forTy-chín".
Josiah Winslow

3

Golfscript - 81

Chương trình này kiểm tra nếu một số là hạnh phúc và / hoặc nguyên tố.

~.:a;0.{).a\%!@+\}a*;2="""non-"if"prime"@ {`0\{48-.*+}/}9*("sad ""happy "if@@#get

Chương trình này, một đảo chữ cái cuối cùng, xuất ra "tám mươi mốt" (byte của nó là một từ).

;"eighty-one"#   !""""""""%()***++-..../002489:;=@@@@\\\`aaaaadffiimnppprs{{{}}}~

Điều này sẽ phục vụ như là một ví dụ.


2
Hừm, cung cấp một triển khai tham chiếu cho một thử thách golf mã trong GolfScript có thể không phải là ý tưởng tốt nhất. Tôi tin rằng điều này là khá khó để đánh bại và do đó hơi không thành công cho người tham gia.
Martin Ender

Tôi thấy mọi người không chú ý đến bạn đã viết câu hỏi và nâng cao bạn ... Tôi hoàn toàn đồng ý với martin.
tự hào

@proudhaskeller Hoàn toàn không có gì sai khi tự trả lời.
Justin

Tôi nói không có gì sai khi tự trả lời hoặc nhận xét mã.
Josiah Winslow

2
@JosiahWinslow Có không có gì sai với nó. Tôi chỉ nói rằng, bạn có thể đang bỏ lỡ một số câu trả lời dài hơn thú vị nếu bạn tự mình đăng một giải pháp rất tốt.
Martin Ender

1

J - 87 char

Một nỗ lực ngây thơ về điều này trong J. Không sử dụng thư viện tiêu chuẩn, mặc dù tôi nghi ngờ nó sẽ ngắn hơn bằng cách sử dụng nó.

((sad`happy{~1 e.(,[:+/@:*:,.&.":@{:)^:(1-{:e.}:)^:_);@,' ';'gtv]non-prime'}.~4+4*1&p:)
'((ad`app{~1 .(,[:+/@:*:,.&.":@{:)^:(1-{:.}:)^:_);@, ;onprm}.~4+4*1&p:)']'eighty-seven'
('(ad`app{~1 .(,[:+/@:*:,.&.:@{:)^:(1-{:.}:)^:);@, ;onprm}.~4+4*1&p:']'eighty-seven'"_)

Dòng trên cùng là một động từ lấy một số nguyên và chẩn đoán hạnh phúc và tính nguyên thủy của nó là một chuỗi đầu ra. Dòng thứ hai là một biểu thức trả về chuỗi eighty-seven, trong khi dòng thứ ba là hàm hằng làm tương tự. Tôi bao gồm cả hai vì cả hai đều có thể và vì tôi không biết phán quyết nào sẽ là câu trả lời cho chức năng trái ngược với câu trả lời của chương trình và J không có chức năng nào giống như chức năng không tranh luận. Bạn chỉ cần đưa ra chức năng tranh luận giả.

Chúng tôi mất hầu hết các ký tự kiểm tra cho hạnh phúc. (,[:+/@:*:,.&.":@{:)là phần chính tính tổng bình phương của các chữ số của một số và (1-{:e.}:)là phép thử xem liệu số đó đã xảy ra chưa. sad`happy{~1 e.biến điều này thành kết quả từ và chúng tôi gắn nó vào phía trước chuỗi non-prime, có khả năng cắt bỏ bốn ký tự nếu số đó thực sự là số nguyên tố.

Trong đảo chữ cái, chúng ta chỉ ẩn tất cả các bit không có 'eighty-seven'trong chuỗi mà chúng ta bỏ qua. Tôi có thể làm tốt hơn nếu J có nhiều chữ cái để sử dụng lại, nhưng nó không, vậy thì tốt quá.


Đó là một giải pháp tốt.
Josiah Winslow
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.