재배치 가능한 코드 볼링


14

코드 볼링 도전

소스 코드를 다시 정렬하는 방법에 관계없이 동일한 출력을 생성하는 프로그램이나 함수를 작성하십시오. (출력은 오류가 될 수 없습니다)


팬 그램 채점

  • 점수는 소스 코드에서 고유 한 문자의 양입니다.

    소스 코드 AJB가있는 3
    프로그램 의 점수는 소스 코드 AAJ가있는 2
    프로그램 의 점수는 소스 코드 111가있는 프로그램 의 점수가1

  • 이것은 변형입니다. 가장 높은 점수를받은 프로그램이 승리합니다!

(귀하의 편의를 위해 자동 채점 도구가 여기 에 만들어졌습니다 )


도전 규칙

  1. 입력
    프로그램 / 기능은 입력을받을 수 있습니다.

  2. 출력
    이 출력 될 수 있습니다 아무것도 당신이 원하는,하지만 nil이 아닌, null이 아닌, 비어 있지 않은, 비 오류해야한다. (출력은 1 바이트 이상이어야합니다)

  3. 재배치
    소스 코드의 재 배열 방식에 관계없이 출력은 동일해야합니다.

    예 :
       프로그램 : ABJ출력 hello world프로그램을 마찬가지로 : AJB, JAB, JBA, 등]

이것은 변형입니다. 문자 수가 가장 많은 프로그램이 승리합니다!


1
달성해야 할 구체적인 과제가 없다면이 과제는 너무 광범위합니다.
Dennis

2
0이 아닌 것은 무엇을 의미합니까?
Dennis

2
팬 그램 스코어링이 코드 볼링 작업을 수행하려는 시도이지만 이러한 과제에 실제로 코드 볼링 태그가 지정되어 있는지는 확실하지 않습니다 . 점수 매기기 메커니즘은 코드 볼링과는 상당히 다르므로 코드 도전을 사용 하거나 새 태그를 만듭니다.
Martin Ender

1
나는 Martin과 동의해야한다. 예를 들어이 과제 는 코드 골프가 아닙니다. 총 문자 수 (또는 바이트 수) 이외의 다른 것으로 점수를 매기면 더 이상 코드를 다루는 도전이 아닙니다.
Nathan Merrill

3
프로그램 / 기능이 종료되어야합니까? (예 : 0영원히 인쇄 할 수 있습니까?)
MildlyMilquetoast

답변:


18

UTF-8 인 경우 Lenguage, 1,112,064 점

내 프로그램은 가능한 모든 UTF-8 문자로 구성됩니다. "Hello world"를 출력하고 1.75 * 1076 yottabytes의 공간을 사용합니다.

(프로그램을 생성하려면 간단히 17498005810995570277424757300680353162371620393379153004301136096632219477184361459647073663110750484 문자를 사용하여 파일을 작성하면 가능한 모든 UTF-8 문자가 파일에 있어야합니다.)


2
당신은 천재입니다. 잠깐, 왜 내 컴퓨터가 고장입니까? : 'P
HyperNeutrino

유니 코드에는 1114112 문자가 있다고 생각 했습니까?
MilkyWay90 1

14

많은 언어, 2 점

0.

생산 0.0으로 0.또는 .0. 누락 된 정수 또는 소수 부분에 대해 0을 가정하고 시작 또는 끝에 소수점이있는 자유 번호 구문 분석이 필요합니다. 0000000.같은 점수를 줄 것입니다.

이것은 또한 다음 언어로도 작동합니다 (일부 경우에 표시된대로 다른 출력으로).

  • 파이썬 REPL
  • 자바 스크립트 REPL
  • MATLAB (생산 ans = 0)
  • 옥타브 ( ans = 0)
  • MATL (생산 0)
  • CJam
  • 망막 (생산 0)
  • 쌓아 (생산 0)

