태그 보관물: decision-problem

decision-problem

노란 나무로 갈라진 두 개의 도로 (1 부) 갈라져 나갔다. 그리고 나는

이것은 시리즈의 첫 번째이고, 두 번째는 노란 나무로 갈라진 두 개의 도로입니다 (2 부).

이 도전은 Robert Frost의 유명한 시인 “The Road Not Taken”에서 영감을 얻었습니다.

두 도로 노란 나무에 갈라
그리고 미안해 모두 여행 할 수없는
긴 내가 서서, 그리고 한 여행자 수
그리고 내가 할 수있는대로 멀리로 하나 아래로 보였다
는 덤불에 구부러진 곳으로;

그런 다음 공정한 것처럼 다른 쪽
을 택했고 아마도 더 좋은 주장을했을
것입니다.
그 통과는
실제로 거의 같은 것을 착용 했지만

그리고 그날 아침 똑같이
잎이 깔려있었습니다.
아, 나는 또 다른 날을 위해 처음을 지켰다!
그러나 어떻게 길을 가는지 알면서도
다시 돌아올 것인지 의심했습니다.

나는 한숨을 쉬며
어딘가에 이것을 말해 줄 것이다. 그래서
두 개의 도로가 나무로 갈라져 나갔다. 그리고 나는 —
덜 여행 한 길을 택했다.
그리고 그것은 모든 차이를 만들었다.

두 번째 행부터 마지막 ​​행까지 주목하십시오 I took the one less traveled by,.

당신의 실제 도전

다음과 같은 형식으로 입력을받습니다.

#     ##
 #   ##
  # ##
   #
   #
   #

가는 길을 찾아야합니다

도로는 맨 아래에서로 시작합니다 #. 항상 맨 위 줄에서 끝나는 다른 2 개의 도로는 점검해야 할 도로입니다. 가장 두꺼운 도로가 가장 많이 이동하므로 원하는 것이 아닙니다. 다른 하나는 여행이 가장 적으며 원하는 것입니다.

산출

프로그램 / 기능은 취하지 않은 도로의 가능한 위치마다 하나씩 2 개의 고유 한 값 중 하나 (예 : 0 또는 1, true 또는 false)를 출력해야합니다. 예를 들어, 도로를 타지 않은 도로가 도로의 왼쪽에 있으면 0을, 그렇지 않으면 1을 출력하거나 문자열 “left”또는 “right”, true, false 등을 출력 할 수 있습니다.

테스트 사례 :

 ##    #
  ##  #
   ###
    #
    #
    #

“오른쪽”을 출력 할 수 있습니다.

 ##  #
  ## #
   ###
    ##
     #
     #
     #

“오른쪽”을 출력 할 수 있습니다.

 ##  #
  ## #
   ###
    ##
   #
  #
 #

“오른쪽”을 출력 할 수 있습니다.

 ##   #
  ## #
   ###
    #
   #
  #
  #

“오른쪽”을 출력 할 수 있습니다.

 #    ##
  #  ##
   ###
    #
   #
  #
  #

“왼쪽”출력 가능

 #    ##
  #  ##
   ###
    #
     #
     #
     #

“왼쪽”출력 가능

노트

  • 이것은 이므로 바이트 단위의 최단 답변이 이깁니다.
  • 금지 된 표준 허점
  • “왼쪽”과 “오른쪽”에 대한 출력을 지정해야하며 고유해야합니다.
  • 입력은 하나의 큰 문자열이 될 것이며 어떤 줄이라도 가질 수 있습니다
  • 유효한 입력에 대해 걱정할 필요가 없습니다.
  • 도로는 항상 Y 자형이므로 맨 위에서 만 봐야합니다.
  • 질문이 있습니까? 아래의 코멘트 :

가장 낮은 바이트 수가 이깁니다!



답변

CJam , 1 바이트

r

r이 인쇄 그래서 풋 스택에 STDIN에서 인접한 공백이 아닌 문자의 첫 번째 문자열 ##에 대한 왼쪽#에 대한 권리 .

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


답변

자바 스크립트 (ES6), 19 12 바이트

편집하다:

더 골프 버전은

a=>a.trim[1]

#오른쪽과 공백을 반환 합니다.

기발한:

a=>a.trim()[1]=='#'

설명

언 골프 :

function(input) {
  return input.trim().charAt(1) === '#';
};

이 기능이 가장 먼저하는 일은 입력의 시작과 끝에서 공백을 제거하는 것입니다. 이것은 첫 번째 문자가 항상임을 의미합니다 #. 그런 다음 두 번째 문자 (JavaScript는 0에서 시작)를 확인하고 #문자 인지 확인하십시오 . 부울을 반환합니다. 경로 인 경우 right가있을 것입니다 true이 남아 있으면, 그것을 돌려줍니다 false.

