Diese Herausforderung besteht aus zwei Teilen. Der Gewinner ist die Lösung mit der niedrigsten Gesamtbytezahl. Für beide Herausforderungen muss dieselbe Sprache verwendet werden.
Teil 1:
Schreiben Sie eine Funktion oder ein Programm, das einen Satz mit nur gültigen Wörtern als Eingabe verwendet und eine Liste der verwendeten Zeichen, der Häufigkeit, mit der jeder Buchstabe verwendet wird, und der Anzahl der Buchstaben in jedem der Wörter im ursprünglichen Satz ausgibt. Die Ausgabe dieses Programms muss eine gültige Eingabe für das nächste Programm sein (genau so, wie sie ausgegeben wird).
Ich werde weiter unten Beispiele und detaillierte Regeln hinzufügen.
Teil 2:
Schreiben Sie eine Funktion oder ein Programm, das die Ausgabe des ersten Programms als Eingabe verwendet, diese Liste englischer Wörter verwendet und einen Satz mit den Informationen aus der Ausgabe erstellt. Der Satz muss nicht mit dem ursprünglichen Satz identisch sein.
Mehr Informationen. Regeln und Einschränkungen:
Teil 1:
- Die erste Eingabe kann in jedem geeigneten Format erfolgen, mit oder ohne Anführungszeichen, als Funktionsargument oder von STDIN, mit oder ohne Klammern usw.
- Der Eingabesatz enthält keine Interpunktion oder Sonderzeichen, außer einem Punkt am Ende. Mit Ausnahme des Punktsymbols befinden sich alle Zeichen in der Eingabe in der Wortliste.
- Der erste Buchstabe des Satzes wird in Großbuchstaben geschrieben, der Rest in Kleinbuchstaben.
- Die Ausgabe von Teil 2 muss mit dem gleichen Großbuchstaben wie der ursprüngliche Satz beginnen. Es wird daher nicht empfohlen, die Eingabe in Kleinbuchstaben umzuwandeln (aber OK).
- Die Ausgabe kann in jedem geeigneten Format erfolgen:
- Es muss möglich sein, die Ausgabe direkt in das nächste Programm / die nächste Funktion einzufügen
- Beim Kopieren und Einfügen können keine Änderungen vorgenommen werden. Die gesamte Ausgabe muss als Ganzes kopiert und eingefügt werden, nicht in Teilen.
- Sie können beispielsweise ein Histogramm aller Buchstaben des Alphabets oder nur der verwendeten Buchstaben ausgeben (im Allgemeinen alles, was zum Abschließen von Teil 2 erforderlich ist).
- Sie können keine Liste von Zeichen ausgeben, bei denen mehrere Vorkommen wiederholt werden. Zum Beispiel
The queue
kann eine Ausgabe nicht nachgeben:Teeehquu (3,5)
sollte es so etwas wie:Tehqu, (1 3 1 1 2),(3 5)
.
Teil 2:
- Das Programm / die Funktion muss die Eingabe genau wie in Teil 1 akzeptieren (eine Ausnahme, siehe Kommentar unten zum Eingeben des Dateinamens).
- Wenn umgebende Klammern, Anführungszeichen oder Ähnliches erforderlich sind, um die Eingabe zu analysieren, müssen diese Teil der Ausgabe von Teil 1 sein.
- Die Wortliste finden Sie hier.
- Die Wortliste kann entweder lokal gespeichert
w.txt
oder über die URL abgerufen werden. Die URL zählt nur 5 Bytes, sodass Sie keinen URL-Shortener benötigen. - Wenn das Programm eine Datei nicht ohne das Lesen der Namen als eine Eingabe von STDIN (ich glaube , das öffnen kann
heißtder Fall für Pyth war zumindest), dann kann der Dateiname als separate Eingabeargument genommen werden.
- Die Wortliste kann entweder lokal gespeichert
- Die Ausgabe darf nur ein Satz (Liste der gültigen Wörter) sein, der mit einem Punkt und einer optionalen Newline endet.
- Die Ausgabe muss Wörter mit der gleichen Anzahl von Buchstaben enthalten wie der ursprüngliche Satz in Teil 1 (in der richtigen Reihenfolge).
- Alle Buchstaben, die im ursprünglichen Satz verwendet wurden, müssen in der neuen Ausgabe verwendet werden.
- Der Satz muss mit dem gleichen Großbuchstaben wie der ursprüngliche Eingabesatz beginnen und mit einem Punkt enden.
Beide Teile:
- Die Ausführung beider Teile sollte nicht länger als 2 Minuten dauern (das zufällige Heraussuchen von Wörtern, bis eine Lösung gefunden wurde, wird nicht akzeptiert).
Mit den oben aufgeführten Regeln sollte es eine faire Chance geben, dass genau derselbe Satz wiedergegeben wird, dies ist jedoch keine Voraussetzung.
Beispiele:
In den folgenden Beispielen werden einige verschiedene Eingabe- und Ausgabeformate gezeigt. Viele weitere werden akzeptiert.
Teil 1:
Eingang:
Zulus win.
Ausgabetyp 1:
Z i l n s u w
1 1 1 1 1 2 1
5 3
Ausgabetyp 2:
(('Z',1),('i',1),('l',1),('n',1),('s',1),('u',2),('w',1)), (5,2)
Ausgabetyp 3:
'Zilnsuuw',[1,1,1,1,1,2,1],[5,2]
Teil 2:
Eingabe: Eine genaue Kopie der Ausgabe von Teil 1. Ausgabe:
Zulus win.
Beachten Sie, dass andere Wortkombinationen akzeptiert werden, solange sie mit a beginnen Z
und das erste Wort 5 Buchstaben und das zweite 3 Buchstaben hat.
Der kürzeste Code in Bytes gewinnt.
f1
, in die eingefügt wird,f2
muss alle in der Challenge angegebenen Daten enthalten. In der Ausgabe von können keine zusätzlichen Daten enthalten seinf1
. Es können keine Daten "gespeichert" werdenf1
, um Informationen verfügbar zu machen, wenn Sie diese von aufrufenf2
.f1
Pro Aufruf kann nur eine Zeichenfolge als Eingabe verwendet werden.Antworten:
LabVIEW, 167 LabVIEW-Grundelemente
Zunächst einmal habe ich keine zwei separaten Programme erstellt, da Labview den Datenfluss übernimmt, so dass es wirklich keine Notwendigkeit gibt.
Speichert das Histogramm mit dem ersten Element = ASCII-Code des ersten Buchstabens Rest von 1-26 nach Betrag. Länge wird einfach in einem Array gespeichert.
Das erste Wort hat 3 Schecks, Anfangsbuchstaben, Länge und verfügbare Buchstaben im Histogramm. Die erste Buchstabenprüfung stoppt nach dem ersten Wort.
Ich überprüfe das Histogramm, indem ich es für jeden Buchstaben dekrementiere und prüfe, ob es unter 0 fallen würde.
Wenn ich mein n-tes Wort gefunden habe und es keine Wörter gibt, die aus den verbleibenden Buchstaben zusammengesetzt werden können, lösche ich Wörter aus dem Dikton und wiederhole das n-te Wort usw., bis ich eine Lösung gefunden habe.
Dies könnte bei Sätzen, die es gibt, funktionieren oder auch nicht, da das Berechnen ewig dauern würde (mein Beispiel hat bereits einige Sekunden gedauert).
Was ich versucht habe
quelle
Python 2.7, 353 Bytes
Leider kann ich es nicht mit der eigentlichen w.txt-Datei ATM testen, da QPython für Android offenbar nicht mit Datei-E / A umgehen kann. Es funktionierte jedoch mit Daten, die ich kopiert und eingefügt habe.
Teil 1, 76 Bytes
Im:
'Hi there.'
Aus:
{'H':1, 'i':1, 't':1, 'h':1, 'e':2, 'r':1}, (2, 5)
also eine Liste mit:
eine Hashmap mit dem Histogramm
eine Liste der Buchstaben zählt
Teil 2, 277 Bytes
Ich bin wirklich froh, dass ich es geschafft habe, es zu 100% funktional zu machen. Ich bin mir nicht sicher, ob das beim eigentlichen Golfen hilft, aber ich habe mit Sicherheit den Teil der Verschleierung richtig verstanden: D Hier ist eine menschlichere Version von pt. 2 (genau der gleiche Ablauf, aber mit Variablennamen):
quelle
Perl,
516504 Bytesbeinhaltet 2x +1 für
-p
Erfordert
w.txt
ein Unix- Format (\n
Zeilenende). Verwendetcat
, um die Datei zu lesen; Wechseln Sie zutype
für Windows.Speichern Sie den Oneliner oben in
534.pl
und führen Sie ihn als ausecho Test. | perl -p 534.pl
.Ziemlich groß, aber es ist ein Anfang - viele Möglichkeiten zum Golfen, aber ich wollte es nur posten, um die LabVIEW-Antwort weniger einsam zu machen ;-). Ich habe die Optimierungen für die Ausführung in Sekundenbruchteilen ausgelassen und mehr als 30 Bytes eingespart.
Erstes Snippet (73 Bytes):
Es erzeugt ein Histogramm und die Wortlänge in einem kompakten Format. Für die Eingabe
Zulus win.
wird eine Ausgabe vom Typ 2 ohne das erzeugt(,)
, was hier nicht erforderlich ist:Hier ist es, ungolfed:
Zweites Snippet (441 Bytes)
Dieser Hauptteil beschäftigt sich mit E / A und die spezielle Behandlung des ersten Briefes, unter Verwendung von Subroutinen
g
undh
dass sind unten aufgeführt.Diese rekursive Funktion erstellt eine Kopie des Histogramms, eine Kopie der verbleibenden Wortanzahl und des aktuellen Wortes. Wenn das Array mit der Wortlänge leer ist, wird true zurückgegeben. Andernfalls wird die Histogrammzahl für die Buchstaben im angegebenen Wort dekrementiert, die nächste Wortlänge verwendet und eine Liste geeigneter Wörter aus der Wortliste gefunden. Für jedes passende Wort wird es wiederholt.
Und schließlich erhält diese Unterroutine ein Wort und das Satzhistogramm. Es berechnet ein neues Histogramm für das Wort und prüft, ob nicht alle Buchstaben öfter vorkommen, als es das Satzhistogramm zulässt.
Sie können die ungolfed Snippets (
sub i/o/g/h
) in eine einzelne Datei einfügen und den folgenden Testcode anhängen.substr
und einen parameter für eliminierstsub g
.quelle