파이썬의 경우 가능성이 소진 될 수 있기 때문에 이것이 1보다 높은 점수를 얻는 유일한 방법이라고 생각합니다.

  • 이진 또는 단항 연산자는 마지막 문자로 실패합니다
  • 중 어떤 [](){}닫는 일이 먼저 오면 일치를 필요로 실패합니다
  • 탭이나 공백은 선을 시작할 수 없습니다. REPL에서는 줄 바꿈을 사용할 수 없습니다.
  • A는 , 첫 번째 문자가 될 수 없습니다
  • A는 #모든 것을 언급 할 첫번째 배치 및 출력을하지 생산
  • 시작 \은 유효하지 않은 줄 연속입니다.
  • 백틱 (Python 2)은 반드시 쌍을 이루어야하며 아무것도 둘러싼 것은 오류가 아닙니다
  • $, !, ?, 및 @기타 사용할 수없는 문자없이 사용할 수 없습니다

이것은 잎의 문자, 숫자, _, ., 따옴표.

  • 따옴표를 사용하면 문자열 이외의 문자열이 없으면 오류가 발생합니다.
  • 가능한 숫자가있는 문자와 _변수 이름을 지정하십시오.이 순열은 항상 존재하지 않습니다.

나뭇잎 숫자와 .. 다른 숫자를 치환하면 모든 숫자가이 아닌 한 다른 숫자를 제공합니다 0. 그래서 나는 0을 생각하고 .위의 점수를 얻는 유일한 방법 1입니다. 그러나 Python lexer를 잘 모르므로 무언가를 놓칠 수 있습니다.


11

CJam , 15 점

T U
V	LMOQR[]0q

온라인으로 사용해보십시오!

항상 인쇄합니다 0000:

  • 0 그냥 0을 밀어 넣습니다.
  • T, U, V제로 미리 초기화되는 변수이다.
  • L, M, O, Q, R그들이 출력에 표시되지 않도록, 비어있는 목록에 사전 초기화되는 변수입니다.
  • []수도 있고 목록에 물건을 포장하지 않을 수 있습니다,하지만 그들은 정확하게 일치하지 않아도 출력 어쨌든 인쇄 평평하게됩니다.
  • q 비어있는 입력을 읽으므로 출력에도 표시되지 않습니다.
  • 파서에서 줄 바꿈, 공백 및 탭을 무시합니다.

이것은 CJam과 같은 언어에 대한 훌륭한 답변입니다! 니스
알버트 Renshaw

소문자 r와 비슷한 것을 달성하기 위해 소문자를 추가 할 수 q있습니까?
Albert Renshaw

1
@AlbertRenshaw 둘 다 가질 수 없습니다. EOF에서 오류가 발생하기 때문입니다.
Martin Ender

9

MATL , 3 5 6 포인트

공백을 추가하는 아이디어는 Bijan의 답변 에서 가져 왔습니다 .

lv
 T1

코드 또는 그 순열은 개행으로 구분 된 세 개의 코드를 출력합니다.

온라인으로 사용해보십시오!

설명

  • l기본적으로 함수 는 1 번을 스택으로 푸시합니다.
  • 리터럴 1도 마찬가지입니다.
  • 리터럴 T푸시 true번호 중 하나로 표시된다.
  • 공백과 줄 바꿈은 구분 기호이며 여기서는 아무것도하지 않습니다.
  • v지금까지 전체 스택을 열 벡터로 연결합니다. 예를 들어 vafter T는 처음 두 숫자를 열로 연결 한 다음 다음 숫자를 푸시합니다. 초기 값 v은 빈 배열을 생성합니다.

코드 끝에서 스택은 다음 규칙과 함께 암시 적으로 표시됩니다.

  • 스택의 각 요소 또는 배열은 다른 줄에 표시됩니다.
  • 각 요소와 함께 열 벡터가 다른 선에 표시됩니다.
  • 빈 배열은 출력을 일으키지 않습니다.

따라서 입력 문자의 순열은 1다른 행에서 세 번 생성 됩니다.


설명? 이것이 어떻게 작동하는지 궁금합니다.
스파클 포니 동지

@Sparkle 설명 추가
Luis Mendo

