가역 리버 서


19

당신의 작업은 간단합니다. 이 프로그램은 표준 입력에서 한 줄의 텍스트를 읽고 동일한 텍스트를 문자 역순으로 인쇄합니다. 다른 것을 인쇄 할 수 없습니다.

예를 들면 다음과 같습니다.

입력 : "Hello!", 출력 : "! olleH"

catch는입니다 . 소스 코드 자체가 문자 반전 된 경우 프로그램이 똑같은 작업을 수행 할 수 있어야합니다!

스코어링 : 표준 코드 골프 스코어링이 적용되며, 보링을 제한하기 위해 다음과 같이 수정됩니다.

//margorp
program//

스타일 답변 : 회 문인 솔루션은 반올림하여 + 25 %의 페널티를받습니다. 예를 들어, 유용한 효과가없는 문자를 프로그램에 삽입하여 회문을 깨는 경우에도 여전히 이러한 처벌이 적용됩니다.


2
"유용한 효과"는 객관적으로 지정할 수 없습니다. GolfScript에서 예, 무엇에 대해 -1%#%1-/1-1%#%(0?
피터 테일러

답변:


14

APL, 5

⌽⍞⍝⍞⊖

그러면 입력 ( ) 이 반전되고 ( 마지막 축을 따라) 주석이 이어집니다 ( 행 주석 표시). 반대로, 프로그램 은 입력을 반전시키고 ( 첫 번째 축을 따라) 주석이 이어집니다. 입력이 항상이 때의 치수를 될 것 때문에 기능적으로 동일하다. 그것은 그래서 여기있는 점수 청소기 솔루션 (댓글 없음),의, 아마도 GolfScript 솔루션보다 은밀한 구석이있다 (9) .

⍬,⌽,⍞,⊖,⍬

먼저 빈 벡터 ( )를 잡고 평평하게하고 (모나 딕 ,) 뒤집습니다 ( 첫 번째 축을 따라). 여전히 빈 벡터가 남습니다. 그런 다음 (dyadic ,)을 입력 ( )에 연결 하고 입력을 그대로 둡니다. 그런 다음 ,이미 평평한 입력 을 평평하게하고 ( 단축) 반전 시킵니다 (마지막 축을 따라). 그런 다음 ,다른 빈 벡터 ( )를 반전 된 입력에 연결합니다 (dyadic ) . 이것은 아무것도하지 않으며 반전 된 입력을 남겨 둡니다. 반전이 프로그램은 사실에 다시 따라 같은 일, 않습니다 및이 한 dimesional 인수와 기능적으로 동일합니다.

나는 회문을 깨기 위해 쓸모없는 문자를 추가하고 있다고 말할 수 없었습니다 (두 개의 다른 역 기능은 2 차원 또는 더 많은 입력과는 다릅니다. 치수 입력)


14

유닉스 쉘-8 + 25 % = 10

rev||ver

이전 답변은 cat|tac실제로 작동하지 않았 tac으며 한 줄의 문자 순서가 아닌 줄의 순서를 반대로 바꿉니다.


10

하스켈, 53

main=niam
niam=interact reverse
esrever tcaretni=main

기술적으로 회문은 아니지만 함수 선언 순서는 중요하지 않으므로 일단 반전하면 정확히 동일한 프로그램이 있습니다.


니스 (+1). 나는 그것을 시도하기 전에 이것이 실제로 아무것도하지 않았다고 생각하지 않았다 ( Link ).
마틴 토마

main=niam선언을 중간으로 옮기면 회문이 생깁니다.
Johannes Kuhn

@JohannesKuhn 네, 여전히 다른 모양의 "지루한"회문 솔루션입니다.
lortabac


6

Tcl, 78

