Thoreau fırlasa da, Troll zor oluklardan fırlar


19

Bu dokuz kafa karıştırıcı benzer kelimenin her birine, istediğiniz şekilde 1-9 arasında bir sayı atayın:

though
through
thorough
Thoreau
throw
threw
trough
tough
troll

Dize alan bir program yazın. Giriş bu dokuz kelimeden biriyse, ona atadığınız sayıyı girin. Giriş yukarıdaki kelimelerden biri değilse, program her şeyi yapabilir (hata veya döngü sonsuza kadar dahil).

Kelimeler büyük / küçük harfe duyarlıdır, örneğin Thoreau1-9 arasında bir sayı üretmelidir, ancak thoreaumutlaka aynı şeyi yapmaz.

Misal

Numaraları aşağıdaki gibi atadığınızı varsayalım:

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

Sonra toughgirdi olduğunda , 1çıktı alınmalıdır.
Girdiğinde through, 2çıktı alınmalıdır.
Girdiğinde throw, 3çıktı alınmalıdır.
. . .
Girdiğinde though, 9çıktı alınmalıdır.

Diğer tüm girdiler her şeyi yapabilir.

ayrıntılar

  • Giriş dizesini stdin veya komut satırı ile alın ve stdout'a çıktılayın.
  • Çıktı tek bir son satır içerebilir.
  • Bir program yerine, bir dize alan ve sonucu normal olarak yazdıran veya döndüren bir işlev yazabilirsiniz.
  • Bayt cinsinden en kısa gönderim kazanır .

1
Kahretsin! Ben Python dize findyöntemi kullanılarak bulunamadı sıfır çıktı için akıllı bir çözüm vardı . Sonra kurallar değişti. Zekice bir fikir artık çok akıllıca değil.
Mantık Şövalyesi

@CarpetPython Gerçekten kötüyüm. Değişiklikten memnun değilseniz, aşağı itmek için tereddüt etmeyin. (Herkese söz vermeme rağmen başka değişiklik olmayacak.)
Calvin'in Hobileri

Bu iyi. Sanırım cevabım hala geçerli (biraz ayrıntılı olmasına rağmen).
Mantık Şövalyesi

Büyük harf kullanımına bakmaksızın çalışmasını sağlayabilir miyim?
ASCIIThenANSI

2
@ASCIIThenANSI 9 vakada çalıştığı sürece
Calvin'in Hobileri

Yanıtlar:


19

CJam, 11 9 7 bayt

q1b2+B%

Nasıl çalışır :

11 ile modifiye edilen ASCII kodları + 2 toplamının, ilgili dokuz kelime için 1'den 9'a ve sonra 10'dan çok güzel bir sıra verdiğini değerlendiriyoruz. İşte sipariş:

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

Kod açıklaması :

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 sayesinde 4 byte tasarruf edildi

Buradan çevrimiçi deneyin


Nasıl denememiz gerekiyor? (herkes CJam konuşmuyor, bazılarımız lolcode konuşuyor)
Behrooz

@Behrooz Bir bağlantı var. Üzerine tıklayın, girişinizi Çalıştır giriş bölümüne yerleştirin. Nasıl daha kolay olabileceğinden emin değilim :)
Optimizer

Holly bok, kelimelerin listesini nasıl vereceğimi düşünüyordum. güzel bir
Behrooz

1
@ user23013 Lanet olsun! Her seferinde!
Optimize Edici

2
Veya q1b2+B%.
jimmy23013

18

Pyth, 8 karakter

e%Cz8109

Çevrimiçi deneyin: Gösteri veya Test Paketi

Ödevi kullanıyorum:

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

Açıklama:

   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, bu senaryoyu kullanarak sihirli sayı 8109 bulundu: fqr1 10Sme%CdT.z1.


Bunun yanlış pozitifleri olmayacak mı?
alexander-brett

5
@ alexander-brett Tam olarak ne demek istiyorsun? Diğer tüm girişlerin çıkışı OP'de belirtilmez. İstediğimiz her şeyi verebiliriz.
Jakube

