Ihre heutige Herausforderung besteht darin, eine t9- ähnliche Funktionalität zu implementieren .
Sie implementieren eine Funktion, die nur 2 Parameter hat.
Sie erhalten 1 Telefonnummer in einer Zeichenfolge und den Inhalt einer Textdatei mit einer Liste von Wörtern (nehmen Sie keinen bestimmten Zeilenumbruchstil an).
Sie können den Link https://raw.githubusercontent.com/eneko/data-repository/master/data/words.txt verwenden , um die Funktionalität zu testen, oder verwenden Sie /usr/share/dict/words
(überprüfen Sie eine Textdatei mit einer Liste von Wörtern [geschlossen] für weitere Informationen Information).
Sie können davon ausgehen, dass Sie immer mindestens 2 Nummern erhalten.
Wenn Sie die Anzahl angeben, lesen Sie aus einer Liste von Wörtern und geben die Wörter zurück, beginnend mit den Buchstaben, die diesen Wörtern zugeordnet sind. Dies bedeutet, dass die Eingabe nur Zahlen von 2 bis 9 sein sollte.
Sie können tun, was Sie wollen, wenn Sie eine ungültige Eingabe erhalten.
Wenn keine Übereinstimmung gefunden wird, können Sie eine leere Liste zurückgeben, null
/ nil
oder 0
.
Denken Sie daran, dass die Handytasten den entsprechenden Zeichen zugeordnet sind:
- 0 und 1 sind ungültig
- 2 Treffer [abc]
- 3 übereinstimmend [def]
- 4 Spiele [ghi]
- 5 Treffer [jkl]
- 6 Treffer [mno]
- 7 Treffer [pqrs]
- 8 Spiele [tuv]
- und 9 Übereinstimmungen [wxyz]
Beispiele:
f('52726')
//returns ["Japan","japan","Japanee","Japanese","Japanesque"...,"larbowlines"]
f('552')
//returns ["Kjeldahl","kjeldahlization","kjeldahlize"...,"Lleu","Llew"]
f('1234')
//makes demons fly out your nose or divide by 0
f('9999')
//returns ["Zyzzogeton"]
f('999999')
//returns [] or null/nil or 0
Nachdem Sie Ihre Funktion ausgeführt haben, können Sie sie nach Belieben drucken.
Regeln:
- Standardlücken sind UNGÜLTIG
- Sie müssen etwas zurückgeben, auch wenn es
null
/nil
Javascript zurückgibt,undefined
wenn Sie etwas nicht zurückgeben, daher diese Regel. - Sie können die Antworten anderer nicht verwenden oder erneut implementieren oder meine Implementierung kopieren.
- Sie können für Javascript davon ausgehen, dass der Browser bereits geöffnet ist und das
innerText
/textContent
des automatischen Elements als 2. Parameter übergeben wird - Für kompilierte Sprachen können Sie keine speziellen Argumente an den Compiler übergeben
- Sie können den Dateinamen über Compiler-Argumente erhalten
- Variablen, Makros, globale Variablen, Konstanten, nicht standardmäßige Klassen und alle Sortierungen, die andere Werte innerhalb der Funktion übergeben, werden als ungültig betrachtet.
- In Javascript machen Variablen ohne das Schlüsselwort
var
Ihren Code ungültig - Ihre Funktion wird benannt
f
- Sie können nur und nur 2 Argumente für Ihre Funktion haben
- Versuchen Sie, Ihren Code für die Ausführung unter 500 Sekunden zu halten.
- Sie müssen sich keine Gedanken über Leerzeichen machen
- Sie dürfen nur ASCII- druckbare Zeichen verwenden.
Ausnahmen sind Sprachen, die nur nicht druckbare Zeichen verwenden (APL und Leerzeichen sind zwei Beispiele).
Wertung:
- Die niedrigste Anzahl von Bytes gewinnt
- Wenn Ihre Antwort ungültige ASCII- druckbare Zeichen enthält, gilt dies als die Antwort, die in UTF-32
codiert wird. Die Ausnahme von der Codierung führt dazu, dass Ihre Antwort nach Zeichen gezählt wird . - Nur der Funktionskörper zählt, nichts anderes, was Sie außerhalb tun
- Bonus von -30%, wenn Sie ein Vorhersagesystem erstellen, das auf der Nachbarschaft oder den häufigsten Wörtern basiert
- Ein Bonus von -20%, wenn Sie nur die ersten 5 Übereinstimmungen für jeden Buchstaben zurückgeben, der der ersten Zahl entspricht (z. B.: 245 würde 5 Wörter zurückgeben, die mit 'a' beginnen, 5, die mit 'b' beginnen, und 5, die mit 'c beginnen'). ).
Hier ist ein Beispiel für eine Implementierung mit Javascript:
function f(phone, words)
{
var keypad=['','','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz'];
var regex='';
for(var i=0,l=phone.length;i<l;i++)
{
regex+='['+keypad[phone[i]]+']';
}
var regexp=new RegExp('\\s('+regex+'[a-z]*)\\s','gi');
return words.match(regexp);
}
Öffnen Sie zum Ausführen den Listenlink und führen Sie beispielsweise Folgendes aus:
f('9999',document.getElementsByTagName('pre')[0].innerText);
//returns [" Zyzzogeton "]
Dieses Beispiel wurde getestet und funktioniert unter Opera 12.17 64-Bit unter Windows 7 Home Edition 64-Bit.
Antworten:
CJam, 28 Bytes
Nimmt Eingaben in Form von
"<number>" [<list of words>]
Beispiel:
Ausgabe:
Ich werde vorerst keinen Bonus bekommen.
Probieren Sie den Code hier online aus, aber führen Sie ihn für tatsächliche Zeitmessungen auf dem Java-Compiler aus
Beachten Sie, dass CJam leere Listen wie darstellt
""
Verwenden Sie zum Konvertieren der Rohwortliste in eine CJam-Liste den folgenden Code mit der Wortliste als Eingabe:
quelle
Java: 395
Dies bildet ein Regex-Muster basierend auf den Buchstaben, die für jede Zahl zulässig sind, und setzt dann am Ende ein. * An, um mit den folgenden Zeichen übereinzustimmen.
Hier ist die Golfversion:
Und hier ist die ungolfed Version für die Lesbarkeit
quelle
f
".([W-Zw-z)]
) sollte es sein([W-Zw-z])
. Und beim Code-Golf müssen Sie sich keine Gedanken über Programmierstile und bewährte Methoden machen: Ihr Code muss einfach mit den erforderlichen Parametern arbeiten. Wenn Sie meine Antwort überprüfen, sehen Sie diese Zeile :$s=[2=>abc,def,ghi,jkl,mno,pqrs,tuv,wxyz];
. Dies ist ein schreckliches "Verbrechen" in PHP. Grundsätzlich zwinge ich PHP, nicht vorhandene Konstanten in Strings umzuwandeln. Das ist durchaus akzeptabel. Sie werden auch sehen, dass ich die Variable nicht einmal$t
auf ein Array setze, bevor ich sie als solche verwendeC # .NET 4.5 235
Das sollte funktionieren:
quelle
foreach
darin zu verwenden. Wenn Sie erwarten, dass dies bereits der Fall istIEnumerable
, geben Sie den außerhalb verwendeten Code ana
.a
var speichern . Aber ich sehe wirklich spürbare Verbesserungen! Mach weiter so.Python 2 (155 Bytes)
Sollte auch in Python 3 mit den entsprechenden Ersetzungen funktionieren (
string
->bytes
,b
Präfix auf Zeichenfolgen usw.).Ich war mir nicht sicher, ob der
maketrans
Anruf außerhalb der Funktion als "fair" angesehen wird. Wenn nicht, beträgt die Funktion 134 Bytes, wobei sie nach innen verschoben wird.EDIT: Ein Byte aus einem dummen Versehen gelöscht.
Mit vorbereiteten
maketrans
67 Bytes:Mit
maketrans
im Körper 134 Bytes:Mit
import
undmaketrans
im Körper, 155 Bytes:Testanruf:
quelle
maketrans
ist Teil des Funktionskörpers. Du solltest es bewegen. Ich weiß nicht, ob es überhaupt möglich ist, aber Sie können versuchen, das direkt zu verwendenimport
. Ich glaube, ich habe es irgendwo gesehen ... Aber dein Code ist wirklich nett!t=(from stirng import maketrans)([...])
. Ich habe keine Ahnung, ob es überhaupt möglich ist. Aber vielleicht können Sie verwenden,from string import as x t=x([...])
was ich nicht sicher bin, ob es auch möglich ist: /__import__('string').maketran
.PHP 5.4+ (
171186-20% = 148,8 Bytes):Nun, das ist eine ziemlich große Antwort, aber gut.
Ich hoffe, das bringt mehr Leute zur Antwort.
Diese Funktion erwartet, dass der Rohinhalt gelesen wird.
Hier ist der Code:
Dies funktioniert, indem überprüft wird, ob der Buchstabe in der Liste der zulässigen Buchstaben enthalten ist.
Beispiel: Die Eingabe
36
würde prüfen, ob1abc
der erste Buchstabe des Wortes und1def
der zweite Buchstabe vorhanden sind.Ich füge hinzu,
1
damit nicht überprüft wird, ob sich der Buchstabe an der 1. Position befindet (was zurückkehren würde0
und was dazu führen würdefalse
).if(!strpos(1..$s[$c],$v[$i]))
oderif(!strpos($c.$s[$c],$v[$i]))
wird den gleichen Effekt haben, aber der 1. verwirrt mehr und ich mag es.Andernfalls wird das Wort entfernt.
Ohne verbleibende Wörter wird ein leeres Array zurückgegeben.
Um dies online zu testen, gehen Sie zu http://writecodeonline.com/php/ und erstellen Sie eine einfache Variable mit einem Wort für Zeile.
Ein überprüfbares Beispiel:
Dies sollte Folgendes ausgeben:
Um an älteren PHP-Versionen zu arbeiten, ersetzen Sie
$s=[2=>abc,def,ghi,jkl,mno,pqrs,tuv,wxyz];
durch$s=array(2=>abc,def,ghi,jkl,mno,pqrs,tuv,wxyz);
Für den 20% Bonus:
Um den Code zu reduzieren, habe ich einfach hinzugefügt
||$t[$v[0]]++>4
, wodurch überprüft wird, wie oft der erste Buchstabe verwendet wurde.In PHP
$t
muss nicht definiert werden, was dazu beiträgt, einen großen Teil von 37,2 Bytes zu reduzieren .Verwenden Sie die folgende Variable als zweites Argument, um diesen Effekt zu sehen:
quelle