puts [string rev [gets stdin]];#\
]]nidts steg[ ver gnirts[ stup;# tixe emaner

회문이 아닙니다.



이 프로그램에서 "이름 바꾸기 종료"는 어떤 유용한 영향을 미칩니 까? (나는 Tcl을 모른다)
vsz

명령의 이름을 변경 exit하는 방법에 대해 #합니다 (#이 매개 변수가 아닌 주석의 시작입니다). \#다음 줄 #에서 new 인 (이스케이프 때문에 주석이 시작되지 않음) 이 실행됩니다 exit.
Johannes Kuhn

6

gs2, 2

(예,이 언어는 도전하기 전에 만들어졌습니다. 아니요, 농담이나 허점이 아닙니다. ASCII 공간 ( 0x20)은 역순입니다. 입니다.)

편집 : 아,이 질문은 너무 오래된가요? 내가 더 빨리 커밋했다면. : <그래도 통과하기에는 너무 좋기 때문에이 답변을 남겨 두겠습니다.


3

골프 스크립트, 9 (7 * 1.25 = 8.75)

-1%#%1-

더럽고 더럽고 더럽지 만 매우 짧습니다. -1%"각 요소 (문자), 뒤로 선택"을 #의미하고 "줄 주석"을 의미합니다. 나머지는 GolfScript의 I / O 마술에 불과합니다.

이것은 내가 찾은 가장 짧은 "깨끗한"(댓글 없음) 솔루션입니다 ( 14 * 1.25 = 17.5 ).

'';-1%..%1-;''

의미 : 빈 문자열을 푸시하고, 삭제하고, 입력을 반전시키고, 두 번 복제하고, 자체로 분할 (두 복사본을 소비하고 빈 배열 생성), 빈 배열에서 모든 것을 제거하고 emtpy 배열을 삭제하고 빈 문자열을 푸시 스택을 (암시 적으로) 인쇄합니다.


나는 이것을 기대 했어야했다. 500 %의 페널티도 승자로 만들 가능성이 높습니다.
vsz

@vsz 그러나 나는 golfscript에서 코멘트가없는 (즉, 깨끗한) 솔루션을 찾고 있습니다.
John Dvorak

입력에 1이 포함되지 않은 경우.
Johannes Kuhn

@JohannesKuhn 당신이 맞아요. 나는 그 "솔루션"을 떨어 뜨렸다.
John Dvorak

@vsz 더 흥미로운 도전은 댓글 캐릭터를 금지하는 것입니다 (그리고 여전히 회문에 불이익을 주나요?)
John Dvorak

3

루비, 44

puts gets.reverse#esrever.steg stup

정상적인 프로그램의 끝에서 단지 주석 : P

35 자, + 25 % = 44



2

파이썬 3, 42

print(input()[::-1]);#)]1-::[)(tupni(tnirp

크레딧

  • 점수가 49 + 25 % = 61.25 인 초기 버전
  • arshajii 에게 감사합니다61.25에서 51.25로 점수를 향상시킨 에게
  • :-)나에 의해 만들어진 점수 42 ( ) 의 새로운 버전

print(input()[::-1])#)]1-::[)(tupni(tnirp대신 파이썬 3에서 점수를 51.25로 낮추는 데 사용할 수 있습니다 .
arshajii

1
그건 잘되지 않습니다 ...
Oliver Ni

"회문에 해당하는 모든 솔루션은 반올림 한 점수에 + 25 %의 페널티가 발생합니다. 예를 들어 유용한 효과가없는 문자를 프로그램에 삽입하여 회문을 깨는 경우에도 여전히 적용됩니다. " 나는 ;유용한 효과가없는 삽입 이라고 주장합니다 .
Oliver Ni

2

Rebmu : 9 (벌금 포함) 또는 13 (없이)

지루한 Rebmu 솔루션은 9이며 회문 페널티를받습니다. 어쨌든 "왜냐하면"표시하겠습니다.

rnRVaVRnr

대문자로 된 글자를 알아 차리는 엄청나게 트릭을 사용하는 것은 별개의 단어이며, 선행 대문자가 없다는 것은 우리가 단어를 만들지 않는다는 것을 의미합니다.

rn rv a vr nr

다음은 동등한 코드 (약식 Rebmu)의 약자입니다.

return reverse a vr nr

vr과 nr이 의미가 없다는 사실은 중요하지 않습니다. 왜냐하면 아무것도 할당되지 않았지만 유효한 단어이기 때문입니다. 따라서 평가자는return reverse a 는 두 가지 방식으로 만 작동합니다. 그러나 이것은 지루한 속임수와 비슷한 의미입니다. 코드는 주석 처리되지 않지만 한 경로에서 실행되지 않고 실행되지 않습니다.

패널티를 발생시키지 않는 더 흥미로운 것을 위해이 13 문자 솔루션은 어떻습니까?

a VR :rv AvrA

확장 될 때 정방향 및 역방향 경로에서 처리되는 방식을 살펴 보겠습니다. 앞으로:

a               ; evaluate a, as it is a string it has no side effects
vr: :reverse    ; "set" vr to mean what a "get" of reverse means now
a: vr a         ; assign a to calling "vr" on a, effectively reversing
                ;   ^-- result of assign is last expression, the answer!

거꾸로 ArvA vr: RV a:

a: reverse a    ; assign A to its reversal
vr: rv: a       ; make the abbreviation vr equal to assignment of a to rv
                ;   ^-- result of assign is last expression, the answer!

단점으로, 이전 버전의 변형은 역의 약어를 덮어 씁니다. 그러나 이것은 회문이 아니며 단지 13 자입니다. :-)

