Ein Kommentar, den ich im Chat gemacht habe, und das anschließende Gespräch haben mich dazu inspiriert, diese Herausforderung anzunehmen.
Bin ich der einzige, auf den hier mit Initialen hingewiesen wird? Es geht uns nur darum, Dinge herunter zu spielen. Wir können MB und D-nob haben und ... O.
Wenn ich als "CH" bekannt bin, denke ich, dass jeder andere auch einen initialen Spitznamen haben sollte.
Hier ist eine Liste der Top 100 Programmierpuzzles & Code Golf-Benutzer nach Ansehen, mit denen Sie spielen können:
Martin Büttner
Doorknob
Peter Taylor
Howard
marinus
Dennis
DigitalTrauma
David Carraher
primo
squeamish ossifrage
Keith Randall
Ilmari Karonen
Quincunx
Optimizer
grc
Calvin's Hobbies
ugoren
Mig
gnibbler
Sp3000
aditsu
histocrat
Ventero
xnor
mniip
Geobits
J B
Joe Z.
Gareth
Jan Dvorak
isaacg
edc65
Victor
steveverrill
feersum
ace
Danko Durbić
xfix
PhiNotPi
user23013
manatwork
es1024
Joey
daniero
boothby
nneonneo
Joey Adams
Timwi
FireFly
dansalmo
grovesNL
breadbox
Timtech
Flonk
algorithmshark
Johannes Kuhn
Yimin Rong
copy
belisarius
professorfish
Ypnypn
trichoplax
Darren Stone
Riot
ProgramFOX
TheDoctor
swish
minitech
Jason C
Tobia
Falko
PleaseStand
VisioN
leftaroundabout
alephalpha
FUZxxl
Peter Olson
Eelvex
marcog
MichaelT
w0lf
Ell
Kyle Kanos
qwr
flawr
James_pic
MtnViewMark
cjfaure
hammar
bitpwner
Heiko Oberdiek
proud haskeller
dan04
plannapus
Mr Lister
randomra
AShelly
ɐɔıʇǝɥʇuʎs
Alexandru
user unknown
Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die eine Liste von Zeichenfolgen aufnimmt und eine weitere Liste von Zeichenfolgen mit ihren minimalen, eindeutigen, initialen Spitznamen ausgibt, wobei diejenigen bevorzugt werden, die näher am Anfang der Liste stehen.
Wenden Sie diese Methode auf jede Zeichenfolge S in der Liste in der angegebenen Reihenfolge an, um die Kurznamen zu erstellen:
- Teilen Sie S in Wörter auf, die durch Leerzeichen getrennt sind, und entfernen Sie dabei alle Leerzeichen.
- Listen Sie die nicht leeren Präfixe der Zeichenfolge der ersten Buchstaben der Wörter in S auf, von der kürzesten bis zur längsten.
zBJust Some Name
→J
,JS
,JSN
- Wählen Sie das erste Element in dieser Liste aus, das nicht mit einem bereits ausgewählten Spitznamen identisch ist, wie der Spitzname für S. Wenn Sie einen Spitznamen ausgewählt haben, fahren Sie ansonsten mit Schritt 4 fort.
zB wennJust Some Name
der erste String war, dannJ
ist garantiert der Spitzname. - Listen Sie die Präfixe erneut auf, aber fügen Sie diesmal den zweiten Buchstaben des ersten Wortes an seiner natürlichen Stelle ein.
zBJust Some Name
→Ju
,JuS
,JuSN
- Gehen Sie für diese Liste wie in Schritt 3 vor und halten Sie an, wenn ein eindeutiger Kurzname gefunden wird.
- Wiederholen Sie diesen Vorgang mit den verbleibenden Buchstaben des ersten Wortes und fügen Sie schließlich Buchstaben in das zweite Wort, dann in das dritte usw. ein, bis ein eindeutiger Spitzname gefunden wird.
zB Die erste eindeutige Zeichenfolge hier aufgeführt wird der Spitzname:
Jus
,JusS
,JusSN
Just
,JustS
,JustSN
Just
,JustSo
,JustSoN
(Anmerkung , dieo
nicht nach wurde hinzugefügtJust
)
Just
,JustSom
,JustSomN
Just
,JustSome
,JustSomeN
Just
,JustSome
,JustSomeNa
Just
,JustSome
,JustSomeNam
Just
,JustSome
,JustSomeName
Am Ende sollten alle Eingabezeichenfolgen einen eindeutigen Kurznamen haben (möglicherweise identisch mit der Zeichenfolge). Sie können davon ausgehen, dass mit dieser Methode keine der Eingabezeichenfolgen demselben Kurznamen zugeordnet wird.
Beispiel
Aktualisiert, um meinen Fehler zu beheben!
Für die Eingabe
Martin Buttner
Doorknob
Peter Taylor
Howard
marinus
Dennis
DigitalTrauma
David Carraher
Martin Bitter
Martin Butter
Martin Battle
Martini Beer
Mart Beer
Mars Bar
Mars Barn
die Spitznamen wären
M
D
P
H
m
De
Di
DC
MB
Ma
MaB
Mar
MarB
Mars
MarsB
Einzelheiten
- Die Eingabe kann aus einer Datei (ein Name pro Zeile) oder jeweils einem Namen über die Standard- / Befehlszeile oder als Funktionsargument einer Liste von Zeichenfolgen oder als Funktionsargument einer einzelnen Zeichenfolge mit Zeilenumbrüchen zwischen den Namen erfolgen.
- Die Ausgabe sollte auf stdout (ein Kurzname pro Zeile) gedruckt oder von der Funktion als Liste von Zeichenfolgen oder als eine Zeichenfolge mit Zeilenumbrüchen zwischen Kurznamen zurückgegeben werden.
- Im Idealfall funktionieren Programme für Namen, die keine Zeichen außer Zeilenabschlusszeichen enthalten . Sie können jedoch davon ausgehen, dass alle Namen nur druckbares ASCII enthalten . (Die PPCG-Namen nicht.)
- Nur das reguläre Leerzeichen zählt als Worttrennzeichen. Führende und nachfolgende Leerzeichen können ignoriert werden.
Wertung
Die kürzeste Übermittlung in Bytes gewinnt. Tiebreaker geht zu der Antwort, die frühestens gepostet wurde.
Antworten:
CJam,
5853 BytesDies kann viel Golf gespielt werden. Aber für den Anfang:
Code-Erweiterung :
Probieren Sie es hier online aus
quelle
JavaScript (ES6) 159
Befolgen Sie die Spezifikationen und nicht das Beispiel.
Ich generiere die Kandidaten-Spitznamen mit einem aktuellen Mittelwort (am Anfang das erste Wort). Die Wörter vor dem Strom werden "wie sie sind" verwendet. Die Wörter nach dem aktuellen tragen mit keinem oder nur dem ersten Zeichen bei. Das aktuelle Wort trägt mit 1 weiteren Zeichen für jede Schleife bei.
Beispiel 'Nur einige Namen' => 'Just', 'Einige', 'Name'
Cw
Just
, Position1
, versuchen SieJ
,JS
,JSN
Cw
Just
, Position2
, versuchen SieJu
,JuS
,JuSN
Cw
Just
, Position3
, versuchen SieJus
,JusS
,JusSN
Cw
Just
, Position4
, versuchen SieJust
,JustS
,JustSN
Jetzt
Just
ist erschöpft ,Some
wird Cw, Position 2 wieder gestartet (für Position 1, die alle bereits versucht)Cw
Some
, Position2
, tryJust
,JustSo
,JustSoN
Cw
Some
, Position3
, versuchen SieJust
,JustSom
,JustSomN
Cw
Some
, Position4
, versuchen SieJust
,JustSome
,JustSomeN
nun
Some
erschöpft ist,Name
wird Cw, Position neu gestartet 2Cw
Name
, Position2
, tryJust
,JustSome
,JustSomeNa
Cw
Name
, Position3
, versuchen SieJust
,JustSome
,JustSomeNam
Cw
Name
, Position4
, versuchen SieJust
,JustSome
,JustSomeName
das ist alles , Leute!
Der Code
(q ist die aktuelle Wortposition, p ist die Schnittposition)
Test In der Firefox / FireBug-Konsole
quelle
PHP,
327289275274270Möglicherweise gibt es noch ein kleines Golfpotential.
php -d error_reporting=0 golfnicks.php < nicknames.txt
cat <<EOF | php -d error_reporting=0 golfnicks.php
+ Namensliste +EOF
// FUNC
kommentieren Sie alle mit gekennzeichneten Zeilen aus und kommentieren Sie die mit gekennzeichnete Zeile//PROG
. Versuchenf(array_fill(0,21,'Just Some Name'));
Nervenzusammenbruch
quelle