불명예의 종말


11

다음과 같은 언어로 네 가지 작업을 완료해야합니다.

  • 이 (codegolf.se) 웹 사이트에서 검색 할 때 결과를 반환하지 않아야합니다 (예 : ToffeeScript ;
  • Esolang , Rosetta Code 또는 Wikipedia에 나열된 페이지가 있어야합니다 .
  • 고유 한 버전이 아닌 고유 한 언어 여야합니다 (예 : python 2.1이 처음 두 기준을 만족하는 경우 python 2.1이 유효합니다).

* ToffeeScript에 대한 예외입니다.

완료해야 할 네 가지 작업은 다음과 같습니다.

1) 선택한 언어의 트윗 가능 (<140 자) 설명 / 프로모션을 작성하십시오.

2) "Hello World!로 작성되었습니다 <programming language name>."를 인쇄하십시오 .

3) 사용자가 지정한 범위의 모든 홀수를 인쇄합니다. (예 : stdin은 20 25을 반환해야합니다 21 23 25).

4) 선택한 언어의 흥미로운 특징을 가장 잘 보여주는 프로그램을 작성하십시오.

채점 :

  • 이것은 인기 콘테스트입니다
  • 상기 디렉토리 중 2 개에 나열된 경우 10 점의 보너스, 3 개 모두에 25 인 경우 보너스.
  • 점수는 2015 년 7 월 1 일 자정 UTC에받은 투표와 보너스를 합한 것입니다.

설명 :

  • 작업 1)은 트위스트 가능한 프로그램 일 수 있지만 일반 텍스트도 허용됩니다.
  • 많은 언어에는 기존 통역사가 없습니다. 이것들에 대한 해결책은 훌륭하지만 선의로 취해질 것입니다.
  • 언어 선택에 대한 두 번째 기준은이 게시물 이후에 작성 날짜가있는 페이지를 금지합니다. 주어진 언어에 대해 X의 문제에 대한 솔루션이 Rosetta Code에 존재하지만 어딘가에 고유 한 페이지가없는 경우에도 여전히 허용됩니다.

4
당신은 프로그래머와 이야기하고 있습니다, 당신은 말할 필요가 없습니다 and/or;)
undergroundmonorail

2
"결과를 반환하지 않아야합니다"는 문자 그대로 취해야합니까? 예를 들어 " mond "에 대한 결과가 있지만 대답 과 동일한 Mond 는 아닙니다 . 결과로 간주됩니까?
manatwork

2
이 도전 이전에 Esolangs, Rosetta Code 또는 Wikipedia의 페이지가 존재 했어야한다고 언급해야합니다.
Martin Ender 2016 년

1
작업 1에 설명을 출력하는 140 자 프로그램이 필요한지 또는 프로그램이 아닌 140 자 설명 만 필요한지 명확히 할 수 있습니까?
trichoplax

1
위에서 제기 한 포인트를 명확히했습니다 (적어도 나는 희망합니다!)
Kieran Hunt

답변:


6

BlooP

보너스 : 10

EsolangsWikipediaBlooP 페이지가 있습니다 . BlooP에 대한 PPCG 검색은 결과를 반환하지 않습니다. 특히 루프 느낌이 든다면 repl.it에서 시도해 볼 수 있습니다 .


작업 1 : 트윗

BlooP : 경계 루프 만 있습니다. ;) # 프로그래밍 #goodtimes

해시 태그 및 이모티콘을 포함한 표준 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'를 검색하면 하나의 결과가 나오지만 (이 답변에도 불구하고) 오 탐지이며 실제로 언어를 언급하지는 않습니다.
  • 로제타 코드 페이지 . 이것은 실제로 챌린지가 게시 된 후에 생성되었지만 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. 숫자 범위는 한 줄에 입력됩니다
  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

@Scimonster 점수 보너스에 대한 나의 해석은 언어에 0 개의 검색 결과가 필요하며 Rosetta Code, Esolang 또는 Wikipedia 중 하나에 나열되며 25 점을받을 수있는 고유 한 언어라는 것입니다. 내가 틀렸고 유일한 기준이 Rosetta Code, Esolang Wikipedia 에 페이지가 있어야한다는 것이라면 그에 따라 편집 할 것입니다.
Tony Ellis

아니요, 귀하가 기재 한 3 가지 사항은 챌린지에서 허용되는 기준입니다. 예를 들어 Wikipedia와 Rosetta Code가 모두 나열하면 10 포인트 보너스를받을 수 있습니다. 25 점 보너스는 Rosetta, Esolang 및 Wikipedia에있는 경우입니다.
Scimonster

@Scimonster 내가 본 것, 실수. 내 답변을 업데이트했습니다.
Tony Ellis

4

jq

codegolf.se 에 대한 14 개의 결과 중 어느 것도 언어에 관한 것이 아닙니다 . ( jq(대문자와 변형은) Pyth 자주 문 것 같다.)

Rosetta Code에 jq 카테고리 가 있습니다 .

당신은 할 수 있습니다 온라인으로 시도 하지만, 필요 최신 버전 1.5 아래 예제의 일부.

작업 1 : 트윗

jq는 JSON의 sed와 같습니다. sed, awk, grep 및 friends를 사용하여 텍스트로 재생할 수있는 것과 동일한 방식으로 구조화 된 데이터를 처리하는 데 사용할 수 있습니다.

(사이트에서 첫 번째 단락을 뻔뻔스럽게 트윗했습니다.)

작업 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 기능인 type matching을 보여줍니다. 패턴 일치와 같습니다. 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.