(참고 : 이것은 / args 모드에서 Rebmu를 실행한다고 가정합니다. 여기서 a는 명령 행에서 인터프리터에 전달 된 프로그램의 기본 인수이며 결과를 승인합니다. 표준 입력에서 읽는 것이 실제로 필요한 경우 예를 들어 간단한 해결책을 위해 9에서 11 자로 자랍니다 rnRVrArVRnr. 그리고 두 문자를 추가하는 인터프리터의 표현식 출력을 수락하는 대신 프로그램 내에서 표준 출력으로 인쇄해야하는 경우)


2

자바 스크립트, 62 * 1.25 = 78

i.split('').reverse().join('')//)''(nioj.)(esrever.)''(tilps.i

너무 창의적이지는 않지만 내가 만들 수있는 최선. (입력이 변수에 저장되어 있다고 가정합니다.i )

나는 이것을 얻었다 :

63 문자, 회문 없음

i.split('').reverse().join('')//)a(nioj.)(esrever.)''=a(tilps.i

그러나 그것은 속임수처럼 너무 느꼈습니다. : PI는 더 많은 사소한 변경 (예 : i['split']대신 사용 i.split)을 수행 할 수 있지만 모든 사람들은 여전히 ​​속임수처럼 느낍니다.


입력이 변수 i에 저장된 다음 (p=a=>a&&p()==`(p=${p})(i)`?i:i.split``.reverse().join``)(i)(60 바이트) 그 일을 한다고 가정합니다 .
Esc Điệp

2

파이크, 2 (+ 25 %), 비경쟁

_

Pyke는 암시 적으로 입력을 가져오고 암시 적으로 출력합니다.

_ 역 기능입니다.


1

Tcl, 99

proc unknown args {puts "Hello World!"}
}"!dlroW olleH" stup{ sgra nwonknu corp

존재하지 않는 unknown명령이 호출되면 명령을로드 할 수 있는 특수 명령이 호출됩니다. 아니면 다른 재미있는 일을하십시오.


1

T-SQL, 86 * 1.25 = 108

다음은 SQL Server 2008 이상에서 가능한 지루한 회문 항목입니다.

DECLARE @ VARCHAR(MAX)='Hi'PRINT REVERSE(@)--)@(ESREVER TNIRP''=)XAM(RAHCRAV @ ERALCED

@는 입력 텍스트를 보유하며 문자열 예는 "Hi"입니다. 이 항목의 문자 수는 2 자 입력 문자열입니다.


1

술통 , ceil (1 + 0.25) = 2 바이트

?

이것은 입력과 반전을 취하고 암시 적 출력은 문자 그대로 출력합니다. TIO



0

QBIC , 14 + 25 % = 18 바이트

;?_fA|#|Af_?;

회문 소스 코드를 사용합니다. 이를 위해 두 가지 방법을 사용하면 다소 시간이 더 걸립니다 (34 바이트).

;[_lA|,1,-1|Z=Z+mid$(A,a,1)#|Af_?;

설명:

Read the input string from the command line as A$
;

FOR len(A$); a >= 1; a--
[        Starts a FOR loop
_l...|   returns the length the argument(here, A$); sets the starting point of the loop
,1       set the end point of the loop
,-1      FOR loop incrementer (or decrementer in this case)
|        Ends the argument list for the FOR loop

On each FOR iteration, add the right-most character of the input to Z$
Z=Z+mid$(A,a,1)

The cheat:
# starts a string literal, hiding the flipped source.
    The literal is closed implicitly at the end-of-file.
    The FOR loop is closed implicitly at the end-of-file.
    Z$ gets printed implicitly at the end of the program if it's non-empty

The flipped source is the same as my palindrome-code:
;       reads in A$ from the cmd line   
 ?      PRINT
  _fA|  The reversed version of A$
      # And hide the rest of our source in a literal  

0

Pushy , 7 바이트 (5 + 25 %)

@"i"@

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

이것은 회문이기 때문에 25 %의 패널티가 발생하지만, 내가 할 수있는 최선입니다. 프로그램을 실행하는 방법에 관계없이 다음 3 가지 명령을 수행합니다.

@     \ Reverse the input
 "    \ Print
  i   \ Exit

대체 i에 대한 c(일반 스택) 또는 \(의견은) 같은 효과가 있습니다.



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