안녕하세요 세상! 반복없이


27

이 질문을하기 전에 존재했던 프로그래밍 언어에서, 문자 Hello world!다음에 줄 바꿈 을 출력하는 프로그램 (함수가 아님)을 작성하십시오 . 당신의 프로그램 :

  • 공백을 포함하여 두 번 이상 문자를 사용해서는 안됩니다
  • ASCII 문자 만 사용해야합니다
  • 내장 라이브러리를 사용해서는 안됩니다
  • 입력을받지 않아야합니다 (사용자, 파일, 파일 이름, 시스템 변수, 인터넷 등)
  • 다른 것을 출력해서는 안됩니다

승자는 14 일 후에 가장 많은 표를 얻은 사람이며 6 가지 규칙을 준수합니다.

여섯 번째 규칙은 H9 +, HQ9 +, HQ9 + B, HQ9 ++, HQ9 + 2D, Hello, Hello +, Hello ++, Hexish, CHIQRSX9 + 또는 Fugue를 사용할 수 없다는 것입니다. 또한이 과제보다 새로운 구현이 필요한 모든 답변은 경쟁이 아닌 것으로 표시해야합니다.


면책 조항 : 이 질문은 Hello world! 반복제한되어 있어도 답을 찾는 과정에서 컴퓨터 나 뇌가 손상되지 않았습니다.


문자 코드를 빠져 나가는 경우 "\"문자를 두 번 이상 사용할 수 있습니까?
WallyWest

4
piet는 어떻습니까?
Victor Stafusa

@Victor "ASCII 문자 만 사용해야합니다"
Timtech

3
그것은 큰 퍼즐이었고, 나는 그것을 즐겼습니다 :-).
Konrad Borowski

9
“ASCII 문자 만 사용해야합니다”– 이것은 극한의 제약입니다. ASCII를 사용하지 않는 언어의 전체 클래스를 제거합니다.
Timwi

답변:


33

펄 6 (29 28 자)

이것은 다소 성가신 일 이었지만 마침내이 작업을위한 프로그램을 만들었습니다. 이 작업을 도와 주신 위대한 # perl6 커뮤니티에 감사드립니다 . 두 시간이 걸렸습니다. 즐기시기 바랍니다. 출력은 개행을 포함하여 사양에 따라 완전히 달라집니다.

say
Q[@A`DO world!]~|<HeLhg>

관심있는 토큰은 4 가지가 있습니다.

  • say

    마지막에 줄 바꿈을 사용하여 인수를 출력합니다. 명령 자체 이후의 새 줄은 공간 교체로 필요합니다.

  • Q[@A`DO world!]

    이것이 첫 번째 문자열입니다. 파이썬에서 Q[]와 같이 원시 문자열을위한 것 r""입니다. 이 경우 모든 구분 기호 (또는 그 쌍)를 사용할 수 있습니다 []. 이 경우 따옴표로 이것을 사용하며 원시 문자열 동작이 필요하지 않습니다.

  • ~|

    이것은 문자열 ( ~) 비트 또는 ( |) 연산자입니다.

  • <HeLhg>

    <>공백으로 구분 된 요소 목록을 취하는 목록 리터럴입니다. 이 경우 하나의 요소를 가지며 스칼라로 사용되며 문자열을 제공합니다.


3
놀랄 만한! 학습을해야합니다. 일부 Perl 6 구문! 나는 당신의 의견에도 동의합니다, 확실히 재미있는 문제였습니다!
Dom Hastings

4
와우 ... 내 마음이 울 렸습니다 : O 일
손잡이


11

Perl 5.10+ : 24 자

say+He,YZX^q(567 world!)

좋아, 나는 이것이 Perl에서 얻는 것만 큼 짧다고 생각한다.

으로 실행 perl -M5.010(또는 perl -E펄 5.10+ 수 있도록) say기능을.


진심으로 감동했습니다! 나는 주변을 돌아 다니려고 여러 시대를 보냈다 ll...
Dom Hastings

9

골프 스크립트 42 33

