Belirsizliğin Chrestomatisi


11

Bir dilde dört görevi tamamlamanız gerekir:

  • bu (codegolf.se) web sitesinde arandığında hiçbir sonuç vermemelidir *, örneğin ToffeeScript ;
  • Esolang , Rosetta Code veya Wikipedia'da listelenen bir sayfaya sahip olmalıdır ;
  • farklı bir sürümden ziyade farklı bir dil olabilir (örneğin, python 2.1 ilk iki kriteri karşılarsa geçerli olur).

* ToffeeScript için bu isabet istisnadır.

Tamamlamanız gereken dört görev şunlardır:

1) Seçtiğiniz dilin tweetable (<140 karakter) tanımını / tanıtımını yazın.

2) "Merhaba Dünya! Bu yazıldı <programming language name>."

3) Kullanıcı tarafından belirlenen aralıktaki tüm tek sayıları yazdırın. (örneğin bir stdin 20 25dönmelidir 21 23 25).

4) Seçtiğiniz dilin ilginç bir özelliğini en iyi şekilde gösteren bir program yazın.

puanlama:

  • Bu bir popülerlik yarışması
  • Yukarıdaki dizinlerden ikisinde listelenmişse 10 puan, her üçünde de 25 puan bonus.
  • Puan, 1 Temmuz 2015'te UTC gece yarısında alınan oyların toplamı ve bonuslar.

Açıklamalar:

  • Görev 1) iki yönlü bir program olabilir, ancak düz metin de kabul edilebilir.
  • Birçok dilde mevcut bir tercüman yoktur; bunlara çözümler iyi, ama iyi niyetle alınacak.
  • Dil seçimi için ikinci kriter, oluşturulması bu yayından sonra başlayan sayfaları yasaklar. Belirli bir dil için, X, Rosetta Kodu'nda bir soruna çözüm varsa, ancak bir yerde kendine ait ayrı bir sayfası yoksa, hala kabul edilebilir.

4
programcılar ile konuşuyorsunuz, söylemek zorunda değilsiniz and/or;)
undergroundmonorail

2
“Hiçbir sonuç vermemeli” kelimesi kelimesine alınmalıdır Örneğin, “ mond ” için bir sonuç vardır , fakat kesinlikle cevaptaki ile aynı Mond değildir . Sonuç olarak sayılır mı?
manatwork

2
Muhtemelen Esolangs, Rosetta Code veya Wikipedia'daki sayfaların bu meydan okumadan önce var olması gerektiğini belirtmelisiniz.
Martin Ender

1
Görev 1'in bir açıklama veren 140 karakterlik bir program veya yalnızca 140 karakterlik bir açıklama (bir program değil) gerektirip gerektirmediğini açıklayabilir misiniz?
trichoplax

1
Yukarıda dile getirilen noktaları açıklığa kavuştum (en azından umarım var!)
Kieran Hunt

Yanıtlar:


6

bloop

Bonus: 10

BlosoP için Esolangs ve Wikipedia'da sayfalar var . BlooP için bir PPCG araması sonuç vermez. Özellikle looplu hissediyorsanız, repl.it üzerinde deneyebilirsiniz .


Görev 1: Tweet

BlooP: Sınırlı döngülerden başka bir şey yok. ;) #programming #goodtimes

Bu, hashtag ve ifadeleri içeren standart Twitter stilini kullanır. Bu, herhangi bir Twitter kullanıcısına hitap eder. *


Görev 2: Merhaba Dünya

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

GREETING[0];

Gördüğünüz gibi, bu birinci sınıf bir golf dilidir. *


Görev 3: Tek Sayılar

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'de kullanılabilen tek işleçler atama ( <=), toplama, çarpma, büyük, küçük ve eşittir. Acı veren sözdizimi nedeniyle, dili derinlemesine anlamadan bile neler olduğunu anlatmak oldukça kolaydır.


Görev 4: İlginç

Not: Daha ilginç bir şey bulursam bu görev için snippet'im değişebilir.

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

İşte Fibonacci sayıları.


* Doğru olmayabilir


5

Mond *

  • * 'Mond' araması bir sonuç verir (buna rağmen bu cevap), ancak bu yanlış bir pozitiftir ve aslında dilden bahsetmez.
  • Rosetta Kod sayfası . Bu, aslında sorun gönderildikten sonra oluşturuldu, ancak Eylül 2014'ten beri QuickSort görevine bir çözüm var.
  • Mond JavaScript'e çok benzemesine rağmen (gerçekten de Mond / JS çokgenlerini yazmak oldukça kolaydır), bir alt küme, üst küme veya yeniden uygulama değildir. Kendi ayrı dilidir.

Tarayıcınızda deneyin

Tam açıklama : Mond'un geliştirme ve tasarım sürecine bir dereceye kadar katıldım ve 3. ve 4. görevlerde gösterilen kullanıcı tanımlı operatörler de dahil olmak üzere birçok önemli dil özelliğini kişisel olarak uyguladım .

