Sắp xếp lại mã Bowling


14

Thử thách Code-Bowling

Viết chương trình hoặc hàm tạo ra cùng một đầu ra, bất kể bạn sắp xếp lại mã nguồn như thế nào. (Đầu ra không thể là một lỗi)


Ghi điểm Pangram

  • Điểm của bạn là số lượng ký tự duy nhất trong mã nguồn của bạn.

    Một chương trình có mã nguồn AJBsẽ có điểm 3
    A Chương trình có mã nguồn AAJsẽ có điểm 2
    A Chương trình có mã nguồn 111sẽ có điểm1

  • Đây là một biến thể . Chương trình có số điểm cao nhất sẽ chiến thắng!

(Để thuận tiện cho bạn, một công cụ chấm điểm tự động đã được tạo ở đây )


Quy tắc thử thách

  1. Đầu vào
    Chương trình / chức năng có thể lấy một đầu vào, mặc dù đó là hoàn toàn tùy chọn.

  2. Đầu ra Đầu ra
    này có thể là bất cứ thứ gì bạn muốn, nhưng nó không phải là không, không rỗng, không rỗng và không lỗi. (Do đó, đầu ra phải có ít nhất 1 byte)

  3. Sắp xếp lại
    Bất kể mã nguồn được sắp xếp lại như thế nào, đầu ra phải giống nhau.

    Ví dụ:
       Chương trình: ABJkết quả đầu ra hello world, cũng như các chương trình: [ AJB, JAB, JBA, vv]

Đây là một biến thể . Chương trình có số lượng nhân vật cao nhất sẽ chiến thắng!


1
Không có bất kỳ nhiệm vụ cụ thể nào để đạt được, theo tôi thì thách thức này quá rộng.
Dennis

2
Non-nil có nghĩa là gì?
Dennis

2
Mặc dù việc ghi điểm pangram của bạn là một nỗ lực để làm cho mã bowling hoạt động, tôi không chắc những thử thách này thực sự nên được gắn thẻ bowling-bowling . Cơ chế tính điểm khá khác biệt so với trò chơi bowling được cho là gì, vì vậy tôi muốn nói là sử dụng thử thách mã hoặc tạo thẻ mới.
Martin Ender

1
Tôi phải đồng ý với Martin. Ví dụ, thử thách này không phải là môn đánh gôn. Ngay khi bạn ghi điểm bằng bất cứ thứ gì ngoài tổng số ký tự (hoặc byte), đó không còn là một thử thách chơi bowling nữa
Nathan Merrill

3
Chương trình / chức năng có phải kết thúc không? (ví dụ như tôi có thể in 0mãi mãi?)
MildlyMilquetoast

Câu trả lời:



14

Nhiều ngôn ngữ, 2 điểm

0.

Sản xuất 0.0như 0.hoặc .0. Yêu cầu phân tích số tự do là OK với dấu thập phân ở đầu hoặc cuối, giả sử 0 cho phần tích phân hoặc phần thập phân bị thiếu. 0000000.sẽ cho cùng một số điểm.

Điều này cũng hoạt động trong các ngôn ngữ sau (trong một số trường hợp với đầu ra khác nhau, như được chỉ ra):

  • Python REPL
  • REPL
  • MATLAB (sản xuất ans = 0)
  • Octave (sản xuất ans = 0)
  • MATL (sản xuất 0)
  • Camam
  • Võng mạc (sản xuất 0)
  • Xếp chồng (sản xuất 0)

Đối với Python, tôi nghĩ đây là cách duy nhất để đạt điểm trên 1, vì các khả năng có thể cạn kiệt.

  • Bất kỳ toán tử nhị phân hoặc đơn nguyên sẽ thất bại như là ký tự cuối cùng
  • Bất kỳ [](){}yêu cầu nào khớp và sẽ thất bại nếu kết thúc trước
  • Một tab hoặc không gian không thể bắt đầu một dòng. Dòng mới không thể được sử dụng trong REPL.
  • Không , thể là nhân vật đầu tiên
  • Một #vị trí đầu tiên sẽ bình luận mọi thứ và sản xuất không đầu ra
  • Bắt đầu \là một tiếp tục dòng không hợp lệ
  • Backticks (Python 2) phải được ghép nối và chúng không có gì là lỗi
  • $, !, ?, Và @không thể được sử dụng mà không cần nhân vật không sử dụng được khác