어떻게 골프를 쳤는가

ES6에는 화살표 함수 라는 익명 함수 속기가 있습니다 . 이것은 래퍼 기능을 가져 와서 다음으로 바꿀 수 있음을 의미합니다.

input => ...;

화살표 함수의 규칙으로 인해 나머지 코드를 반환합니다. 거기에서 나는 변환 charAt(1)[1]비록 그것이 짧은 방법으로 권장되지 않습니다 . 그럼 갔다 ===와로를 돌렸다 ==. 이 경우 에는 다르지만 중요하지 않습니다. 마지막으로 모든 공백으로 이름 input을 바꾸고 a제거했습니다.

좌우로 출력

퍼즐은 실제로 좌우로 출력하는 프로그램이 필요하지 않지만, 다른 출력의 예는 다음과 같습니다.

a=>a.trim()[1]=='#'?'right':'left'

유일하게 추가 된 부분은 ?'right':'left'입니다. 이렇게하면 압축 된 if 문인 삼항 연산자 가 생성 됩니다. 즉, (ungolfed) 코드가 *와 같습니다.

function(input) {
  let output = input.trim().charAt(1) === '#';
  if(output) {
    return 'right';
  } else {
    return 'left'
  }
};

// Function assignment not counted in byte count
let f =
a=>a.trim()[1]=='#'
<textarea placeholder="Put path in here" id="path" rows="10" style="width:100%"></textarea>
<button onclick="document.getElementById('result').textContent = f(document.getElementById('path').value)">Submit</button>
<p id="result"></p>


답변

Pyth, 2 바이트

hc

#왼쪽과 ##오른쪽에 대한 출력 .

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

설명

hc
 cQ     Split the (implicit) input on whitespace.
h       Get the first part.


답변

Acc !!, 30 바이트

Acc! 입력을 받으면 단 한 줄의 입력 만 입력하면 출력이 제공됩니다. 그러나 입력을 파이프로 보내거나 파일에서 리디렉션하면 차이점을 알 수 없습니다.

Count i while 35-N {
}
Write N

stdin에서 입력을받습니다. 왼쪽 도로가 덜 이동 한 경우 또는 #오른쪽 도로가 덜 이동 한 경우 출력 합니다 . 온라인으로 사용해보십시오!

설명

N참조 될 때마다 stdin에서 문자의 ASCII 값을 읽습니다. 우리 35-N는 진실 하면서 반복합니다. 즉, 35-N != 0또는 N != 35. 따라서 루프가 종료되면 #라인 의 첫 번째 문자를 읽었습니다 . 다음 문자는로 읽고 Nstdout으로 다시 쓴다 Write.


답변

레티 나, 5 바이트

왼쪽 1이면 오른쪽이면 출력 합니다 0.

^ *##

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


긍정적 인 결과 값이 고유하지 않아도되는 경우 (5 바이트) :

오른쪽이면 양의 정수를, 왼쪽이면 0을 출력합니다.

## +#

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


답변

IBM / Lotus Notes 공식 언어, 37 35 26 바이트

편집 나는 항상 @Like와일드 카드 를 사용하는 것보다 2 바이트 저렴하다는 것을 잊어 버립니다 @Contains.

편집 2는 실제로 필요하지 않습니다 @if그것은 단지 인쇄로 1또는 0수식 결과 여부에 따라 @True또는 @False.

@Like(@Left(a;"##");"%#%")

계산 된 필드 수식. ##필드에서 찾은 첫 번째 필드 의 왼쪽으로 모든 것을 가져 가면 왼쪽에 대한 출력 a이 있고 그렇지 않으면 오른쪽에 대한 출력 이 있습니다.#10

enter image description here

enter image description here

@DavidArchibald 덕분에 22 바이트 솔루션이 있습니다. Davids 솔루션에 대한 존중에서 나는 그것을 주요 대답으로 게시하지 않을 것입니다.

@Left(@Trim(a);2)="##"

이것은 1오른쪽과 0왼쪽으로 출력 됩니다 .


답변

, 8 6 바이트

a~`#+`

입력을 명령 행 인수로 사용합니다 (실제 명령 행에서 실행될 때 줄 바꾸기를 인용하고 이스케이프해야 함). 출력 #왼쪽 도로가 덜 여행하는 경우, 그리고 ##오른쪽 도로가 작은 경우 여행했다. 온라인으로 사용해보십시오!

설명

Pip의 최근에 추가 된 정규식 첫 번째 일치 연산자를 사용합니다.

a         First cmdline arg
 ~        Regex match the first instance of...
  `#+`    ...one or more #s (i.e. a cross-section of the left-hand road)
          Print (implicit)

간단한 정규식 솔루션 ( mbomb007의 Retina answer 포트 )은 9 바이트입니다.

`^ +##`Na