삶, 우주, 그리고 모든 것에 대한 답


46

태스크

입력으로 문자열이 주어지면 입력 문자열이 정확히 다음과 같은 경우 42 에만 출력 해야합니다 .

abbcccddddeeeeeffffffggggggghhhhhhhhiiiiiiiiijjjjjjjjjjkkkkkkkkkkkllllllllllllmmmmmmmmmmmmmnnnnnnnnnnnnnnoooooooooooooooppppppppppppppppqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrsssssssssssssssssssttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzz

입력이 위에서 언급 한 문자열과 같지 않으면 다른 값을 출력하거나 오류를 발생 시키거나 전혀 출력하지 않을 수 있습니다.


승리 기준

이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다!


여기에 제공된 많은 솔루션은 문자열이 원하는 문자열보다 길고 접두사가 원하는 문자열과 일치 할 때 42를 인쇄하기 때문에 잘못되었습니다.
fR0DDY

@froddy : 만약 유일한 문자라면? 줄 다음에 줄 바꿈이 있습니까? 필자의 일반적인 입력 메커니즘은 입력이 줄 바꿈으로 종료되는지 여부를 신경 쓰지 않지만 두 경우 모두 동일하게 산출합니다.
Joey

@ fR0DDY : 나머지 입력을 처리하는 방법에 대한 명확한 정의가 없으므로 여기에 '잘못된'이 없습니다.
PatrickvL

3
@PatrickvL 입력이 주어진 문자열이면 '만'을 언급합니다. 그래서 abbcccddddeeeee...zzabc내가 가정하고 그 입력에 예를주는 일부 프로그램을 볼 수 있다고 생각하지 않습니다.
fR0DDY

2
@ fR0DDY : 다른 방법으로 말해 보자 : 입력이 어떻게 구분되는지에 대한 사양이 없으므로 해석에 개방적입니다. 문자 인코딩에 대한 언급도 없습니다 (대부분의 사람들이 환경의 기본값을 가정합니다-ANSI, UTF8 및 UTF16LE이 가장 인기있는 것으로 생각합니다). 입력이 표시되는 방법에 대한 언급도 없습니다. 명령 행 매개 변수를 통해 표준 입력을 통해 입력됩니까? 따라서 여러분은이 모든 자유를 갖는 것이 당신이 '올바르지 않은'것으로 표시하고 다른 사람들은 그것을 '준수'하다고 판단 할 수있는 해석을 제공합니다. NOFI, 그러나 이것은 우리 중 일부에게 일상적인 관행입니다.
PatrickvL

답변:


20

골프 스크립트, 20

26,{.97+\{.}*}%=42`*

줄 바꿈, 21 자 (Nabb 제공)

26,{).[96+]*}%n+=42`*

실제로 Nabb이 내 비트를 이겼습니다. 여기에 새로운 줄, 22 자

26,{.97+\{.}*}%n+=42`*

이것은 단순히 소스 문자열을 생성하고 stdin의 문자열과 비교하는 것입니다.


3
26,{).[96+]*}%n+=42`*21 (inc 개행).
Nabb

n+배열이 평평하지 않기 때문에 그렇지 않으면 작동하지 않습니다. 원래 20자를 유지하거나 ~배열의 내부 항을 평평하게하려면을 추가해야합니다 .
Nabb

@Nabb, heheh, 나는 개행이 그것을 다르게 만들었다는 것을 몰랐다.
YOU

13

루비 1.9, 46 42 39 자

p (?a..?z).map{|a|a*$.+=1}*""==gets&&42

입력이 개행으로 끝나지 않는다고 가정합니다.


gets에서 줄 바꿈은 어떻습니까?
steenslag

2
@ steenslag : 스펙은 입력이 줄 바꿈으로 끝나는 것을 말하지 않으므로이 솔루션은 아무것도 없다고 가정합니다.
Ventero

11

C 프로그램 -78 89