Maalesef OP'de bu düzenlemeyi kaçırdım. Bu bir utanç: P
alexander-brett

11

Python 2, 92 54 bayt

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

Dizin dizesi ile oluşturulur for word in words: print chr(hash(word)%95+32),. Jakube'nin cevabında belirtildiği gibi, hash fonksiyonu Python versiyonuna bağlı olarak farklı sonuçlar verecektir. Bu dizin dizesi 64 bit Python 2.7.6'da hesaplanır.

Daha uzun (92 bayt) ancak daha az şifreli cevap:

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

Programlar , tam Thoreau atışı boyunca o sırada sert trol attı olsa da 1-9 geri döner . Giriş bulunamadığında find, -1'den sonra uygun şekilde sıfıra dönüşen bir -1 döndürür +1.


O Not 0şeyler artık gereklidir. Bunu değiştirdiğin için üzgünüm.
Calvin'in Hobileri

Çabaları fark ettiğiniz için teşekkürler. Kısa bir süre için iyi bir çözümdü ...
Mantık Şövalyesi

3
@CarpetPython Kat bölümünün güzel kullanımı - şaşırtıcı derecede düzgün çalışıyor.
xnor

7

Python 2.7.9 32 bit sürüm, 22 bayt

lambda x:hash(x)%78%10

Dikkat, sürüm burada gerçekten önemlidir. Python'un 64 bit sürümünü kullanıyorsanız farklı sonuçlar elde edersiniz. Yana hashyöntem 64 bit karma değerlerini yerine 32 bit hesaplayacak.

Ödev:

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

Çevrimiçi deneyin: http://ideone.com/Rqp9J8


2
Vay canına, bu kadar zaman boyunca, dil sürümleri ve işletim sistemi bitleri aracılığıyla tekrar ediyordunuz? : P
Doktor

1
Çok güzel bir cevap. 78, sabitini matematik, otomatik yineleme veya bazı tahminler aracılığıyla buldunuz mu?
Mantık Şövalyesi

3
@CarpetPython Tüm olası modüllerden geçen basit bir kaba kuvvet döngüsü. Bir keresinde sorted(...)==range(1,10)durdum.
Jakube

5

Pyth, 7 bayt

et%Cz31

Aşağıdaki öfkeyi kullanıyorum:

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

Czgirişi temel bir 256 sayı olarak yorumlar. Ardından, bu mod 31'i alırız, 1 çıkarırız ve mod 10'u alırız. Eşdeğer sözde kod:

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

Gösteri , test koşum takımı .


1

Python 2, 27 bayt

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

Bu ödevle:

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

Birkaç varyasyon mümkündür, örn.

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

1

Japt , 6 bayt

nH %BÉ

Deneyin | Tüm kelimeleri kontrol et


açıklama

Bir temel ndizeyi bir tamsayıya ayrıştırırken JavaScript'in bir rakamdan daha büyük bir rakamla karşılaşması halinde ayrıştırmayı durduracağı nve sonucu o noktaya getireceği gerçeğinden yararlanır. Burada taban 32'yi kullanarak (rakamlar 0-v) w"fırlat" ve "fırlat" daki s esasen göz ardı edilir.

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

JavaScript, 22 bayt

Doğrudan çeviri - ayrı olarak göndermeye değmez.

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 bayt

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

veya

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

Port @Optimizer 'ın CJam cevabı, çünkü (büyük olasılıkla) Java'da daha kısa yapılamaz.

Çevrimiçi deneyin.


Java var parseInt, değil mi? Çözümümün bir limanı daha kısa olmaz mı?
Shaggy

@Shaggy Java gerçekten de parseIntbelirli bir tabana sahip, ancak ne yazık ki statik sınıf gereksinimi nedeniyle oldukça byte-aşırı: Long.parseLong(...,32)en kısa varyant olarak. Buna ek olarak, bir nedenden dolayı Java'da (ve de) başarısız görünüyor"throw""threw" . wtaban-32 aralığının dışında görünüyor (ve 33 kullanmak yanlış sonuçlar veriyor).
Kevin Cruijssen

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.