晦涩难懂


11

您应该使用以下语言完成四项任务:

  • 在此(codegolf.se)网站上搜索时,不得返回任何结果*,例如ToffeeScript
  • 必须在EsolangRosetta CodeWikipedia上列出页面;
  • 是一种独特的语言,而不是独特的版本(例如,如果python满足前两个条件,则python 2.1将是有效的)。

*例外情况是对ToffeeScript的打击。

您应该完成的四个任务是:

1)用推文(<140个字符)描述/宣传所选语言。

2)打印“ Hello World!这是用<programming language name>。写的。”

3)打印用户指定范围内的所有奇数。(例如,20 25应返回的标准输入21 23 25)。

4)编写一个您觉得最能说明所选语言有趣功能的程序。

得分:

  • 这是一次人气竞赛
  • 如果在以上两个目录中列出了10点的奖励,如果在所有三个目录中列出了25点的奖励。
  • 得分是2015年7月1日午夜UTC收到的票数加奖金的总和。

说明:

  • 任务1)可以是可发布消息的程序,但纯文本也是可以接受的。
  • 许多语言没有现有的口译员。解决这些问题的方法很好,但是将本着诚意采取。
  • 选择语言的第二个条件是禁止在其发布之后创建日期的页面。如果对于给定的语言X,Rosetta Code中存在问题的解决方案,但是在某处没有自己的独特页面,则仍然可以接受。

4
您是在与程序员交流,您不必说and/or;)
地下

2
“必须返回没有结果”应该从字面上理解吗?例如,结果为“ mond ”,但肯定与答案中的Mond不同。它算作结果吗?
manatwork 2015年

2
您可能应该声明,在此挑战之前,Esolangs,Rosetta Code或Wikipedia上的页面必须已经存在。
马丁·恩德

1
您能否说明任务1是否需要140个字符的程序来输出描述,或者仅需要140个字符的描述(不是程序)?
trichoplax

1
我已经澄清了这里提出的观点(至少我希望我有!)
Kieran Hunt 2015年

Answers:


6

布卢普

奖金:10

EsolangsWikipedia上有BlooP的页面。PPloo搜索BlooP不会返回结果。如果您感觉特别loop,可以在repl.it上尝试一下


任务1:推文

BlooP:没有限制,只有循环。;)#编程#好时光

这使用标准的Twitter样式,包括主题标签和表情符号。这将吸引任何Twitter用户。*


任务2:Hello World

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

GREETING[0];

如您所见,这是一种主要的高尔夫语言。*


任务3:奇数

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];

BlooP中唯一可用的运算符是赋值(<=),加法,乘法,大于,小于和等于。由于其冗长的语法,即使不深入了解该语言,实际上也很容易分辨。


任务4:有趣

注意:如果我想出一些更有趣的内容,此任务的代码段可能会更改。

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];

看哪,斐波那契数。


*可能不正确


5

蒙德 *

  • *搜索“ Mond”会得到一个结果(尽管有此答案),但这是一个误报,实际上并未提及该语言。
  • Rosetta代码页。这实际上是在发布挑战后创建的,但是自2014年9月以来,已经存在QuickSort任务的解决方案。
  • 尽管mond看起来与JavaScript非常相似(实际上,编写Mond / JS polyglots很容易),但它不是子集,超集或重新实现。这是它自己独特的语言。

在浏览器中尝试

全面披露:我在一定程度上参与了Mond的开发和设计过程,并亲自实现了几种主要语言功能,包括在任务3和4中演示的用户定义的运算符

任务1

管道运算符(|>)是语法糖,它将右侧的函数调用转换为以左侧的值作为第一个参数插入的函数调用。foo |> bar()与相同bar( foo )

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

任务2

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

任务3

该任务的代码假定了几件事:

  1. 数字范围将单行输入
  2. 上下限之间用一个空格隔开
  3. 给定的数字是以10为底的整数,并且仅包含字符 0-9

在这里尝试

// 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 );
}

任务4

此任务演示了用户定义的运算符,该运算符使程序员可以像定义函数一样定义任意运算符(只要它尚不存在),并像使用其他运算符一样使用它。它们具有一元和二元风味。

在这里尝试

// 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
它仅列在Rosetta Code中,它如何获得25点奖励?
Scimonster 2015年

@Scimonster我对得分加分的解释是,该语言需要具有0个搜索结果,并在以下一种语言中列出:Rosetta Code,Esolang Wikipedia,并且是一种有资格获得25分的独特语言。如果我错了,唯一的条件是必须在Rosetta Code,Esolang Wikipedia 上有页面,那么我将进行相应的编辑。
Tony Ellis

不,您列出的3件事是完全可以参加挑战的条件。如果Wikipedia和Rosetta Code都列出了该奖励,则有资格获得10点奖励。如果在Rosetta,Esolang和Wikipedia上获得25点奖励。
Scimonster 2015年

@Scimonster我明白了,我的错。我已经更新了答案。
Tony Ellis

4

q

codegolf.se上的14个结果均与该语言无关。(jq(和大写变体)在Pyth中似乎是经常使用的语句。)

Rosetta Code上jq类别

您可以在线尝试,但以下一些示例需要最新版本1.5。

任务1:推文

jq就像sed一样,用于JSON;您可以像使用sed,awk,grep和朋友一样轻松地使用它来处理结构化数据

(从其站点无耻地推文化了第一段。)

任务2:Hello World

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

任务3:奇数

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

任务4:有趣

包含有关已安装的Firefox扩展的信息的〜/ .mozilla / firefox / *。default / extensions.json文件在171 Kb上的JSON数据上有0个换行符,这在某种程度上很难读取。

漂亮地打印JSON数据:

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

h 8000 ++行太长,因此请将其传递给寻呼机,但要保持高亮显示:

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

哎哟。反正有几个扩展?

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

好的,但是其中一些已被禁用。到底多少?

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

其中一些已被废弃,无法再使用当前的Firefox:

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

(这以后是不正确的。由于某些原因,extensions.json包含了扩展版本的install.rdf以外的其他版本范围。但这不是jq的错。)


4

oc

是的,我要迟一个月。所以呢???

任务1

ooc是一种可编译为C99的编程语言,具有优雅的语法,并支持高级和低级开发。

135个字节!太近了!

此外,ooc的超酷ASCII艺术徽标还提供了虚假的奖励积分:

           +(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(..               
                .+<.    '('-~(((((<++(<<((= .                 
                 .--.. ....'.'.'.'..''..'-..

任务2

"Hello, world!" println()

任务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()

非常简单的实现。同样,这展示了ooc的一个有趣方面:方法调用使用空格作为定界符,而不是点。例如,注意stdin readLine() split(' ', false)上面。在大多数语言中,它将被编写为stdin.readLine().split(' ', false),但是ooc保留了该链接以用于呼叫链接(向下滚动至代码示例)。

任务3

这展示了我最喜欢的ooc功能:类型匹配。这就像模式匹配。用OO语言。太棒了

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() }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.