Đây lá thư, chữ số, _, ., và dấu ngoặc kép.

  • Với dấu ngoặc kép, bất kỳ chuỗi không nằm ngoài chúng đều có lỗi.
  • Các chữ cái có thể có các chữ số và _tạo ra các tên biến, trong đó một số hoán vị luôn không tồn tại.

Các chữ số lá và .. Cho phép các chữ số khác nhau cho một số khác nhau trừ khi tất cả các chữ số là 0. Vì vậy, tôi nghĩ số không và .là cách duy nhất để có được điểm trên 1. Nhưng, tôi không biết rõ về trình duyệt Python, vì vậy tôi có thể thiếu một cái gì đó.


11

CJam , điểm 15

T U
V	LMOQR[]0q

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

Luôn in 0000:

  • 0 chỉ cần đẩy số không.
  • T, U, VLà các biến được trước khởi tạo vào không.
  • L, M, O, Q, RLà các biến được trước khởi tạo vào một danh sách rỗng, vì vậy họ không hiển thị trong kết quả.
  • []có thể hoặc không thể bao bọc mọi thứ trong một danh sách, nhưng chúng không phải được khớp chính xác và đầu ra được làm phẳng để in.
  • q đọc đầu vào trống và do đó cũng không hiển thị trong đầu ra.
  • nguồn cấp dữ liệu, không gian và tab bị bỏ qua bởi trình phân tích cú pháp.

Đây là một câu trả lời tuyệt vời cho một ngôn ngữ như CJam! Nice
Albert Renshaw

Một chữ thường rcó thể được thêm vào để hoàn thành một cái gì đó tương tự như chữ thường q?
Albert Renshaw

1
@AlbertRenshaw bạn không thể có cả hai thứ này, vì một cái sẽ bị lỗi trên EOF.
Martin Ender

9

MATL , 3 5 6 điểm

Ý tưởng để thêm khoảng trắng được lấy từ câu trả lời của bijan .

lv
 T1

Mã, hoặc bất kỳ hoán vị của chúng, xuất ra ba cái được phân tách bằng dòng mới.

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

Giải trình

  • Chức năng ltheo mặc định đẩy số một vào ngăn xếp.
  • Nghĩa đen 1cũng vậy.
  • Literal Tpush true, được hiển thị là số một.
  • Không gian và dòng mới là dải phân cách, và ở đây không làm gì cả.
  • vnối toàn bộ ngăn xếp cho đến nay thành một vectơ cột. Vì vậy, ví dụ vsau Tđó sẽ ghép hai số đầu tiên thành một cột (và sau đó số tiếp theo sẽ được đẩy). Một ban đầu vsẽ tạo ra một mảng trống.

Ở cuối mã, ngăn xếp được hiển thị ngầm, với các quy tắc sau:

  • Mỗi phần tử hoặc mảng trong ngăn xếp được hiển thị trên một dòng khác nhau.
  • Các vectơ cột được hiển thị với mỗi phần tử trên một dòng khác nhau.
  • Các mảng trống gây ra không có đầu ra.

Vì vậy, bất kỳ hoán vị của các ký tự đầu vào tạo ra 1ba lần trong các dòng khác nhau.


Giải trình? Tôi tò mò về cách thức này hoạt động.
Đồng chí SparklePony

@Sparkle Đã thêm một lời giải thích
Luis Mendo

Đẹp! Cũng chỉ muốn lưu ý rằng tôi đã có văn bản này trong thử thách Removing any part of the source code however should cause that specific output to not be produced.tại thời điểm bạn đăng, tôi không có ý muốn thêm nó và nó đã bị xóa. Có lẽ điều đó sẽ giúp bạn tăng số điểm một chút có thể
Albert Renshaw

1
@AlbertRenshaw Cảm ơn bạn đã ủng hộ! Hai điểm nữa
Luis Mendo

Tôi đang buộc tội bạn ăn cắp ý tưởng của tôi. Đó không phải là một vấn đề mặc dù.
bijan