편집 : 추가 문자가있는 경우 42를 인쇄하지 마십시오.

입력에 후행 줄 바꿈이 없다고 가정합니다.

main(i,j){for(i=1;i<27;i++)for(j=i;j--;getchar()==96+i?0:exit(1));puts("42"+!!gets(&i));}

접두사가 일치하지 않으면 프로그램이 종료됩니다. 접두사가 일치하지만 1 ~ 3 자 정도의 추가 문자가 있으면 2를 인쇄합니다. 그렇지 않으면 정의되지 않은 동작이 생성됩니다.

로 변경 exit(1)하면 한 문자를 더 짧게 만들 수 있습니다 fork(). 아, 그리고 관련이없는 메모에서 어떤 이유로 든 시스템이 잠기는 경우를 대비하여 열린 문서를 저장하십시오 .


1
문자열이 원하는 문자열보다 길고 접두사가 원하는 문자열과 일치하면 42가 인쇄됩니다.
fR0DDY

8

PHP (60)

입력이 명령 행에 제공되었다고 가정하십시오.

for(;$i<702;)$s.=chr(96.5+sqrt($i+=2));echo$s!=$argv[1]?:42;

설명 : 문자열을 삼각형 구조로 볼 수 있습니다.

j     i   val
0     0   a
1   1-2   bb
2   3-5   ccc
3   6-9   dddd
4 10-14   eeeee
5 15-20   ffffff
      ...

j은 색인에서 시작 i = j*(j+1)/2합니다 (삼각 숫자 공식). 2 차 방정식을 풀면 색인 i이 온라인 상태가되어 j = int((sqrt(8*i+1)-1)/2)문자가 포함됩니다 97 + int((sqrt(8*i+1)-1)/2). 0-350지수 범위는 우리가 그것을 단순화 할 수 없다 96.5 + sqrt(2*(i+1)),하지만 더 이상 큰 값에 대한 사실이 보유하고있다.

편집 : 주석에서 제안한대로 명령 줄 입력으로 전환했습니다.
편집 : 조건부 연산자를 사용하여 문자 저장


+1, 작동합니다.) 음, 어떻게 $s.=chr(96.5+sqrt($i+=2));작동 하는지 자세히 설명해 주 시겠습니까?
Clyde Lobo 2016 년

편집했습니다. 나는 그것이 의미가 있기를 바랍니다 :-)
sam hocevar

for (; $ i <702;) $ s. = chr (96.5 + sqrt ($ i + = 2)); echo ($ s == $ argv [1]) * 42; stdin 입력을 가정하여 61 자만
Viper_Sb

@Viper_Sb : 힌트 주셔서 감사합니다. 나는 규칙에 대해 확신하지 못하여 Clyde의 솔루션을 모방했습니다. 나는 당신의 제안과 함께 갈 것입니다.
sam hocevar

1
@powtac 언어 구문은 여기에 공간이 필요하지 않습니다
샘 호체 바르

7

펄, 35 43

map$s.=$_ x++$a,a..z;say 42if<>~~$s

-E입력에 줄 바꿈이없는 Perl 5.10 이상 (으로 실행 )이 필요합니다.

나는 부작용 정규 표현식을 더 좋아했지만 더 짧은 코드가 사용되었습니다. 기념품으로 여기 있습니다. Perl 5.10 이상용이지만 고급 / 실험적 정규식 기능에만 사용되므로 p명령 행 옵션 만 필요합니다.

$a=a;$_=/^(??{$b++;$a++."{$b}"}){26}$/&&42

