Sie müssen ein sehr kleines Programm mit 100 Zeichen schreiben. Ihr Programm muss zwischen männlichen und weiblichen französischen Substantiven unterscheiden. Die Ausgabe sollte sein, un
wenn es männlich ist und une
wenn es weiblich ist. Oft gibt es bestimmte statistische Regeln, denen Sie folgen können (zB wenn es mit einem "e" endet, ist es eher weiblich als männlich).
Eingabe :
Ein französisches Wort; Es kann aus Kleinbuchstaben und Bindestrichen bestehen, einschließlich Kleinbuchstaben mit Akzenten.
Beispiel Eingabe: ami
Ausgabe :
un
wenn das Wort männlich ist und une
wenn das Wort weiblich ist.
Beispielausgabe: un
Sie müssen nicht jedes Wort richtig verstehen. Ihr Ziel ist es, so genau wie möglich zu sein.
Wertung : Ihre Antwort muss aus maximal 100 Zeichen bestehen. Anweisungen wie print
oder console.log
oder alert
zählen nicht zu Ihren Gesamtbytes. Sie können auch eine Funktion oder Methode schreiben, die diese Aufgabe ausführt. In diesem Fall zählen die ersten paar Bytes (z. B. f=x=>
), die Teil der Funktionsdeklaration sind, nicht zu Ihrer Gesamtsumme. Ihre Gesamtpunktzahl ist die Anzahl der falschen Antworten. Krawatten werden nach Codegröße getrennt.
Nomen zum Testen mit:
un ami
un café
un chapeau
un concert
un crayon
un garage
un garçon
un lit
un livre
un mari
un musée
un oncle
un ordinateur
un pantalon
un piano
un pique-nique
un portable
un père
un sandwich
un saxophone
un stade
un stylo
un théâtre
un téléphone
un voisin
une botte
une boum
une chaise
une chaussette
une chemise
une clarinette
une copine
une femme
une fille
une glace
une heure
une lampe
une maison
une montagne
une personne
une piscine
une pizza
une radio
une raquette
une salade
une souris
une sœur
une table
une télé
une voiture
Antworten:
CJam, 0 falsch,
3229 BytesDieser Code verwendet einige ungerade Zeichen (von denen einige nicht druckbar sind), die sich jedoch alle im erweiterten ASCII-Bereich befinden. Also zähle ich jedes Zeichen als ein einzelnes Byte.
Aufgrund der nicht druckbaren Zeichen kann es vorkommen, dass Stack Exchange einige verschluckt. Daher möchten Sie möglicherweise den Code aus dem Zeichenzähler kopieren (er zeigt Bytes mit UTF-8-Codierung an, was für diese Herausforderung nicht optimal ist. Außerdem funktioniert der Link nicht.) scheint nicht in Firefox zu funktionieren, funktioniert aber in Chrome).
Teste es hier.
Nach einigen weiteren Diskussionen im Chat stellten wir fest, dass das Regex-Golfen uns nicht viel weiter bringen würde. Nach einem früheren (scherzhaften) Vorschlag von mir haben wir begonnen, die Zeichencodes der Wörter mit bestimmten Funktionen so zu manipulieren, dass alle Wörter aus einer Gruppe eine Zahl mit einer leicht zu überprüfenden Eigenschaft ergeben. Und wir hatten mehr Glück als wir erwartet hatten! Hier ist, was der Code mit den Wörtern macht:
[133, 122, 80, 66, 58, 26, 20, 14, 9, 4]
. Diese Folge von Zahlen wird selbst als Codepunkte einer Zeichenfolge codiert (hier kommen die seltsamen und nicht druckbaren Zeichen ins Spiel).0
oder1
, und alle 25 weiblichen Substantive ergeben2
oder3
mit diesem Verfahren. Wenn wir dies durch2
(ganzzahlige Division) teilen, erhalten wir Nullen für männliche Substantive und Einsen für weibliche Substantive.Um
"un"
das Ganze abzurunden, schieben wir auf den Stapel, dann schieben wir eine einzelnee
. Dann lesen wir das Eingabewort aus STDIN, führen die obige Berechnung durch und multiplizieren sie schließliche
mit dem Ergebnis.Ich habe Modulo noch nie auf eine Liste gesetzt und ich habe das Gefühl, dass ich es nie wieder tun werde ...
Vielen Dank für xnor und Sp3000, die uns bei der Suche nach einer Teilerkette unterstützt haben.
quelle
Ruby, 0 falsch,
635653525150 BytesAlle Zeichen sind in erweitertem ASCII-Format , insbesondere ISO 8859-1 . Daher zähle ich jedes Zeichen als ein einzelnes Byte.
Es sieht so aus, als wäre Ihr Test-Set etwas zu kurz. Ich habe den Regex mit Peter Norvigs Meta-Regex-Golfer generiert .
Sie können die obige Funktion wie folgt aufrufen
f["ami"]
. Mit diesem Testgeschirr können Sie alle Testfälle prüfen:Testen Sie es auf Coding Ground.
Edit: Mit Peter Norvigs zweitem Skript fand ich einen anderen regulären Ausdruck, der eigentlich ein Byte länger war, den ich aber per Hand um zwei Bytes kürzen konnte .
Edit: Sp3000 hat den Regex-Golfer, den er für meine kürzlich durchgeführte Regex-Herausforderung geschrieben hat, darauf eingestellt und einen Regex mit
36 bis35Byte gefunden, den ich verwenden kann. Dank dafür!quelle
table
ist eine Teilzeichenfolge vonportable
und das Umschalten des passenden Sets ist nicht sehr nützlich, da das zweite Set einfacher zu passen scheint ...CJam, 0 Fehler (
36322928 Bytes)Dies ist eine benannte Funktion, daher zähle ich nur den inneren Code. Außerdem
o
ist es eine print-Anweisung, sodass sie nicht zur Byteanzahl beiträgt.Probieren Sie die Testfälle im CJam-Interpreter aus .
Wie es funktioniert
Nur eine Hash-Funktion und eine Tabellensuche.
quelle