6

Thạch , điểm 53 101

¶ ¤$¥&+ABDFHNPQSUVX^_aborv|®²×ȧȯḄḅḌḞḢḤḷṀṂṚṛṠṢṪẠạị«»()kquƁƇƊƑƘⱮƝƤƬƲȤɓɗƒɦƙɱɲƥʠɼʂƭʋȥẸẈẒẎŻẹḥḳṇọụṿẉỵẓḋėġṅẏ

Chỉ sử dụng các ký tự là một phần của trang mã của Jelly .

Jelly có đầu vào ngầm định 0, và nửa đầu (tối đa và bao gồm ạị«») của chuỗi mã ở trên bao gồm chủ yếu là các nguyên tử monadic (chữ hoa) và dyadic (chữ thường và ký hiệu) mà khi đưa ra một số 0 hoặc một danh sách chỉ chứa một số 0 ( hoặc hai đầu vào như vậy trong trường hợp dyads) trả về số 0 hoặc danh sách chỉ chứa một số không.

Các ngoại lệ là:

  • Không gian: nó bị bỏ qua (mặc dù nó nằm trong trang mã).

  • Pilcrow, phân tách các liên kết (cũng như một nguồn cấp dữ liệu - nhưng đó thực sự là cùng một byte), nhưng không có byte nào khác sẽ tham chiếu mã trước đó.

  • Scarab, ¤hướng dẫn trình phân tích cú pháp xử lý mọi thứ còn lại bắt đầu từ một nilad (hoặc hằng số) là một hằng số (và hoạt động như một nguyên tử đầu tiên).

  • Dollar, $hướng dẫn trình phân tích cú pháp xử lý hai liên kết đến bên trái của nó như một đơn nguyên (và, hơi ngạc nhiên, hoạt động như một nguyên tử đầu tiên)

  • Yen, ¥tương tự hướng dẫn trình phân tích cú pháp xử lý hai liên kết đến bên trái của nó như một con đê.

  • Khuyến nghị, ®ban đầu, nhớ lại giá trị của sổ đăng ký 0(đó là bản quyền đối tác, ©bị phá vỡ khi được sử dụng làm nguyên tử đầu tiên vì nó được tìm thấy từ sự liên kết đến bên trái, chưa được đặt).

Mã từ dấu ngoặc đơn, ()trên, hiện là các điểm mã không được sử dụng, tất cả đều được phân tích cú pháp và mỗi nguyên nhân tạo ra một chuỗi mới (giống như một dòng mới, mặc dù chúng không có tác dụng tạo các liên kết có thể gọi được như một dòng mới, nhưng không có vấn đề gì ở đây vì không có gì cố gắng để làm như vậy).


1
Bạn có thể thêm tất cả các ký tự bên ngoài trang mã miễn phí, vì trình thông dịch sẽ loại bỏ chúng trước khi xử lý mã. Tôi vẫn không biết những gì không phải là con số không.
Dennis

1
Tôi nghĩ rằng tinh thần của thử thách có lẽ là các nhân vật nên ở trên trang. Tôi đã hỏi về non-nil và câu trả lời là chỉ định đầu ra tối thiểu là 1 byte.
Jonathan Allan

@Dennis có ý kiến ​​gì về thuật ngữ chính xác cho những gì xảy ra với phân tích cú pháp tại ngoặc đơn không?
Jonathan Allan

Tất cả các nhân vật không được sử dụng bắt đầu một liên kết mới, giống như một dòng mới.
Dennis

1
Hãy gọi họ là hành vi không xác định. : P
Dennis

4

TI-Basic (sê-ri 83), 93 điểm (99 trên TI-84 Plus)

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZθnπeiAnsrandgetKeyZXsclZYsclXsclYsclXminXmaxYminYmaxTminTmaxθminθmaxZXminZXmaxZYminZYmaxZθminZθmaxZTminZTmaxTblStartPlotStartZPlotStartnMaxZnMaxnMinZnMinΔTblTstepθstepZTstepZθstepΔXΔYXFactYFactTblInputNI%PVPMTFVP/YC/YPlotStepZPlotStepXresZXresTraceStep