우수한. 나는이 재귀 정규 표현식을이기려고 열심히 노력했지만 43c 미만으로는 얻을 수 없었습니다. :-((
고무 장화

$a++."{$b}"그냥 대신 말해야 $a++.$b합니까?
Timwi

@Timwi 결과 문자열에 표시되는 중괄호가 필요하기 때문입니다. 리터럴 "d4"와 일치하지 않고 정규식 "d {4}"로 표현 된 "dddd"를 원합니다
JB

물론이야. 설명해 주셔서 감사합니다!
Timwi

이것을 위해 33 바이트 솔루션을 생각해 냈습니다! 온라인으로 사용해보십시오!
Dom Hastings

7

05AB1E , 7 바이트 (비경쟁)

AƶJQi42

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

설명

A       push lowercase alphabet
 ƶ      lift every letter, push it and multiply it by its index
  J     join the list
   Qi   does it equal the input?
     42 push 42 and output implicitly

05AB1E (일반적으로 골프)를 배우기 위해 몇 가지 과제를 겪습니다. 이 도전은 어제 활성화 된 것으로 표시되어 있고 짧은 해결책을 찾았으므로 공유하지 않겠습니까? :)


3
PPCG에 오신 것을 환영합니다!
Steadybox

6

하스켈 프로그램 -71 67 64 57

후행 줄 바꿈이 없다고 가정하고 하나도 출력하지 않습니다.

f x|x==[c|c<-['a'..'z'],_<-['a'..c]]="42"
main=interact f

용법:

$ echo -n 'abbcccddddeeeeeffffffggggggghhhhhhhhiiiiiiiiijjjjjjjjjjkkkkkkkkkkkllllllllllllmmmmmmmmmmmmmnnnnnnnnnnnnnnoooooooooooooooppppppppppppppppqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrsssssssssssssssssssttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzz' | { ./42; echo; }
42
$ echo -n 'something else' | { ./42; echo; }
42: 42.hs:1:0-54: Non-exhaustive patterns in function f


$

1
이 코드는 여전히 읽을 수 있습니다.
Dan Burton

1
때문에 zipWith이 짧은 목록의 끝에 도달 중지, 당신은 대체 할 수 ['a'..'z']['a'..]3 개 문자를 저장합니다.
hammar

@ hammar : 감사합니다. concat 및 zipWith 대신 >> = (concatMap)을 사용하여 1 문자를 더 절약했습니다.
Joey Adams

@hammar : >> = 및 lambda :-) 대신 do 표기법을 사용하여 훨씬 더 절약
Joey Adams

2
@Joey : 또는 더 나은 :[c|c<-['a'..'z'],_<-['a'..c]]
hammar

4

J, 29

f=:42#~((>:#a.{~97+])i.26)-:]

예:

f 'oasijfiojasef'

f 23841235

f 'abbccc...'
42

나는 J를 좋아한다. 그리고 그것은 추악하고 끔찍하다. 그리고 난 이거 좋아.
seequ

4

D : 94 자

void f(S)(S s){S t;foreach(i;0..26)t~=array(repeat(cast(char)(i+'a'),i+1));s==t&&writeln(42);}

더보기 :

void f(S)(S s)
{
    S t;

    foreach(i; 0 .. 26)
        t ~= array(repeat(cast(char)(i + 'a'), i + 1));

    s == t && writeln(42);
}

3

델파이 164 132

이것은 문자열을 만들고 첫 번째 명령 줄 인수와 비교합니다. 다른 제출물보다 짧고 덜 까다 롭습니다.

var s:string;c,i:int8;begin repeat s:=s+Char(c+97);i:=i-1;c:=c+Ord(i<0);if i<0then i:=c;until c=26;Write(42*Ord(s=ParamStr(1)));end.

(이 버전은 Delphi 버전 (2010)의 경우와 같이 ci변수가 0에서 초기화 된 것으로 가정합니다 .)

다른 제출물과 마찬가지로 문자열 작성이 이전과 같이 함수에서 발생하지 않으면 문자 수가 줄어 듭니다.

델파이, 181

program a;{$APPTYPE CONSOLE}function s(c,i:byte):string;begin if(i>0)then Exit(Char(c)+s(c,i-1));if(c<122)then Exit(s(c+1,c-95));end;begin if(s(97,1)=ParamStr(1))then Write(42);end.

