저를 세어보세요!


24

당신의 작업은 간단합니다. 스 니펫이 n 번 반복되는 경우 공백으로 구분 된 순서대로 n을 10 진수, 8 진수 및 16 진수로 출력하는 언어로 스 니펫을 게시하십시오. n은 0보다 큰 정수입니다. 선행 0이 없습니다. 최단 답변 승리

스 니펫이 ABC테스트 사례 인 경우

ABC 
1 1 1
ABCABC
2 2 2
ABCABCABCABCABCABCABCABCABC
9 11 9
ABCABCABCABCABCABCABCABCABCABCABCABC
12 14 C
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
18 22 12

4
인쇄해도 괜찮 1 01 0x1습니까? (접두사 포함)
Blue

암시 적 입 / 출력 언어가있는 경우 값을 증가시킨 1 바이트 솔루션을 가질 수 있습니다.
Esolanging Fruit

답변:


11

apt, 12 바이트

[°TTs8 TsG]¸

2 바이트를 절약 한 @ETHproductions감사 합니다!

내 𝔼𝕊𝕄𝕚𝕟 답변과 동일합니다.


7
: O 너는 Dennis를 이겼다!
Downgoat

𝔼𝕊𝕄𝕚𝕟는 그것을 할 수 없었고, 당신은 이미 Teascript를 했었고, 나는 Jolf를 몰랐기 때문에 Japt를 사용했습니다.
Mama Fun Roll

굉장 :) 여기에 2 바이트가 저장됩니다 :[°TTs8 TsG]¸
ETHproductions

아, 그것을 보지 못했습니다. 감사!
Mama Fun Roll

14

펄, 30 바이트

printf"\r%d %o %x",++$n,$n,$n;

줄의 시작으로 돌아가서 카운터를 증가시키고 인쇄 카운터는 이전 출력을 덮어 씁니다.


사양에서 홀을 발견하면 +1, 출력 삭제는이 문제를 사소한 것으로 만듭니다.
Akangka

1
@ChristianIrwan : 실제로 지워지지는 않지만 덮어 쓰기 (내 설명을 수정했습니다)
nimi

1
그것은 둘 다 도전을 망칩니다.
Akangka

12

자바 스크립트, 54 53 51 47 바이트

@ user81655 덕분에 4 바이트 절약

var d=-~d;d+` ${d[b='toString'](8)} `+d[b](16);

나는 실제로 이것이 효과가 있다는 것에 놀랐습니다.

설명

var d=-~d;  // `var` let's `d` not throw an error if it's not defined 
            // -~ essentially increments the variable
d+                    // decimal
` ${                  // space character
   d[b='toString'](8) // octal
} `                   // space character
+d[b](16)             // Hexadecimal

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


Iirc 당신은 var를 제거 할 수 있습니다
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ 오류가 발생합니다 : ReferenceError: Can't find variable: d, 느슨한 모드 D에서도 :
Downgoat

합니까의 d=d?d+1:1작업?
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ nope, 여전히 참조 오류가 발생합니다. 느슨한 모드가 활성화 된 것을 고려하면 이상합니다 ...
Downgoat

정의되지 않았지만 d에 액세스하려고하기 때문에 Ohhhh
Conor O'Brien

7

C ++, 205 179 바이트

int main(){};static int c=1;
#define v(x) A##x
#define u(x) v(x)
#define z u(__LINE__)
#include <cstdio>
class z{public:z(){++c;};~z(){if(c){printf("%d %o %x",--c,c,c);c=0;}}}z;//

(마지막 줄 바꿈 없음-복사 할 때 사본의 첫 줄과 원본의 마지막 줄이 일치해야 함)

기본적으로 이것은 구성시 전역 변수 카운터를 증가시키는 일련의 정적 변수를 만들어 작동합니다. 그런 다음 파괴시 카운터가 0이 아닌 경우 모든 출력을 수행하고 카운터를 0으로 설정합니다.

이름 충돌이없는 일련의 변수를 정의하기 위해 다음과 같이 설명 된 매크로를 사용합니다.