Tất cả các chữ số, tất cả các biến một byte (bao gồm θ và n , các biến độc lập cho đồ họa cực và liên tục), các hằng số pi, e , và tôi , một số không-khá-biến ( Ans, randgetKey), và 59 khác nhau biến cửa sổ (tất cả các biến được đảm bảo được xác định).

Phép nhân được đảm bảo rằng kết quả sẽ là 0 khi chúng ta thực hiện điều này theo bất kỳ thứ tự nào. Nếu điều này đang chạy trên một máy tính mới, tất cả các biến sẽ là 0; ngay cả khi không, getKeysẽ là 0 vì không có thời gian để bấm phím trước khi chương trình trả về giá trị.

Trên một TI-84 Plus hoặc cao hơn, chúng ta có thể có được 6 điểm nhiều hơn bằng cách thêm các thẻ getDate, getTime, startTmr, getDtFmt, getTmFmt, isClockOn. Kết quả bây giờ sẽ luôn là {0 0 0}getDategetTimetrả về danh sách độ dài 3 và phép nhân hàm ý phân phối trên các phần tử.

Tôi nghĩ đây là tất cả các mã thông báo có thể sử dụng: bất kỳ lệnh thực tế nào là tiền tố, tiền tố hoặc hậu tố (có nghĩa là chúng sẽ không hoạt động ở đầu hoặc cuối chương trình) và bất kỳ biến nào khác có thể không được xác định (và gây ra lỗi khi đã sử dụng).


Đây là thông minh. Không đặc biệt ấn tượng haha, nhưng thực sự thông minh! +1
Albert Renshaw

3

(không cạnh tranh) Brainf-ck, 63 byte

Chà, tôi không biết điều này có bị coi là gian lận không, nhưng ...

.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

Dấu chấm in ký tự hiện tại (0x00) và các ký tự còn lại không làm gì cả. Điều này về mặt kỹ thuật có thể được mở rộng vô tận, vì vậy xin vui lòng cho tôi biết nếu điều này được coi là gian lận.


Tôi sẽ xem xét rằng một đầu ra không
Albert Renshaw

Oh, tôi nên xóa câu trả lời của tôi sau đó hoặc đánh dấu nó là không cạnh tranh?
brianush1

1
Có 97 ký tự có thể đánh máy, 7 trong số đó bạn không thể sử dụng (8-1), vì vậy tôi muốn nói là 90.
Bijan

@ brianush1 bạn có thể để nó là không cạnh tranh để người khác có thể thấy. Tôi sẽ chỉnh sửa câu hỏi thêm một chút để giải thích đầu ra phải có ít nhất 1 byte
Albert Renshaw

15
@AlbertRenshaw (xin lỗi vì tất cả các nhận xét này) Nếu đầu ra phải là 1 byte, thì ký tự NULL sẽ được tính, vì nó là một byte, mặc dù một ký tự có giá trị 0.
brianush1

3

Haskell, 3 điểm

+ 1

Bất kể cách sắp xếp lại, mã này luôn trả về hàm làm tăng đầu vào. Ví dụ về việc sử dụng thay thế:

>(+ 1) 1
2
>(1+ ) 1  
2
>( +1) 1
2

2

Å ı ® Ø 128, 128.234 (?) Điểm

Tôi đã đến 128.234 với sự giúp đỡ từ @DeststallibleLemon. Chương trình này sử dụng tất cả các ký tự Unicode (128.237) trừ o, Oł. Thật kỳ lạ, hai trong số này là các lệnh đầu ra.

Chắc chắn, mặc dù, không có ngôn ngữ có thể sử dụng tất cả các nhân vật, phải không? Vâng, ngôn ngữ này chỉ bỏ qua các lệnh mà nó không nhận ra. Vấn đề được giải quyết.

Ngôn ngữ này, theo mặc định, sẽ xuất ra như sau:

===== OUTPUT =====



==================

không phải là không, không có giá trị, không trống và không có lỗi.

Lưu ý: nếu điều này vi phạm một số quy tắc bất thành văn, hãy thông báo cho tôi trong các nhận xét và tôi sẽ thay đổi điều này. Nếu bạn biết điểm của tôi (giả sử điều này được cho phép), cũng đăng trong các bình luận.