Görev 1

Boru hattı operatörü ( |>), sağ taraftaki fonksiyon çağrısını, sol taraftaki değer ilk argüman olarak eklenen bir fonksiyon çağrısına dönüştüren sözdizimi şekeri. foo |> bar()ile aynıdır bar( foo ).

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

Görev # 2

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

Görev # 3

Bu görevin kodu birkaç şey varsayar:

  1. Sayı aralığı tek bir satıra girilecek
  2. Üst ve alt sınırlar tek bir boşlukla ayrılır
  3. Verilen sayılar 10 tabanındaki tamsayılardır ve yalnızca karakterleri içerir 0-9

Burada deneyin

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

Görev # 4

Bu görev , programcının herhangi bir isteğe bağlı operatörü (zaten mevcut olmadığı sürece) tıpkı bir işlev gibi tanımlamasına ve bunu diğer herhangi bir işleç gibi kullanmasına izin veren kullanıcı tanımlı işleçleri gösterir . Tek ve ikili tatlar halinde gelirler.

Burada deneyin .

// 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
Sadece Rosetta Kodunda listelenmiş, 25 puanlık bir bonus nasıl kazanacak?
Scimonster

@Scimonster Puanlama bonusları hakkındaki yorumum, dilin 0 arama sonucuna sahip olması, Rosetta Kodu, Esolang veya Wikipedia'dan birinde listelenmesi ve 25 puana hak kazanmak için farklı bir dil olması gerektiğidir. Eğer yanılıyorsam ve tek kriter Rosetta Kodu, Esolang ve Wikipedia'da sayfaları olması gerektiğinde, buna göre düzenleyeceğim.
Tony Ellis

Hayır, listelediğiniz 3 şey meydan okumaya izin verilmesine yönelik ölçütlerdir. Wikipedia ve Rosetta Code her ikisi de listeliyorsa, 10 puanlık bonus kazanır. 25 puanlık bonus ise Rosetta, Esolang ve Wikipedia'da.
Scimonster

@Scimonster Anlıyorum, hatam. Cevabımı güncelledim.
Tony Ellis

4

jq

Codegolf.se ile ilgili 14 sonuçtan hiçbiri dil ile ilgili değildir. ( jq(ve büyük harfli varyasyonlar) Pyth'te sık sık ifade ediliyor gibi görünüyor.)

Orada Rosetta Code jq kategori .

Şunları yapabilirsiniz çevrimiçi denemek ama gerek son sürümü 1.5 aşağıda örneklerden bazılarıdır.

Görev 1: Tweet

jq JSON için sed gibidir; sed, awk, grep ve arkadaşlarının metinle oynamanıza izin veren aynı kolaylıkla yapılandırılmış verileri işlemek için kullanabilirsiniz

(İlk paragrafı siteden utanmadan döndürdü.)

Görev 2: Merhaba Dünya

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

Görev 3: Tek Sayılar

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

Görev 4: İlginç

Kurulu Firefox eklentileri hakkında bilgi içeren ~ / .mozilla / firefox / *. Default / extensions.json dosyasının JSON verilerinde 171 Kb'de 0 yeni satırı vardır, bu da okumayı zorlaştırır.

JSON verilerini oldukça yazdırın:

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

Hamuru. 8000 ++ hatları çok uzun, bu yüzden çağrı cihazına iletin, ancak vurgulamayı koruyun:

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

Ahh. Zaten kaç tane uzantı var?

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

Tamam, ama bazıları devre dışı. Tam olarak kaç tane?

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

Bazıları oldukça terk edilmiş ve artık mevcut Firefox ile çalışmıyor:

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

(Bu daha sonra doğru değildir. Bazı nedenlerden dolayı extensions.json, uzantıların install.rdf dosyasından başka sürüm aralıkları içeriyor. Ama bu zaten jq hatası değil.)


4

ooc

Evet, yaklaşık bir ay geç kaldım. Ne olmuş yani???

Görev 1

ooc, zarif bir sözdizimi olan ve hem yüksek hem de düşük düzeyli gelişimi destekleyen C99'a kadar derleyen bir programlama dilidir.

135 bayt! Bu yakın oldu!

Ayrıca, ooc'un delice havalı ASCII-art logosu için sahte bonus puanları :

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

Görev 2

"Hello, world!" println()

Görev 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()

Oldukça basit bir uygulama. Ayrıca, ooc: method çağrılarının boşlukları nokta değil sınırlayıcı olarak kullanması ilginç bir yönünü gösterir. Örneğin, stdin readLine() split(' ', false)yukarıdaki uyarı . Çoğu dilde, bu olarak yazılır stdin.readLine().split(' ', false), ancak ooc çağrı zincirleme için ayırır (kod örneğine ilerleyin).

Görev 3

Bu benim en sevdiğim ooc özelliğini gösteriyor: tip eşleştirme. Örüntü eşleştirme gibi. OO dilinde. Muhteşem.

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() }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.