Sự khác biệt sẽ không có sự khác biệt


40

Công ty của bạn gần đây đã thuê một loạt các sysadins cực kỳ tận tâm . Họ cảm thấy rằng chỉ xem màn hình máy tính là khá hạn chế (ý tôi là, tốc độ làm mới 60Hz là KHÔNG đủ), vì vậy họ đã kết nối bus dữ liệu CPU với một bộ xử lý tín hiệu và phát trên loa qua phòng máy chủ để họ có thể nghe thấy đến 20kHz. Một vấn đề: họ là các hệ thống, không phải là kỹ sư điện và thiết lập loa của họ liên tục bị hỏng. Họ đã tìm ra rằng điều này được gây ra bởi sự thay đổi quá đột ngột của các giá trị byte trong mã mà các kỹ sư phần mềm biên dịch trên máy tính lớn. Các sysadins hiện đang tổ chức một cuộc thi nhỏ để xem ai có thể tạo mã nhẹ nhàng nhất cho thiết lập loa của họ.

Thử thách

Nhiệm vụ của bạn là tạo ra một chương trình hoặc hàm theo ngôn ngữ lựa chọn có ít sự khác biệt nhất có thể giữa các byte liên tiếp (xem phần Tính toán). Chương trình này sẽ có nhiệm vụ tính điểm riêng của mình.

Đầu vào

Chuỗi ASCII trên stdinhoặc tương đương gần nhất với ngôn ngữ của bạn hoặc làm đầu vào hàm nếu bạn đang tạo một hàm. Vì chương trình của bạn sẽ phải lấy chính nó làm đầu vào để tính điểm của bạn, chương trình của bạn sẽ hỗ trợ Unicode nếu nó chứa bất kỳ Unicode nào. Mặt khác, ASCII là đủ. Đầu vào có thể được giả định dài ít nhất 2 byte.

Phép tính

Mỗi ký tự của chuỗi sẽ được chuyển đổi thành tương đương bằng số, sử dụng tiêu chuẩn ASCII. Sau đó, sự khác biệt giữa tất cả các nhân vật trước tiên sẽ được bình phương và sau đó được tóm tắt . Ví dụ, chuỗi abdsẽ nhận được điểm 1²+2²=5.

Đầu ra

Đầu ra sẽ là tiêu đề cho mục nhập của bạn. Điều này có nghĩa là nó phải được thêm trước bởi một #hoặc được thêm vào bởi một dòng mới và -(dấu gạch ngang). Sau đó, nó sẽ xuất tên của ngôn ngữ lập trình của bạn, theo sau là dấu phẩy, dấu cách và sau đó là một số nguyên biểu thị kết quả của phép tính. Ví dụ

#C++, 98

sẽ là đầu ra hợp lệ. Đầu ra phải được đưa ra stdouthoặc ngôn ngữ của bạn tương đương gần nhất hoặc là giá trị trả về cho hàm của bạn.

Chấm điểm

Điểm của bạn sẽ là giá trị được tính theo chương trình của bạn, với chính chương trình là đầu vào.

Chỉnh sửa: Nên xử lý các dòng mới ngay bây giờ, xin lỗi vì trước đây, folks

Dưới đây là một kịch bản Pyth để xác minh tính toán điểm.


1
Chương trình sẽ phải giải thích bất cứ điều gì khác ngoài mã của chính nó? Và chỉ cần làm rõ, hai ký tự bằng nhau liên tiếp có giá trị 0?
Daniel M.


1
@bopjesvla Tốt. Các chuỗi tùy ý, nhưng bạn có thể cho rằng chúng có thể phù hợp với vũ trụ. Hoặc trên máy tính của bạn, cho vấn đề đó.
Chiếm

11
Người đầu tiên tạo ra một câu trả lời hợp lệ trong Unary thắng!
Sản xuất ETH

3
Bây giờ đã quá muộn, nhưng một tùy chọn để ngăn các câu trả lời theo kiểu Unary sẽ là xác định sự khác biệt giữa các ký tự bằng nhau là 1. Cũng sẽ làm cho logic trở nên thú vị hơn một chút.
Reto Koradi

Câu trả lời:


19

CJam, 1051 827 643 569 545 407 327 279 235 233 229

