Bạn có biết ngôn ngữ đó không?


34

Bài tập:

Thách thức của bạn là, đưa ra các bài nộp trước đó và chính nó là đầu vào, xuất ra ngôn ngữ mà chúng được viết theo định dạng sau:

Nói rằng chương trình đầu tiên là trong Ruby. Nó phải xuất ra 1, vì Ruby là 1ngôn ngữ thứ st được sử dụng trong thử thách này. Một chương trình ví dụ là:

a=gets
puts 1

Khi được cho là đầu vào, nó trả về 1.

Chương trình tiếp theo có thể bằng Python. Nó phải xuất ra 2, bởi vì Python là 2ngôn ngữ thứ hai được sử dụng trong thử thách. Một chương trình ví dụ là:

print(1 if input()[0]=="a"else 2)

Đưa ra đệ trình đầu tiên, nó xuất ra 1, và cho chính nó đầu ra 2.

Bạn được phép lặp lại các ngôn ngữ, mặc dù bạn không được phép gửi câu trả lời bằng ngôn ngữ của câu trả lời trước đó.

Ví dụ: nếu chương trình thứ ba nằm trong Ruby, thì nó phải xuất 1ra chương trình đầu tiên và chính nó (vì Ruby là 1ngôn ngữ thứ st được sử dụng) và đưa ra chương trình thứ hai mà nó phải xuất ra 2.


Quy tắc:

  • Nếu có ncâu trả lời hiện đang trong thử thách, phải có ít nhất floor(n / 3)các ngôn ngữ khác nhau. Bất kỳ đệ trình nào phá vỡ quy tắc này đều bị loại.
  • Không có hai "câu trả lời lân cận" (ví dụ: trả lời nvà trả lời n+1) không thể sử dụng cùng một ngôn ngữ.
  • Các phiên bản khác nhau của một ngôn ngữ không được tính là các ngôn ngữ khác nhau (vì vậy Python 2 == Python 3).
  • Câu trả lời phải lấy đầy đủ các bài nộp trước đó làm đầu vào.
  • Trình đầu tiên phải có đầu vào.
  • Bạn không được phép gửi nhiều câu trả lời liên tiếp.
  • "Lặp lại câu trả lời" (câu trả lời có cùng mã chính xác như lần gửi trước) không được phép.
  • Câu trả lời không được phép đi qua số byte được phân bổ của câu trả lời đó - xem "Số lượng byte được phân bổ" để biết thêm chi tiết.

Số lượng byte được phân bổ:

Đối với mỗi số câu trả lời n, số byte được phân bổ cho câu trả lời đó là 45 + 5n.


Định dạng câu trả lời:

Định dạng câu trả lời của bạn như vậy:

# {answer no.}, {language}
{program}
This prints:
- `1` in answer(s) {all answers using 1st language, with links}
- `2` in answer(s) {all answers using 2nd language, with links}
...
{optional explanation}

Đối với danh sách câu trả lời, làm điều này:

- `1` in answers [1]({link to answer}), [3]({link to answer})...

Ghi điểm:

Câu trả lời đầu tiên để tồn tại sau 7 ngày mà không có bất kỳ bài nộp hợp lệ nào sau đó được tuyên bố là người chiến thắng.


1
Một người dùng có thể gửi hai lần gửi liên tiếp không?
Kritixi Lithos

Vì vậy, khi đứng, tôi có thể lặp lại như vậy, mà không có bất kỳ thay đổi nào, câu trả lời của tôi là số 6 như câu trả lời số 8, sau đó Martin có thể lặp lại số n ° 7 (trừ khi tôi nhầm) cho đến khi trả lời n ° 15 trước khi đạt đến ngưỡng áp đặt (tức là floor(n / 3)ngôn ngữ). Tôi đoán đây không phải là hành vi có chủ đích.
plannapus

@plannapus Mình cũng nhận thấy điều này. Tất nhiên, mục tiêu của bạn là có câu trả lời cuối cùng, vì vậy biết rằng tôi sẽ có một cuộc theo dõi tầm thường, bạn có thể muốn làm phức tạp mọi thứ (điều mà tôi không nghĩ đến trước khi đăng câu trả lời của riêng mình).
Martin Ender

3
Số lượng byte được phân bổ tăng theo tiến trình hình học và có lẽ những thách thức này sẽ không chấm dứt cho đến khi chúng ta hết ngôn ngữ, không phải vì mã sẽ trở nên quá dài.
Wolfram

2
IMO một giới hạn cố định hợp lý (ví dụ 384 hoặc 256 byte), sẽ hoạt động tốt hơn và sẽ kích hoạt một cuộc cạnh tranh chặt chẽ vào cuối.
zeppelin

Câu trả lời:


4

26. > <> (ngôn ngữ 12), 164 byte

Chương trình đầu tiên của tôi trong> <>! Đó là 156 ký tự, nhưng 164 byte trong UTF-8.

^$|(?![⊂⍴])[⊂-⍴]|\B=|{}
{:}&1+&=?v
      .&0/
v+!?='>'i41i
v+?='y'i47
v+?=' 'i12
v+?=' 'i24
v4
v6
v7
v8
v9
va
  v?(0:i
v1
n;\b1laa*)?+
/"^mwfPes{'tc"i2&01.;

Bản in này:

  • 1với các câu trả lời 1 , 5 , 7 , 914 (Retina).

  • 2với câu trả lời 2 (Brain-Flak).

  • 3với câu trả lời 3 (APL).

  • 4với câu trả lời 4 , 1215 (Javascript).

  • 5với câu trả lời 68 (R).

  • 6với các câu trả lời 10 , 17 , 20 , 2225 (Bash).

  • 7với câu trả lời 1119 (Mathicala).

  • 8với câu trả lời 13 (Python).

  • 9với câu trả lời 16 (Perl).

  • 10với câu trả lời 18 , 2123 (C / C ++).

  • 11với câu trả lời 24 (Zsh).

  • 12 với câu trả lời này (> <>).

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

