Một bệnh lý tối nghĩa


11

Bạn nên hoàn thành bốn nhiệm vụ bằng một ngôn ngữ:

  • phải trả về không có kết quả * khi tìm kiếm trên trang web (codegolf.se) này, ví dụ ToffeeScript ;
  • phải có một trang được liệt kê tại Esolang , Rosetta Code hoặc Wikipedia ;
  • là một ngôn ngữ riêng biệt, thay vì một phiên bản riêng biệt (ví dụ: python 2.1 sẽ là hợp lệ iff python thỏa mãn hai tiêu chí đầu tiên).

* Ngoại lệ là hit này cho ToffeeScript.

Bốn nhiệm vụ bạn nên hoàn thành là:

1) Viết mô tả / quảng cáo có thể tweet (<140 ký tự) của ngôn ngữ bạn đã chọn.

2) In "Xin chào thế giới! Điều này được viết bằng <programming language name>."

3) In tất cả các số lẻ trong một phạm vi người dùng chỉ định. (ví dụ một stdin của 20 25nên trở lại 21 23 25).

4) Viết một chương trình mà bạn cảm thấy rõ nhất thể hiện một tính năng thú vị của ngôn ngữ bạn đã chọn.

Ghi điểm:

  • Đây là một cuộc thi nổi tiếng
  • Tiền thưởng 10 điểm nếu được liệt kê trong hai trong số các thư mục trên, 25 nếu trong cả ba.
  • Điểm số là tổng số phiếu nhận được vào nửa đêm UTC vào ngày 1 tháng 7 năm 2015, cộng với tiền thưởng.

Làm rõ:

  • Nhiệm vụ 1) có thể là một chương trình tweet nhưng văn bản đơn giản cũng được chấp nhận.
  • Nhiều ngôn ngữ không có trình thông dịch hiện có; giải pháp cho những điều này là tốt, nhưng sẽ được thực hiện trong đức tin tốt.
  • Tiêu chí thứ hai cho sự lựa chọn ngôn ngữ cấm các trang có ngày tạo sau bài đăng này. Nếu, đối với một ngôn ngữ nhất định, X, một giải pháp cho một vấn đề tồn tại trên Rosetta Code nhưng nó không có một trang riêng biệt ở đâu đó, thì nó vẫn được chấp nhận.

4
bạn đang nói chuyện với các lập trình viên, bạn không cần phải nói and/or;)
ngầm cá nhân

2
Các trò chơi phải trả lại không có kết quả. Ví dụ, có một kết quả cho dịch vụ mond , nhưng chắc chắn không phải là Mond như trong câu trả lời. Liệu nó được tính là kết quả?
manatwork

2
Có lẽ bạn nên nói rằng các trang trên Esolang, Rosetta Code hoặc Wikipedia phải tồn tại trước thử thách này.
Martin Ender

1
Bạn có thể làm rõ liệu nhiệm vụ 1 yêu cầu chương trình 140 ký tự xuất ra mô tả hay chỉ mô tả 140 ký tự (không phải là chương trình)?
trichoplax

1
Tôi đã làm rõ những điểm nêu ra ở đây (ít nhất là tôi hy vọng tôi có!) Ở trên
Kieran Hunt

Câu trả lời:


6

BlooP

Tiền thưởng: 10

Có những trang dành cho BlooP trên EsolangWikipedia . Một tìm kiếm PPCG cho BlooP không trả lại kết quả. Nếu bạn đang cảm thấy đặc biệt là điên rồ, bạn có thể thử nó ra trên repl.it .


Nhiệm vụ 1: Tweet

BlooP: Không có gì ngoài các vòng lặp giới hạn. ;) #programming #goodtimes

Điều này sử dụng kiểu dáng Twitter tiêu chuẩn bao gồm hashtags và biểu tượng cảm xúc. Điều này sẽ hấp dẫn bất kỳ người dùng Twitter nào. *


Nhiệm vụ 2: Thế giới xin chào

DEFINE PROCEDURE ''GREETING'' [N]:
BLOCK 0: BEGIN
  PRINT['Hello World! This is written in BlooP.']