출력에는 개행이 필요하지 않으므로 WriteLn ()은 Write ()가되었습니다.


3

PHP-45 자

해싱을 사용한 답변을 게시 한 사람이 아무도 없습니다. 정확한 문자열을 테스트하는 매우 효율적인 방법입니다.

echo md5($argv[1],1)!='¯è a@ÛÚƒ:ïT�p'?:42;

코드 중간에 널 바이트가 있으므로 데이터를 복사 / 붙여 넣기가 어렵습니다. 다음은 테스트 목적으로 코드의 16 진 덤프입니다.

65 63 68 6f 20 6d 64 35 28 24 61 72 67 76 5b 31 5d 2c 31 29 21 3d 27 af e8 a0 61 40 db da 7f 11 0f 83 3a ef 54 00 70 27 3f 3a 34 32 3b


2
영리한! 기술적으로 동일한 해시를 생성하는 다른 입력 값이 있기 때문에 입력이 지정된 형식 인 경우 에만 출력 42 요구 사항을 충족시키지 못합니다 .
mellamokb 2016 년

3

스칼라 79

 if((for(i <- 1 to 26;j<-1 to i)yield(96+i).toChar).mkString==args(0))print(42)

3

피스, 14

*42qzsm*dhxGdG

필요한 문자열을 작성한 다음 입력과 비교하고 42를 곱하십시오.


'입력과 비교하고 42를 곱합니다.' 내 자신의 생각을 결코하지 않았을 것입니다. 당신은 내 솔루션에서 1 문자를 면도하도록 도와줍니다. 감사.
AndoDaan

아아, 너무 늦었 어 어떻게 작동하는지 설명 할 수 있습니까? 이 기능 m은 문제를 일으 킵니다…
Jim

1
@Jim map 함수로 시작 m합니다.이 함수는 입력의 각 요소에 함수를 적용합니다. 입력은 G알파벳입니다. xGd의 위치 d, 알파벳의 문자,에서 알파벳을 찾습니다 G. 캐릭터를 h하나씩 증가시키고 *d캐릭터를 여러 번 복제합니다. m함수 외부에서 s결과 문자열 목록을 단일 문자열로 결합한 다음 qz결과가 입력과 같은지 확인합니다. 부울은 0False 및 1true 인 경우 로 표시 되므로 if True 및 if False *42값이 42됩니다 0.
isaacg

3

Brachylog (2), 15 바이트, 언어 날짜 도전 과제

⊇Ạ∧?o?ọtᵐ~⟦₁+₁₆

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

그리고 지금 여기에서 가장 많이 본 것과 완전히 다른 원리로 작동하는 대답이 있습니다. 이것은 기능 제출입니다 (질문은 어떤 종류의 제출이 바람직한 지 지정하지 않지만 기본적으로 기능이 허용됩니다).

설명

이 대답은 a) 알파벳의 모든 소문자를 포함하고 b) 정렬 된 순서를 가지며 c) 문자열에서 각 문자의 출현 횟수를 연속으로 생성하는 문자열의 정렬을 정의하여 작동합니다. 1부터 시작하는 정수입니다. (그런 문자열이 많지만 특수한 문자열이 가장 짧습니다.) 그런 다음 문자열이 해당 기준을 충족하면 16 개의 고유 문자 수에 16을 더합니다. 끈; 문자열이 질문이 우리에게 특별한 경우를 요구하는 문자열이면 42를 생성하고 다른 모든 경우에는 43을 생성합니다. (문자열이 범주에 속하는 기준 중 하나라도 실패하면 함수는 실패로 끝납니다. 이는 예외를 던지는 것과 같습니다.)

소스 코드를 해석하는 방법은 다음과 같습니다.

