Un commentaire que j'ai fait dans le chat et la conversation qui a suivi m'ont inspiré à relever ce défi.
Suis-je le seul mentionné par des initiales ici? Nous voulons tous jouer au golf. Nous pouvons avoir MB et D-nob et ... O.
Si je suis connu sous le nom de "CH", je pense que tout le monde devrait également avoir un surnom initial.
Voici une liste des 100 meilleurs utilisateurs de puzzles de programmation et de golf de code par réputation pour jouer avec:
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
( c'est comme ça que je l'ai eu )
Défi
Écrivez un programme ou une fonction qui prend une liste de chaînes et génère une autre liste de chaînes de leurs surnoms minimaux, uniques et basés sur les initiales, en donnant la préférence à ceux qui sont plus proches du début de la liste.
Appliquez cette méthode à chaque chaîne S de la liste dans l'ordre donné pour créer les surnoms:
- Divisez S en mots séparés par des espaces, supprimant tous les espaces du processus.
- Liste les préfixes non vides de la chaîne des premières lettres des mots en S, du plus court au plus long.
par exemple ,Just Some Name
→J
,JS
,JSN
- Choisissez le premier élément de cette liste qui n'est pas identique à un surnom déjà choisi comme surnom pour S. Arrêtez si un surnom a été choisi, passez à l'étape 4 sinon.
Par exemple, siJust Some Name
était la première chaîne, ilJ
est garanti que c'est le surnom. - Répertoriez à nouveau les préfixes, mais cette fois, incluez la deuxième lettre du premier mot dans son emplacement naturel.
par exemple ,Just Some Name
→Ju
,JuS
,JuSN
- Faites la même chose qu'à l'étape 3 pour cette liste, en s'arrêtant si un surnom unique est trouvé.
- Répétez ce processus avec les lettres restantes du premier mot, en insérant éventuellement des lettres dans le deuxième mot, puis le troisième, et ainsi de suite, jusqu'à ce qu'un surnom unique soit trouvé.
par exemple , la première chaîne unique énumérés ici sera le surnom:
Jus
,JusS
,JusSN
Just
,JustS
,JustSN
Just
,JustSo
,JustSoN
(notez queo
n'a pas été ajouté aprèsJust
)
Just
,JustSom
,JustSomN
Just
,JustSome
,JustSomeN
Just
,JustSome
,JustSomeNa
Just
,JustSome
,JustSomeNam
Just
,JustSome
,JustSomeName
En fin de compte, toutes les chaînes d'entrée devraient se retrouver avec un surnom unique (potentiellement identique à la chaîne). Vous pouvez supposer qu'aucune des chaînes d'entrée ne correspondra au même surnom en utilisant cette méthode.
Exemple
Mis à jour pour corriger mon erreur!
Pour l'entrée
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
les surnoms seraient
M
D
P
H
m
De
Di
DC
MB
Ma
MaB
Mar
MarB
Mars
MarsB
Détails
- L'entrée peut être à partir d'un fichier (un nom par ligne), ou un nom à la fois via stdin / ligne de commande, ou comme argument de fonction d'une liste de chaînes, ou comme argument de fonction d'une chaîne unique avec des retours à la ligne entre les noms.
- La sortie doit être imprimée sur stdout (un surnom par ligne) ou renvoyée par la fonction sous la forme d'une liste de chaînes, ou sous la forme d'une chaîne avec des retours à la ligne entre les surnoms.
- Idéalement, les programmes fonctionneront pour les noms qui contiennent tous les caractères sauf les terminateurs de ligne . Cependant, vous pouvez supposer que tous les noms contiennent uniquement de l' ASCII imprimable . (Les noms PPCG ne le font pas.)
- Seul le caractère espace régulier compte comme séparateur de mots. Les espaces de début et de fin peuvent être ignorés.
Notation
La soumission la plus courte en octets l' emporte. Tiebreaker passe à la réponse publiée le plus tôt.
Réponses:
CJam,
5853 octetsCela peut être beaucoup joué au golf. Mais pour commencer:
Expansion du code :
Essayez-le en ligne ici
la source
JavaScript (ES6) 159
En suivant les spécifications et non l'exemple.
Je génère les surnoms candidats ayant un mot du milieu courant (au début, le premier mot). Les mots précédant le courant sont utilisés tels quels. Les mots après le courant ne contiennent ni - ni juste le premier - caractère. Le mot actuel contribue avec 1 caractère de plus pour chaque boucle.
Exemple 'Just Some Name' => 'Just', 'Some', 'Nom'
Cw
Just
, la position1
, essayerJ
,JS
,JSN
Cw
Just
, la position2
, essayerJu
,JuS
,JuSN
Cw
Just
, la position3
, essayerJus
,JusS
,JusSN
Cw
Just
, la position4
, essayerJust
,JustS
,JustSN
maintenant
Just
est épuisé ,Some
devient Cw, position redémarrée à 2 (pour la position 1, tous déjà essayés)Cw
Some
, la position2
, essayerJust
,JustSo
,JustSoN
cw
Some
, la position3
, essayerJust
,JustSom
,JustSomN
cw
Some
, la position4
, essayerJust
,JustSome
,JustSomeN
maintenant
Some
est épuisé,Name
devient cw, la position à 2 redémarréeCw
Name
, la position2
, essayerJust
,JustSome
,JustSomeNa
cw
Name
, la position3
, essayerJust
,JustSome
,JustSomeNam
cw
Name
, la position4
, essayerJust
,JustSome
,JustSomeName
C'est tout!
Le code
(q est la position actuelle du mot, p est la position de découpage)
Tester dans la console Firefox / FireBug
la source
PHP,
327289275274270Il y a peut-être encore un peu de potentiel golfique.
php -d error_reporting=0 golfnicks.php < nicknames.txt
cat <<EOF | php -d error_reporting=0 golfnicks.php
+ liste de noms +EOF
// FUNC
et commentez celle marquée avec//PROG
. Essayerf(array_fill(0,21,'Just Some Name'));
panne
la source