#define v(x) A##x    //This concatenates the string "A" with the input x.
#define u(x) v(x)    //This slows down the preprocessor so it expands __LINE__ rather than yielding A__LINE__ as v(__LINE__) would do.
#define z u(__LINE__)//Gives a name which is unique to each line.

문자열 프로세서의 단점에 다소 의존합니다. 우리는 z여러 줄을 사용하여 별도의 줄에 복사 할 때 서로 충돌하지 않는 클래스 / 변수를 정의합니다. 또한 한 번만 발생해야하는 정의는 첫 번째 행에 배치되며 코드 사본에 주석으로 표시됩니다. #define#include문은 그래서 특별한 처리가 필요하지, 그들은 반복받을 것을 걱정하지 않는다.

이 코드는 또한 명령문에서 정의되지 않은 동작을 특징으로합니다.

printf("%d %o %x",--c,c,c)

시퀀스 포인트가 없기 때문에 c가 수정되고 액세스됩니다. LLVM 6.0 경고를 제공하지만, 원하는대로 컴파일 - 그 --c평가됩니다 전에 c. 하나는 2 바이트의 비용으로 문을 추가 할 수 --c;출력 및 변경 이전 --cprintfc경고 없애 것이다.


동생의 제안으로 26 바이트 절약으로 대체 std::cout되었습니다 printf.


6

CJam, 20 19 18 바이트

];U):USU8bSU"%X"e%

1 바이트를 골라 낸 @ MartinBüttner에게 감사드립니다!

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

작동 원리

]                  e# Wrap the entire stack in an array.
 ;                 e# Discard the array.
  U                e# Push U (initially 0).
   ):U             e# Increment and save in U.
      S            e# Push a space.
       U8b         e# Convert U to base 8 (array of integers).
          S        e# Push a space.
           U"%X"e% e# Convert U to hexadecimal (string).

4

𝔼𝕊𝕄𝕚𝕟, 14 자 / 28 바이트

[⧺Ḁ,Ḁß8,Ḁⓧ]ø⬭;

Try it here (Firefox only).

첫 번째 답변! 아마도 이것을 처리하는 더 좋은 방법이 있지만.

설명

[⧺Ḁ,Ḁß8,Ḁⓧ]ø⬭; // implicit: Ḁ = 0
[⧺Ḁ,             // increment Ḁ by 1
    Ḁß8,         // octal representation of Ḁ
        Ḁⓧ]     // hex representation of Ḁ
            ø⬭; // join above array with spaces
                 // repeat as desired until implicit output

7
이 언어는 무엇입니까?
Cole Johnson


3

MATL , 26 바이트

사용 현재 버전 (6.0.0) . 옥타브에서 작동합니다.

0$N1+ttYUb8YAb16YA3$XhZc1$

일단:

>> matl 0$N1+ttYUb8YAb16YA3$XhZc1$
1 1 1

두번:

>> matl 0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$
2 2 2

16 회 :

>> matl 0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$
16 20 10

설명

스택의 요소 수는 스 니펫을 몇 번이나 실행했는지 나타냅니다.

0$         % specify zero inputs for next function, in case this is not the first
           % occurence of the snippet.
N          % number of elements in stack
1+         % add one
tt         % duplicate twice. We now have three copies of the number
YU         % convert to string (decimal)
b8YA       % bubble up number and convert to octal string
b16YA      % bubble up number and convert to hex string
3$XhZc     % join top three elements (strings) with a space
1$         % specify one input for next function. If the program ends here, that next
           % function will be implicit display, so it will print the top of the stack.
           % Else the stack will be left with one element more than at the beginning of
           % the current snippet

2

OCaml, 198 바이트

;;open Char
;;(if Sys.argv.(0).[0]='~'then Sys.argv.(0).[0]<-'\000'else Sys.argv.(0).[0]<-chr(1+int_of_char Sys.argv.(0).[0]));let n=1+int_of_char Sys.argv.(0).[0]in Printf.printf"\r%d %o %x"n n n