⊇Ạ∧?o?ọtᵐ~⟦₁+₁₆
⊇Ạ               {the input} contains all lowercase letters
  ∧              and
   ?o?           the input sorts to itself
                 {and; implied when two conditions overlap}
     ?ọ          the {character, number of occurrences} pairs for the input
       tᵐ        when the second element of each is taken
         ~       create an output that could have been produced by
          ⟦₁     outputting the list of integers from 1 to some input inclusive;
            +₁₆  add 16 to that input {and output it}

3

R, 60 58

if(readline()==paste0(rep(letters,1:26),collapse=""))cat(42)

if(scan(,"")==paste(rep(letters,1:26),collapse=""))cat(42)

@giusppe의 제안에 감사드립니다


나는 paste여기에서 괜찮다고 생각 하고 scan(,"")대신 사용할 수 있습니다 readline().
주세페

2

파이썬 (84)

입력의 끝에 후행 줄 바꿈을 가정합니다.

수입 시스템
if ''. join (c * chr (c + 96) 범위 c의 경우 27) + '\ n'== sys.stdin.read () : print 42

1
raw_input대신 사용 하지 sys.stdin.read않습니까?
Juan

1
@Juan : raw_input한 줄만 읽습니다. "입력"이 항상 한 줄인지 또는 나중에 줄에 자격이없는 입력이 있는지 확실하지 않았습니다.
Hoa Long Tam

2

파이썬-62 자

print("".join(x*chr(x+96) for x in range(27))==raw_input())*42

2
Python 3에서는 더 짧을 수 있습니다 print("".join(x*chr(x+96)for x in range(27))==input())*42.
mbomb007

2

펄, 49 46 자

명령 행이 아닌 프로그램에서 사용

$..=chr($+96)x$ for 1..26;$.eq(pop)&&print '42'

join('',map$_ x++$x,'a'..'z')eq pop&&print'42'

문안 인사

rbo

편집 : Ventero에서 아이디어가 찢어졌습니다.


2

PHP 92 88 87 자

function _($a){for($i=97;$i<123;$i++)for($j=$i-96;$j;$j--)$b.=chr($i);echo($b==$a)*42;}

편집하다

대체 $j<0$jreturn $b==$a?42:0;echo $b==$a?42:0;

대체 echo $b==$a?42:0;echo($b==$a)*42;


2
모든 괴물 달러 기호가 아니라면 80자가 될 수 있습니다.
Joey Adams

또한 단일 루프 솔루션에 대한 항목을 참조하십시오.
sam hocevar

2

ECLiPSe 프롤로그-173

c(_,[],_):-!. c(A,M,N):-length(L,N),checklist('='(A),L),append(F,L,M),P is N-1,B is A-1,c(B,F,P). ?- read_string(end_of_file,351,S),string_list(S,L),c(122,L,26),writeln(42).

2

자바 스크립트 (91 93 94 98 102 116 )

사용법 : a('string'), 42사양에 따라 유효한 경우 또는를 반환 합니다 0.

function a(z){for(i=r='';i++<26;)for(j=i;j--;)r+=String.fromCharCode(i+96);return(z==r)*42}

http://jsfiddle.net/g25M3/6/

편집 : var에서 두 공백을 제거 하고 제거했습니다 for (.

편집 2 : 변경 j>0j하고,

  1. return (z==r)?42:0;
  2. return z==r?42:0

편집 3 : 초기화 ii=''변경

  1. (z==r)?42:0
  2. (z==r)*42

편집 4 : 변경

  1. for(;i<27;i++)
  2. while(i++<26)

편집 5 : 변경

  1. i=r='';while(i++<26)
  2. for(i=r='';i++<26;)
  3. for(j=i;j;j--)
  4. for(j=i;j--;)

var변수를 선언 하는 데 사용하지 않으면 12 자를 줄일 수 있습니다 .)
Clyde Lobo