Giải trình:

Dòng đầu tiên chỉ đơn giản là câu trả lời # 5. Nó không làm gì ngoài việc gửi con trỏ lệnh đến dòng dưới cùng. /xoay cá phải, và các nhân vật ^mwfPes{'tcđược đặt trên chồng. Một ký tự đầu vào được đọc ( i). (Hãy gọi ký tự này Cđể giải thích.) 2 được đặt trong thanh ghi ( 2&). Sau đó, chúng tôi nhảy đến đầu của dòng thứ hai (dòng 1) ( 01.).

Dòng này so sánh Cvới từng nhân vật trên ngăn xếp. Một bản sao của Cđược giữ ở dưới cùng của ngăn xếp. {xoay ngăn xếp như vậy Clà trên đầu; :nhân đôi nó; }xoay bản sao trở lại dưới cùng. Chúng tôi tăng đăng ký ( &1+&) cho đến khi tìm thấy kết quả khớp. (Vì vậy, nếu Clà "c", thanh ghi giữ 3 khi tìm thấy kết quả khớp; nếu Clà "t", thanh ghi giữ 4, v.v.) Sau đó, chúng ta nhảy đến ký tự đầu tiên của số dòng trong thanh ghi ( 0&.) .

Các dòng từ 3 đến 13 giải quyết những việc cần làm khi lần lượt Clà c, t, ', {, v.v. Con trỏ lệnh di chuyển ngược khi chúng ta nhảy; nó rơi vào ký tự đầu tiên của dòng đã cho, nhưng sau khi nhảy, nó tiến lên một tích tắc trước khi thực hiện, vì vậy nó bắt đầu thực hiện từ cuối dòng đi lùi. Mỗi dòng đẩy số ngôn ngữ thích hợp trên ngăn xếp, sau đó gửi cá xuống nhướng dẫn, in ra.

^là trường hợp phức tạp nhất, bởi vì sự ngu ngốc của riêng tôi với dòng đầu tiên của câu trả lời này. Dòng 13 đọc đầu vào cho đến khi EOF. Sau đó, nó hướng xuống dòng 15, so sánh độ dài của ngăn xếp ( l) với 100 ( aa*). Nếu nó dài hơn ( )?), chúng tôi thêm + b1để có được 12, ngôn ngữ này; mặt khác, 1 vẫn ở trên cùng của ngăn xếp.



12

2. Brain-Flak , 22 byte

{<>(())(<>)}{}(<>{}())

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

Cái này kiểm tra đỉnh của ngăn xếp và đặt một cái vào ngăn xếp đối diện nếu nó khác không. Sau đó nó tăng và trả về ngăn xếp ngược lại. Điều này làm cho nó trả về 1 cho chương trình trống và 2 cho bất cứ điều gì khác.

Vì các ngăn xếp trong Brain-Flak mặc định là 0, một chương trình trống sẽ có số 0 trên đỉnh của ngăn xếp trong khi bất kỳ chương trình nào khác (ngoại trừ các chương trình kết thúc bằng ký tự null) sẽ có giá trị trung thực. Điều này có nghĩa là chúng ta có thể chạy một chương trình rất đơn giản nếu trên ngăn xếp đầu vào.

{      (<>)}{}              #If not zero
 <>(())                     #Push one to the other stack
              (<>{}())      #Switch to other stack and increment by one

Bạn có thể chỉnh sửa câu trả lời này? Tôi đã vô tình bình chọn nó :)
Conor O'Brien

9

3. APL, 7 byte

' {'⍳⊃⍞

Giải trình:

      ⍞  read from the keyboard
     ⊃   first item of list, or space if empty
' {'⍳    index into the string ' {', giving N+1 (=3) if not found

8

10. Bash (+ coreutils) [ngôn ngữ 6], 44, 74 byte

Phiên bản cố định (trả về id ngôn ngữ)

expr substr "1234151516" $(expr index "365f8dc0eb" `md5sum|cut -c12`) 1 #G

Lưu ý: điều này mong đợi dòng mới, sau văn bản chương trình đầu vào


7

9. Retina (ngôn ngữ 1), 20 byte

$|}\{|[:'][^]']|,\b1

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

Giống như plannapus, tôi đã quyết định viết lại để thay đổi mọi thứ một chút, điều này cuối cùng cũng rút ngắn mã đáng kể (một sửa đổi câu trả lời cuối cùng của tôi cho tài khoản mới nhất của plannapus đã kết thúc khoảng 32 byte, tôi nghĩ vậy).

Giải trình

Giống như các câu trả lời khác của tôi, điều này chỉ đếm số lượng các trận đấu regex khác nhau, nhưng đi về nó hiệu quả hơn nhiều:

  • $khớp với phần cuối của chuỗi. Điều này luôn hoạt động, ngay cả khi có một trận đấu đi đến hết chuỗi, vì vậy điều này cho chúng ta một đường cơ sở 1cho tất cả các đầu vào.
  • }\{tìm thấy một trận đấu duy nhất trong chương trình thứ hai (Brain-Flak), đưa số lượng lên đó 2. Dấu gạch chéo ngược không cần thiết để thoát nhưng nó ngăn phần này của biểu thức chính khớp với chính nó.
  • [:'][^]']là khá lạ mắt thực sự. Mục đích duy nhất là đếm hai 'trong chương trình APL (ngôn ngữ 3) và ba :trong chương trình JavaScript (ngôn ngữ 4), nhưng chúng ta cần ngăn phần này khớp với chính nó. Vì vậy, chúng tôi cũng đảm bảo rằng nhân vật tiếp theo không ', cũng không] (vì những không xuất hiện sau những cái chúng ta làm muốn để phù hợp, nhưng họ xuất hiện trong chương trình này tại đây).
  • Phần 'trước đã gây ra một trận đấu trong các chương trình R, vì vậy chúng tôi cần thêm ba phần nữa. Chuỗi con ,1xuất hiện trong cả hai lần và không có chương trình nào khác. Chúng tôi kết hợp nó bằng cách thêm một từ ngữ tautological ở giữa ,\b1để ngăn nó khớp lại.

