Carl Sagan'ın Contact adlı kitabını okuduysanız , bu zorluk size tanıdık gelebilir.
Bir sayı, bilinmeyen bir operatör, başka bir sayı ve bir sonuçtan oluşan bir dizi matematiksel denklemin bir girdisi verildiğinde, hangi işleçlerin toplama, çıkarma, çarpma veya bölmeyi temsil ettiğini bulun.
Her bir giriş denklemi daima
- negatif olmayan bir tam sayı
- mektuplardan birini
A,B,C, veyaD - başka bir negatif olmayan tam sayı
- karakter
= - negatif olmayan bir tam sayı
birlikte birleştirildi. Örneğin, toplama işlemini temsil 1A2=3edebileceğiniz olası bir giriş vardır A. Tamsayıların her biri tatmin edecektir 0 ≤ x ≤ 1,000.
Ancak, her zaman bu kadar basit değildir. Aşağıdakiler arasında belirsizlik olması mümkündür:
5A0=5: Ekleme çıkarma1A1=1: çarpma / bölme0A5=0: çarpma / bölme2A2=4: toplama / çarpma4A2=2: çıkarma / bölme0A0=0: toplama / çıkarma / çarpma
ve bunun gibi. Zorluk, bu kabiliyeti, her bir mektubun hangi operatörü temsil ettiğini bulmak için eleme süreci ile birlikte seçenekleri daraltmaktır. (Her zaman en az bir giriş denklemi olacaktır ve girişte kullanılan her bir harfi tek bir operatörle açık, benzersiz bir şekilde eşleştirmek her zaman mümkün olacaktır.)
Örneğin, girdinin aşağıdaki denklemler olduğunu varsayalım:
0A0=0: Bu A'yı toplama, çıkarma veya çarpmaya daraltır (0'a bölünemez).10B0=10: B, toplama veya çıkarma olmalıdır.5C5=10: C, B çarpımını yapan, A çarpımını yapan açıkça toplamadır.
Bu nedenle, bu giriş denklemler için çıkış eşleşmesi gerekir Aile *, B
birlikte -ve Cbirlikte +.
Girdi, tek bir boşluk / virgülle ayrılmış dize veya her biri bir denklemi temsil eden bir dize dizisi olarak verilebilir. Çıktı, tek bir dize ( "A*B-C+"), bir dizi ( ["A*", "B-", "C+"]) veya sözlük / dikte benzeri bir 2D dizi ( {"A": "*", ...}veya [["A", "*"], ...]) olabilir.
Bir sayının hiçbir zaman bölünemeyeceği başka bir sayıya bölünmeyeceğini varsayabilirsiniz (bu nedenle, bölünmenin kayan nokta veya kesilmesi gerekip gerekmediği konusunda endişelenmenize gerek yoktur).
Bu kod golf olduğundan , bayt cinsinden en kısa kod kazanır.
Test senaryoları:
In Out
-------------------------------
0A0=0 10B0=10 5C5=10 A*B-C+
100D100=10000 D*
4A2=2 4B2=2 0A0=0 A-B/
15A0=15 4B2=2 2C2=0 A+B/C-
1A1=1 0A0=0 A*
0A0=0 2A2=4 5B0=5 2B2=4 A*B+
2A2=4 0C0=0 5B0=5 5A0=5 A+B-C*
0A1000=0 4A2=2 A/