후행 줄 바꿈을 포함하고 파일 이름은 가장 큰 값을 가진 표준 인쇄 가능한 ASCII 문자이므로 물결표로 시작해야합니다 (사용했습니다 ~.ml;로 실행할 수 있습니다 ocaml \~.ml). 문자열의 모든 문자가 변경 가능하고 Sys.argv.(0).[0]파일 이름의 첫 번째 문자 라는 사실을 남용합니다 .

ASCII 코드 ~는 126이고 출력에 1을 추가하고 있기 때문에 n = 1 ~ 126에서만 작동해야합니다 . n = 1 ~ 125 만 원하는 경우 2 바이트 더 짧아 질 수 있습니다. 126 번 반복 된 후에는 n = 1로 다시 순환됩니다.

이것은 나의 첫 번째 골프이므로 의견이나 개선 사항이 있으면 대단히 감사하겠습니다.

언 골프 버전 :

;; open Char
;; if Sys.argv.(0).[0] = '~' 
   then Sys.argv.(0).[0] <- '\000'
   else Sys.argv.(0).[0] <- chr (1 + int_of_char Sys.argv.(0).[0])
;; let n = 1 + int_of_char Sys.argv.(0).[0] in
   Printf.printf "\r%d %o %x" n n n

+1 내 질문에 많은 구멍이있어 내 질문을 내리는 것을 선택할 수 있습니다. (하지만 그렇게 할 수는 없습니다.)
Akangka

반복되는 것에 대해 의심 스럽다 Sys.argv.(0).[0]. 그래도 OCaml에 대해서는 잘 모릅니다.
Akangka

2

티 스크립트 , 21 20 바이트

[┼d,dT8),dT16)]j(p);

나는 자동 폐쇄해야합니다 ;

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

설명

된다 ++

    // Implicit: d = 0
[   // Start array
 ++d,  // Increment d, decimal value
dT8),  // d to base 8
dT16)  // d to base 16
]j(p); // Join by spaces
    // Implicit: Output *last* expression

공감? 이 답변에 문제가 있습니까? 그것은 함께 할 수 있습니까 ASCII 문자 뒤범벅 이하 경우 그이 분 이내에을 downvoted했기 때문에
Downgoat

1

펄, 40 바이트

