Mặc dù Thoreau đã ném, Troll ném qua những cái máng khó khăn


19

Đối với mỗi trong số chín từ tương tự gây nhầm lẫn này , hãy gán một số 1-9 theo bất kỳ cách nào bạn muốn:

though
through
thorough
Thoreau
throw
threw
trough
tough
troll

Viết chương trình lấy trong một chuỗi. Nếu đầu vào là một trong chín từ này, hãy xuất số bạn đã gán cho nó. Nếu đầu vào không phải là một trong những từ trên, chương trình có thể làm bất cứ điều gì (bao gồm lỗi hoặc vòng lặp mãi mãi).

Các từ có phân biệt chữ hoa chữ thường, ví dụ Thoreau, sẽ tạo ra một số từ 1-9 nhưng thoreausẽ không nhất thiết phải làm như vậy.

Thí dụ

Giả sử bạn gán các số như sau:

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

Sau đó, khi toughlà đầu vào, 1nên được đầu ra.
Khi throughlà đầu vào, 2nên là đầu ra.
Khi throwlà đầu vào, 3nên là đầu ra.
. . .
Khi thoughlà đầu vào, 9nên là đầu ra.

Tất cả các đầu vào khác có thể làm bất cứ điều gì.

Chi tiết

  • Lấy chuỗi đầu vào thông qua stdin hoặc dòng lệnh và xuất ra stdout.
  • Đầu ra có thể chứa một dòng mới duy nhất.
  • Thay vì một chương trình, bạn có thể viết một hàm lấy một chuỗi và in kết quả bình thường hoặc trả về nó.
  • Đệ trình ngắn nhất tính bằng byte thắng .

1
Khỉ thật! Tôi đã có một giải pháp thông minh để xuất ra số 0 khi không tìm thấy bằng cách sử dụng findphương thức chuỗi Python . Sau đó, các quy tắc thay đổi. Thông minh ý tưởng không thông minh bây giờ.
Logic Knight

@CarpetPython Thật tệ. Đừng ngần ngại downvote nếu bạn cảm thấy không hài lòng với sự thay đổi. (Mặc dù tôi hứa với mọi người rằng sẽ không có nhiều thay đổi nữa.)
Sở thích của Calvin

Vậy là được rồi. Tôi nghĩ rằng câu trả lời của tôi vẫn còn hiệu lực (mặc dù tôi ít nói dài dòng).
Logic Knight

Tôi có thể làm cho nó hoạt động bất kể viết hoa không?
ASCIIThenANSI 17/05/2015

2
@ASCIIThenANSI chừng nào nó hoạt động cho 9 trường hợp
Sở thích của Calvin

Câu trả lời:


19

CJam, 11 9 7 byte

q1b2+B%

Cách thức hoạt động :

Chúng tôi đang sử dụng thực tế là tổng của các mã ASCII + 2 được sửa đổi với 11 cho thứ tự rất đẹp từ 1 đến 9 và sau đó là 10 cho chín từ liên quan. Đây là thứ tự:

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

Mã giải thích :

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

Lưu 4 byte nhờ user23013

Dùng thử trực tuyến tại đây


Làm thế nào chúng ta phải thử nó? (không phải ai cũng nói được tiếng CJam, một số người trong chúng ta nói tiếng lolcode)
Behrooz

@Behrooz Có một liên kết. Nhấp vào nó, đặt đầu vào của bạn trong phần đầu vào, Chạy. Không chắc làm thế nào nó có thể dễ dàng hơn :)
Trình tối ưu hóa

Holly shit, tôi đã suy nghĩ làm thế nào tôi có thể cung cấp cho nó danh sách các từ. tốt đẹp
Behrooz

1
@ user23013 Chết tiệt! Mỗi lần như vậy!
Trình tối ưu hóa

2
Hoặc q1b2+B%.
jimmy23013

18

Bình hoa, 8 ký tự

e%Cz8109

Dùng thử trực tuyến: Trình diễn hoặc Test Suite

Tôi đang sử dụng bài tập:

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

Giải trình:

   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, tôi đã tìm thấy số ma thuật 8109 bằng cách sử dụng tập lệnh này : fqr1 10Sme%CdT.z1.


Điều này sẽ không có dương tính giả?
alexander-brett 17/05/2015

5
@ alexander-brett Chính xác thì ý bạn là gì? Đầu ra của tất cả các đầu vào khác không được chỉ định trong OP. Chúng tôi có thể xuất bất cứ thứ gì chúng tôi muốn.
Jakube