나는 두 가지를 구분할 방법이없는 동일한 블록에 코드와 모든 데이터를 맞추어야한다는 것을 고려할 때 골프를 할 수도 있습니다. 이것은 꽤 짧은 결과라고 생각합니다. 첫 번째 제출과 달리 블록 코드는 이제 데이터의 완전히 통합 된 부분이므로 {1블록을 시작 1하고 스택에 넣을 뿐만 아니라,을 정의하는 데이터이기도합니다 H. 배열 생성에는 이제 빈 입력 문자열이 포함됩니다. 즉, 빈 문자열과 사이에 하나의 문자 만 있기 때문에 시작 부분을자를 필요가 없습니다.이 H문자는 매 두 번째 문자를 가져갈 때 잘립니다. 문자열은 결국 아무것도 출력되지 않습니다.

{1wZ$Qei^Ak 3h-)ulmsogr7}.`*]2%n+

온라인 데모 : http://golfscript.apphb.com/?c=ezF3WiRRZWleQWsgM2gtKXVsbXNvZ3I3fS5gKl0yJW4r

[{1$^(r iFNGDJUHv98oIMgtplbh4m}.`\*]6>2%n+

코드 블록을 정의합니다. 코드 블록의 복사본을 만들어 문자열로 변환합니다. 코드 블록을 사용하여 문자열을 반복합니다. 각 반복에 대해 코드는 이전 문자 값의 사본을 작성하고, 현재 문자 값과 xor 빼고 1을 뺍니다. 그런 다음 결과 문자열은 처음 6자를 제거하고 두 번째 문자를 모두 제거합니다. 마지막으로 줄 바꿈이 추가됩니다.

"r iFNGDJUHv98oIMgtplbh4m"은 선언되지 않은 두 변수 일뿐 아무 것도하지 않지만 원하는 결과를 얻도록 신중하게 구성됩니다.

온라인 데모 : http://golfscript.apphb.com/?c=W3sxJF4ociBpRk5HREpVSHY5OG9JTWd0cGxiaDRtfS5gXCpdNj4yJW4r


6

Vim 7.3, 18 개의 키 입력

:h-cu
9j3wy$<C-^>P<End>r!o

이 도움말 파일 에서 문자열 Hello world을 복사합니다. 불행히도 Vim 버전에서는 제거되지 않았습니다.


이것에 따르면 , 키 입력 등 <Esc>과 같은 하나의 바이트에서 Ctrl 키 카운트와 관련된 조합
oktupol

6

Befunge-98 , 34 31 바이트

f"v!dlrow
+c<>a,kb@#*98e':g05-3

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

중복 문자를 피하기 위해 몇 가지 다른 방법을 사용합니다.

먼저 두 개의을 사용하지 않기 위해 줄 바꿈 문자열 리터럴을 사용 "합니다. 이것은 "세계를 추가합니다!" 스택에.

두 번째 줄에서 왼쪽으로 가면 "Hello" f를 만들기 위해 여분 에 9를 더 합니다 o. 우리는 g등 세포 5,0 (의 문자 l) 한 다음 중복. 는 '편지를 가져 오는 데 사용됩니다 e. 9에 8을 곱하면 ASCII 값인 72가 H됩니다. 우리는 다음 사용하여 모든 인쇄 ck,와 함께 방향을 반전 >를 재사용 할 ,줄 바꿈을 인쇄 할 ( a).


매우 좋지만이 문제는 쉼표가 없습니다.
Ørjan Johansen

오 롤, 그게 쉬워요 ... 감사합니다 @ ØrjanJohansen
Jo King

+및의 두 개가 d있습니다.
Ørjan Johansen

@ ØrjanJohansen 죄송합니다. 지금 수정되어야합니다
Jo King

3

엘릭서 , 37 바이트

IO.puts~c(He#{[?n-2,108]}\x6f world!)

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

이 도전 과제가 게시되었을 때 2014 년에 다시 작동했을 것이라고 보장 할 수는 없으며 Elixir는 여전히 1.0 이전 버전입니다 (따라서 공식적으로 "경쟁 중"인지 여부에 관계없이 릴리스 정보를 살펴보아야합니다. 승인). 어쨌든, 나는 Perl 이외의 일반적인 범용 언어를 사용 하여이 작업에 대한 유효한 해결책을 마침내 찾았습니다.

연습

IO.puts     #Print with trailing newline
~c(...)     #Sigil: charlist with interpolation
He          #Start of literal string...
#{...}      #Interpolated block
[?n-2,108]  #A list of codepoints for 2 'l's
\x6f        #Hex code for 'o'
world!      #...and done!

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