좋은! 또한 Removing any part of the source code however should cause that specific output to not be produced.게시 할 당시 챌린지 에서이 텍스트를 가지고 있음을 알고 싶었 습니다. 추가 할 것을 의미하지 않았으며 제거되었습니다. 어쩌면 그 점수를 높이는 데 도움이 될 것입니다.
Albert Renshaw

1
@AlbertRenshaw 감사합니다! 더 많은 포인트
Luis Mendo

내 생각을 훔쳤다고 비난하고 있습니다. 그래도 문제는 아닙니다.
Bijan

6

젤리 , 득점 (53) (101)

¶ ¤$¥&+ABDFHNPQSUVX^_aborv|®²×ȧȯḄḅḌḞḢḤḷṀṂṚṛṠṢṪẠạị«»()kquƁƇƊƑƘⱮƝƤƬƲȤɓɗƒɦƙɱɲƥʠɼʂƭʋȥẸẈẒẎŻẹḥḳṇọụṿẉỵẓḋėġṅẏ

Jelly의 코드 페이지 에 속하는 문자 만 사용 하십시오 .

Jelly는 암시 적 입력을 가지며 위의 코드 문자열의 0첫 번째 절반 (최대 포함 ạị«»)은 대부분 0 또는 하나의 0 만 포함 된 목록 ( 또는 dyads의 경우 이러한 두 입력은 0 또는 하나의 0 만 포함하는 목록을 반환합니다.

예외는 다음과 같습니다.

  • 공백 : 코드 페이지에 있어도 무시됩니다.

  • 필로우는 링크를 분리하지만 (줄 바꿈과 마찬가지로 링크는 동일하지만) 다른 바이트는 코드를 참조하지 않습니다.

  • 풍뎅이 ¤는 파서에게 nilad (또는 상수)에서 시작하여 남아있는 모든 것을 상수 (및 첫 번째 원자로 작동)로 처리하도록 지시합니다.

  • 달러 $는 파서에게 두 개의 링크를 모나드로 남겨 두도록 지시한다.

  • Yen은 ¥비슷하게 파서에게 두 개의 링크를 왼쪽 링크로 취급하도록 지시합니다.

  • 권장 사항 ®은 레지스트리의 값을 처음에 회상합니다 0(상대 저작권) ©. 첫 번째 원자로 사용되면 처음에는 원자로 사용되기 때문에 중단됩니다. 링크는 왼쪽에있는 링크의 특성에서 아직 설정되지 않았습니다.

다음은 괄호의 코드, (그리고 )및에가, 현재 사용되지 않는 코드 포인트이며, 이러한 모든 GET 구문 분석하고 각이 (새로운 체인을 일으키는 많은 줄 바꿈 같은 것, 그들은 줄 바꿈과 같은 호출 링크를 만드는 효과를 가지고 있지 않지만, 그러나 아무것도 시도하지 않으므로 문제가되지 않습니다).


1
인터프리터가 코드를 처리하기 전에 문자를 삭제하므로 코드 페이지 외부에 모든 문자를 무료로 추가 할 수 있습니다. 그래도 non-nil이 무엇을 의미하는지 모르겠습니다.
Dennis

1
도전의 정신은 아마도 캐릭터가 페이지에 있어야한다는 것입니다. 나는 non-nil에 대해 물었고 응답은 최소 출력 1 바이트를 지정하는 것이 었습니다.
Jonathan Allan

@Dennis는 괄호로 구문 분석을 수행하는 데 필요한 올바른 용어에 대한 아이디어가 있습니까?
Jonathan Allan

사용하지 않는 모든 문자는 줄 바꿈처럼 새 링크를 시작합니다.
Dennis

1
이를 정의되지 않은 동작이라고합니다. : P
Dennis

4

TI 기본 (83 시리즈), 93 포인트 (TI-84 Plus에서 99)

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZθnπeiAnsrandgetKeyZXsclZYsclXsclYsclXminXmaxYminYmaxTminTmaxθminθmaxZXminZXmaxZYminZYmaxZθminZθmaxZTminZTmaxTblStartPlotStartZPlotStartnMaxZnMaxnMinZnMinΔTblTstepθstepZTstepZθstepΔXΔYXFactYFactTblInputNI%PVPMTFVP/YC/YPlotStepZPlotStepXresZXresTraceStep

모든 자리 (θ 포함한 모든 1 바이트 변수 N 극성 순차적 그래프로, 독립 변수)는, 상수는, π 전자I 일부하지 않은 아주-변수 ( Ans, randgetKey) 및 59 가지 창 변수 (정의 된 모든 변수 ).

암시 적 곱셈은 어떤 순서로든이 결과를 0으로하도록 보장합니다. 이것이 새로운 계산기에서 실행되는 경우 모든 변수는 0입니다. 심지어하지 않을 경우, getKey프로그램이 값을 반환하기 전에 키를 누를 할 시간이 없기 때문에 0이 될 것입니다.

TI의-84 플러스 이상에서 우리는 토큰을 추가하여 6 더 많은 포인트를 얻을 수 있습니다 getDate, getTime, startTmr, getDtFmt, getTmFmt, isClockOn. 그 결과 지금은 항상있을 것입니다 {0 0 0}때문에 getDategetTime반환 길이 3의 목록과 각 요소에 대한 묵시적 곱셈 배포합니다.

나는 이것이 가능한 모든 토큰이라고 생각합니다 : 실제 명령은 접두사, 접두사 또는 접미사 (프로그램의 시작 또는 끝에서 작동하지 않음을 의미)이며 다른 변수는 정의되지 않을 수 있습니다 ( 익숙한).


이것은 영리합니다. 특히 인상적인 하하는 아니지만 실제로 영리합니다! +1
Albert Renshaw

3

(비경쟁) Brainf-ck, 63 바이트

글쎄, 이것이 부정 행위로 간주되는지 모르겠지만, ...

.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

점은 현재 문자 (0x00)를 인쇄하고 나머지 문자는 아무 것도 수행하지 않습니다. 기술적으로 무한 확장 될 수 있으므로 부정 행위로 간주 될 경우 알려 주시기 바랍니다.


나는 무작정 출력이라고 생각합니다
Albert Renshaw

아, 대답을 삭제하거나 비경쟁으로 표시해야합니까?
brianush1

1
97 개의 입력 가능한 문자가 있으며 그 중 7 개는 (8-1)을 사용할 수 없으므로 90이라고합니다.
Bijan

@ brianush1 당신은 다른 사람들이 볼 수 있도록 비 경쟁으로 남겨 둘 수 있습니다. 출력이 1 바이트 이상이어야한다는 것을 설명하기 위해 질문을 조금 더 편집하겠습니다
Albert Renshaw

15
@AlbertRenshaw (이러한 모든 의견에 대해 죄송합니다.) 출력이 1 바이트 여야하는 경우 NULL 문자는 값이 0이지만 바이트 문자이므로 카운트해야합니다.
brianush1

3

하스켈, 3 점

+ 1

이 코드를 어떻게 재 배열하더라도 항상 입력을 증가시키는 함수를 반환합니다. repl에서의 사용 예 :

>(+ 1) 1
2
>(1+ ) 1  
2
>( +1) 1
2

2

√ å ı ¥ ® Ï Ø ¿ , 128,234 (?) 포인트

@DestructibleLemon의 도움으로 128,234에 도착했습니다. 이 프로그램은 모든 유니 코드 문자 (128237)는 제외시켰다 사용 o, Oł. 이상하게도, 이들 중 2 개는 출력 명령입니다.

그러나 어떤 언어도 그러한 문자를 모두 사용할 수는 없습니다. 이 언어는 인식하지 못하는 명령을 무시합니다. 문제 해결됨.

이 언어는 기본적으로 다음을 출력합니다.

===== OUTPUT =====



==================

이것은 비 -null, 비 -null 및 비-오류입니다.

참고 :이 규칙이 작성되지 않은 규칙을 위반하면 주석으로 알려주십시오.이를 변경하겠습니다. 내 점수를 알고 있다면 (이것이 허용된다고 가정) 의견에도 게시하십시오.


어떤 문자 세트를 사용합니까? utf 8? utf-16? 모든 유니 코드를 사용합니까?
Destructible Lemon

@DestructibleLemon github 페이지에서 인코딩에 "CP-1252"를 사용하는 것 같습니다.
brianush1

@DestructibleLemon 명령은 모두 CP-1252 (Windows-1252)에 있지만 모든 유니 코드 문자를 유효한 구문으로 사용할 수 있습니다
caird coinheringaahing

분명히 128,237 개의 유니 코드 문자가 있으므로 128,234입니까? en.wikipedia.org/wiki/Unicode#cite_note-24
Destructible Lemon

다른 답변에 따르면 분명히 1,112,064 개의 유니 코드가 있으므로 더 이상 확실하지 않습니다
Destructible Lemon

1

J, 3 바이트

 1

문자 1, 공백 및 줄 바꿈은 항상 1을 인쇄합니다.



1

도트 , 1,114,111 자 (유니 코드를 사용하는 경우).

<87 dots here> Every Unicode character except NUL and . here

설명:

1                                           leading binary number
1010                                        010 increments the value under the pointer
1010111                                     111 prints out chr(1)

따라서 결과 이진 문자열은 1010111이며 십진수는 87로 변환되므로 87 개의 점이 필요합니다.

다른 모든 문자는 주석이므로 Python3은 파일 읽기를 중지하고 점은 주석이 아니기 때문에 점을 제외하고 NUL을 제외한 모든 문자를 사용합니다.


0

Prelude , 1,112,051 점

인쇄 가능한 ASCII 만 고려하면 [\t\n -~]점수는 84 입니다. 모든 유니 코드 코드 포인트를 고려 하면 점수는 1,112,051 입니다.

!
" #$    %&'+,-./0:;<=>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

(그 다음에 모든 문자를 추가 [\u{7f}-\u{10ffff}]하십시오.)

항상 인쇄하십시오 0.


Prelude는 병렬 스택 기반 언어이며 스택은 무한한 0으로 미리 채워져 있습니다.

  • +: 두 개의 값 (항상 0)을 팝한 후 추가하고 (0) 스택으로 푸시합니다.
  • -: 두 개의 값 (항상 0)을 팝하고 빼고 (0) 스택으로 푸시합니다.
  • #: 값을 팝하고 버립니다.
  • !: 값을 팝하여 숫자 로 출력 (항상 0) (사양은 "문자", 인터프리터는 "숫자", 어느 쪽이든 바이트가 인쇄 됨)
  • 0: 0을 누릅니다.
  • ^, v, V: 그들은 항상 공을 밀어 수 있도록 밀어 이전 / 다음 병렬 프로그램 ( "목소리")하지만, 모든 "목소리"의 스택의 상단 값은 0으로 채워진다.
  • 다른 문자 : no-op.

따라서 피해야 할 문자는 13 자뿐입니다.

  • (, ): 짝을 이루지 않은 괄호로 인해 오류가 발생합니다
  • 19: 0 만 출력하고 싶습니다.
  • ?: 아무 것도 입력하고 싶지 않습니다.
  • *: 한 줄로 구성된 줄 전후에 코드에 대한 일관성 검사가 매우 복잡 *합니다. 따라서 새 줄을 제거하거나을 제거해야합니다 *. 레퍼런스 구현은 파이썬 2의 사용 .readline()"새로운 라인"을 의미 할 수 \r또는 \n. 따라서을 제거하는 것이 좋습니다 *.

0

데드 피쉬 , 86 점

o.ABCDEFGHIJKLMNOPQRSTUVWXYZabcefghjklmnpqrtuvwxyz?!|[]_-();'"*&^$#@!1234567890+=<>,/\:

그것이 불법이라면, 또한

o

(점수 1)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.