BLOCK 0: END.

GREETING[0];

Như bạn có thể thấy, đây là một ngôn ngữ chơi gôn chính. *


Nhiệm vụ 3: Số lẻ

DEFINE PROCEDURE ''IS-ODD'' [N]:
BLOCK 0: BEGIN
  OUTPUT <= 0;
  CELL(0) <= 2;
  LOOP AT MOST N+1 TIMES:
  BLOCK 1: BEGIN
    IF N+1 = CELL(0), THEN:
    BLOCK 2: BEGIN
      OUTPUT <= 1;
      ABORT LOOP 1;
    BLOCK 2: END;
    CELL(0) <= CELL(0) + 2
  BLOCK 1: END;
BLOCK 0: END.

DEFINE PROCEDURE ''ODDS-IN-RANGE'' [A,B]:
BLOCK 0: BEGIN
  CELL(0) = A;
  LOOP AT MOST B TIMES:
  BLOCK 1: BEGIN
    IF CELL(0) > B, THEN:
    ABORT LOOP 1;
    IF IS-ODD[CELL(0)] = 1, THEN:
    PRINT[CELL(0)];
    CELL(0) <= CELL(0) + 1;
  BLOCK 1: END;
BLOCK 0: END.

ODDS-IN-RANGE[20,25];

Các toán tử khả dụng duy nhất trong BlooP là gán ( <=), cộng, nhân, lớn hơn, nhỏ hơn và bằng. Do cú pháp dài dòng của nó, thật dễ dàng để nói những gì đang diễn ra ngay cả khi không hiểu sâu về ngôn ngữ.


Nhiệm vụ 4: Thú vị

Lưu ý: Đoạn trích của tôi cho nhiệm vụ này có thể thay đổi nếu tôi nghĩ ra điều gì đó thú vị hơn.

DEFINE PROCEDURE ''MINUS'' [M,N]:
BLOCK 0: BEGIN
  IF M < N, THEN:
  QUIT BLOCK 0;
  LOOP AT MOST M + 1 TIMES:
  BLOCK 1: BEGIN
    IF OUTPUT + N = M, THEN:
    ABORT LOOP 1;
    OUTPUT <= OUTPUT + 1;
  BLOCK 1: END;
BLOCK 0: END.

DEFINE PROCEDURE ''FIB''[N]:
BLOCK 0: BEGIN
  IF N < 1, THEN:
  QUIT BLOCK 0;
  OUTPUT <= 1;
  IF N < 3, THEN:
  QUIT BLOCK 0;
  OUTPUT <= FIB[MINUS[N,1]] + FIB[MINUS[N,2]];
BLOCK 0: END.

FIB[10];

Kìa, các số Fibonacci.


* Có thể không đúng


5

Thứ hai *

  • * Tìm kiếm 'Mond' cho một kết quả (câu trả lời này mặc dù), nhưng đó là một kết quả dương tính giả và không thực sự đề cập đến ngôn ngữ.
  • Trang mã Rosetta . Điều này thực sự được tạo ra sau khi thử thách được đăng, tuy nhiên một giải pháp cho nhiệm vụ QuickSort đã tồn tại từ tháng 9 năm 2014.
  • Mặc dù mond trông rất giống với JavaScript (thực sự, việc viết các đa giác Mond / JS khá dễ dàng), nó không phải là một tập hợp con, siêu bộ hoặc triển khai lại. Đó là ngôn ngữ riêng biệt của nó.

Hãy thử nó trong trình duyệt của bạn

Công bố đầy đủ : Tôi tham gia vào quá trình phát triển và thiết kế của Mond ở một mức độ nào đó và đã trực tiếp thực hiện một số tính năng ngôn ngữ chính bao gồm các toán tử do người dùng định nghĩa được thể hiện trong các nhiệm vụ 3 & 4.

Nhiệm vụ 1

Toán tử đường ống ( |>) là đường cú pháp biến đổi lệnh gọi hàm ở phía bên phải thành một lệnh gọi hàm với giá trị ở phía bên trái được chèn làm đối số đầu tiên. foo |> bar()cũng giống như bar( foo ).