Hừm, chỉ nhận ra rằng điều này không làm mất đi câu trả lời R, bởi vì 1đơn giản là đầu ra mặc định của chúng. Tôi sẽ phải làm một cái gì đó về điều đó với câu trả lời tiếp theo.
Martin Ender

7

18. C (ngôn ngữ 10), 121 byte

Đây là tiêu chuẩn C89 hoặc C90. Nó hoạt động với clang hoặc gcc trên Try It Online.

main(n){char*v=" ^{ s ePfwm",b[999],*c;gets(b);c=strchr(v,*b);n=strlen(b);printf("%d",n?c?c-v:n>99?4:n>60?5:n>15?1:3:1);}

Bản in này:

  • 1với các câu trả lời 1 , 5 , 7 , 914 (Retina).

  • 2với câu trả lời 2 (Brain-Flak).

  • 3với câu trả lời 3 (APL).

  • 4với câu trả lời 4 , 1215 (Javascript).

  • 5với câu trả lời 68 (R).

  • 6với câu trả lời 1017 (Bash).

  • 7với đáp án 11 (Mathicala).

  • 8với câu trả lời 13 (Python).

  • 9với câu trả lời 16 (Perl).

  • 10 với câu trả lời này (C).

Dưới đây là trình điều khiển bash chạy nó với tất cả 18 câu trả lời trên Dùng thử trực tuyến!

Tương đương Ungolfed (646 byte):

#include <string.h>
#include <stdio.h>
int main(){
    char *v=" ^{ s ePfwm", b[999];
    gets(b); /* buffer overrun if more than 998 characters in the input.
                could be a problem if we get to 191 answers */
    char *c = strchr(v, b[0]); /* Find first character of input in v, or null */
    int n = strlen(b);
    if (!n) {
        printf("1");
    } else if (c) {
        printf("%d", c-v); /* Index of first character of input in v */
    } else if (n > 99) {
        printf("4");
    } else if (n > 60) {
        printf("5");
    } else if (n > 15) {
        printf("1");
    } else {
        printf("3");
    }
    return 0;
}

6

5. Võng mạc (ngôn ngữ 1), 23 byte

^$|(?![⊂⍴])[⊂-⍴]|\B=|{}

Hãy thử trực tuyến! (Kiểm tra tất cả các đầu vào có thể.)

Đếm các trận đấu của những thứ khác nhau trong đầu vào:

  • ^$ khớp với chuỗi đầu vào, tức là câu trả lời đầu tiên một lần.
  • {} phù hợp với chính nó, có hai trong chương trình thứ hai, và một trong chương trình này.
  • (?![⊂⍴])[⊂-⍴]khớp các ký tự có mã điểm 8834 đến 9076, độc quyền , tìm thấy ba kết quả khớp trong chương trình thứ ba. Chúng tôi sử dụng giao diện tiêu cực để tránh kết thúc của phạm vi được khớp trong chương trình này.
  • \B=phù hợp với một =không được đi trước bởi một nhân vật từ. Chương trình này khớp với bốn =trong số chương trình thứ tư và không khớp với =chương trình này.


4

4, JavaScript (ES6), 32 byte

s=>s?s[0]==`{`?2:s[0]==`s`?4:3:1

Đầu ra 1 cho đầu vào trống, 2 nếu đầu vào bắt đầu bằng a {, 4 nếu đầu vào bằng một svà 3 nếu không ..


Bạn có thể thay thế s[0]=='{'bởis[0]>'z'

1
@Masterzagh Tôi cũng đã suy nghĩ về cách chơi golf này, nhưng than ôi, đây không phải là môn đánh gôn: /
Kritixi Lithos

@KritixiLithos Vâng, nhưng anh ấy đã chơi golf rồi nên tôi nghĩ anh ấy sẽ muốn đi xa hơn.

@Masterzagh Mọi người nên tránh chỉnh sửa các câu trả lời hợp lệ trong các thử thách như thế này vì họ có thể làm mất hiệu lực a) các câu trả lời sau, b) các câu trả lời hiện đang được thực hiện.
Martin Ender

@MartinEnder, bạn nói đúng. Vì vậy, tôi sẽ không chỉnh sửa nó. Tôi biết rằng nó trông như bị đánh gôn (vì các nhà khai thác ternary), nhưng tôi đã không viết nó như thế trên mục đích ... Tuy nhiên, cảm ơn vì tất cả các phản hồi!
Lu-ca

4

11. Mathicala [ngôn ngữ 7], 53 byte

Position[Characters@"^{'sceP",#&@@#][[1,1]]/._@__->1&

Hàm không tên lấy danh sách các ký tự làm đối số của nó và xuất ra một số nguyên dương. Đơn giản chỉ cần phân nhánh trên chữ cái đầu tiên của đầu vào, sử dụng vị trí của nó trong chuỗi "^{'sceP"để quyết định đầu ra. Điều này đưa ra câu trả lời đúng cho tất cả các lần gửi trước ngoại trừ chương trình Retina trống ban đầucâu trả lời Retina gần đây nhất ; cả hai lỗi nhổ này, nhưng đầu ra được sửa chữa theo quy tắc /._@__->1biến đổi bất kỳ hàm không định giá nào thành 1.


Tôi nghĩ rằng đã đến lúc phải làm rối tung chiến lược của nhân vật đầu tiên đó :)
Martin Ender

