隠蔽のクリストマシー


11

次の言語で4つのタスクを完了する必要があります。

  • 例えば、この(codegolf.se)のウェブサイト上で検索するとき*何も結果を返してはならないToffeeScript
  • EsolangRosetta Code、またはWikipediaにリストされたページが必要です。
  • 別個のバージョンではなく、別個の言語である(たとえば、python 2.1は、pythonが最初の2つの基準を満たしている場合にのみ有効)。

*例外は、ToffeeScriptのこのヒットです。

完了する必要がある4つのタスクは次のとおりです。

1)選択した言語のツイート可能な(140文字未満の)説明/プロモーションを記述します。

2)「Hello World!これはで書かれてい<programming language name>ます。」

3)ユーザー指定の範囲内のすべての奇数を印刷します。(たとえば、の標準入力は20 25を返す必要があります21 23 25)。

4)選択した言語の興味深い機能を最もよく実証するプログラムを作成します。

得点:

  • これは人気コンテストです
  • 上記のディレクトリの2つにリストされている場合は10ポイント、3つすべてにある場合は25ポイントのボーナス。
  • スコアは、2015年7月1日の深夜UTCに受け取った投票とボーナスの合計です。

明確化:

  • タスク1)はツイート可能なプログラムですが、プレーンテキストでもかまいません。
  • 多くの言語には、既存のインタープリターがありません。これらの解決策は問題ありませんが、誠意を持って採用されます。
  • 言語選択の2番目の基準は、この投稿の後に作成日があるページを禁止します。特定の言語Xについて、問題の解決策がRosetta Codeに存在するが、どこかに独自の個別のページがない場合でも、それは受け入れられます。

4
プログラマーと話しているので、言う必要はありませんand/or;)
地下

2
「結果を返さなくてはならない」というのは、文字通りに取るべきですか?たとえば、「mond」の結果がありますが、答えと同じMondではありません。結果としてカウントされますか?
マナトワーク

2
おそらく、この挑戦​​の前にエソラン、ロゼッタコード、またはウィキペディアのページが存在していなければならないと述べるべきです。
マーティンエンダー

1
タスク1に、説明を出力する140文字のプログラムが必要か、それとも140文字の説明(プログラムではない)が必要かを明確にできますか?
-trichoplax

1
ここで提起されたポイントを明らかにしました(少なくとも私が持っていることを望みます!)
キーランハント

回答:


6

BlooP

ボーナス:10

EsolangsWikipediaBlooPのページがあります。BlooPのPPCG検索は結果を返しません。特にループを感じている場合は、repl.itで試してみることができます。


タスク1:ツイート

BlooP:制限されたループ以外は何もありません。;)#programming #goodtimes

これは、ハッシュタグと絵文字を含む標準の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'を検索すると1つの結果が得られます(この答えにもかかわらず)。しかし、それは誤検知であり、実際には言語に言及していません。
  • Rosettaコードページ。これは実際にチャレンジが投稿された後に作成されましたが、QuickSortタスクの解決策は2014年9月から存在しています
  • mondはJavaScriptに非常によく似ていますが(実際、Mond / JSポリグロットを書くのは非常に簡単です)、サブセット、スーパーセット、または再実装ではありません。それは独自の言語です。

ブラウザで試してみてください

完全な開示: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. 数値の範囲は1行で入力されます
  2. 上限と下限は単一のスペースで区切られます
  3. 指定された数値は10を底とする整数であり、charsのみを含みます 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

@Scimonsterスコアボーナスの私の解釈では、言語の検索結果は0である必要があり、Rosetta Code、Esolang、または Wikipediaのいずれかにリストされている必要があります。私が間違っていて、Rosetta Code、Esolang、および Wikipediaにページがなければならないという唯一の基準である場合、それに応じて編集します。
トニーエリス

いいえ、リストした3つのことは、チャレンジで許可されるための基準です。たとえば、ウィキペディアとロゼッタコードの両方でリストされている場合、10ポイントのボーナスの対象となります。25ポイントのボーナスは、Rosetta、Esolang、Wikipediaにある場合です。
Scimonster

@Scimonster、私の間違い。回答を更新しました。
トニーエリス

4

jq

codegolf.se14の結果のいずれも、言語に関するものではありません。(jqおよび大文字の変形)は、Pythで頻繁に使用されるようです。

Rosetta Codeにjqカテゴリがあります

オンラインで試すことができますが、以下の例のいくつかは最新バージョン1.5が必要です。

タスク1:ツイート

jqはJSONのsedに似ています。それを使用して、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ファイルには、JSONデータの171 Kbに0の改行が含まれているため、読みにくくなっています。

JSONデータをきれいに印刷します。

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

ど 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

おー

ええ、私は約一ヶ月遅れています。だから何???

タスク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機能であるタイプマッチングを示しています。パターンマッチングのようなものです。オブジェクト指向言語。驚くばかり。

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() }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.