N 번째 숫자의 N 배 프로그램


10

양의 정수 배열을 A입력으로 받으면 , 반복 될 때 배열 kkth (1-index) 값을 출력 하는 프로그램을 생성하십시오 .

예를 들어, 배열이 [1,11]이면 출력은을 출력 1하고 두 번 반복하면 output을 출력하는 프로그램이어야합니다 11. print(end="1");Python 3 과 같은 코드 작동 : print(end="1");1을 print(end="1");print(end="1");인쇄하고 11을 인쇄

모든 테스트 사례를 해결하기위한 가장 작은 코드 길이의 합이 승리합니다. 메타 코드는 60 년대에 500 개의 테스트 사례를 해결해야하며 각 솔루션 코드는 10 초 내에 반환되어야합니다. 메타 코드와 솔루션 코드는 같은 언어 일 필요는 없지만 메타 프로그램이 생성하는 모든 솔루션은 동일한 언어 여야합니다.

사전 테스트 데이터 및 생성기를 여기에서 볼 수 있습니다 . 7 일 후 제출 시간 합계 (예 : 12:34 평균 1234)를 임의 시드로 사용하고 최종 테스트 사례로 다른 테스트 사례를 생성합니다.


최종 시드는 GMT + 8에서 7335이므로 최종 테스트 데이터는 여기에 있습니다.


1
"k 회 반복"이란 무엇을 의미합니까? NewSourceCode = 소스 코드를 k 번 반복합니까? 예를 들어 SourceCode = "ABC", k = 3, NewSourceCode = "ABCABCABC"?
tsh

print(end="1");2 회 반복print(end="1");print(end="1");
l4m2

1
"코드 길이의 합"이란 무엇입니까? 둘 이상의 프로그램을 제출해야합니까?
tsh

500 개의 프로그램을 생성하는 하나의 프로그램을 제출하십시오
l4m2

2
@Emigna 아니요, 각 목록마다 단일 프로그램이 생성됩니다. 이 프로그램은 그냥 말 x. 그런 다음 x목록의 첫 번째 요소를 제공하고 목록 xx의 두 번째 요소를 xxx제공하고 세 번째 요소를 제공해야합니다.
Chris

답변:


4

파이썬 3 , Stax 생성

이것은 다양한 전략을 사용합니다. 대부분의 전략은 특정 조건에서만 적용되지만 항상 사용할 수있는 대체 전략이 있습니다. 마지막으로 가장 작은 후보 프로그램이 선택됩니다.


from functools import reduce
from math import sqrt

symbols = " !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_abcdefghijklmnopqrstuvwxyz{|}"

def uncycle(arr):
    for size in range(1, len(arr)):
        if all(e == arr[i % size] for (i, e) in enumerate(arr)):
            return arr[:size]
    return arr

def constant(val):
    return "A" if val == 10 else str(val)

def shift(val):
    if not val: return ""
    return constant(abs(val)) + "+-"[val < 0]

def encode(a, offsetMode):
    result = "";
    if offsetMode:
        for i in range(len(a) - 1, 0, -1):
            a[i] -= a[i - 1]
    for i in range(len(a)):
        parts = []
        signBit = (a[i] < 0) * 2
        continuing = (offsetMode and i == len(a) - 1) * 1
        remain = abs(a[i])
        while remain > 22:
            parts.insert(0, remain % 46 * 2 + continuing);
            remain //= 46
            continuing = 1

        parts.insert(0, remain * 4 + signBit + continuing)
        result += "".join(symbols[p] for p in parts)
    
    return result

def cram(arr):
    flat = encode(arr, False)
    offset = encode(arr, True)
    return offset if len(offset) < len(flat) else flat;

def issquare(num):
    root = int(sqrt(num))
    return root * root == num

def isgeometric(arr):
    r = arr[0]
    return all(r ** (i + 1) == e for (i,e) in enumerate(arr))