1
Tôi đã định, nhưng sau đó tôi nhớ rằng tôi cũng phải xuất ra chính xác ngôn ngữ của mình: D
Greg Martin

4

16. Perl (ngôn ngữ 9), 94 byte

while(<>){print substr("1234151516748149",index("0F=POmS6D4e_XWVH",chr(47+length($_)%70)),1);}

Hãy thử trực tuyến!(kiểm tra tất cả các câu trả lời). Đầu ra "1234151516748149"

Bản in này:

  • 1 với câu trả lời 1, 5, 7, 9 và 14 (Retina).
  • 2 với câu trả lời 2 (Brain-Flak).
  • 3 với câu trả lời 3 (APL).
  • 4 với câu trả lời 4, 12 và 15 (Javascript).
  • 5 với câu trả lời 6 và 8 (R).
  • 6 với câu trả lời 10 (Bash).
  • 7 với đáp án 11 (Mathicala).
  • 8 với câu trả lời 13 (Python).
  • 9 với câu trả lời này (Perl).

Chương trình kiểm tra độ dài đầu vào và ánh xạ nó tới phân phối ngôn ngữ hiện tại.


3

6. R (ngôn ngữ 5), 61 byte

cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))

Kiểm tra ký tự đầu tiên của đầu vào là gì và chọn đầu ra tương ứng.

Điều này do đó in:

  • 1với câu trả lời 15 (Retina).

  • 2với câu trả lời 2 (Brain-Flak).

  • 3với câu trả lời 3 (APL).

  • 4với câu trả lời 4 (Javascript).

  • 5với câu trả lời này.

Sử dụng:

> cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))

1
> cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
{<>(())(<>)}{}(<>{}())
2
> cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
' {'⍳⊃⍞
3
> cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
s=>s?s[0]==`{`?2:s[0]==`s`?4:3:1
4
> cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
^$|(?![⊂⍴])[⊂-⍴]|\B=|{}
1
> cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
5

Để chạy cái này bên ngoài REPL, hãy xem bình luận dưới câu trả lời 8.
plannapus

3

8. R (ngôn ngữ 5), 76 byte

c=which(c("","{","'","s","c")==substr(readline(),1,1));ifelse(length(c),c,1)

Kiểm tra chữ cái đầu tiên của đầu vào, và so sánh nó với một vector chứa (theo thứ tự đó) chuỗi rỗng, {, ', sc. Sau đó, nó đưa ra chỉ mục của trận đấu (lập chỉ mục R là dựa trên 1) hoặc 1 nếu không có kết quả khớp.

Khái niệm tương tự như câu trả lời n ° 6 nhưng ngăn câu trả lời n ° 7 khớp với nó.

Bản in này:

  • 1với câu trả lời 1 , 57 (Retina).

  • 2với câu trả lời 2 (Brain-Flak).

  • 3với câu trả lời 3 (APL).

  • 4với câu trả lời 4 (Javascript).

  • 5với câu trả lời 6 và câu trả lời này (R).

Nếu tôi không nhầm, trợ cấp đếm byte cho câu trả lời này là 94 byte.


Thông dịch viên trực tuyến FYI R (rfiddle, ideone và tryitonline) dường như có vấn đề xử lý stdin (ít nhất là với readline ()) và do đó sẽ không hành xử đúng. Nếu bạn muốn thử điều này (và câu trả lời trước đó), bạn sẽ phải thử cục bộ trên phiên bản R đã cài đặt, tôi sợ.
plannapus

^ Ok, bên ngoài REPL readlinenên được thay thế bằng readLines(file("stdin")). Có nghĩa là thêm 16 ký tự: do đó, câu trả lời 6 phải là 77 byte (trong số 79 được cho phép) và câu trả lời này là 92 byte (trong số 94 được cho phép). Với sự thay đổi này, nó cũng hoạt động trên các thông dịch viên trực tuyến.
plannapus

3

12. Javascript (ngôn ngữ 4), 117 byte

Lưu ý: Tôi đã thay đổi một ký tự để sửa lỗi trong lỗi này.

c=>c?c[0]=='e'?6:c[0]=='$'||c[0]=='^'?1:c[0]=='c'&&c.length>80?4:c[0]=='P'?7:c[0]=='c'?5:c[0]=='{'?2:c[0]=='s'?4:3:1;

Kiểm tra chữ cái đầu tiên của đầu vào, nếu là c, kiểm tra độ dài của đầu vào.

Đầu ra:

  • 1 cho câu trả lời 1, 5, 7, 9
  • 2 cho câu trả lời 2
  • 3 cho câu trả lời 3
  • 4 cho câu trả lời 4 và câu trả lời này
  • 5 cho câu trả lời 6, 8
  • 6 cho câu trả lời 10
  • 7 cho câu trả lời 11

3

13. Python (ngôn ngữ 8), 110 byte

Lưu ý: Câu trả lời này đã được thay đổi 6 giờ sau khi đăng, theo khuyến nghị của OP.

from hashlib import*;print("1234151516748"["a5e1f936cd78b".index(sha256(input().encode()).hexdigest()[34])])#N

Đây là ý tưởng tương tự như câu trả lời 10 (trong bash), nhưng trong Python 3. (Cách tiếp cận này có thể hoạt động cho tối đa 3 mục nữa trước khi chúng tôi hết chữ số hex.)

Bản in này:

  • 1với câu trả lời 1 , 5 , 79 (Retina).

  • 2với câu trả lời 2 (Brain-Flak).

  • 3với câu trả lời 3 (APL).

  • 4với câu trả lời 412 (Javascript).

  • 5với câu trả lời 68 (R).

  • 6với câu trả lời 10 (Bash).

  • 7với đáp án 11 (Mathicala).

  • 8 cho câu trả lời này (Python).

Hãy thử trực tuyến! cho: Trả lời 1 , Trả lời 2 , Trả lời 3 , Trả lời 4 , Trả lời 5 , Trả lời 6 , Trả lời 7 , Trả lời 8 , Trả lời 9 , Trả lời 10 , Trả lời 11 , Trả lời 12 hoặc trả lời này .


Giới hạn byte hiện tại là gì?
Vi.

@Vi.: Chà, nó là 149 cho câu trả lời 13 và 163 cho câu trả lời 14; nhưng OP chỉ thay đổi quy tắc đếm byte thành 45 + 5n, do đó sẽ là 110 byte cho câu trả lời 13 và 115 byte cho câu trả lời 14.
Nick Matteo

Bạn có lẽ nên đặt giải pháp 110 byte lên.
clismique

@ Qwerp-Derp: Được rồi. Hy vọng rằng sẽ không phá vỡ công việc đang diễn ra của bất cứ ai.
Nick Matteo

OK, chờ khoảng 60 câu trả lời cho đến khi giới hạn byte đến vùng đất thân thiện với Java.
Vi.

3

24. Zsh (ngôn ngữ 11), 142 byte

Câu trả lời trước của tôi # 18 trong C vẫn hoạt động không thay đổi cho tất cả các mục tiếp theo ( bản demo ). Vì vậy, hãy trộn nó lên một chút.

typeset -A p
p=("[\$^]*|'\[*" 1 '{*' 2 "' *" 3 '?=>*' 4 'c?[wt]*' 5 'e*' 6 'P*' 7 'f*' 8 'w*' 9 'm*' 10 'ty*' 11)
echo ${p[(k)$1]:-1} #@<`w&X{

Mục đích của nhận xét ở cuối là khớp với độ dài của câu trả lời 21 và 23 và đảm bảo rằng không có ký tự nào của băm sha256 hoặc sha384 là duy nhất cho mỗi câu trả lời, sử dụng các ký tự được kiểm tra bởi câu trả lời C ++ của Lyth. ;-)