Nó sử dụng bộ ký tự nào? utf 8? utf-16? Nó sử dụng tất cả các unicode?
Lemon phá hủy

@DeststallibleLemon Nhìn trên trang github, có vẻ như sử dụng "CP-1252" cho mã hóa.
brianush1

@DeststallibleLemon Các lệnh đều có trong CP-1252 (Windows-1252) nhưng nó sẽ chấp nhận bất kỳ ký tự Unicode nào dưới dạng cú pháp hợp lệ
caird coinheringaahing

Rõ ràng, có 128.237 ký tự unicode, vì vậy, bạn sẽ có 128.234? vi.wikipedia.org/wiki/Unicode#cite_note-24
Lemon phá hủy

Theo các câu trả lời khác rõ ràng có 1.112.064 unicode, vì vậy tôi không thực sự chắc chắn nữa
Lemon

1

J, 3 byte

 1

Các ký tự 1, không gian và dòng mới sẽ luôn in 1.



1

Dấu chấm , 1.114.111 ký tự (nếu sử dụng unicode).

<87 dots here> Every Unicode character except NUL and . here

Giải trình:

1                                           leading binary number
1010                                        010 increments the value under the pointer
1010111                                     111 prints out chr(1)

Vì vậy, chuỗi nhị phân kết quả là 1010111 , được chuyển đổi thành thập phân là 87, vì vậy chúng ta cần 87 chấm.

Mỗi ký tự khác là một nhận xét, vì vậy chúng tôi sử dụng mọi ký tự ngoại trừ NUL, vì Python3 dừng đọc tệp sau đó và một dấu chấm, vì các dấu chấm không phải là nhận xét.


0

Mở đầu , điểm 1.112.051

(Khi chỉ xem xét ASCII có thể in [\t\n -~], điểm số là 84. Nếu chúng tôi xem xét tất cả các điểm mã Unicode , điểm số là 1.112.051 .)

!
" #$    %&'+,-./0:;<=>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

(sau đó nối thêm tất cả các ký tự [\u{7f}-\u{10ffff}]sau nó.)

Luôn luôn in 0.


Mở đầu là một ngôn ngữ dựa trên ngăn xếp song song, trong đó ngăn xếp được điền sẵn với số lượng vô hạn là 0s.

  • +: Pop hai giá trị (luôn là 0), thêm chúng (0) và đẩy để xếp chồng.
  • -: Pop hai giá trị (luôn là 0), trừ chúng (0) và đẩy để xếp chồng.
  • #: Pop một giá trị và loại bỏ nó.
  • !: Pop một giá trị và xuất nó dưới dạng một số (luôn là 0) (spec nói "ký tự" nhưng trình thông dịch nói "số"; hoặc là trường hợp, một byte được in)
  • 0: Đẩy 0.
  • ^, v, V: Đẩy giá trị hàng đầu của các chương trình / previous next song song ( "tiếng nói"), nhưng đống tất cả "tiếng nói" được làm đầy với 0, vì vậy họ luôn đẩy 0.
  • nhân vật khác: no-op.

Vì vậy, chỉ có 13 ký tự chúng ta cần tránh:

  • (, ) : Dấu ngoặc đơn không ghép đôi sẽ gây ra lỗi
  • 1-9 : Chúng tôi chỉ muốn đầu ra 0.
  • ?: Chúng tôi không muốn nhập bất cứ điều gì.
  • *: Gây ra sự kiểm tra tính nhất quán rất phức tạp cho mã trước và sau một dòng bao gồm một mình *. Vì vậy, chúng ta cần phải loại bỏ dòng mới hoặc loại bỏ *. Việc triển khai tham chiếu sử dụng Python 2 .readline()mà "dòng mới" có thể có nghĩa \rhoặc \n. Vì vậy, tốt hơn là chỉ cần loại bỏ *.

0

Cá chết , điểm 86

o.ABCDEFGHIJKLMNOPQRSTUVWXYZabcefghjklmnpqrtuvwxyz?!|[]_-();'"*&^$#@!1234567890+=<>,/\:

Nếu đó là bất hợp pháp, thì cũng có

o

(điểm 1)

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.