Chrestomathy แห่งความสับสน


11

คุณควรทำสี่ภารกิจให้เสร็จสมบูรณ์ในภาษาที่:

  • ต้องกลับไม่มีผลลัพธ์ * เมื่อค้นหาบน (codegolf.se) เว็บไซต์นี้เช่นToffeeScript ;
  • จะต้องมีหน้าที่ระบุไว้ในEsolang , Rosetta CodeหรือWikipedia ;
  • เป็นภาษาที่แตกต่างแทนที่จะเป็นเวอร์ชั่นที่แตกต่าง (เช่น python 2.1 จะใช้ได้ถ้า if python ตรงตามเกณฑ์สองข้อแรก)

* ข้อยกเว้นสำหรับ ToffeeScript

งานสี่อย่างที่คุณควรทำคือ:

1) เขียนคำอธิบาย / การโปรโมต tweetable (<140 ตัวอักษร) ของภาษาที่คุณเลือก

2) พิมพ์ "Hello World! นี่เขียนไว้<programming language name>"

3) พิมพ์ตัวเลขคี่ทั้งหมดในช่วงที่ผู้ใช้ระบุ (เช่น stdin ของ20 25ควรกลับมา21 23 25)

4) เขียนโปรแกรมที่คุณรู้สึกดีที่สุดแสดงให้เห็นถึงคุณสมบัติที่น่าสนใจของภาษาที่คุณเลือก

เกณฑ์การให้คะแนน:

  • นี่คือการประกวดความนิยม
  • โบนัส 10 คะแนนถ้าระบุไว้ในสองไดเรกทอรีข้างต้น 25 ถ้าอยู่ในทั้งสาม
  • คะแนนคือผลรวมของคะแนนโหวตที่ได้รับในเวลาเที่ยงคืน UTC เมื่อวันที่ 1 กรกฎาคม 2558 บวกกับโบนัส

ชี้แจง:

  • ภารกิจ 1) สามารถเป็นโปรแกรม tweetable แต่ข้อความธรรมดาก็สามารถใช้ได้
  • หลายภาษาไม่มีล่ามที่มีอยู่ การแก้ปัญหาสำหรับสิ่งเหล่านี้เป็นสิ่งที่ดี แต่จะดำเนินการด้วยความสุจริตใจ
  • เกณฑ์ที่สองสำหรับการเลือกภาษาห้ามใช้หน้าเว็บที่มีวันที่สร้างหลังจากโพสต์นี้ หากสำหรับภาษาที่กำหนด X จะมีวิธีแก้ไขปัญหาในรหัส Rosetta แต่ไม่มีหน้าที่ชัดเจนในที่ของตัวเอง แต่ก็ยังยอมรับได้

4
คุณกำลังพูดคุยกับโปรแกรมเมอร์คุณไม่จำเป็นต้องพูดand/or;)
undergroundmonorail

2
“ ต้องไม่ส่งคืนผลลัพธ์” ควรถูกนำมาใช้อย่างแท้จริงหรือไม่ ตัวอย่างเช่นมีผลลัพธ์สำหรับ“ mond ” แต่ไม่เหมือนกับMondในคำตอบ มันนับเป็นผลหรือไม่?
จัดการ

2
คุณควรระบุว่าหน้าใน Esolangs, รหัส Rosetta หรือ Wikipedia ต้องมีอยู่ก่อนการท้าทายนี้
Martin Ender

1
คุณสามารถอธิบายได้ไหมว่าภารกิจ 1 ต้องการโปรแกรมตัวอักษร 140 ตัวที่ส่งคำอธิบายออกมาหรือเพียงแค่คำอธิบายตัวอักษร 140 ตัว (ซึ่งไม่ใช่โปรแกรม)
trichoplax

1
ฉันได้ชี้แจงจุดยกที่นี่ (อย่างน้อยฉันหวังว่าฉันมี!) ข้างต้น
Kieran Hunt

คำตอบ:


6

แทรก

โบนัส: 10

ไม่มีหน้าสำหรับ Bloop บนมีEsolangsและวิกิพีเดีย การค้นหา PPCG สำหรับ BlooP ไม่มีผลลัพธ์ หากคุณรู้สึกเป็นวงแหวนโดยเฉพาะคุณสามารถลองใช้กับ repl.itได้


ภารกิจที่ 1: ทวีต

BlooP: ไม่มีอะไรนอกจากลูปที่มีขอบเขต ;) #programming #goodtimes

สิ่งนี้ใช้สไตล์ Twitter มาตรฐานรวมถึงแฮชแท็กและอีโมติคอน สิ่งนี้จะดึงดูดผู้ใช้ Twitter ทุกคน *


ภารกิจที่ 2: สวัสดีชาวโลก

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 เท่านั้นคือการมอบหมาย ( <=) การเพิ่มการคูณมากกว่าที่น้อยกว่าและเท่ากับ เนื่องจากไวยากรณ์ของ verbose เจ็บปวดมันค่อนข้างง่ายที่จะบอกสิ่งที่เกิดขึ้นแม้ไม่มีความเข้าใจภาษา