Bản in này:

  • 1với các câu trả lời 1 , 5 , 7 , 914 (Retina).

  • 2với câu trả lời 2 (Brain-Flak).

  • 3với câu trả lời 3 (APL).

  • 4với câu trả lời 4 , 1215 (Javascript).

  • 5với câu trả lời 68 (R).

  • 6với câu trả lời 10 , 17 , 20 , và 22 (Bash).

  • 7với câu trả lời 1119 (Mathicala).

  • 8với câu trả lời 13 (Python).

  • 9với câu trả lời 16 (Perl).

  • 10với câu trả lời 18 , 2123 (C / C ++).

  • 11 với câu trả lời này (Zsh).

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


Tôi nghĩ rằng đây là câu trả lời đầu tiên được đa tuyến ... +1 từ tôi.
clismique

2

14. Võng mạc (ngôn ngữ 1), 39 byte

'[ ⍳]|}\{|[o@:][^]'c@:]|^c|,\b1|1\d|$

Hãy thử trực tuyến! (Kiểm tra tất cả các đầu vào hợp lệ.)


1
Thôi nào Martin, đăng bằng một ngôn ngữ khác ... ngoài ra, bạn có thể làm điều định dạng câu trả lời không?
clismique

3
@ Qwerp-Derp Điều này thực sự biến thành một biến thể thú vị trên sân golf regex tiêu chuẩn. Thay vì có một bộ đầu vào và phải khớp một số trong số chúng và thất bại một số đầu vào khác, ở đây bạn phải có một số lượng khớp cụ thể trên mỗi đầu vào. Tôi tự hỏi liệu regex này sẽ nổ tung theo cấp số nhân tại một số điểm.
Martin Ender

Có thực sự 39 byte? TIO báo cáo 37 byte.
Arnauld

1
@Arnauld TIO được mã hóa cứng để chỉ đếm các ký tự cho Retina vì bạn thường sử dụng mã hóa byte đơn. Câu trả lời này yêu cầu UTF-8 mặc dù.
Martin Ender

2

15. Javascript (ngôn ngữ 4), 108 byte

Chơi gôn

t=>({24:2,86:3,5:4,73:5,68:5,74:7,4:6,79:4,1:8,67:4})[[...t].reduce((r,c,i)=>r*i^c.charCodeAt(0),0)&0x5F]||1

2

17. Bash (+ coreutils + openssl) (ngôn ngữ 6), 103 byte

Chơi gôn

expr substr 69418476151514321 $(expr index 2PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1 #x

Sử dụng kỹ thuật tương tự như câu trả lời số 10 của tôi , nhưng với từ điển được mã hóa Base64 , thay vì Hex .

Tôi đã tập hợp các tệp dữ liệu sau đây để thử nghiệm:

6 17 expr substr 69418476151514321 $(expr index 2PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1 #x
9 16 while(<>){print substr("1234151516748149",index("0F=POmS6D4e_XWVH",chr(47+length($_)%70)),1);}
4 15 t=>({24:2,86:3,5:4,73:5,68:5,74:7,4:6,79:4,1:8,67:4})[[...t].reduce((r,c,i)=>r*i^c.charCodeAt(0),0)&0x5F]||1
1 14 '[ ⍳]|}\{|[o@:][^]'c@:]|^c|,\b1|1\d|$
8 13 from hashlib import*;print("1234151516748"["a5e1f936cd78b".index(sha256(input().encode()).hexdigest()[34])])#N
4 12 c=>c?c[0]=='e'?6:c[0]=='$'||c[0]=='^'?1:c[0]=='c'&&c.length>80?4:c[0]=='P'?7:c[0]=='c'?5:c[0]=='{'?2:c[0]=='s'?4:3:1;
7 11 Position[Characters@"^{'sceP",#&@@#][[1,1]]/._@__->1&
6 10 expr substr "1234151516" $(expr index "365f8dc0eb" `md5sum|cut -c12`) 1 #G
1 09 $|}\{|[:'][^]']|,\b1
5 08 c=which(c("","{","'","s","c")==substr(readline(),1,1));ifelse(length(c),c,1)
1 07 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}|\b5
5 06 cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
1 05 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}
4 04 s=>s?s[0]==`{`?2:s[0]==`s`?4:3:1
3 03 ' {'⍳⊃⍞
2 02 {<>(())(<>)}{}(<>{}())
1 01

