แม้ว่า Thoreau จะถูกขว้าง Troll ก็จะผ่านร่องที่ยากลำบาก


19

สำหรับคำที่คล้ายกันทั้งเก้าคำนี้ให้กำหนดหมายเลข 1-9 ด้วยวิธีใดก็ได้ตามที่คุณต้องการ:

though
through
thorough
Thoreau
throw
threw
trough
tough
troll

เขียนโปรแกรมที่ใช้ในสตริง หากอินพุตเป็นหนึ่งในเก้าคำเหล่านี้ให้ป้อนหมายเลขที่คุณกำหนดไว้ หากอินพุตไม่ใช่คำใดคำหนึ่งข้างต้นโปรแกรมอาจทำสิ่งใดก็ได้ (รวมถึงข้อผิดพลาดหรือวนซ้ำตลอดไป)

คำนั้นต้องตรงตามตัวพิมพ์เล็กและใหญ่เช่น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วิธี จากนั้นกฎก็เปลี่ยนไป ความคิดที่ฉลาดยังไม่ฉลาดเท่านี้
Logic Knight

@CarpetPython ฉันแย่จริงๆ อย่าลังเลที่จะลงคะแนนหากคุณรู้สึกไม่พอใจกับการเปลี่ยนแปลง (แม้ว่าฉันสัญญากับทุกคนจะไม่มีการเปลี่ยนแปลงอีกต่อไป)
งานอดิเรกของ Calvin

ไม่เป็นไร. ฉันคิดว่าคำตอบของฉันยังคงใช้ได้
Logic Knight

ฉันสามารถใช้งานได้โดยไม่คำนึงถึงการใช้ตัวพิมพ์ใหญ่หรือไม่
ASCIIThenANSI

2
@ ASCIIThenANSI ตราบใดที่มันใช้ได้ผลกับ 9 ราย
Calvin's Hobbies

คำตอบ:


19

CJam, 11 9 7 ไบต์

q1b2+B%

มันทำงานอย่างไร :

เราใช้ประโยชน์จากความจริงที่ว่าผลรวมของรหัส ASCII + 2 moded กับ 11 ให้ลำดับที่ดีมากตั้งแต่ 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

บันทึกได้ 4 ไบต์ด้วยผู้ใช้ 23013

ลองออนไลน์ได้ที่นี่


เราควรจะลองทำยังไงดี? (ทุกคนไม่พูด CJam บางส่วนของเราพูด lolcode)
Behrooz

@Behrooz มีลิงค์ คลิกที่มันใส่ของคุณในส่วนการป้อนข้อมูลเรียกใช้ ไม่แน่ใจว่ามันอาจจะง่ายขึ้น :)
เพิ่มประสิทธิภาพ

อึของฮอลลีฉันคิดว่าฉันควรจะให้รายชื่อคำนี้อย่างไร เป็นคนดี
Behrooz

1
@ user23013 ประณาม! ทุกครั้ง!
เครื่องมือเพิ่มประสิทธิภาพ

2
q1b2+B%หรือ
jimmy23013

18

Pyth, 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
alexander-brett

11

Python 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),สตริงดัชนีถูกสร้างขึ้นด้วย ดังที่ได้อธิบายไว้ในคำตอบของจากุบฟังก์ชั่นแฮชจะให้ผลลัพธ์ที่แตกต่างกันขึ้นอยู่กับเวอร์ชันของ Python สตริงดัชนีนี้ถูกคำนวณบน Python 2.7.6 64 บิต

ยาวกว่า (92 ไบต์) แต่มีคำตอบที่เป็นความลับน้อยกว่า:

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

โปรแกรมส่งคืน 1-9 แม้ว่าผ่านโยนอย่างละเอียดโยนโยนโทรลล์รางที่ยากในลำดับที่ เมื่อป้อนข้อมูลที่ไม่พบการค้นหาจะกลับ -1 +1ซึ่งในทำเลที่สะดวกจะกลายเป็นศูนย์หลังจากที่