"Simple, elegant scripting language implemented in C# for .NET/Mono" |> printLn();

Nhiệm vụ 2

"Hello World! This is written in Mond." |> printLn();

Nhiệm vụ số 3

Mã cho nhiệm vụ này giả định một số điều:

  1. Phạm vi số sẽ được nhập trên một dòng
  2. Các giới hạn trên và dưới sẽ được phân tách bằng một khoảng trắng
  3. Các số đã cho là số nguyên trong cơ sở 10 và chỉ chứa các ký tự 0-9

Hãy thử nó ở đây

// parse a string to a number
fun toNumber( str ) {
    var n = 0, pow = str.length();

    for( var i = 0; i < str.length(); ++i )
        n += ( str.charCodeAt( i ) - 48 ) * ( 10 ** --pow );

    return n;
}

fun map( arr, fn ) {
    var ret = [ ];

    foreach( var item in arr )
        fn( item ) |> ret.add();

    return ret;
}

// user-defined operator to create an upper-bound inclusive range a-la Ruby
// (i.e. 1 .. 5 produces [ 1, 2, 3, 4, 5 ])
seq( .. )( start, end ) {
    for( var i = start; i <= end; ++i )
        yield i;
}

// read a line from STDIN, trim leading and trailing whitespace,
// split the string to an array, map the array to parse all strings to numbers.
var nums = readLn().trim().split( " " ) |> map( toNumber );

// nums[0] .. nums[1] makes use of the user-defined operator declared on line 22.
// nums[0] is the lower bound, nums[0] is the upper bound.
foreach( var n in nums[0] .. nums[1] ) {
    if( n % 2 != 0 ) printLn( n );
}

Nhiệm vụ số 4

Tác vụ này thể hiện các toán tử do người dùng định nghĩa , cho phép lập trình viên xác định bất kỳ toán tử tùy ý nào (miễn là nó không tồn tại) giống như một hàm và sử dụng nó như bất kỳ toán tử nào khác. Họ đến trong hương vị đơn nhất và nhị phân.

Hãy thử nó ở đây .

// forward function compositing user-defined operator.
// the function on the right-hand side is called with
// the result of the function on the left-hand side.
fun( >>> )( fn1, fn2 ) {
    return fun( ...args ) {
        return fn1( ...args ) |> fn2();
    };
}

// the mythical "goes down to" operator of legend.
// a lazy sequence that returns all numbers starting from 'hi'
// down to (and including) 'lo'
seq( --> )( hi, lo ) {
    for( var i = hi; i >= lo; --i )
        yield i;
}

seq map( iterable, callback ) {
    foreach( var item in iterable )
        yield item |> callback();
}

// doubles the value of n
fun double( n ) -> n *  2;

// squares the value of n (** is the power operator, a-la Python or Ruby)
fun square( n ) -> n ** 2;

// gets the sequence for 10 down to 0, passes it into
// map, which maps it through the composited function of
// double and square, which first doubles the given value
// then squares it.
var nums = ( 10 --> 0 ) |> map( double >>> square );

foreach( var n in nums )
    printLn( n );

4
Nó chỉ được liệt kê trên Rosetta Code, làm thế nào để nhận được tiền thưởng 25 pt?
Scimonster

@Scimonster Giải thích của tôi về phần thưởng cho điểm là ngôn ngữ cần có 0 kết quả tìm kiếm, được liệt kê trên một trong: Rosetta Code, Esolang hoặc Wikipedia và là ngôn ngữ riêng biệt để đủ điều kiện nhận 25 điểm. Nếu tôi sai và tiêu chí duy nhất là nó phải có các trang trên Rosetta Code, Esolang Wikipedia, tôi sẽ chỉnh sửa cho phù hợp.
Tony Ellis

Không, 3 điều bạn liệt kê là tiêu chí để được cho phép trong thử thách. Nó đủ điều kiện nhận phần thưởng 10 điểm nếu, giả sử, Wikipedia và Rosetta Code đều liệt kê nó. Phần thưởng 25 điểm là nếu nó có trên Rosetta, Esolang và Wikipedia.
Scimonster