Kiểm tra

for i in `seq 17`
do
  echo -n `cat lchain|sed -n $i'{p;q}'|cut -c1`=\>
  cat lchain|sed -n $i'{p;q}'|cut -c6-|\
  expr substr 69418476151514321 $(expr index 2PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1 #x
done

6=>6
9=>9
4=>4
1=>1
8=>8
4=>4
7=>7
6=>6
1=>1
5=>5
1=>1
5=>5
1=>1
4=>4
3=>3
2=>2
1=>1

2

19. Mathicala (ngôn ngữ 7), 96 byte

Position[ToCharacterCode@StringSplit@";NRU$ Q B [1: =L J, 5% 3 # >",Mod[Length@#,59,33]][[1,1]]&

Hàm không tên lấy danh sách các ký tự làm đầu vào và trả về một số nguyên:

  • 1với các câu trả lời 1 , 5 , 7 , 914 (Retina).

  • 2với câu trả lời 2 (Brain-Flak).

  • 3với câu trả lời 3 (APL).

  • 4với câu trả lời 4 , 1215 (Javascript).

  • 5với câu trả lời 68 (R).

  • 6với câu trả lời 1017 (Bash).

  • 7với câu trả lời 11 và câu trả lời này (Mathicala).

  • 8với câu trả lời 13 (Python).

  • 9với câu trả lời 16 (Perl).

  • 10với câu trả lời 18 (C).

Cho đến nay, tất cả độ dài của các câu trả lời đều khác nhau và do đó, chúng thậm chí có thể được phát hiện theo modulo 59 khác biệt bởi số nguyên trong phạm vi 33, 34, ..., 91 chúng phù hợp với (mod 59). Đây là tất cả các ký tự ASCII có thể in, được mã hóa bởi chuỗi ";NRU$ Q B [1: =L J, 5% 3 # >"; bằng cách sử dụng ToCharacterCode@StringSplit@biến chuỗi này thành một danh sách mười danh sách số nguyên trong phạm vi đó và Position[...,Mod[Length@#,59,33]][[1,1]]tìm ra danh sách nào trong mười danh sách con phù hợp với độ dài đã sửa đổi của đầu vào.


1

20. Bash (+ coreutils + openssl) (ngôn ngữ 6), 121 byte

Chơi gôn

expr substr 67A69418476151514321 $(expr index 7042PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1| dc -e16i?p #u

Phương pháp tương tự như câu trả lời số 17 của tôi (lần lượt dựa trên câu trả lời ban đầu của tôi # 10 ).

Hiện tại chúng tôi có 10 ngôn ngữ riêng biệt, tôi đã chuyển sang mã hóa vị trí thập lục phân.

Dữ liệu

6 20 expr substr 67A69418476151514321 $(expr index 7042PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1| dc -e16i?p #u
7 19 Position[ToCharacterCode@StringSplit@";NRU$ Q B [1: =L J, 5% 3 # >",Mod[Length@#,59,33]][[1,1]]&
A 18 main(n){char*v=" ^{ s ePfwm",b[999],*c;gets(b);c=strchr(v,*b);n=strlen(b);printf("%d",n?c?c-v:n>99?4:n>60?5:n>15?1:3:1);}
6 17 expr substr 69418476151514321 $(expr index 2PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1 #x
9 16 while(<>){print substr("1234151516748149",index("0F=POmS6D4e_XWVH",chr(47+length($_)%70)),1);}
4 15 t=>({24:2,86:3,5:4,73:5,68:5,74:7,4:6,79:4,1:8,67:4})[[...t].reduce((r,c,i)=>r*i^c.charCodeAt(0),0)&0x5F]||1
1 14 '[ ⍳]|}\{|[o@:][^]'c@:]|^c|,\b1|1\d|$
8 13 from hashlib import*;print("1234151516748"["a5e1f936cd78b".index(sha256(input().encode()).hexdigest()[34])])#N
4 12 c=>c?c[0]=='e'?6:c[0]=='$'||c[0]=='^'?1:c[0]=='c'&&c.length>80?4:c[0]=='P'?7:c[0]=='c'?5:c[0]=='{'?2:c[0]=='s'?4:3:1;
7 11 Position[Characters@"^{'sceP",#&@@#][[1,1]]/._@__->1&
6 10 expr substr "1234151516" $(expr index "365f8dc0eb" `md5sum|cut -c12`) 1 #G
1 09 $|}\{|[:'][^]']|,\b1
5 08 c=which(c("","{","'","s","c")==substr(readline(),1,1));ifelse(length(c),c,1)
1 07 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}|\b5
5 06 cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
1 05 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}
4 04 s=>s?s[0]==`{`?2:s[0]==`s`?4:3:1
3 03 ' {'⍳⊃⍞
2 02 {<>(())(<>)}{}(<>{}())
1 01

Kiểm tra (đầu ra)

./test
6=>6
7=>7
A=>10
6=>6
9=>9
4=>4
1=>1
8=>8
4=>4
7=>7
6=>6
1=>1
5=>5
1=>1
5=>5
1=>1
4=>4
3=>3
2=>2

1

23. C (gcc) (ngôn ngữ 10), 142 byte

main(c){int d[256]={0};while((c=getchar())!=EOF)d[c]++;printf("%d",d[88]?9:d[119]?5*d[123]:d[35]?d[38]?7:8-d[96]:d[48]?4:d[60]?2:1+d[158]*2);}

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

  • 1với các câu trả lời 1 , 5 , 7 , 914 (Retina).

  • 2với câu trả lời 2 (Brain-Flak).

  • 3với câu trả lời 3 (APL).

  • 4với câu trả lời 4 , 1215 (Javascript).

  • 5với câu trả lời 68 (R).

  • 6với các câu trả lời 10 , 17 , 2022 (Bash).

  • 7với câu trả lời 1119 (Mathicala).

  • 8với câu trả lời 13 (Python).

  • 9với câu trả lời 16 (Perl).

  • 10với câu trả lời 18 , 21 và câu trả lời này (C).

Chương trình này đếm số lượng ký tự khác nhau (trong ASCII, do đó, các ký tự UTF-8 nhiều byte được chia thành nhiều mục) và sau đó theo cây quyết định được thiết kế cẩn thận, dựa trên số lần xuất hiện của ký tự này hoặc ký tự đó.

Cây quyết định không thay đổi từ # 21 (yay!). Tôi không được phép đăng chính xác cùng một mã, vì vậy chúng tôi trở lại thuần C với các sửa đổi nhỏ.


0

21. C ++ (gcc) (ngôn ngữ 10 là biến thể của C), 142 byte

main(){int K,d[256]{0};while((K=getchar())!=EOF)d[K]++;printf("%d",d[88]?9:d[119]?5*d[123]:d[35]?d[38]?7:8-d[96]:d[48]?4:d[60]?2:1+d[158]*2);}

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

  • 1với các câu trả lời 1 , 5 , 7 , 914 (Retina).

  • 2với câu trả lời 2 (Brain-Flak).

  • 3với câu trả lời 3 (APL).

  • 4với câu trả lời 4 , 1215 (Javascript).

  • 5với câu trả lời 68 (R).

  • 6với câu trả lời 10 , 1720 (Bash).

  • 7với câu trả lời 1119 (Mathicala).

  • 8với câu trả lời 13 (Python).

  • 9với câu trả lời 16 (Perl).

  • 10với câu trả lời 18 và câu trả lời này (C).

Chương trình này đếm số lượng ký tự khác nhau (trong ASCII, do đó, các ký tự UTF-8 nhiều byte được chia thành nhiều mục) và sau đó theo cây quyết định được thiết kế cẩn thận, dựa trên số lần xuất hiện của ký tự này hoặc ký tự đó.

Thông tin bên lề : chữ K không được sử dụng cho đến mục này. Chữ I, E, Y, j, k, q, z vẫn chưa được sử dụng.


Có một tùy chọn để xem xét ngôn ngữ C ++ 11, một vài byte còn lại để phù hợp với ngôn ngữ đó.
Lyth

0

22. Bash (+ coreutils) [ngôn ngữ 6], 123, 131 byte

EDIT: Ban đầu đã xuất bản một phiên bản sai, nên được sửa ngay bây giờ.

Chơi gôn

expr substr 6A67A69418476151514321 $(expr index i3xFepQsAalyIvtqPY7ZN+ \\`openssl sha256 -binary|base64|cut -c10`) 1| dc -e16i?p #L

Kỹ thuật tương tự như câu trả lời của tôi # 20, # 17 và # 10 .

Dữ liệu

6 22 expr substr 6A67A69418476151514321 $(expr index i3xFepQsAalyIvtqPY7ZN+ \\`openssl sha256 -binary|base64|cut -c10`) 1| dc -e16i?p #L
A 21 main(){int K,d[256]{0};while((K=getchar())!=EOF)d[K]++;printf("%d",d[88]?9:d[119]?5*d[123]:d[35]?d[38]?7:8-d[96]:d[48]?4:d[60]?2:1+d[158]*2);}
6 20 expr substr 67A69418476151514321 $(expr index 7042PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1| dc -e16i?p #u
7 19 Position[ToCharacterCode@StringSplit@";NRU$ Q B [1: =L J, 5% 3 # >",Mod[Length@#,59,33]][[1,1]]&
A 18 main(n){char*v=" ^{ s ePfwm",b[999],*c;gets(b);c=strchr(v,*b);n=strlen(b);printf("%d",n?c?c-v:n>99?4:n>60?5:n>15?1:3:1);}
6 17 expr substr 69418476151514321 $(expr index 2PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1 #x
9 16 while(<>){print substr("1234151516748149",index("0F=POmS6D4e_XWVH",chr(47+length($_)%70)),1);}
4 15 t=>({24:2,86:3,5:4,73:5,68:5,74:7,4:6,79:4,1:8,67:4})[[...t].reduce((r,c,i)=>r*i^c.charCodeAt(0),0)&0x5F]||1
1 14 '[ ⍳]|}\{|[o@:][^]'c@:]|^c|,\b1|1\d|$
8 13 from hashlib import*;print("1234151516748"["a5e1f936cd78b".index(sha256(input().encode()).hexdigest()[34])])#N
4 12 c=>c?c[0]=='e'?6:c[0]=='$'||c[0]=='^'?1:c[0]=='c'&&c.length>80?4:c[0]=='P'?7:c[0]=='c'?5:c[0]=='{'?2:c[0]=='s'?4:3:1;
7 11 Position[Characters@"^{'sceP",#&@@#][[1,1]]/._@__->1&
6 10 expr substr "1234151516" $(expr index "365f8dc0eb" `md5sum|cut -c12`) 1 #G
1 09 $|}\{|[:'][^]']|,\b1
5 08 c=which(c("","{","'","s","c")==substr(readline(),1,1));ifelse(length(c),c,1)
1 07 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}|\b5
5 06 cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
1 05 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}
4 04 s=>s?s[0]==`{`?2:s[0]==`s`?4:3:1
3 03 ' {'⍳⊃⍞
2 02 {<>(())(<>)}{}(<>{}())
1 01

Chạy thử nghiệm

./test
6=>6
A=>10
6=>6
7=>7
A=>10
6=>6
9=>9
4=>4
1=>1
8=>8
4=>4
7=>7
6=>6
1=>1
5=>5
1=>1
5=>5
1=>1
4=>4
3=>3
2=>2
1=>1

Là gì 44?
clismique

22 * 2? 󠀠󠀠󠀠󠀠󠀠
Vi.

@ Qwerp-Derp, chỉ là một lỗi đánh máy
zeppelin

Thôi nào, câu trả lời của bạn đang trở nên nhàm chán - nếu câu trả lời tiếp theo của bạn là như thế này, tôi đang xem xét việc hạ cấp (nó không thú vị, bạn biết không?)
clismique

1
Có vài điều sai sót ở đây. Chỉ có 20 mục trong các chữ cái băm của bạn (3PgT, v.v.). Đối với đầu vào trống, tôi gặp lỗi và đối với câu trả lời số 2, tôi nhận được "4" (cả hai đều hoạt động chính xác với câu trả lời 20.)
Nick Matteo

0

25. Bash (ngôn ngữ 6), 169 byte

Kỹ thuật tương tự như câu trả lời của tôi # 22, # 20, # 17 và # 10 .

Xin lỗi @ Qwerp-Derp! ;) Tôi hứa đây là cái cuối cùng :)

Chơi gôn

{ echo -n 'addsomesalt?';cat; }|expr substr 6BA6A67A69418476151514321 $(expr index 1W0TC4YrKwRGAJupDqn7Xlcog \\`openssl sha256 -binary|base64|cut -c40`) 1| dc -e16i?p #8

Dữ liệu

Lưu ý rằng các dòng mới được mã hóa dưới dạng \ n cho câu trả lời # 24

6 25 { echo -n 'addsomesalt?';cat; }|expr substr 6BA6A67A69418476151514321 $(expr index 1W0TC4YrKwRGAJupDqn7Xlcog \\`openssl sha256 -binary|base64|cut -c40`) 1| dc -e16i?p #8
B 24 typeset -A p\np=("[\$^]*|'\[*" 1 '{*' 2 "' *" 3 '?=>*' 4 'c?[wt]*' 5 'e*' 6 'P*' 7 'f*' 8 'w*' 9 'm*' 10 'ty*' 11)\necho ${p[(k)$1]:-1} #@<`w&X{
A 23 main(c){int d[256]={0};while((c=getchar())!=EOF)d[c]++;printf("%d",d[88]?9:d[119]?5*d[123]:d[35]?d[38]?7:8-d[96]:d[48]?4:d[60]?2:1+d[158]*2);}
6 22 expr substr 6A67A69418476151514321 $(expr index i3xFepQsAalyIvtqPY7ZN+ \\`openssl sha256 -binary|base64|cut -c10`) 1| dc -e16i?p #L
A 21 main(){int K,d[256]{0};while((K=getchar())!=EOF)d[K]++;printf("%d",d[88]?9:d[119]?5*d[123]:d[35]?d[38]?7:8-d[96]:d[48]?4:d[60]?2:1+d[158]*2);}
6 20 expr substr 67A69418476151514321 $(expr index 7042PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1| dc -e16i?p #u
7 19 Position[ToCharacterCode@StringSplit@";NRU$ Q B [1: =L J, 5% 3 # >",Mod[Length@#,59,33]][[1,1]]&
A 18 main(n){char*v=" ^{ s ePfwm",b[999],*c;gets(b);c=strchr(v,*b);n=strlen(b);printf("%d",n?c?c-v:n>99?4:n>60?5:n>15?1:3:1);}
6 17 expr substr 69418476151514321 $(expr index 2PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1 #x
9 16 while(<>){print substr("1234151516748149",index("0F=POmS6D4e_XWVH",chr(47+length($_)%70)),1);}
4 15 t=>({24:2,86:3,5:4,73:5,68:5,74:7,4:6,79:4,1:8,67:4})[[...t].reduce((r,c,i)=>r*i^c.charCodeAt(0),0)&0x5F]||1
1 14 '[ ⍳]|}\{|[o@:][^]'c@:]|^c|,\b1|1\d|$
8 13 from hashlib import*;print("1234151516748"["a5e1f936cd78b".index(sha256(input().encode()).hexdigest()[34])])#N
4 12 c=>c?c[0]=='e'?6:c[0]=='$'||c[0]=='^'?1:c[0]=='c'&&c.length>80?4:c[0]=='P'?7:c[0]=='c'?5:c[0]=='{'?2:c[0]=='s'?4:3:1;
7 11 Position[Characters@"^{'sceP",#&@@#][[1,1]]/._@__->1&
6 10 expr substr "1234151516" $(expr index "365f8dc0eb" `md5sum|cut -c12`) 1 #G
1 09 $|}\{|[:'][^]']|,\b1
5 08 c=which(c("","{","'","s","c")==substr(readline(),1,1));ifelse(length(c),c,1)
1 07 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}|\b5
5 06 cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
1 05 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}
4 04 s=>s?s[0]==`{`?2:s[0]==`s`?4:3:1
3 03 ' {'⍳⊃⍞
2 02 {<>(())(<>)}{}(<>{}())
1 01

Đầu ra thử nghiệm

6=>6
B=>11
A=>10
6=>6
A=>10
6=>6
7=>7
A=>10
6=>6
9=>9
4=>4
1=>1
8=>8
4=>4
7=>7
6=>6
1=>1
5=>5
1=>1
5=>5
1=>1
4=>4
3=>3
2=>2
1=>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.