โปรดทราบว่า0ไม่จำเป็นต้องใช้เนื้อหาอีกต่อไป ขออภัยที่เปลี่ยนคุณ
งานอดิเรกของ Calvin

ขอบคุณที่สังเกตความพยายาม มันเป็นทางออกที่ดีในขณะที่น้อย ...
ลอจิกอัศวิน

3
@CarpetPython การใช้งานที่ดีของการแบ่งชั้น - มันทำงานออกมาอย่างประณีตอย่างน่าประหลาดใจ
xnor

7

Python 2.7.9 รุ่น 32 บิต 22 ไบต์

lambda x:hash(x)%78%10

โปรดสังเกตว่ารุ่นนี้มีความสำคัญมากที่นี่ คุณจะได้ผลลัพธ์ที่แตกต่างหากใช้ Python เวอร์ชัน 64 บิต เนื่องจากhashวิธีการจะคำนวณค่าแฮช 64 บิตแทน 32 บิต

การมอบหมายคือ:

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

ลองใช้ออนไลน์: http://ideone.com/Rqp9J8


2
ว้าวดังนั้นตลอดเวลานี้คุณทำซ้ำผ่านรุ่นภาษาและบิตระบบปฏิบัติการหรือไม่ : P
เครื่องมือเพิ่มประสิทธิภาพ

1
คำตอบที่ดีมาก คุณพบค่าคงที่ที่ 78 จากคณิตศาสตร์การวนซ้ำอัตโนมัติหรือการเดาบางอย่าง?
Logic Knight

3
@CarpetPython เพียงแค่ brute-force loop ที่ผ่านโมดูลที่เป็นไปได้ทั้งหมด เมื่อsorted(...)==range(1,10)ฉันหยุด
Jakube

5

Pyth, 7 ไบต์

et%Cz31

ฉันกำลังใช้ asignment ต่อไปนี้:

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

Czตีความอินพุตเป็นหมายเลขฐาน 256 จากนั้นเราก็ใช้ mod 31, ลบ 1, และรับ mod mod 10 pseudocode เทียบเท่า:

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

สาธิต , เทียมทดสอบ


1

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

ลองมัน | ตรวจสอบทุกคำ


คำอธิบาย

ใช้ประโยชน์จากความจริงที่ว่าเมื่อแยกวิเคราะห์ base- nstring เป็นจำนวนเต็ม JavaScript จะหยุดการแยกวิเคราะห์หากพบตัวเลขที่มากกว่าnและส่งคืนผลลัพธ์จนถึงจุดนั้น โดยใช้ base-32 ที่นี่ (ตัวเลข0-v)w s ใน "โยน" และ "โยน" เป็นหลักละเว้น

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

JavaScript ขนาด 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

Java 8, 53 25 ไบต์

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

หรือ

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

พอร์ตของ@Optimizer 's คำตอบ CJam เพราะมัน (ส่วนใหญ่มีแนวโน้ม) ไม่สามารถทำได้ใด ๆ สั้นในชวา ..

ลองออนไลน์


Java มีparseIntใช่มั้ย พอร์ตโซลูชันของฉันจะไม่สั้นลงหรือไม่?
Shaggy

@Shaggy Java มีparseIntพื้นฐานที่กำหนดไว้แล้ว แต่น่าเสียดายที่ค่อนข้างเกินไบต์เนื่องจากความต้องการคลาสคงที่: Long.parseLong(...,32)เป็นตัวแปรที่สั้นที่สุด นอกจากนี้ดูเหมือนว่าจะล้มเหลว"throw"(และ"threw"เช่นกัน) ใน Java ด้วยเหตุผลบางอย่าง wอยู่นอกช่วงฐาน 32 ดูเหมือนว่า (และใช้ 33 ให้ผลลัพธ์ที่ไม่ถูกต้อง)
Kevin Cruijssen

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.