$_=<<'';printf"%d %o %x",(1+y/z//)x3;
:

콜론 뒤에 마지막 줄 바꿈이 있습니다.

첫 번째 줄 이후의 모든 것을 여기 문서로 취급하고 그 z안에 포함시킵니다. 코드의 추가 사본마다 하나 z가 추가됩니다. 1첫 번째 스 니펫 (실행 된 스 니펫)이 없으므로 카운트 에 추가 해야합니다.

stderr에 대한 추가 출력이 허용되면 작은 따옴표 2 개를 생략하고 ''38 바이트까지 줄일 수 있습니다. ''펄이 없으면 더 이상 사용되지 않는 기능에 대한 경고가 표시됩니다.


1

수학, 76 바이트

n전에 어떤 정의가 없습니다.

0;If[ValueQ@n,++n,n=1];StringJoin@Riffle[IntegerString[n,#]&/@{10,8,16}," "]

여기에서 동작 ;이 사용됩니다. 위의 스 니펫은 하나의 단일 스 니펫 CompoundExpression이지만 두 개의 스 니펫을 조합하면 CompoundExpression아래에 표시된 것과 같이 여전히 하나 가 있습니다. (일부 불필요한 재배치가 이루어집니다.)

0;
If[ValueQ@n,++n,n=1]; StringJoin@Riffle[IntegerString[n,#]&/@{10,8,16}," "] 0;
If[ValueQ@n,++n,n=1]; StringJoin@Riffle[IntegerString[n,#]&/@{10,8,16}," "] 0;
If[ValueQ@n,++n,n=1]; StringJoin@Riffle[IntegerString[n,#]&/@{10,8,16}," "]

(* 3 3 3 *)

따라서 명시 적으로 작성하면 그러한 코드 조각을 사용할 수 없습니다 CompoundExpression. 또한, 당신이 좋아하는 거의 모든 것이 전에 먼저 넣을 수 ;와 같은 E, Pi또는 MandelbrotSetPlot[],.


1

bash, 49 바이트

파일 count.bash:

((++n));trap 'printf "%d %o %x\n" $n $n $n' exit;

... 줄 바꿈이 없습니다.

운영:

$ bash count.bash
1 1 1
$ cat count.bash count.bash count.bash | bash
3 3 3
$ for i in $(seq 10) ; do cat count.bash ; done | bash
10 12 a

1

파이썬 2, 54 바이트

n=len(open(__file__).read())/54;print n,oct(n),hex(n)#

후행 줄 바꿈이 없습니다. 형식으로 출력합니다 1 01 0x1.

그렇지 않으면 56 바이트

n=len(open(__file__).read())/56;print"%d %o %x"%(n,n,n)#

서로 앞에서 붙여 넣을 때 붙여 넣을 때마다 파일 길이가 한 줄씩 길어집니다. 기본 사례는 2 줄로 시작하므로 줄 길이에서 1을 빼야합니다. 주석에 의해 계산이 억제됩니다.


"%d %o %x"%(n,n,n)정말 멋지다. 당신이 그렇게 할 수있을 줄 몰랐어요. 접두사를 남기는 것이 좋지 않은 것으로 판명되면 빌려야합니다.
rp.beltran

1

파이썬 2.x 140 바이트

이것은 경쟁이 치열한 솔루션이 아니라 멀티 스레드 코드 골프를 시도하는 재미있는 방법 이었습니다.

import thread;n=eval("n+1")if"n"in globals()else 1;
def t(c):99**99;print("%s "*3)%(n,oct(n),hex(n))*(c==n)
thread.start_new_thread(t,(n,));

카운터를 유지하고 각 카운트에 대해 스레드를 생성하며 값이 비싼 수학 문제를 완료 한 후 (바이트를 저장하는 타이머 대신) 카운터 타이머가 종료 될 때 카운터가 변경되지 않은 경우 형식화 된 문자열이 인쇄됩니다.

일부 구성 및 출력 예 :

import thread;n=eval("n+1")if"n"in globals()else 1;
def t(c):99**99;print("%s "*3)%(n,oct(n),hex(n))*(c==n)
thread.start_new_thread(t,(n,));

Outputs 1 01 0x1 

및 15 개의 카피 페이스트 :

import thread;n=eval("n+1")if"n"in globals()else 1;
def t(c):99**99;print("%s "*3)%(n,oct(n),hex(n))*(c==n)
thread.start_new_thread(t,(n,));import thread;n=eval("n+1")if"n"in globals()else 1;
def t(c):99**99;print("%s "*3)%(n,oct(n),hex(n))*(c==n)
thread.start_new_thread(t,(n,));import thread;n=eval("n+1")if"n"in globals()else 1;

...


Outputs 15 017 0xf 

thread.start_new_thread파이썬이 코드 골프에 대한 더 나쁜 분석법 이름을 생각했을 수 있습니까?
rp.beltran

이것이 python 3.x에서 작동하는지 알고 싶습니다. 제가 알지 못하는 것은 보이지 않지만 python 3에서는 스레딩을 한 적이 없습니다.
rp.beltran


0

루비, 35 바이트

1;$.+=1;$><<"#$. %1$o %1$x"%$.*-~-0

각 스 니펫은 증가하지만 $.(파일을 읽지 않은 경우 0으로 시작) 마지막 만 출력됩니다. 는 문자열을 한 번 인쇄한다는 의미로 *-~-0평가 *1되지만, 연결하면 *-~-010으로 평가되는 8 진 표현식 $><<이됩니다. 후행 줄 바꿈이 포함되지 않으므로 빈 문자열을 인쇄하면 아무것도 인쇄되지 않습니다.

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