소로가 던졌지 만 트롤은 힘든 통을 뚫습니다.


19

혼란스럽고 비슷한 9 개의 단어 각각 에 원하는대로 숫자 1-9를 지정하십시오.

though
through
thorough
Thoreau
throw
threw
trough
tough
troll

문자열을받는 프로그램을 작성하십시오. 입력이이 9 개 단어 중 하나 인 경우 할당 된 번호를 출력하십시오. 입력이 위의 단어 중 하나가 아닌 경우 프로그램은 오류나 영원히 루프를 포함하여 모든 작업을 수행 할 수 있습니다.

단어는 대소 문자를 구분합니다. 예를 들어 Thoreau, 1-9 사이의 숫자를 생성해야하지만 thoreau반드시 같은 것은 아닙니다.

다음과 같이 숫자를 지정한다고 가정하십시오.

though   9
through  2
thorough 7
Thoreau  6
throw    3
threw    5
trough   4
tough    1
troll    8

그런 다음가 tough입력되면 1출력되어야합니다. 가 입력
되면 출력되어야합니다. 가 입력 되면 출력되어야합니다. . . . 가 입력 되면 출력되어야합니다.through2
throw3

though9

다른 모든 입력은 무엇이든 할 수 있습니다.

세부

  • stdin 또는 명령 행을 통해 입력 문자열을 가져 와서 stdout으로 출력하십시오.
  • 출력에는 단일 후행 줄 바꿈이 포함될 수 있습니다.
  • 프로그램 대신 문자열을 받아 결과를 정상적으로 인쇄하거나 반환하는 함수를 작성할 수 있습니다.
  • 바이트 단위의 최단 제출이 이깁니다 .

1
젠장! 파이썬 문자열 find메소드를 사용하여 찾을 수 없을 때 0을 출력하는 영리한 솔루션이있었습니다 . 그런 다음 규칙이 변경되었습니다. 영리한 아이디어는 지금 그렇게 영리하지 않습니다.
로직 나이트

@CarpetPython 정말 나쁘다. 변경 사항이 마음에 들지 않으면 주저하지 마십시오. (나는 모든 사람에게 더 이상 변화가 없을 것이라고 약속하지만)
Calvin 's Hobbies

괜찮아. 내 대답은 여전히 ​​유효하다고 생각합니다 (약간 자세하지는 않지만).
로직 나이트

대문자와 상관없이 작동하도록 할 수 있습니까?
ASCIIThenANSI

2
@ASCIIThenANSI 그것이 9 건의 경우에 적용되는 한
Calvin 's Hobbies

답변:


19

CJam, 11 9 7 바이트

q1b2+B%

작동 방식 :

우리는 11로 조절 된 ASCII 코드 + 2의 합이 9 개의 관련 단어에 대해 1에서 9까지 그리고 10의 순서를 제공한다는 사실을 이용하고 있습니다. 순서는 다음과 같습니다.

through -> 1
thorough -> 2 
tough -> 3 
Thoreau -> 4 
throw -> 5 
threw -> 6 
trough -> 7 
though -> 8 
troll -> 9

코드 설명 :

q               e# Read the input
 1b             e# Sum the ASCII code values of all characters in this word
   2+           e# Increment the sum by 2
     B%         e# Mod by 11 and automatically print the mod result at the end

user23013 덕분에 4 바이트 절약

여기에서 온라인으로 사용해보십시오


우리는 어떻게 시도해야합니까? (모든 사람이 CJam 우리 중 일부는 lolcode 말, 말)
베 루즈

@Behrooz 링크가 있습니다. 그것을 클릭하고 입력 섹션 인 Run에 입력하십시오. 더 쉬울 수있는 방법을 잘 모르겠습니다 :)
Optimizer

홀리 똥, 나는 단어 목록을 어떻게 주어야하는지 생각하고 있었다. 좋은 것
Behrooz

1
@ user23013 젠장! 매번!
Optimizer

2
또는 q1b2+B%.
jimmy23013

18

피 이스, 8 문자

e%Cz8109

온라인으로 사용해보십시오 : 데모 또는 테스트 스위트

과제를 사용하고 있습니다.

though   5
through  9
thorough 4
Thoreau  7
throw    3
threw    2
trough   8
tough    6
troll    1

설명:

   z       input()
  C        convert to int (convert each char to their ASCII value
           and interprete the result as number in base 256)
 %  8109   modulo 8109
e          modulo 10

Btw, 나는이 스크립트를 사용하여 매직 번호 8109를 찾았습니다 fqr1 10Sme%CdT.z1.


이것은 거짓 양성이 없습니까?
alexander-brett

5
@ alexander-brett 정확히 무슨 뜻인가요? 다른 모든 입력의 출력은 OP에 지정되어 있지 않습니다. 원하는 것을 출력 할 수 있습니다.
Jakube

죄송합니다. 해당 수정 사항이 OP에 누락되었습니다. P : 그건 부끄러운 일
알렉산더 - 브렛

11