Xin lỗi, tôi đã bỏ lỡ chỉnh sửa đó cho OP. Đó là một sự xấu hổ: P
alexander-brett 17/05/2015

11

Python 2, 92 54 byte

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

Chuỗi chỉ mục được tạo bằng for word in words: print chr(hash(word)%95+32),. Như đã chỉ ra trong câu trả lời của Jakube, hàm băm sẽ cho các kết quả khác nhau tùy thuộc vào phiên bản Python. Chuỗi chỉ mục này được tính toán trên 64 bit Python 2.7.6.

Dài hơn (92 byte) nhưng ít trả lời khó hiểu hơn:

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

Các chương trình trả về 1-9 mặc dù thông qua Thoreau kỹ lưỡng đã ném troll khó khăn theo thứ tự đó. Khi không tìm thấy đầu vào, find sẽ trả về -1, thuận tiện biến thành số 0 sau +1.


Lưu ý rằng các 0công cụ không còn cần thiết. Xin lỗi vì đã thay đổi nó trên bạn.
Sở thích của Calvin

Cảm ơn đã nhận thấy những nỗ lực. Đó là một giải pháp tốt trong một thời gian ngắn ...
Logic Knight

3
@CarpetPython Sử dụng tốt cho phân chia sàn - nó hoạt động gọn gàng một cách đáng ngạc nhiên.
xnor 17/05/2015

7

Python 2.7.9 phiên bản 32 bit, 22 byte

lambda x:hash(x)%78%10

Lưu ý, phiên bản thực sự quan trọng ở đây. Bạn sẽ nhận được các kết quả khác nhau nếu bạn sử dụng phiên bản Python 64 bit. Vì hashphương thức sẽ tính toán các giá trị băm 64 bit thay vì 32 bit.

Nhiệm vụ là:

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

Dùng thử trực tuyến: http://ideone.com/Rqp9J8


2
Wow, vì vậy tất cả thời gian này, bạn đã lặp qua các phiên bản ngôn ngữ và bit hệ điều hành? : P
Trình tối ưu hóa

1
Câu trả lời rất hay. Bạn đã tìm thấy hằng số 78 thông qua toán học, lặp lại tự động hoặc một số dự đoán?
Hiệp sĩ logic

3
@CarpetPython Chỉ cần một vòng lặp brute-force đơn giản đi qua tất cả các mô-đun có thể. Một lần sorted(...)==range(1,10), tôi dừng lại.
Jakube

5

Bình thường, 7 byte

et%Cz31

Tôi đang sử dụng các nhiệm vụ sau:

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

Czdiễn giải đầu vào là một số cơ sở 256. Sau đó, chúng tôi lấy mod 31 này, trừ 1 và lấy mod kết quả 10. Mã giả tương đương:

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

Trình diễn , kiểm tra khai thác .


1

Python 2, 27 byte

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

Với nhiệm vụ này:

>>> 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

Một số biến thể là có thể, ví dụ

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

1

Japt , 6 byte

nH %BÉ

Hãy thử nó | Kiểm tra tất cả các từ


Giải trình

Lợi dụng thực tế là, khi phân tích một nchuỗi cơ sở thành một số nguyên, JavaScript sẽ dừng phân tích cú pháp nếu nó gặp một chữ số lớn hơn nvà trả về kết quả cho đến thời điểm đó. Bằng cách sử dụng cơ sở-32 ở đây (chữ số 0-v), ws trong "ném" và "ném" về cơ bản, bị bỏ qua.

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

JavaScript, 22 byte

Một bản dịch trực tiếp - dường như không đáng để đăng nó một cách riêng biệt.

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

Java 8, 53 25 byte

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

hoặc là

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

Cảng @Optimizer CJam câu trả lời 's, bởi vì nó (rất có thể) có thể không được thực hiện bất kỳ ngắn hơn trong Java ..

Hãy thử trực tuyến.


Java có parseInt, phải không? Một cổng của giải pháp của tôi sẽ không ngắn hơn?
Xù xì

@Shaggy Java thực sự có parseIntcơ sở nhất định, nhưng thật không may, nó quá nhiều byte do yêu cầu lớp tĩnh: Long.parseLong(...,32)là biến thể ngắn nhất. Ngoài ra, nó dường như thất bại đối với "throw"(và "threw"cả) trong Java vì một số lý do . wCó vẻ như nằm ngoài phạm vi cơ sở 32 (và sử dụng 33 cho kết quả không chính xác).
Kevin Cruijssen

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.