@ 클라이드 : 감사합니다! 또한 사이의 공백을 제거 할 수 있음을 발견했습니다 for (.
mellamokb

네, 같은 제안하고 있었다) 아, 그리고 난 당신과 같은 논리를 사용하여 PHP에서 솔루션을 코딩
클라이드 로보

당신은 대체하여 다른 두 문자를 저장할 수 return(z==r)?42:0;return z==r?42:0
클라이드 로보

j>0그냥 j내가 생각할 수 있습니다 .
YOU

2

자바 스크립트 1.8, 99 자

function c(x)(x.replace(/([a-z])\1*/g,function(m)!(a-m.length)*m.charCodeAt(0)-96-a++,a=1)==0)*a+15

나는 당신이 그것을 이해하기 위해 감히 :)


2

PHP-59

CLI를 통해 최소 1 개의 입력이 제공되었다고 가정

echo md5($argv[1])!='afe8a06140dbda7f110f833aef540070'?:42;

md5가 기술적으로 해싱 알고리즘과 중복 될 수 있다는 점을 제외하고는 다소 작동합니다.


2

PowerShell v2 +, 47 바이트

42*(-join(1..26|%{,[char]($_+96)*$_})-ceq$args)

범위 1..26를 구성하고로 루프를 통해 피드를 제공합니다 |%{...}. 반복 할 때마다 쉼표 연산자 를 사용하여 현재의 배열 리터럴에 [char]현재 루프 번호를 곱한 배열 리터럴을 구성합니다 . 우리는 -join모두 함께 문자열을 구성하는 것을 abbcccdddd...다음 대소 문자를 구분 사용하는 -ceq우리의 입력에 대해 비교를 $args중 발생되는, $TRUE또는 $FALSE. PowerShell에서 부울 값은 각각 내재적으로 1또는로 캐스트 될 수 있습니다 . 입력이 있으면 인쇄하고 그렇지 않으면 출력 합니다.042*42abbccc...zzzzzzzzzzzzzzzzzzzzzzzzzz0


당신은 바이트를 저장할 수 있습니다 :) 온라인으로보십시오!
mazzy

2

K, 26 바이트