def generateProgram(arr):
    candidates = []
    rotated = uncycle(arr)
    rotated = rotated[-1:] + rotated[:-1]

    deltas = [b - a for a,b in zip(arr, arr[1:])]

    # single constant strategy
    if len(arr) == 1:
        candidates.append(constant(arr[0]))

    # repeated constant
    elif len(set(arr)) == 1:
        num = arr[0]
        if num == 10: candidates.append("A")
        if num % 2 == 0: candidates.append(constant(num // 2) + "H")
        if issquare(num): candidates.append(str(int(sqrt(num))) + "J")
        candidates.append(constant(num - 1) +  "^")

    # repdigit
    if len(arr) == 2 and 10 < arr[1] == arr[0] * 11 < 100:
        candidates.append(str(arr[0]) + "p")

    # single digits
    if max(arr) < 10:
        candidates.append("".join(map(str, rotated)) + "E|X@")

    # max 10
    if max(arr) == 10 and rotated[0] != 1:
        candidates.append("".join(str(e - 1) for e in rotated) + "E|X@^")

    fns = [
        ("", lambda x: x),
        ("H", lambda x: 2 * x),
        ("^", lambda x: x + 1),
        ("J", lambda x: x * x),
        ("Hv", lambda x: 2 * x - 1),
        ("H^", lambda x: 2 * x + 1),
        ("^H", lambda x: 2 * x + 2),
        ("HJ", lambda x: 4 * x * x),
        ("JH", lambda x: 2 * x * x),
        (":T", lambda x: x * (x + 1) / 2),
        ("|F", lambda x: reduce(lambda a, b: a*b, range(1, x+1))),
        ("J^", lambda x: x * x + 1),
        ("^J", lambda x: x * x + 2 * x + 1),
    ]
    for (stax, fn) in fns:
        if all(fn(i + 1) == e for (i,e) in enumerate(arr)):
            candidates.append("|X" + stax)

    # fixed delta
    if len(set(deltas)) == 1:
        delta = deltas[0]
        start = arr[0] - delta
        if start == 0:
            candidates.append(shift(delta))
        if delta == 1:
            candidates.append("|X" + shift(start))
        elif delta == -1:
            candidates.append("|x" + shift(start))
        elif delta > 1:
            candidates.append("|X" + constant(delta) + "*" + shift(start))
        elif delta < -1:
            candidates.append("|x" + constant(-delta) + "*" + shift(start))

    # geometric series
    if isgeometric(arr):
        candidates.append(constant(arr[0]) + "*")

    # prefix
    if len(arr) == 2 and arr[1] // 10 == arr[0] < 10:
        candidates.append("." + str(arr[1]) + "|X(")

    # suffix
    if len(arr) == 2 and arr[0] % 10 == arr[1] < 10:
        candidates.append("." + "".join(map(str, arr)) + "|X)")

    # uncycled cram
    candidates.append('"' + cram(rotated) + '"!|X@')
    
    candidates.sort(key=len)
    return candidates[0]

while True:
    arr = eval(input())
    prog = generateProgram(arr)
    print(prog)

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

업데이트 : 유효성 검사 각 프로그램의 각 다중성을 개별적으로 실행하는 데 시간이 걸립니다. 동시에 모두 실행할 수 있습니다. 이렇게하려면 작은 코드 조각을 사용해야합니다. 몇 가지 책임이 있습니다.

  1. 암시 적 출력이있는 경우 수행하십시오. 일반적으로 stax 프로그램의 끝에서 다른 출력이 없으면 스택 상단이 인쇄됩니다. 동일한 소스 파일에서 여러 프로그램을 실행할 때이를 명시 적으로 수행해야합니다.

  2. 두 스택을 모두 비 웁니다.

  3. 레지스터를 재설정하십시오. 이러한 프로그램의 경우 x 레지스터 만 사용됩니다.

이 상용구는 모든 개별 프로그램을 실행 한 후에 적용해야합니다.

|d{P}{zP}?0XLd

예를 들어, 입력 [5,2,7,3]은 stax 프로그램을 생성합니다 3527E|X@. 네 가지 다중성을 모두 한 번에 테스트 할 수 있습니다.

3527E|X@
|d{P}{zP}?0XLd

3527E|X@3527E|X@
|d{P}{zP}?0XLd

3527E|X@3527E|X@3527E|X@
|d{P}{zP}?0XLd

3527E|X@3527E|X@3527E|X@3527E|X@
|d{P}{zP}?0XLd

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

이런 식으로, 중단이 없다고 가정하면 동일한 실행에서 모든 프로그램의 모든 다중성을 테스트 할 수 있습니다. 500 개가 모두 완료되면 아마도 가장 큰 stax 프로그램 일 것입니다.


최종 점수 7862
l4m2

4

펄 5 -p 생성 펄 5 -p 오버 헤드 19 17 13

@Dom Hastings 덕분에 -1

한 입력에 대한 점수는입니다 length of the input + 13. 더 큰 입력을 위해 자체 압축 해제 프로그램을 생성하여 분명히 향상시킬 수는 있지만 귀찮게하지는 않습니다.

STDIN에서 한 줄에 입력 배열을 쉼표로 구분하여 제공하십시오.

#!/usr/bin/perl -p
chomp;$_="}{\$_=($_)[\$%++]"

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

n입력없이 출력 연결 시간을 실행합니다 (예 : / dev / null에서 리디렉션)

입력을 위해이를 실행 2,6,4,7하고 결과 프로그램을 4 번 반복하는 샘플 방법 :

perl -p '}{$_=(3,6,4,7)[$%++]}{$_=(3,6,4,7)[$%++]}{$_=(3,6,4,7)[$%++]}{$_=(3,6,4,7)[$%++]' < /dev/null

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

STDIN에서 읽으려는 결과 프로그램이 마음에 들지 않으면이 버전을 오버 헤드 17로 사용하십시오.

#!/usr/bin/perl -p
chomp;$_="1/!say+($_)[\$-++],"

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

입력을 위해이를 실행 2,6,4,7하고 결과 프로그램을 4 번 반복하는 샘플 방법 :

perl -E '1/!say+(2,6,4,7)[$-++],1/!say+(2,6,4,7)[$-++],1/!say+(2,6,4,7)[$-++],1/!say+(2,6,4,7)[$-++],'

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

필요한 버전을 인쇄 한 후이 버전이 충돌합니다


이 프로그램 1 바이트 덜 나는 꽤 점수를 얻을 물론 이죠,하지만하지 해요 : s/ /,/g;$_="die say+($_)[\$-++],"?
Dom Hastings

@DomHastings 실제로 그렇습니다.
Ton Hospel

최종 점수
17106


3

APL (Dyalog Unicode)

익명 접두사 람다. 프로그램 본문을 반환합니다.

 {
     1=≢⍵:⍕⍵  single element

     (2=≢⍵)∧(⍵[2]=11×⍵[1]):⍕⍵[1]  2, 22 etc.

     1=≢∪⍵:'⊢',⍕⊃⍵  all the same

     (⊢≡⊃×⍳∘≢)⍵:'+',⍕⊃⍵  linear

     ((⌊=⊢)!⍣¯1⊢⊃⍵)∧(1∧.=1↓⍵):'!',⍕!⍣¯1⊃⍵  factorial followed by all 1s

     (⍵[2]∧.=1↓⍵)∧(⍵[1]=10|2⊃⍵):(⍕⊃⍵),'⌈',(⊃⍕2⊃⍵)  b ab ab ab

     e←{∊⍉2 2'+×',⍕¨⍵}¨⍸(⊃⍵)=∘.×⍨⍳10
     b←⍵∘≡¨e(({0::⍬  ⍎⍵}¨,\)⍴∘⊂)¨⍨(≢⍵)
     ∨/b:⊃b/e

     Q←{'''',⍨⍵/⍨1+''''=⍵}
     (5∧.≤⍵)∧(≢⍕⍵)>6+(+/14=⍵)+≢⍵:'{⍺←⎕AV⍳⊃⋄1⌽⍺⊢⍵}''',Q AV[⍵]  string fallback

     (≢⍕⍵)>9+(+/5=⍵)+≢⍵:'{⍺←¯4+⎕AV⍳⊃⋄1⌽⍺⊢⍵}''',Q AV[4+⍵]  offset string fallback

     '{⍺←⊃⋄1⌽⍺⊢⍵}',⍕⍵  fallback
 }

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

행동 양식

이것은 다양한 방법을 탐색하고 사용 가능한 첫 번째 방법을 반환하며 결국 보편적으로 적용 가능한 방법으로 돌아갑니다.

단일 요소

목록에 요소가 하나만 있으면 그대로 반환됩니다.

2, 22 등

한 자릿수를 반복하여 11 배 더 큰 숫자를 생성 할 수 있습니다.

모두 같은

가장 오른쪽 ( ) 번호 만 반환합니다 .

선의

f (n) = kxn 시퀀스는 첫 번째 항 앞에 플러스를 삽입합니다.

계승 다음에 모두 1

첫 번째 숫자 = N! m 이후의 숫자가 1 인 경우, 다음 !m때문에 용액은 !mN이고, m!m1 및 !11이다.

b ab ab ab

모든 두 자리 숫자가 모든 한 자리 숫자보다 크기 때문에 첫 번째 숫자의 앞면이 두 번째 숫자의 뒷면에 붙어있는 연속 최대 값이 솔루션입니다.

3 줄 코드

형식의 수식 +a×b이 유효한지 확인하십시오 .

문자열 대체

5 미만의 숫자가없는 긴 시퀀스 (4는 줄 바꿈이므로)는 SBCS의 문자로 인코딩 될 수 있습니다.

오프셋 문자열 대체

5 미만의 숫자가 있으면이를 피하기 위해 9 씩 증가시킵니다.

폴백

문자열 "{⍺←⊃⋄1⌽⍺⊢⍵}"과 문자열 화 된 ( ) 입력 의 간단한 문자열 연결 . 예를 들어 [3,1,4]프로그램 본문을 반환합니다 {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4.

중괄호 안의 부분은 모호한 함수이므로 접두사 함수 또는 접두사 함수일 수 있습니다. 따라서 가장 왼쪽 인스턴스는 접두사 모드로 실행되고 다른 모든 인스턴스는 접두사 모드로 실행됩니다. 모드 사이의 차이점 은 왼쪽 인수를 나타내는 값 이 있는지 여부 입니다. 그렇지 않은 경우 기능이 할당됩니다 (먼저).

대체 방법 설명

{} 익명의 람다 :

⍺←⊃ (더 왼쪽 인자가없는 경우 ) 기능 지정 (첫 번째)에

 그때:

이 시점에서 다음 코드 는 숫자 목록 (접두사 호출) 또는 함수 "first"(접두사 호출) 여부에 따라 서로 다른 두 가지를 의미합니다 .

 경우 숫자의 목록입니다 :

  ⍺⊢⍵ 올바른 주장에 찬성하여 왼쪽 주장을 폐기

  1⌽ 한 단계 왼쪽으로 회전

 경우는 "최초의"기능입니다 :

  ⊢⍵ 옳은 논쟁을 제기하다

   그 첫 번째 요소를 선택

  1⌽ 한 단계 회전 (스칼라에서 작동하지 않음)

대체 방법 실행 예

3 1 4코드를 실행 {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4하면 "first"함수가 첫 번째 요소에 할당 되어 첫 번째 요소가 반환됩니다. 3.

실행 {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4우단 람다 "캡처"왼쪽의 수 3 1 4는 좌측 인수로하기 때문에, 대신에 폐기되는 값 갖는다 3 1 4후 한 단계 좌측 및 수율을 회전하는 1 4 3결과로한다. 그런 다음 가장 왼쪽의 람다에 대한 유일한 인수로 사용됩니다. 여기서 "첫 번째"함수가되어 결과가 첫 번째 요소가됩니다. 1.

실행 {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4가장 오른쪽 람다 "캡처"중앙 수 있습니다 3 1 4다음 오른쪽 인수에 찬성 폐기의 왼쪽 인수로 3 1 4왼쪽이 한 단계 회전 1 4 3. 그런 다음 가장 3 1 4왼쪽의 인수 와 함께 가운데 람다의 오른쪽 인수로 사용됩니다 . 왼쪽 인수는 오른쪽에 대해 버려지고 한 단계 왼쪽으로 회전합니다 4 3 1. 이것은 가장 왼쪽에있는 람다의 유일한 인수가되므로 "첫 번째 함수"가되어 첫 번째 요소를 반환합니다. 4.

채점

실제 데이터를 사용 하여 테스트 할시기가 되면 이 테스트 하니스 (사전 테스트 데이터로 채워진 링크)를 사용하십시오. 테스트 사례는 입력 필드에 들어가고 출력은 모든 500 개 프로그램의 총 바이트 수입니다. (또한 오류가 발생하지만 나중에 입력을 그대로 평가하려고하기 때문입니다.)


1
최종 점수 14028
l4m2

2

´⎚´§´⪪⪫IA ”y¦ Lυ⊞υω

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

´⎚´§´⪪

리터럴 문자열을 출력합니다 ⎚§⪪.

⪫IA 

입력 배열을 문자열로 캐스트하고 공백과 결합한 후 인쇄하십시오.

”y¦ Lυ⊞υω

리터럴 문자열을 출력합니다 ¦ Lυ⊞υω.

예를 들어 출력은 5,17,7,13,2입니다 ⎚§⪪5 17 7 13 2¦ Lυ⊞υω. 온라인으로 사용해보십시오! 설명:

마지막 출력 만 보이도록 캔버스를 지우십시오.

§⪪5 17 7 13 2¦ Lυ

미리 정의 된 목록의 길이를 가져옵니다 u. 이를 사용하여 공백으로 분할 된 정수 목록을 색인화하고 선택한 요소를 출력하십시오.

⊞υω

더미 변수를 사전 정의 된 list로 푸시 u하면 다음 사본이 목록의 다음 요소를 출력합니다.

총 출력 길이 = (모든 목록의 모든 정수 길이) + (모든 목록의 정수 수) + (목록 수 * 9) 문자 (SBCS).


2

하스켈 , 하스켈 생성

main = interact $ ("main=print$("++) . (++"!!)$ -1\n +1--")

온라인으로 사용해보십시오! 첫 번째 테스트 케이스의 [5,2,7,3,2,3,15,10,7,2,14,11,16,16,3,3,4,3,8,4]경우 다음 프로그램을 생성합니다.

main=print$([5,2,7,3,2,3,15,10,7,2,14,11,16,16,3,3,4,3,8,4]!!)$ -1
 +1--

그것을 시도 하면 , 두 배trippled . 이것은 소스를 두 배로 늘리고 출력을 두 배로 내 Haskell 답변과 동일한 접근 방식을 사용합니다 .

생성 된 각 프로그램의 길이는 입력 목록의 길이에 문자열 + 25를 더한 길이이므로 현재 사용 가능한 테스트 케이스의 점수는 12266 + 500 * 25 = 24766입니다. 이것은 코드 대 데이터 비율이 기본적으로 동일하다는 것을 보여 주며 점수를 줄이는 작은 압축 해제 코드를 작성할 수 있는지 의심합니다. 목록이 훨씬 큰 경우 가능할 수 있습니다.


1

파이썬 2 , 파이썬 2 생성

import sys
a=`input()[::-1]`.replace(' ','')
sys.stdout.write('print%s[-open(__file__,"a").tell()/%s]#'%(a,len(a)+37))

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

입력

[10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29]

생성 된 프로그램은

print[29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10][-open(__file__,"a").tell()/98]#

98 바이트입니다.

에서 적응 이 솔루션 에서 "나는 이중 소스, 당신은 출력을 두 배로!".

젠장,이 답변을 작성하기 전에 두 개의 짧은 답변이 나타났습니다.


여분 개행 그것을위한 출력하게 단부에있을 k시간
l4m2

예상되는 동작은 "인쇄 문이 쉼표로 끝나지 않는 한 '\ n'문자가 끝에 쓰여집니다."입니다. TIO가 stdout에 추가 줄 바꿈을 표시하는 이유를 모르겠습니다.
Bubbler

후행 "무언가"를 제거하도록 변경 print되었습니다 sys.stdout.write.
Bubbler

최종 점수 30606
l4m2

1

자바 8, 파이썬 2 생성

interface M{static void main(String[]a){int l=a[0].length();System.out.print("print"+a[0]+"[open(__file__,'a').tell()/"+(l+35+(l+"").length())+"]#");}}

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

즉, [3,4,5,6,7]이 Python 2 프로그램을 생성합니다.

print[3,4,5,6,7][open(__file__,'a').tell()/48]#

온라인으로 한 번 시도하십시오 . 온라인으로 두 번 시도하십시오 . 온라인으로 세 번 시도하십시오 .

생성 된 파이썬 프로그램을 기반으로 Mr.Xcoder @ 에 대한의 대답은 세 번째 매력의 도전 합니다.

설명:

자바 8 코드 :

interface M{                    // Class
  static void main(String[]a){  //  Mandatory main-method
    int l=a[0].length();        //   The length of the first argument
                                //   (Note that this is the length of the input as String,
                                //   not the size of the array)
    System.out.print(           //   Print:
      "print"                   //    Literal "print"
      +a[0]                     //    Appended with the argument
      +"[open(__file__,'a').tell()/"
                                //    Appended with literal "[open(__file__,'a').tell()/"
      +                         //    Appended with an integer that is formed by:
       (l                       //     Getting the length we got earlier
       +35                      //     +34 for the rest of the Python 2 code + 1
       +(l+"").length())        //     + the length of the length (<10→1; 10-99→2; etc.)
       +"]#");}}                //    Appended with literal "]#"

파이썬 2 코드 :

print                        # Print
 [3,4,5,6,7]                 #  From this array
 [                           #   The `k`'th item,
  open(__file__,'a').tell()  #   where `k` is the length of its own source code
  /                          #   divided by
  48                         #   the length of its own source code (once) + 1
 ]#                          # With a trailing comment, so we can repeat the program

0

배쉬, 출력 프로그램에 Perl 5

Bash 프로그램은 다음과 같이 호출 할 수 있습니다 script.sh 1,2,3.

Perl 프로그램은 -E플래그 와 함께 호출되어야합니다 .

echo "shift@a;@a=($1)unless@a;END{say\$a[0];exec'true'}"

perl입력에 대해 생성 된 코드 4,7,8는 다음과 같습니다.

shift@a;@a=(4,7,8)unless@a;END{say$a[0];exec'true'}

꽤 무차별 한 힘. 배열의 요소를 제거하고 ( perl처음에는 배열이 존재하지 않는 것을 신경 쓰지 않음) 아직 설정되지 않은 경우 설정합니다. 그런 다음 끝에 배열의 첫 번째 요소를 에코합니다. ( END블록이 마지막으로 실행됩니다). 는 exec 'true'그래서 그 또한, 프로그램을 종료END 블록이 실행되지 않습니다.

예:

#Once
$ perl -E "$(bash script.sh 4,7,8)"
4

#Duplicated twice
$ perl -E "$(bash script.sh 4,7,8)$(bash script.sh 4,7,8)"
7

#Duplicated thrice
$ perl -E "$(bash script.sh 4,7,8)$(bash script.sh 4,7,8)$(bash script.sh 4,7,8)"
8

최종 점수 34106
l4m2

0

파이썬 2, C ++ 생성

이것은 어떤 기록도 이길 수는 없습니다. 주로 그것을 수행하는 방법을 알아낼 수 있는지에 대해 주로 관심이있었습니다. main이 한 번만 정의되도록 #ifdef

import sys
print("""#include <stdio.h>
#ifndef A
#define A
int v;
int d[]={""" + sys.argv[1] + """};
struct C{C(){v++;}};
int main(void){ printf("%d",d[v]); }
#else
C c1;
#endif
""")

0

룬문자 마법 부여 , 룬문자 생성

74akw94/85akw
R32B~~?US' Sqq1Ky1Ky
\i<{1[lil1-{S{)]{{1KyB
D'0$'´$$' $     Rl0) ?
R"{Zs$;|1|l;|y"@
"UwR'10<|I+}"$~ /' Su0
       Rakwc4akw/

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

공백으로 구분 된 값 목록으로 입력을받습니다.

한 번
출력 완료 두 번 출력 완료 네
출력 완료

1 월 12 일´ 에 커밋 연속 숫자 읽기 모드 명령 을 사용하며 14 일에이 질문을 찾았습니다. 이 명령을 사용하면 임의의 길이 값을이 기능없이 인코딩 할 수 있습니다 (예를 들어 , 최소한 추가 루프 1392가 필요한로 표시해야 함 1X3+X9+X2+). 정확히 내가 ´명령을 만들 때 해결하고 싶었던 문제 .

원래 코드에서 |문자열에서 "{Zs$;|1|l;|y"와가 "UwR'10<|I+}"로 대체됩니다 \n(그리드에 앉아 그것을 수정하지 그들이 평소처럼)와 w의식 명령 : 74akw, 94/Rakw, c4akw,와 85akw. 원래 문자는 문자 그대로 무엇이든 될 수 있습니다. |내가 원하는 것을 시각적으로 나타내는 상징적 인 자리 표시 자로 선택되었습니다. 여러 바이트 반 성적 등의 진입 점을 추가 할 필요가 없으므로 (있는 경우 unscoring 사람을) 저장 wR'10<쓰는을 R이 아직 (위치 존재하는 위치에 0,1반복되는 다음) 다음 마나 밖으로 실행하기 전에 쓰레기와의 스택을 채우기 위해 진행 순서 U"'i34.

결과 출력 코드는 write 명령을 사용하여 두 번째 줄의 첫 번째 문자를 R엄격한 리디렉션으로 변경하므로 (하나의 IP 만 print 문을 실행) 키가 큰 프로그램에서 생성 된 스택 길이를 영리하게 사용하여 어느 인덱스를 결정 읽다. 다른 모든 IP는 동일한 위치를 동일한 명령으로 변경하고 종료합니다. 다른 모든 것은 사용되지 않습니다.

실행 흐름

이미지가 오래되었지만 흐름 설명에 충분합니다.

각 명령을 실행할 때마다 명령으로 1Iy인해 더 큰 스택을 처리 할 수있는 IP의 기능 이 유지됩니다.이 l명령의 크기는 프로그램이 기본 소스 코드의 사본 수를 판별 할 수있게합니다. 마지막 값은 올바른 값에 도달하기 위해 스택을 회전 할 때 (다음에 생성 된) 필요한 수로 1이전 l수 를 늘리는 데 사용됩니다 . 이 Z명령은 스택이 올바른 방향으로 회전하도록이 값을 무시합니다.

그런 다음 원래 입력 배열은 연속 읽기 모드를 사용하여 인코딩되며 0으로 시작하여 동일한 값을 증분 수정하지 않고 원래 입력을 읽습니다. 공간 NOP는 연속 읽기 모드를 종료하고 후속 0이 스택을 다시 프라이밍하도록 허용해야합니다.

점수가 대략 동일해야 3+v.toString().length각 배열 엔트리를 들어 v, +23각 어레이. 내가 옳은 일을했다면 대략 (2.55*total length of input)또는 33837샘플 입력에 대해.

s명령 과 관련하여 동일한 빌드에 도입 된 부작용으로 인해 예상되는 최종 프로그램에 약간의 변경 사항이 도입 되었지만 동시에 더 나은 점수를 얻었습니다.

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