''"','#'C'J'a'm',' qYew::-Yf#:+e#'''''''''"
f{-ci'(*''2*\}'^,40>"*/:N"-"][ZZ[\^__`bcdgimpstsz{}~~~"

Chương trình trên tạo mã nguồn thực tế, dài 1.179.112 byte.

Kiểm tra

Sử dụng trình thông dịch Java , mã nguồn có thể được tạo và kiểm tra như thế này:

$ alias cjam='java -jar cjam-0.6.5.jar'
$ cjam gen.cjam > diff.cjam
$ cksum diff.cjam 
896860245 1179112 diff.cjam
$ cjam diff.cjam < diff.cjam
#CJam, 229

Phiên bản thay thế

Với chi phí 36 điểm - cho số điểm cuối cùng là 265 - chúng tôi có thể làm cho mã nguồn ngắn hơn 99,92%:

'''()))))(''''(((('''())))))))))))))))))))))))))))('''()))))))))))))))))))))))))))))))))))('''())))))))))))))))))))))))))))))))))))))))))))))))))))))))))('''())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))('''()))))(''''((((((('())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))('())))))))))))))))))))))))))))))))))))))))))))))))))('())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))('())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))('()))))))))))))))))))('()))))))))))))))))))('())))))('())))))))))))))))))))))))))))))))))))))))))))))))))('()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(''(((('()))))))))))))))))))('())))('())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(''((((''''''''''''''''''()+,-.0123456789;<=>?@ABCDEFGHIJKLMOPQRSTUVWXYZ[\]][ZZ[\^__`bcdgimpstsz{}~~~

Bạn có thể thử phiên bản trực tuyến này trong trình thông dịch của CJam .

Ý kiến

Chúng tôi muốn thực thi mã

'#'C'J'a'm',' qYew::-Yf#:+

giữ điểm càng thấp càng tốt. Để đạt được điều này, chúng tôi sẽ xây dựng chuỗi ký tự đó theo từng ký tự (với một vài lần không trước và sau) và đánh giá kết quả.

May mắn thay, '(đẩy ký tự theo nghĩa đen), ((giảm) và )(tăng) là các ký tự ASCII liên tiếp, do đó việc đẩy các ký tự tùy ý là tương đối rẻ tiền.

  • Các ký tự ASCII sau 'có thể được đẩy như '()…)(, trong đó số lượng )phụ thuộc vào điểm mã.

    Ví dụ, +có thể được đẩy như '())))(. Khoảng cách giữa '(()là 1. Các dấu )(triệt tiêu lẫn nhau; chức năng duy nhất của chúng là mở đường cho các mục sau '(tương ứng với ký tự tiếp theo) với các ký tự liên tiếp.

    Nhân vật được đẩy theo cách này sẽ nâng số điểm lên 4 điểm.

  • Các ký tự ASCII trước 'có thể được đẩy như ''(…(, trong đó số lượng (phụ thuộc vào điểm mã.

    Ví dụ, #có thể được đẩy như ''((((. Khoảng cách giữa '(là 1.

    Nhân vật được đẩy theo cách này sẽ nâng số điểm lên 2 điểm.

  • ''(…(thực sự hoạt động cho tất cả các ký tự ASCII, vì Ký tự rộng 16 bit và bao quanh. Ví dụ, +có thể được đẩy như '', theo sau là 65,532 (s.

    Kỹ thuật này được sử dụng trong phiên bản 1,2 megabyte của mã.

  • Các nhân vật 'có thể được đẩy như '', để lại điểm số không bị ảnh hưởng.

e# Push these characters on the stack: ','#'C'J'a'm',' qYew::-Yf#:+e#'''''''''

''
'()))))(
''
''((((
''
'())))))))))))))))))))))))))))(
''
'()))))))))))))))))))))))))))))))))))(
''
'())))))))))))))))))))))))))))))))))))))))))))))))))))))))))(
''
'())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(
''
'()))))(
''
''(((((((
'())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(
'())))))))))))))))))))))))))))))))))))))))))))))))))(
'())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(
'())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(
'()))))))))))))))))))(
'()))))))))))))))))))(
'())))))(
'())))))))))))))))))))))))))))))))))))))))))))))))))(
'()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(
''((((
'()))))))))))))))))))(
'())))(
'())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(
''((((
''
''
''
''
''
''
''
''
''()

+                         e# Concatenate the two topmost single quotes.
,                         e# Push the length of the resulting string (2).
-.0123456789              e# Push that number.
;                         e# Discard it from the stack.
<                         e# Compare a single quote with 2. Pushes 0.
=                         e# Compare a single quote with 0. Pushes 0.
>                         e# Compare a single quote with 0. Pushes 1.
?                         e# Ternary if. Discards a single quote and 1.
@                         e# Rotate the remaining three single quotes.
ABCDEFGHIJKLMOPQRSTUVWXYZ e# Push 25 items on the stack.
[\]                       e# Swap the last two and wrap them in an array.

e# So far, we've pushed the elements of "','#'C'J'a'm',' qYew::-Yf#:+e#'''"
e# followed by the elements of [10 11 12 13 14 15 16 17 18 19 20]
e# and ["" "" "" 3.141592653589793 "" "" " " 0 0 0 -1 1 [3 2]].

]    e# Wrap the entire stack in an array.
[    e# Begin an array. Does nothing.
ZZ   e# Push 3 twice.
[    e# Begin an array. Does nothing.
\^   e# Swap both 3s and push the bitwise XOR. Pushes 0.
__   e# Push two copies.
`    e# Inspect the last copy. Pushes the string "0".
b    e# Convert "0" from base 0 to integer. Pushes 48.
cd   e# Cast 48 to Character, then Double. Pushes 48.0.
gi   e# Apply the sign function, then cast to integer. Pushes 1.
mp   e# Check 1 for primality. Pushes 0.
s    e# Cast the result to string. Pushes the string "0".

e# We now have three elements on the stack: an array, 0, and "0"

t    e# Set the element at index 0 of the array to the string "0".
s    e# Cast the array to string.

e# This pushes the string consisting of the characters
e#     0,'#'C'J'a'm',' qYew::-Yf#:+
e# and
e#     e#'''10111213141516171819203.141592653589793 000-1132
e#
e# When evaluated this does the following:
e#   0,                Push an empty array. Does not affect output.
e#   '#'C'J'a'm','     Push the characters of "#CJam, ".
e#   q                 Read all input from STDIN.
e#   Yew               Push the overlapping slices of length 2.
e#   ::-               Reduce each pair of characters to their difference.
e#   Yf#               Square each difference.
e#   :+                Add the results.
e#   e#…               Comment. Does nothing.

z    e# Zip. This wraps the string on the stack in an array.
{}~  e# Execute an empty block.
~    e# Unwrap the array.
~    e# Evaluate the string.

6
........... wat
DLosc

Có vẻ như ngôn ngữ này được xây dựng cho thử thách chính xác này. Tốt đẹp!
Domino

3
Chỉ trích. Tôi nghĩ rằng cuối cùng tôi đã thực hiện một thử thách sẽ khiến CJam gặp bất lợi vì nó thường là sự pha trộn giữa các biểu tượng 'sớm' và chữ 'muộn'. Nhưng không, bạn xuất hiện và phá hỏng nó một lần nữa ... Chúc mừng!
Sanchises

7

Haskell, 152827 95742 91196 83921 77447 71742

a=(.);_ZYXWVUTSRQPONMLKJIHGFEDCBA=("#Haskell, "++)`a`show`a`sum`a`fmap(^2)`a`(tail>>=zipWith(-))`a`fmap fromEnum`a`(""++)

Cách sử dụng (lưu ý: "phải thoát):

_ZYXWVUTSRQPONMLKJIHGFEDCBA   "a=(.);_ZYXWVUTSRQPONMLKJIHGFEDCBA=(\"#Haskell, \"++)`a`show`a`sum`a`fmap(^2)`a`(tail>>=zipWith(-))`a`fmap fromEnum`a`(\"\"++)"

"#Haskell, 71742"

Tôi thêm chuỗi trống ""vào chuỗi đầu vào để giúp trình thông dịch Haskell tìm ra các loại. Không có kiểu suy luận thất bại, mã quá đa hình. Phần còn lại là kinh doanh như bình thường: ánh xạ từng ký tự vào ascii, tạo một danh sách các khác biệt lân cận, bình phương, tổng và tên ngôn ngữ.


6

> <>, 30227

0&ii:0(?v:@-:*&+&20.
'#><>, '<;n&oooooo

Gah, tiêu đề nhân đôi số điểm của tôi; theo lời của chương trình của riêng tôi, n & oooooo! Tôi sẽ mất một thời gian sau để làm cho điều này tốt hơn. Tôi cũng biết rằng điểm số này có thể bị tắt vì tôi thực sự không thể nhập các dòng mới trên trình thông dịch trực tuyến và tôi không chắc chắn có cách nào để đưa vào ngăn xếp đầu vào trên bản chính thức.

Không có nghĩa là hoàn toàn tối ưu hóa, nhưng có đầy đủ một số lợi thế của sự gần gũi tương đối (ít nhất là trong điều kiện của các ký tự ASCII) của lệnh trong> <>. Tôi không thể dễ dàng gửi dòng mới làm đầu vào, vì vậy tôi đã sử dụng trình kiểm tra điểm số Pyth, nhưng nó phù hợp với một loạt các trường hợp kiểm tra ngẫu nhiên mà tôi đã sử dụng vì vậy nó sẽ ổn đối với điều đó.

Đây là một điểm có số điểm 30353 (phải là chính xác vì nó là một dòng):

0&l1=66+*77++0.$:@-:*&+&10.' ,><>#'oooooo&n;

Đẹp, một mục cạnh tranh trong> <>!
Sanchises

5

Java, 66465 65506 62434

Đáng ngạc nhiên ngắn. Chấp nhận một mảng char thay vì một chuỗi.

ABCD->{int A98=0,GFEDCBA=1,A987;for(;GFEDCBA<ABCD.length;A98=A98+(A987=ABCD[GFEDCBA]-ABCD[GFEDCBA++-1])*A987-0);return"#Java, "+A98;}

Tôi đã sử dụng một chương trình để tạo ra các tên biến tốt nhất.


Làm thế nào bạn sẽ sử dụng điều này trong một chương trình? (Tôi chưa hoàn toàn quen thuộc với các tính năng java 8)
aditsu


Ồ, vậy là bạn phải xác định một giao diện chức năng đích cho nó ... không chính xác là một đối tượng hạng nhất.
aditsu

@aditsu Bạn cũng có thể sử dụng Hàm <char [], String> nếu muốn.
TheNumberOne

Oh tôi thấy ((Function<char[],String>) ABCD->{…}).apply(…), cảm ơn. Những lambdas dường như khá không đầy đủ mà không có bối cảnh loại.
aditsu

4

K5, 25478

"#K5, ",$+/1_{x*x}'-':

Giải pháp khá đơn giản. Đây là một hàm lấy đầu vào của nó thông qua một chuỗi.


1
@TimmyD Đã sửa !!
kirbyfan64sos

4

Máy chủ Windows PowerShell ISE, 62978 63894 67960 77050

PARAM($4)($4.LENGTH-2)..0|foreach{$9=+$4[$_]-$4[$_+1];$0+=$9*$9};'#'+$HOST.NAME+', '+$0

Chỉnh sửa - đã lưu một số điểm bằng cách loại bỏ $Abiến và thay vào đó đếm ngược qua chuỗi và cũng bằng cách chuyển đổi một số từ khóa sang CAPS

Edit2 - đã lưu thêm một số điểm bằng cách sử dụng $($HOST.NAME)thay vìPowerShell

Edit3 - đã lưu thêm một số điểm bằng cách hoán đổi tên biến và thay đổi cách tạo đầu ra.

Sử dụng các biến được đặt tên bằng số, vì chúng "gần" hơn $nên mức phạt của chúng tôi sẽ ít hơn.

Thật thú vị khi không sử dụng các kỹ thuật chơi gôn thông thường. Ví dụ: |%{$là 22534, trong khi |foreach{$chỉ là 8718.

Điều này có lẽ gần với tối ưu mà không thay đổi kỹ thuật.


1
Đây chính xác là những gì tôi đã hy vọng. Chúc mừng!
Chiếm

4

MATLAB, 19214 39748 39444 38785 37593

@(A9876543210)sprintf('#MATLAB, %d',diff(A9876543210)*diff(A9876543210'))

Cảm ơn Luis Mendo vì đã giảm số lượng chênh lệch hơn nữa!

Cảm ơn NumberOne vì đã giảm số lượng tiếng ồn bằng cách thay đổi tên biến đầu vào!

Làm thế nào điều này hoạt động

  1. Khai báo một hàm ẩn danh được lưu trữ trong ansbiến mặc định trong MATLAB
  2. Hàm lấy một chuỗi được lưu trữ A9876543210và in ra tổng các khác biệt bình phương lân cận của chuỗi.
  3. difftìm cặp khác biệt lân cận trong một mảng và tạo ra một mảng length(A9876543210)-1. Bằng cách sử dụng difftrên một mảng chuỗi, điều này sẽ được truyền tới một doublemảng trong đó mã ASCII của mỗi ký tự được tạo và sự khác biệt của các cặp liên tiếp dẫn đến một mảng khác.
  4. Để tìm tổng của sự khác biệt bình phương, bạn chỉ cần lấy sản phẩm chấm của mảng khác biệt này với chính nó được hoán vị. Làm diff(A9876543210)'thực sự tạo ra nhiều tiếng ồn hơn với A9876543210.'(cảm ơn Luis Mendo!)
  5. Kết quả được in ra màn hình.

Thông thường trong PPCG cho phép các chức năng không tên. Vì vậy, bạn có thể xóaA=
Luis Mendo

Ngoài ra, norm(diff(B))^2ngắn hơn
Luis Mendo

@LuisMendo - Đã thử điều đó. Nó in ra ký hiệu khoa học và không tôn trọng %d.
rayryeng - Phục hồi Monica

Tại sao bạn sử dụng Bnhư một tên biến? A=@(A)...là MATLAB hợp lệ, vì Acó phạm vi.
Sanchise

3
A -> A9876543210
TheNumberOne

4

QBasic, 38140

YAY CHO ĐỒNG HỒ NỀN TẢNG

LINE INPUT A9876543210$:AAA=ASC(A9876543210$):WHILE A<LEN(A9876543210$):AA9876543210=AAA:A=1+A:AAA=ASC(MID$(A9876543210$,A)):A98765432100=A98765432100+(AA9876543210-AAA)*(AA9876543210-AAA):WEND:?"QBasic,";A98765432100

(Đã thử nghiệm với QB64 .)

Đây là một chương trình đầy đủ nhập chuỗi và đưa ra câu trả lời. Hạn chế duy nhất ở đây là chương trình không thể lấy đầu vào đa dòng ( LINE INPUTcó thể xử lý mọi thứ miễn là nó là một dòng).

Khử nhiễu:

LINE INPUT line$
b=ASC(line$)
WHILE i<LEN(line$)
    a=b
    i=i+1
    b=ASC(MID$(line$,i))
    score=score+(a-b)*(a-b)
WEND
PRINT "#QBasic,"; score

Thuận tiện, chuyển một chuỗi nhiều ký tự để ASCcung cấp giá trị ASCII của ký tự đầu tiên. Cũng thuận tiện, các biến số được tự động khởi tạo về không.


Tôi chưa bao giờ được mã hóa bằng QBasic trước đây, vì vậy hãy tha thứ cho tôi nếu tôi sai, nhưng liệu có thể thay thế các biến bằng chữ in hoa để lưu thêm một số điểm không?
ASCIIThenANSI

@DLosc À, được rồi. Tôi đã đọc phiên bản khử rung như chương trình thực tế. : |
ASCIIThenANSI

3

Con trăn 2, 91026

lambda A:"#Python 2, "+`sum((ord(A9876543210)-ord(A98765432100))**2for A9876543210,A98765432100 in zip(A,A[1:]))`

Xác định một hàm ẩn danh lấy một chuỗi và trả về điểm số. Hãy thử trực tuyến .

Hầu hết đây là một triển khai chức năng khá đơn giản: zip Avới A[1:]để có được danh sách các cặp chữ cái, sau đó trừ ords, hình vuông và tổng của chúng bằng biểu thức trình tạo.

Quan sát rằng hai biến bên trong biểu hiện máy phát điện chỉ bao giờ tiếp theo các ký tự sau: ), ,, và không gian. Tất cả ba trong số này có giá trị ASCII rất thấp, do đó, nó cho phép chúng ta kết thúc mỗi biến với một ký tự có giá trị ASCII càng thấp càng tốt. Ký tự thấp nhất có thể kết thúc một biến trong Python là 0. Hơn nữa, mỗi cơ hội chúng ta phải chia một bước nhảy lớn thành hai lần nhảy nhỏ hơn sẽ làm giảm điểm số: A0chi phí là 289, nhưng A90chỉ là 145 và chỉ A9876543210là 73.

(Cách tiếp cận này không giúp biến lambda A, có lẽ vì nó [xảy ra sau một lần xuất hiện.)


3

Mã số, 144420642

Xây dựng nó từ:

t=arguments[0];n=0;for(u=1;u<t.length;++u)n+=(f=t.charCodeAt(u)-t.charCodeAt(u-1))*f;return'#JSFuck, '+n

Dán phần này vào hộp nhập nhỏ của JSFuck.com để biên dịch nó thành JSFuck. Kết quả là một kịch bản dài 112701 ký tự, vì vậy tôi không thể đặt nó ở đây. Hai ký tự cuối cùng của tập lệnh này là dấu ngoặc đơn, đặt đầu vào giữa chúng.

...)[+!+[]])('abd')

Phải mất chương trình gần 20 giây trên máy tính của tôi để tự đánh giá.


Giải trình

Tôi có nhiều thời gian hơn để làm việc này, vì vậy tôi ngồi xuống và cố gắng tối ưu hóa các tên biến. Dưới đây là các tên biến đáng sử dụng, theo thứ tự điểm số của họ.

u     ([][[]]+[])[+[]]                    17237
n     ([][[]]+[])[+!+[]]                  17437
f     (![]+[])[+[]]                       18041
t     (!![]+[])[+[]]                      18041
a     (![]+[])[+!+[]]                     18241
r     (!![]+[])[+!+[]]                    18241
d     ([][[]]+[])[!+[]+!+[]]              23405
N     (+[![]]+[])[+[]]                    23669
e     (!![]+[])[!+[]+!+[]+!+[]]           29217
i     ([![]]+[][[]])[+!+[]+[+[]]]         33581
l     (![]+[])[!+[]+!+[]]                 24209
s     (![]+[])[!+[]+!+[]+!+[]]            29217
uu    ([][[]]+[])[+[]]+([][[]]+[])[+[]]   36983

Đây là JavaScript tôi đã dịch sang JSFuck:

score = 0;
for (u = 1; u < input.length; ++u)
  score += (difference = input.charCodeAt(u) - input.charCodeAt(u-1)) * difference;
return '#JSFuck, ' + score;

Tôi đã xem xét kỹ hơn về trình dịch của JSFuck.com và tìm hiểu chức năng đánh giá của nó hoạt động như thế nào. Khi kiểm tra "nguồn Eval", mã sẽ trở thành một hàm JSFuck tự thực thi. Tuy nhiên, để có được đầu vào, chúng ta cần truy cập các đối số [0] từ bên trong hàm. Điều này mang mã JS cuối cùng của chúng tôi đến ...

t=arguments[0];n=0;for(u=1;u<t.length;++u)n+=(f=t.charCodeAt(u)-t.charCodeAt(u-1))*f;return'#JSFuck, '+n

(Nếu bạn đang tự hỏi tại sao phiên bản trước của tôi có điểm thấp hơn phiên bản này, thì đó là vì đây là chương trình JSFuck trả về một chuỗi cần được đánh giá là JS. Đây cũng là lý do tôi không để nó trong bài viết)


Của bạn abslà không cần thiết. Tôi đoán rằng chỉ có thể tạo sự khác biệt ... :)
Sanchises

6
Tôi thấy điểm số khó hiểu. Bạn nên loại bỏ khoảng trắng. Đặc biệt là vì đầu ra của chương trình của bạn nên được JSFuck, 102280181.
mbomb007

@sanchises thực sự, tôi thực sự đã quên đặt hình vuông hai lúc đầu, đó là lý do tại sao có Math.abs. Sẽ sửa chữa.
Domino

@ mbomb007 ơi, ok rồi, sẽ sửa quá.
Domino

3

CJam, 23663 19389 11547

"#CJam,"32A;clYew[]ULC;;;;::- 0$.*:+

Dùng thử trực tuyến

Nó bắt đầu cảm thấy như thế này có thể được đẩy gần như vô tận bằng cách chiến lược thêm nhiều nhân vật. Nhưng tôi nghĩ rằng tôi đang bắt đầu đạt đến mức giảm dần lợi nhuận ở đây, vì vậy tôi sẽ dừng lại ngay bây giờ. Ví dụ, nơi tôi có ULC;;;, tôi có thể sử dụng toàn bộ bảng chữ cái ngược theo sau là 26 ;, nhưng mức tăng ngày càng nhỏ hơn.

Cho đến nay, khoảng cách lớn nhất tôi còn lại là giữa m,trong chuỗi ban đầu. Tôi không tìm thấy bất cứ điều gì hợp lý để thoát khỏi nó. Tôi chắc chắn có nhiều cách. Nhưng nếu tôi đẩy nó đến giới hạn, nó có thể bắt đầu giống như giải pháp của Dennis ...


3

JAVASCRIPT, 33911

$0123456789ABCDEFGHIJKLMNOPQRS=>/**/('#')+('JAVASCRIPT,')+(" ")+(($)/**/=0,($0123456789ABCDEFGHIJKLMNOPQRS[`split`]``[`map`]/**/(($$,$$$)/**/=>/**/($)/**/=Math[`pow`]/**/($0123456789ABCDEFGHIJKLMNOPQRS[T=`charCodeAt`]/**/($$$)+-($0123456789ABCDEFGHIJKLMNOPQRS[T]/**/(($$$)/**/>=6-5?/**/($$$)+-1:0.)),2)+($))),($))

Đây là một trong những tối ưu hóa tuyệt vời nhất tôi từng làm trong một môn đánh gôn ...

Đạo cụ cho Neil cho đề xuất "bình luận spam" = P


Tôi nghĩ bạn có thể tiết kiệm 5180 chỉ bằng cách chèn /**/vào những nơi thích hợp.
Neil

3

JAVASCRIPT, 31520

Giải pháp này khác biệt hơn nhiều so với giải pháp khác của tôi, và vì vậy tôi cảm thấy nó xứng đáng với câu trả lời của riêng mình.

A=>/**/(($)/**/=/**/(''),('000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000100000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000001000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000100000000000000000000000000000000000000001000000000000000000000000000000000000000010000000000000000000000000000000000000000000100000000000000000000000000000000000000100000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000010000000000000000000000000000000100000000000000000000000000000000000000100000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010/-,+*)(')/**/[`split`]``[`reduce`]/**/(($$,$$$,$$$$)/**/=>/**/($$$)/**/>7.-07?/**/(($)+=/**/((/**/String[`fromCharCode`]/**/)(($$$$)+-($$))),($$$$))/**/:/**/($$)),/**/eval/**/($))

Đó là 7306 ký tự, hầu hết là chương trình thực tế được mã hóa thành chuỗi 0/1 đó và phần còn lại chỉ đơn giản là để giải mã nó. Nó hoạt động bằng cách lấy chỉ mục của mỗi '1' trừ chỉ số của '1' trước đó để có được giá trị ký tự cần thiết. Sau đó, nó đưa chuỗi kết quả vào hàm thực tế, về cơ bản là một chương trình golf tiêu chuẩn để giải quyết vấn đề (chỉ có khoảng 105 ký tự).


2

R, 68911 57183 53816 52224

Lấy một chuỗi từ STDIN và chuyển đổi nó thành một số nguyên thông qua raw. Diff, hình vuông và tổng các vector kết quả. Kết quả được trả về dưới dạng một chuỗi. Cảm ơn @nimi cho mẹo tên biến.

'&&'=sum;'&&&'=diff;'&&&&'=as.integer;'&&&&&'=charToRaw;'&&&&&&'=readline;'&&&&&&&'=paste;'&&&&&&&'('#R,','&&'((A='&&&'('&&&&'('&&&&&'('&&&&&&'()))))*A))

@nimi Cảm ơn vì điều đó, đã bị mắc kẹt trong 2 lần cố gắng để giữ cho nó ngắn :)
MickyT

2

Toán học, 33552

A=ToExpression;A@ExportString[A@Characters@(**)"001000100010001101001101011000010111010001101000011001010110110101100001011101000110100101100011011000010010110000100000001000100011110000111110010101000110111101010011011101000111001001101001011011100110011101011011001000110010111000100011001001100100000001000100011010010110011001100110011001010111001001100101011011100110001101100101011100110100000001010100011011110100001101101000011000010111001001100001011000110111010001100101011100100100001101101111011001000110010101000000001000110101110100100110"(**),(**)"Bit"(**)]

Mã này ước tính cho một hàm không tên, tính toán "nhiễu" của chuỗi đầu vào. Nó sử dụng thực tế là việc biểu diễn dữ liệu nhị phân ASCII về cơ bản là "không ồn ào". Dữ liệu nhị phân bạn thấy là chuỗi

"#Mathematica, "<>ToString[#.#&@Differences@ToCharacterCode@#]&

đó sẽ là một câu trả lời hợp lệ của riêng mình, đạt 37848.

Mọi thứ khác

A=ToExpression;A@ExportString[A@Characters@(**)"001..110"(**),(**)"Bit"(**)]

chỉ cần giải mã chuỗi nhị phân và diễn giải nó thành mã Mathicala. Lưu ý rằng nhận xét trống của Mathicala (**)rất "ít nhiễu" và thực sự loại bỏ nhiễu khỏi "s.


2

Java8: 117170 100508 99062 98890

Với sự giúp đỡ của biểu thức lambada và gán biến nội tuyến có thể rút ngắn mã này một chút.

A->{int B=0,D=0,E=0;char[] C=A.toCharArray();for(;D<C.length-1;)B+=(E=C[D]-C[++D])*E;return"#java, "+B;}

A -> A9876543210; B -> $ 0123456; C -> A; D -> AA; E -> $ 0123456789
TheNumberOne

2

Java, 129300 128400 110930 106581 105101

B->{int A=0,C=A;char[]Z=B.toCharArray();for(;++C<Z.length;A=A+(Z[C]-Z[C-1])*(Z[C]-Z[C-1]));return\"#Java, \"+A;}

Thử thách này thực sự khiến tôi suy nghĩ sâu hơn về các nhân vật để sử dụng và tối ưu hóa nhiều hơn là tìm ra giải pháp ngắn nhất. Tôi sẽ tiếp tục làm việc để giảm số lượng.

Đây là một hàm lambda, với Bchuỗi là đại diện cho hàm. Đừng quên thoát dấu ngoặc kép ( ") khi truyền chuỗi này dưới dạng chuỗi.


2

Kim tự tháp, 16391

++C38828542027820dsm^-ChdCed2,Vztz

Thủ thuật lưu ý duy nhất được sử dụng ở đây là mã hóa cơ sở 256 #Pyth,, chi phí thấp hơn nhiều so với chính chuỗi.

++C38828542027820dsm^-ChdCed2,Vztz    Implicit: d=' ', z=input()
                             ,Vztz    Pair each char in the input with its neighbour
                   m                  Map d in the above to:
                      Chd               ASCII code of 1st char
                         Ced            ASCII code of 2nd char
                     -                  Difference between the two
                    ^       2           Squared
                  s                   Take the sum
  C38828542027820                     '#Pyth,'
++               d                    '#Pyth,' + ' ' + result, implicit print

2

M, 47033 52798

A9876543210(A9876543210) F AA9876543210=2:1:$L(A9876543210) S AAA9876543210=$A($E(A9876543210,AA9876543210-1))-$A($E(A9876543210,AA9876543210))**2+AAA9876543210
    Q "#M, "_AAA9876543210

Để sử dụng điều này, chúng ta phải thoát dấu ngoặc kép và "thoát" các ký tự khoảng trắng (có ý nghĩa trong MUMPS!) Như vậy:

>$$A9876543210^MYROUTINE("A9876543210(A9876543210)"_$C(9)_"F AA9876543210=2:1:$L(A9876543210) S AAA9876543210=$A($E(A9876543210,AA9876543210-1))-$A($E(A9876543210,AA9876543210))**2+AAA9876543210"_$C(10,9)_"Q ""#M, ""_AAA9876543210")
#M, 47033

Lưu ý rằng "M" là tên thay thế cho "MUMPS" - có sự bất đồng giữa các học viên về cái nào là đúng. Đương nhiên, tôi đã chọn tùy chọn ngắn hơn ở đây.


Bạn không nên khởi tạo AAAA?
SSH

Ngoài ra vì thiếu các ưu tiên của nhà điều hành, bạn chỉ có thể S AAA = $ A ($ E (A, AA-1)) - $ A ($ E (A, AA)) ** 2 + AAA - nên giảm giá điểm số ...
SSH

@SSH Tôi giả sử một bảng ký hiệu sạch trước khi gọi hàm (vì vậy tôi không phải NEWnhét). Vì vậy, khi tôi bắt đầu thực hiện số học trên AAAA(bây giờ AAA9876543210), nó bị ép buộc 0(có thể đó chỉ là chi tiết triển khai của bộ nhớ cache? Tôi không có cài đặt GT.M để kiểm tra). Cuộc gọi tốt về điều ưu tiên điều hành; Tôi luôn cảm thấy khó khăn khi nghĩ về các hoạt động hoàn toàn từ trái sang phải. (Tôi cũng quên rằng M có toán tử lũy thừa - đó không phải là thứ xuất hiện thường xuyên khi bạn viết ứng dụng CRUD.)
Senshin

Tốt đẹp! Ngoài ra, do thực hiện từ trái sang phải, bạn không cần dấu ngoặc trước ** 2
SSH

@SSH Cảm ơn, dunno làm thế nào những người có trong đó. Phiên bản tôi thực sự đo không có nó, vì vậy điểm vẫn như nhau.
Senshin

1

Ruby, 118402

puts "#Ruby, #{a=0;aa=nil;File.read(ARGV[0]).each_byte{|aaa| aa||=aaa;a+=(aaa-aa)**2;aa=aaa};a}"

Nó đọc trong một tập tin thông qua dòng lệnh, chẳng hạn như ruby diff.rb /path/to/file. Có chỗ để cải thiện, và đó là điều tôi đang làm việc ngay bây giờ.


1

C ++ 166345

void n(){int b=0,c,d;string a;cin >>a;for(c=1;c<a.length();++c){d=(a[c]-a[c-1]);b+=d*d;}cout<<"#C++, "<<b;}

1

Perl, 93556

chomp($A=<>);$AAA=$AAAA=0;foreach$AAAAA(split'',$A){$AA=ord($AAAAA);$AAA+=($AAAA-$AA)**2 if($AAAA!=0);$AAAA=$AA}print'#Perl, '.$AAA

Tôi sẽ cố gắng cắt giảm điều này thêm một số.

Nó chỉ ra rằng các dấu ngoặc nhọn ( {}, ASCII 123 và 125) và dấu gạch dưới ( _, ASCII 95) rất đắt vì tất cả các ký tự khác nằm trong khoảng 30-70, đó là lý do tại sao tôi định dạng iftheo cách tôi đã làm và Tại sao tôi đang sử dụng $AAAAAthay vì yêu quý của Perl $_.

Đáng buồn thay, tất cả các biến có ký hiệu trong đó là chỉ đọc, vì vậy tôi không thể tận dụng các kết hợp như $#$$.


1

F #, 136718 130303

let(A)=Seq.map;
(stdout.Write(Seq.sum(A(fun(AA)->AA*AA)(A((<||)(-))(((Seq.pairwise(A(int)(stdin.ReadToEnd())))))))))

Ở đâu có \nsau ;.


1

Vỏ POSIX, 172026

{ while IFS= read -N 1 A; do A1=$(printf %d \'"$A");test "$A1" -eq 0 && break;case $A11 in "")A111=0;;*)A111=$((A1-A11));;esac;A11="$A1";A1111=$((A111**2+A1111));done;echo "# POSIX Shell, $A1111";}

quá tệ Tôi không thể nhận được kết quả tương tự như trình kiểm tra Pyth (178386) ...


1. "Shell" không phải là ngôn ngữ lập trình. Điều này trông giống như Bash. 2. Bạn có thể chỉ cần đọc từ STDIN. Không cần phải đọc mã nguồn chính nó.
Dennis

@Dennis Cảm ơn, đã chỉnh sửa ... Mặc dù tôi không thể nhận được kết quả tương tự, nhưng có thể vẫn còn một lỗi (ít nhất là một lần tôi đã nhận được kết quả tương tự nhưng không phải trong phiên bản "nén") ...
Alois Mahdal

1

Lua, 171078 117896

Chơi gôn

A=string AA=A.sub AAA=io.read()AAAA=#AAA AAA=AAA..AA(AAA,AAAA,AAAA)AAAAA=0 AAAAAA=A.byte for AAAAAAA=1,AAAA do AAAAAAAA=AAAAAA(AA(AAA,AAAAAAA,AAAAAAA))-AAAAAA(AA(AAA,AAAAAAA+1,AAAAAAA+1))AAAAA=AAAAA+AAAAAAAA*AAAAAAAA end print(AAAAA)

Ung dung:

A=string 
AA=A.sub 
AAA=io.read()
AAAA=#AAA 
AAA=AAA..AA(AAA,AAAA,AAAA)
AAAAA=0 
AAAAAA=A.byte 
for AAAAAAA=1,AAAA do 
    AAAAAAAA=AAAAAA(AA(AAA,AAAAAAA,AAAAAAA))-AAAAAA(AA(AAA,AAAAAAA+1,AAAAAAA+1))
    AAAAA=AAAAA+AAAAAAAA*AAAAAAAA 
end 

print(AAAAA)

0

C ++, 49031

một macro C ++ lấy chuỗi c và ghi kết quả vào đầu ra tiêu chuẩn

<::>(auto(A))<%long(AAA)=0,AA=A<:0:>;while(*++A)<%AAA+=(*A-AA)*(*A-AA);AA=A<:0:>;%>cout<<"#C++, "<<AAA;%>

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


-3

C ++, 5

    #include <iostream>
    #include <string>
    #include <cmath>
    using namespace std;

    void convertToASCII(string letter)
    {
        int count = 0;
        int ans = 0;
        int *diff = new int[]; //dynamic array

        for(int i=0; i<letter.length(); i++)
        {
            char x = letter[i]; //letter.at(i);

            if(i!=0){
                diff[i-1] = int(x)- int(letter[i-1]);
                count++;
            }
        }

        for(int j=0; j<count; j++){
            ans += pow(diff[j], 2.0);
        }

        cout << "#C++, " << ans << endl;
    }

    int main()
    {
        string plainText;
        cout << "Enter text: ";
        getline(cin, plainText);
        convertToASCII(plainText);
        system ("pause");
        return 0;
    }

7
Chào mừng bạn đến với Câu đố lập trình & Code Golf! Đây là một câu trả lời hợp lệ, nhưng điểm số của bạn cho thử thách này sẽ là kết quả của văn bản chương trình của bạn được chạy qua chương trình. Bạn cũng nên cố gắng giảm thiểu số điểm đó càng nhiều càng tốt. Hãy thử xem qua các mẹo trên các trang này để xem làm thế nào bạn có thể rút ngắn mã của mình và hạ thấp điểm số của bạn.
Sản xuất ETH
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.