{(::;42)x~,/(1+!26)#'.Q.a}
{(::;42)x~,/(1+!26)#'.Q.a}"hello"
{(::;42)x~,/(1+!26)#'.Q.a}"abbcccddddeeeeeffffffggggggghhhhhhhhiiiiiiiiijjjjjjjjjjkkkkkkkkkkkllllllllllllmmmmmmmmmmmmmnnnnnnnnnnnnnnoooooooooooooooppppppppppppppppqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrsssssssssssssssssssttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzz"
42

감사


{$[x~.Q.a@&1+!26;42;]}을위한 22 바이트.
streetster

1
42*(&!27)~-96+"j"$에 대한 18 바이트 (내 이식 OK 대답을).
streetster

2

VBA 91

VBA 답변은 없었지만 작동합니다.

Function f(t)
    For i = 1 To 26
        o = o & String(i, Chr(i + 96))
    Next
    f = -42 * (t = o)
End Function

공백을 제거하는 것이 실제로 불가능합니까?
Esolanging 과일

1
응축 버전, 61 바이트 -o="":For i=1To 26:o=o &String(i,Chr(i+96)):Next:?-42*([A1]=o)
테일러 스콧

@ Challenger5 아니요, 불가능하지 않습니다. 테일러의 스콧 의견은 바로 그 것입니다. 직접 실행 창에서 실행되며 셀의 값을 A1입력으로 가져옵니다 .
엔지니어 토스트

2

APL (Dyalog) , 18 17 바이트

42/⍨⍞≡819⌶⎕A/⍨⍳26

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

대문자를 사용하면 4 개의 명백한 바이트를 저장할 수 있습니다.

42 42

/⍨ if (lit.에 의해 복제 됨)

 문자 입력

 ~와 동일하다

819⌶ 소문자

⎕Alphabet

/⍨ 에 의해 복제

 하나를 통해

26 26


1

클로저 -61 자

(fn[a](if(=(mapcat #(repeat%(char(+% 96)))(range 1 27))a)42))

다음 사실을 악용합니다.

  • Clojure는 문자열을 문자 시퀀스로 자동 해석 할 수 있습니다.
  • 1에서 26까지의 숫자 범위를 사용하여 문자를 만들고 올바른 숫자를 반복하여 "올바른"입력을 생성 할 수 있습니다.

Clojure가 중첩 된 # () s를 허용하면 6자를 절약 할 수 있습니다. Clojure 1.4에 대한 중요한 기능 요청입니다.
mikera

1

자바 스크립트 144

아마도 크게 개선 될 수 있습니다. 재귀는 항상 나에게 먼 곳이었습니다.

압축

function r(a,b,d,c){c++;if(b<d)a+=r(a,b+1,d,c);for(i=0;i<c;i++)a=String.fromCharCode(b)+a;return a}function q(a){if(q==r(a,97,122,0))return 42};

덜 압축

function r(s, c, x, w){        
    w++;
    if(c < x)
        s += r(s, c + 1, x, w);
    for(i = 0; i < w; i++)
        s = String.fromCharCode(c) + s;              
    return s;
}
function q(z){
    if(q==r(z,97, 122, 0))
        return 42;            
}

alert(q("rgrg"));

1

델파이, 127

var b:Char;c,i:Int8;begin repeat if i<0then i:=c;Read(b);if c+97<>Ord(b)then Exit;i:=i-1;c:=c+Ord(i<0)until i=27;Write(42);end.

이것은 입력에서 문자열을 읽고 입력과 비교하여 입력이 마지막까지 일치 할 때 42를 씁니다 z.

델파이, 157

var b:pchar;c,i:byte;begin b:=CmdLine+85;c:=97;i:=1;repeat Inc(b);if b^<>Char(c)then Exit;Dec(i);if i>0then Continue;c:=c+1;i:=c-96;until i=27;Write(42);end.

델파이, 188

program a;{$APPTYPE CONSOLE}var b:pchar;c,i:byte;begin b:=CmdLine+85;c:=97;i:=1;repeat Inc(b);if(b^<>Char(c))then Exit;Dec(i);if(i>0)then Continue;c:=c+1;i:=c-96;until(i=27);Write(42);end.

이 버전은이 기술의 이전 버전과 비교할 때 상당히 적은 문자를 절약하는 함수를 사용하지 않습니다.

델파이, 213

program a;{$APPTYPE CONSOLE}function t(b:pchar;c,i:byte):byte;begin repeat Inc(b);if(b^<>Char(c))then Exit(0);Dec(i);if(i>0)then Continue;c:=c+1;i:=c-96;until(i=27);t:=42;end;begin WriteLn(t(CmdLine+77,97,1));end.

델파이의 긴 키워드와 출력을 쓰기 전에 콘솔 응용 프로그램을 초기화해야하기 때문에 아아, 조금 길다.

또한 로컬 실행 파일 경로를 건너 뛰는 데 필요한 오프셋이므로 CmdLine을 77 자씩 늘 렸습니다 (Delphi에는 직접 인수 포인터가 없음). 자신의 설정에 맞게 조정하십시오 (오프셋 <10 일 때 문자가 1보다 적을 수 있음).


ProjectOptions / DelphiCompiler / Linking / GenerateConsoleApplication에서 애플리케이션 유형을 설정할 수 있습니다. 또한 program a;라인을 생략 할 수 있습니다 . 그리고 괄호 주위 b^<>Char(c), i>0i=27제거 할 수 있습니다.
Wouter van Nifterick

@Wouter van Nifterick : 제안 해 주셔서 감사합니다. 다른 제안에도 적용하겠습니다. (나는 if i>0then컴파일 할 줄조차 몰랐다 !)
PatrickvL
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.