파이썬 2, 92 54 바이트

print'K{7j)yE<}'.find(chr(hash(raw_input())%95+32))+1

색인 문자열은로 생성됩니다 for word in words: print chr(hash(word)%95+32),. Jakube의 답변에서 지적했듯이 해시 함수는 Python 버전에 따라 다른 결과를 제공합니다. 이 인덱스 문자열은 64 비트 Python 2.7.6에서 계산됩니다.

더 길지만 (92 바이트) 덜 답답한 답변 :

print'though through thorough Thoreau throw threw trough tough troll'.find(raw_input())/7+1

프로그램은 철저한 Thoreau 던지기를 통해 힘든 트롤 을 그 순서대로 던졌지 만 1-9를 반환합니다 . 입력을 찾을 수 없으면 find는 -1을 반환하여-다음에 편리하게 0으로 바뀝니다 +1.


있습니다 0물건이 더 이상 필요합니다. 변경해 주셔서 죄송합니다.
캘빈의 취미

노력해 주셔서 감사합니다. 그것은 잠시 동안 좋은 해결책이었습니다 ...
Logic Knight

3
@CarpetPython 바닥 분할의 멋진 사용-놀랍도록 깔끔하게 작동합니다.
xnor

7

Python 2.7.9 32 비트 버전, 22 바이트

lambda x:hash(x)%78%10

여기서 버전은 정말 중요합니다. 64 비트 버전의 Python을 사용하면 다른 결과를 얻을 수 있습니다. 이 hash메소드는 32 비트 대신 64 비트 해시 값을 계산 하므로

과제는 다음과 같습니다.

though  => 5   through => 6   thorough => 8
Thoreau => 7   throw   => 3   threw    => 1
trough  => 9   tough   => 4   troll    => 2

온라인으로 사용해보십시오 : http://ideone.com/Rqp9J8


2
와우, 지금까지 언어 버전과 운영 체제 비트를 반복하고 있었습니까? : P
Optimizer

1
아주 좋은 답변입니다. 수학, 자동 반복 또는 추측을 통해 상수 78을 찾았습니까?
로직 나이트

3
@CarpetPython 가능한 모든 모듈을 거치는 단순한 무차별 강제 루프입니다. 한 번 sorted(...)==range(1,10), 나는 멈췄다.
Jakube

5

Pyth, 7 바이트

et%Cz31

다음과 같은 서명을 사용하고 있습니다.

though   8
through  3
thorough 1
Thoreau  5
throw    4
threw    7
trough   6
tough    2
troll    9

Cz입력을 기본 256 숫자로 해석합니다. 그런 다음이 모드 31을 취하고 1을 뺀 다음 결과 10을 취합니다. 동등한 의사 코드 :

((base_256(input()) % 31) - 1) % 10

데모 , 테스트 하니스 .


1

파이썬 2, 27 바이트

f=lambda w:int(w,34)%444/46

이 과제로 :

>>> for w in "though through thorough Thoreau throw threw trough tough troll".split(): print f(w),w
...
9 though
7 through
3 thorough
8 Thoreau
2 throw
5 threw
6 trough
1 tough
4 troll

여러 변형이 가능합니다. 예 :

f=lambda w:int(w,35)/159%10

1

Japt , 6 바이트

nH %BÉ

사용해보십시오 | 모든 단어를 확인


설명

기본 n문자열을 정수로 구문 분석 할 때 숫자보다 큰 숫자가 발생하면 JavaScript가 구문 분석을 중지 n하고 결과를 해당 지점까지 리턴한다는 사실을 이용합니다. 여기에서 base-32 (digits 0-v) 를 사용함으로써 w"throw"와 "throw" 의 s는 본질적으로 무시됩니다.

nH      :Convert from base-32
   %B   :Modulo 11
     É  :Subtract 1

자바 스크립트, 22 바이트

직접 번역-별도로 게시 할 가치가없는 것 같습니다.

f=
U=>parseInt(U,32)%11-1
o.innerText=["through","tough","troll","trough","though","throw","threw","thorough","Thoreau"].map(s=>f(s)+": "+s).join`\n`
<pre id=o><pre>



0

자바 8, 53 25 바이트

s->(s.chars().sum()+2)%11

또는

s->-~-~s.chars().sum()%11

@Optimizer 의 CJam 답변 포트는 Java에서 더 짧게 수행 할 수 없기 때문에 ..

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


자바는 parseInt그렇지 않습니까? 솔루션 포트 가 더 짧지 않습니까?
얽히고 설킨

@Shaggy Java는 실제로 parseInt주어진 기반을 가지고 있지만 불행히도 정적 클래스 요구 사항으로 인해 바이트가 너무 많습니다 Long.parseLong(...,32). 가장 짧은 변형입니다. 또한, 실패 할 것 "throw"(그리고 "threw"어떤 이유로 자바뿐만 아니라) . wbase-32 범위를 벗어난 것 같습니다 (33을 사용하면 잘못된 결과가 나타납니다).
Kevin Cruijssen

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