@Scimonster Tôi thấy, lỗi của tôi. Tôi đã cập nhật câu trả lời của mình.
Tony Ellis

4

jq

Không có kết quả nào trong số 14 kết quả trên codegolf.se là về ngôn ngữ. ( jq(và các biến thể chữ hoa) dường như là tuyên bố thường xuyên trong Pyth.)

thể loại jq trên Rosetta Code .

Bạn có thể dùng thử trực tuyến nhưng một số ví dụ dưới đây cần phiên bản 1.5 mới nhất.

Nhiệm vụ 1: Tweet

jq giống như sed cho JSON; bạn có thể sử dụng nó để xử lý dữ liệu có cấu trúc một cách dễ dàng mà sed, awk, grep và bạn bè cho phép bạn chơi với văn bản

(Không biết xấu hổ đã chia đôi đoạn đầu tiên từ trang web của nó.)

Nhiệm vụ 2: Thế giới xin chào

bash-4.3$ jq -n -r '"Hello World! This is written in jq."'
Hello World! This is written in jq.

Nhiệm vụ 3: Số lẻ

bash-4.3$ jq -R 'split(" ") | range(.[0] | tonumber; .[1] | tonumber + 1) | select(. % 2 == 1)' <<< '20 25'
21
23
25

Nhiệm vụ 4: Thú vị

Tệp ~ / .mozilla / firefox / *. Default / extend.json chứa thông tin về các phần mở rộng Firefox đã cài đặt có 0 dòng mới trong 171 Kb trên dữ liệu JSON, khiến nó khó đọc.

Khá in dữ liệu JSON:

bash-4.3$ jq '' ~/.mozilla/firefox/*.default/extensions.json

Doh. 8000 dòng ++ quá dài, vì vậy hãy chuyển nó sang máy nhắn tin, nhưng vẫn giữ phần tô sáng:

bash-4.3$ jq -C '' ~/.mozilla/firefox/*.default/extensions.json | less -r

Ôi. Có bao nhiêu phần mở rộng?

bash-4.3$ jq '.addons | length' ~/.mozilla/firefox/*.default/extensions.json
58

Ok, nhưng một số trong số họ bị vô hiệu hóa. Có bao nhiêu chính xác?

bash-4.3$ jq '[.addons[] | select(.active | not)] | length' ~/.mozilla/firefox/*.default/extensions.json
7

Một số trong số chúng khá bị bỏ rơi và không hoạt động với Firefox hiện tại nữa:

bash-4.3$ jq -r '.addons[] | [.defaultLocale.name, (.targetApplications[] | select(.id == "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"))] | select(.[1].maxVersion | gsub("[^\\d.]"; "") | tonumber < 38.0) | .[0]' ~/.mozilla/firefox/*.default/extensions.json
Unity Desktop Integration
Unity Websites integration
Ubuntu Firefox Modifications

(Điều này sau này không đúng. Vì một số lý do, phần mở rộng chứa các phạm vi phiên bản khác ngoài cài đặt của tiện ích mở rộng. Nhưng dù sao đó cũng không phải là lỗi của jq.)


4

ooc

Vâng, tôi trễ khoảng một tháng. Vậy thì sao???

Nhiệm vụ 1

ooc là ngôn ngữ lập trình biên dịch xuống C99 có cú pháp tao nhã và hỗ trợ cả phát triển cấp cao và cấp thấp.

135 byte! Đó là gần!

Ngoài ra, điểm thưởng giả cho logo nghệ thuật ASCII cực kỳ thú vị của ooc :

           +(NNhBBhss+'                  ~+'(sNBND=~.         
           -(=NDhNN+=+=' .   .  .    . .+='+~DNND+=.          
           .+-DBDDh+(D-<'      .....  -<+ (=~DNh+<(           
            '+<NNNB=~=z-(<-<<(+('-'~<<=- .+'sBNh~+            
             (~=NNND+=DB~(-.    . .    ...(=BNB+s--      ALL YOUR 
             .=-=DBDz-'~. .   ..'. .... '  '~s<<szh<.         
               <(~'. .  .  ..sD='-~'-'-DDs.. . .~sD(     CODEBASE  
            . ~+'  '  .-(-..sBNB~(~~+=hNNNz'<<z='-z(               
           . .=. -DDz<~s~  'BNNN=~+<shNNNND(sNNNh~(+    ARE BELONG
            .=<.(NNNNDDs. (hhs+=s=hNDNNBNBBs<BNND<<=.             
            .'-'~sNNs((- .''. ' -~NNDz+((~---~sB<'''.     TO US!
                '=(++(-..  . ...-~+B~'....'.''-+(     .             
                -=z<<'.. .'-...'-~hz~-'.''''-~-<=                     
                 .~+~s~  ~z<~'-'--hN=~((~'---(~~z~                    
                   (+<-.'+=''''~(+=Bz--~(((=+s+~(s                     
  IT'S OVER      . '+-..~<----~-+(sBNh+zBNNBNh+<z'                     
                   .<-'--''(<~=B=hDDD=<<<++=++<=.                   
  9000 BUGS!     .. s~..'h=++ss=D<<~+B(<(+<=Nz=+                     
                    +'.''+NNDN(+z(((sB<((s+hNh<+             
                   .= -~(~(zDNz+z+zhNDz=szhhBz++.       MADNESS?        
                   '+. ss<'~=NBNBBDzBzhshDD=+<<-                   
                   -= . +s~-(+==hhDBNBDDs==hz+<     THIS! IS! LLAMA!
                 '(<-  . '~~(<+<=+<sz=+sshzs(..               
                .+<.    '('-~(((((<++(<<((= .                 
                 .--.. ....'.'.'.'..''..'-..

Nhiệm vụ 2

"Hello, world!" println()

Nhiệm vụ 3

import text/StringTokenizer
import structs/ArrayList
input := stdin readLine() split(' ', false)
(begin, end) := (input[0] toInt(), input[1] toInt())
for (i in begin..end+1) {
    if (i % 2 != 0) { "%d " printf(i) }
}
println()

Thực hiện khá đơn giản. Ngoài ra, điều này thể hiện một khía cạnh thú vị của ooc: các cuộc gọi phương thức sử dụng khoảng trắng làm dấu phân cách, không phải dấu chấm. Ví dụ, thông báo stdin readLine() split(' ', false)ở trên. Trong hầu hết các ngôn ngữ, điều đó sẽ được viết dưới dạng stdin.readLine().split(' ', false), nhưng ooc dự trữ cho chuỗi cuộc gọi (cuộn xuống ví dụ mã).

Nhiệm vụ 3

Điều này giới thiệu tính năng ooc yêu thích của tôi: loại phù hợp. Nó giống như khớp mẫu. Trong một ngôn ngữ OO. Tuyệt vời.

import structs/ArrayList
import math/Random

Animal: abstract class {
    makeNoise: abstract func
}

Sheep: class extends Animal {
    init: func
    makeNoise: func {
        "Baaaaaaa!" println()
    }
}

Wolf: class extends Animal {
    init: func
    makeNoise: func {
        "Hooooowl!" println()
    }
}

animals := [Sheep new(), Sheep new(), Sheep new()] as ArrayList<Animal>
badNumber := Random randRange(0, 3)
animals[badNumber] = Wolf new()
animal: Animal

"Enter a number between 0 (inclusive) and 3 (exclusive)" println()
inputNumberString := stdin readLine()
for (chr in inputNumberString) {
    if (!(chr.digit?())) {
        "NUMBER, not CHARACTER! Can't you read!?" println()
        exit(1)
    }
}
inputNumber := inputNumberString toInt()
try {
    animal = animals[inputNumber]
} catch (e: OutOfBoundsException) {
    "I said a number between one and three, you idiot!" println()
    exit(1)
}
"Animal noise:" println()
animal makeNoise()
match (animal) {
    case sheep: Sheep => { "It's a stupid, annoying sheep!" println() }
    case wolf: Wolf => { "AHH! A WOLF! You got eaten. :/ R.I.P." println() }
}
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.