ภารกิจที่ 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 รหัส สิ่งนี้ถูกสร้างขึ้นจริงหลังจากการโพสต์ความท้าทายอย่างไรก็ตามวิธีแก้ปัญหาสำหรับงานQuickSortนั้นมีมาตั้งแต่เดือนกันยายน 2014
  • แม้ว่า mond จะดูคล้ายกับ JavaScript (จริง ๆ แล้วมันค่อนข้างง่ายที่จะเขียน polyglots Mond / JS) แต่ก็ไม่ใช่เซตย่อย, เซ็ตหรือการใช้งานซ้ำ มันเป็นภาษาที่แตกต่างของตัวเอง

ลองใช้ในเบราว์เซอร์ของคุณ

การเปิดเผยอย่างเต็มรูปแบบ : ฉันเกี่ยวข้องกับกระบวนการพัฒนาและออกแบบของ Mond ในระดับหนึ่งและได้นำคุณลักษณะภาษาที่สำคัญหลายประการมาใช้เป็นการส่วนตัวรวมถึงโอเปอเรเตอร์ที่ผู้ใช้กำหนดเอง

ภารกิจ # 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. ตัวเลขที่ให้เป็นจำนวนเต็มใน base-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

งานนี้แสดงโอเปอเรเตอร์ที่ผู้ใช้กำหนดซึ่งอนุญาตให้โปรแกรมเมอร์กำหนดโอเปอเรเตอร์ใด ๆ (ตราบใดที่มันไม่มีอยู่) เช่นเดียวกับฟังก์ชั่นและใช้มันเหมือนกับโอเปอเรเตอร์อื่น พวกเขามาในรสชาติ unary และไบนารี

ลองได้ที่นี่

// 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 เท่านั้นมันจะได้รับโบนัส 25 pt อย่างไร
Scimonster

@Sconster การตีความคะแนนการให้คะแนนของฉันคือภาษานั้นต้องมีผลลัพธ์การค้นหา 0 รายการอยู่ในรายการใดรายการหนึ่ง: Rosetta Code, Esolang หรือ Wikipedia และเป็นภาษาที่แตกต่างเพื่อให้มีคุณสมบัติ 25 คะแนน หากฉันผิดและเกณฑ์เดียวคือต้องมีหน้าเว็บในรหัส Rosetta, Esolang และ Wikipedia ฉันจะแก้ไขตามนั้น
Tony Ellis

ไม่ 3 สิ่งที่คุณระบุไว้เป็นเกณฑ์สำหรับการได้รับอนุญาตในการท้าทายเลย มันมีคุณสมบัติสำหรับโบนัส 10 คะแนนถ้าพูดว่า Wikipedia และรหัส Rosetta ทั้งสองรายการ โบนัส 25 คะแนนคือถ้าอยู่ใน Rosetta, Esolang และ Wikipedia
Scimonster

@Sconster ฉันเห็นความผิดพลาดของฉัน ฉันอัพเดตคำตอบแล้ว
Tony Ellis

4

JQ

ไม่มีผลลัพธ์ 14 รายการใน codegolf.seเกี่ยวกับภาษา ( jq(และตัวแปรตัวพิมพ์ใหญ่) น่าจะเป็นข้อความที่ใช้บ่อยใน Pyth)

มีหมวดหมู่ JQ บน Rosetta รหัส

คุณสามารถลองออนไลน์ได้แต่ตัวอย่างบางส่วนด้านล่างจำเป็นต้องใช้เวอร์ชั่นล่าสุด 1.5

ภารกิจที่ 1: ทวีต

jq เปรียบได้กับ JSON; คุณสามารถใช้มันเพื่อประมวลผลข้อมูลที่มีโครงสร้างได้อย่างง่ายดายเช่น sed, awk, grep และเพื่อน ๆ ที่ให้คุณเล่นกับข้อความ

(twittified ย่อหน้าแรกจากเว็บไซต์ของมันอย่างไม่มีตำหนิ)

ภารกิจที่ 2: สวัสดีชาวโลก

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: สิ่งที่น่าสนใจ

ไฟล์ ~ / .mozilla / firefox / *. default / extensions.json ที่มีข้อมูลเกี่ยวกับส่วนขยายของ Firefox ที่ติดตั้งนั้นมี 0 บรรทัดใหม่ใน 171 Kb บนข้อมูล JSON ซึ่งทำให้อ่านยาก

พิมพ์ข้อมูล JSON ให้สวย:

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

Doh บรรทัด 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

OOC

ใช่ฉันประมาณปลายเดือน แล้วอะไรล่ะ ???

ภารกิจที่ 1

ooc เป็นภาษาการเขียนโปรแกรมที่คอมไพล์ลงไปที่ C99 ที่มีรูปแบบที่สวยงามและสนับสนุนทั้งการพัฒนาระดับสูงและระดับต่ำ

135 ไบต์! มันปิด!

นอกจากนี้คะแนนโบนัสปลอมสำหรับโลโก้ ASCII-art cool ของโอโอซี :

           +(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() }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.