Une fois, j’écris un programme JavaScript qui prend en entrée une chaîne et un caractère et supprime tous les caractères sauf le premier et le caractère donné en entrée, un par un.
Par exemple, le calcul avec les entrées codegolf.stackexchange.com
et e
pour le caractère donne:
codegolf.stackexchange.com
cdegolf.stackexchange.com
cegolf.stackexchange.com
ceolf.stackexchange.com
celf.stackexchange.com
cef.stackexchange.com
ce.stackexchange.com
cestackexchange.com
cetackexchange.com
ceackexchange.com
ceckexchange.com
cekexchange.com
ceexchange.com
ceechange.com
ceehange.com
ceeange.com
ceenge.com
ceege.com
ceee.com
ceeecom
ceeeom
ceeem
ceee
Il garde le premier caractère et tous e
s. Tous les autres personnages sont supprimés un par un.
Votre tâche consiste à écrire un programme (ou une fonction) prenant deux entrées et une sortie (ou renvoyant) une chaîne qui accomplit cet effet.
Caractéristiques
- Vous pouvez supposer que la chaîne ne contiendra aucune nouvelle ligne.
- La deuxième entrée sera toujours un caractère.
- Si la réponse est sous la forme d'une fonction, vous pouvez renvoyer un tableau de chaînes contenant chaque ligne de la sortie.
- La sortie peut contenir un retour à la ligne final.
Cas de test
Test Cases
, s
:
Test Cases
Tst Cases
Ts Cases
TsCases
Tsases
Tsses
Tsss
Make a "Ceeeeeeee" program
, e
:
Make a "Ceeeeeeee" program
Mke a "Ceeeeeeee" program
Me a "Ceeeeeeee" program
Mea "Ceeeeeeee" program
Me "Ceeeeeeee" program
Me"Ceeeeeeee" program
MeCeeeeeeee" program
Meeeeeeeee" program
Meeeeeeeee program
Meeeeeeeeeprogram
Meeeeeeeeerogram
Meeeeeeeeeogram
Meeeeeeeeegram
Meeeeeeeeeram
Meeeeeeeeeam
Meeeeeeeeem
Meeeeeeeee
Hello World!
, !
:
Hello World!
Hllo World!
Hlo World!
Ho World!
H World!
HWorld!
Horld!
Hrld!
Hld!
Hd!
H!
Hello World!
, z
:
Hello World!
Hllo World!
Hlo World!
Ho World!
H World!
HWorld!
Horld!
Hrld!
Hld!
Hd!
H!
H
alphabet
, a
:
alphabet
aphabet
ahabet
aabet
aaet
aat
aa
upperCASE
, e
:
upperCASE
uperCASE
uerCASE
ueCASE
ueASE
ueSE
ueE
ue
C'est le code-golf , donc le code le plus court (en octets) gagne.
Meeeeeeeeegram
Réponses:
V , 12 octets
Essayez-le en ligne!
Hexdump:
J'ai testé cela avec la dernière version de V disponible avant le défi , et tout fonctionne correctement, ce qui rend la réponse compétitive.
Explication:
Le regex compressé se traduit par
Ce qui signifie
Version non concurrente (11 octets)
Cette version utilise un raccourci pour
Yp
celui qui n'était pas disponible lorsque ce défi a été posté.la source
cat filename | vim
ou ferais-je autre chose?Vim,
27, 26, 25 octetsEssayez-le en ligne!
L'entrée se présente sous ce format:
Ma première approche naïve a trois octets de plus:
Je suis également satisfait de cette réponse car elle commence par mon nom.
Voir la similitude? Hein?
Approches moins réussies:
Explication:
la source
k
trop :)(...)comk
ligne 5 actuellement.:t
ici. NormalYp
sauverait un octet. Vous devrez passer à<C-R>-
bien sûr. Les règles PPCG typiques sont frustrantes, car pour tout test élémentaire raisonnable,:t.|s
avec99@:
ou même999@:
seraient correctes, mais il n’ya pas de bonne façon d’obtenir une répétition infinie de cette façon. Vous êtes obligé d'utiliser des strats moins intéressants.MATL ,
2016 octetsEssayez-le en ligne! Ou vérifiez les cas de test: 1 , 2 , 3 , 4 , 5 .
Prime
Code modifié pour voir la chaîne progressivement réduite (compilateur hors ligne):
Ou essayez-le sur MATL Online!
Explication
la source
Haskell, 50 octets
Définit une fonction
(%)
renvoyant une liste de chaînes.Explication
(%)
s'appelle commew%c
, avecw
étant la chaîne d'entrée etc
le caractère à conserver. En bref, cette définition fonctionne en séparantw
le premier caractère (a
) et le reste (x
), en scindantx
à la première occurrence d’un caractère autre quec
et en s’appelant récursivement avec ce caractère supprimé.la source
Retina ,
28 à27 octetsLe nombre d'octets suppose un codage ISO 8859-1.
Essayez-le en ligne!
Explication
Il y a beaucoup de configuration ici. La scène elle-même est vraiment juste
G1`
, ce qui ne garde que la première ligne, en supprimant le caractère saisi.*
le transforme en essai, ce qui signifie que le résultat (c’est-à-dire la première ligne de la chaîne) est imprimé sans modifier réellement la chaîne.{
indique à Retina d'exécuter les deux étapes en boucle jusqu'à ce que la chaîne cesse de changer et;
empêche la sortie à la fin du programme.Ceci supprime le premier caractère qui a) n'est pas au début de l'entrée, b) n'est pas égal au caractère d'entrée séparé.
la source
Pip ,
22262422 octetsPrend chaîne en tant que premier argument de ligne de commande, caractère en second. Essayez-le en ligne!
Explication
Boucle sur les caractères d'entrée; si le caractère est égal au caractère spécial, passez au suivant; sinon, supprimez-le et imprimez la chaîne.
Une version non golfée (
a
,b
obtenez les arguments de cmdline;o
commence par une valeur de1
,x
est""
):Trucs de golf:
L
n'est évalué qu'une seule fois. Nous pouvons donc y insérer l'impression initiale.#Pa-1
ne fonctionnera pas carP
est peu prioritaire (il serait analysé en tant que#P(a-1)
), mais nous pouvons le réorganiser env+#Pa
utilisant lav
variable preinitialized to-1
.RA:
opérateur renvoie la nouvelle valeur dea
, afin que nous puissions imprimer cette expression au lieu d'avoir un séparéPa
instruction .?
.la source
Perl 5, 29 octets
J'ai obtenu 35 octets avec Strawberry Perl: 31 octets, plus 1 pour
-nE
au lieu de-e
, plus 3 pour espace +-i
(utilisé pour l'entrée à lettre unique; la chaîne la plus longue provient de STDIN).Cependant, je n'ai aucun doute que c'est faisable sans
chomp;
utiliser<<<
, qui est de 29 octets, même si je ne peux pas le tester moi-même avec Strawberry.Ainsi:
la source
-l
option, qui active un mode de gestion automatique des nouvelles lignes dans lequelprint
une nouvelle ligne supplémentaire (non pertinente ici) et-p
/-n
input supprime la nouvelle ligne (très utile). En outre, il est obsolète, mais je pense que vous pouvez remplacer le^I
par un contrôle-I littéral pour un octet d'économies supplémentaire. Enfin, je pense que ces/.\K[^$^I]/redo/e
serait un personnage plus court, bien que je ne sois pas sûr à 100% que ce soit un endroit légal pour mettre unredo
.^I
réalité, c'est vrai pour la plupart des variables de lettre de contrôle, mais pas celle-ci, IIRC. Re\K
et mettreredo
dans le remplacement avec/e
, merci! Je vais le tester quand j'ai une chance de…Perl 6 ,
47 4038 octetsÉtendu:
La raison a
...^
été utilisée à la place de...
est que&[eq]
cela ne reviendrait pasTrue
avant la répétition de la dernière valeur.la source
05AB1E ,
2625 octetsEssayez-le en ligne!
S'il vous plaît noter que
¬²k0Q
pourrait être réécrit¬²Q
, mais pour une raison quelconque, cela ne fonctionne pas lorsque le caractère actuel est un guillemet: Q renvoie la chaîne réelle au lieu d'un booléen et provoque une boucle infinie.Ce code peut être joué plus loin car
¯J?
est dupliqué. Déplacer cette partie dans la boucle éliminerait la duplication et permettrait également de supprimer le crochet de fermeture.la source
DˆćUΔD²KRнõ.;DXìˆ}¯¨»
pour 21, mais qui utilise de nouvelles commandes.Python 2,
7166 octets:Un programme complet. Prend 2 entrées via STDIN dans le format
'<String>','<Char>'
.Aussi, voici une solution récursive actuellement à 140 octets :
Celui-ci devrait être appelé dans le format
print(Q('<String>','<Char>'))
.la source
Python 3 , 72 octets
Essayez-le en ligne!
Faire un régime:
la source
JavaScript (ES6), 74 octets
la source
f('test cases', 's')
(se terminant parstss
, plutôt quetsss
). Je pense que c'est parce quereplace
supprime la première occurrence de sorte qu'il supprime la premièret
plutôt que la secondet
de la quatrième itération de lamap
boucle.Ruby,
1481399790837762 octetsVous ne savez pas si le code amateur est accepté pour cet échange, mais je voudrais apprendre à coder le golf bien que je sois terrible, avez-vous de l'aide pour que ce programme paraisse aussi petit que les autres?
MODIFIER:
Place remplacée par p
Suppression d'une tonne d'espaces et comptage correct d'octets grâce à Wheat Wizard
Merci à challenger5 est passé de
s=gets.chop;c=gets.chop;
às,c=gets.chop,gets.chop;
remplacé
then
par;
etgets.chop
avecgets[0]
merci Mhutter!Prendre l’entrée comme variable de ligne de commande maintenant, par exemple.
prog.rb helloworld l
Grâce aux nombreuses améliorations apportées par jeroenvisser101 en remplaçant
a=s.dup
pars=""+a
et la déclaration précédente ifif s[i]!=c;s[i]="";p s;else i+=1;end
avec(d!=c)?(s[i]="";p s):i+=1;
une amélioration considérable!la source
=
s. Pour des conseils plus complets, vous pouvez visiter notre page de conseils .s=gets.chomp
. Je ne sais pas si vous pouvez faire cela en Ruby, mais dans certaines langues telles que Python, vous pouvez combiner plusieurs tâches en une seule, commea,b,c=0,1,2
.do
,then
etend
) et autour du quatrième=
.c90,
129125 octetsavec des espaces:
sans espace:
ungolfed:
Cela prend un pointeur au début de la chaîne et effectue une boucle en itérant ce pointeur jusqu'à la fin de la chaîne. Dans la boucle, il affiche le premier caractère, puis toutes les occurrences du deuxième argument trouvé entre le début de la chaîne et le pointeur. Après cela, il appelle met sur le pointeur, imprimant le reste de la chaîne.
Cela doit être compilé sur un système où sizeof (int) == sizeof (char *). +3 octets sinon.
C’est la première fois que j’ai essayé le golf de code ici, alors je suis sûr que des optimisations sont nécessaires.
la source
Dyalog APL , 27 octets
{×i←⊃1+⍸⍺≠1↓⎕←⍵:⍺∇⍵/⍨i≠⍳≢⍵}
⍺
est le caractère exclu,⍵
est la chaîne initialeargument d'impression; trouve l'index
i
du premier non⍺
après le premier caractère; si trouvé, appelle récursivement aveci
enlevéla source
Mathematica, 64 octets
Fonction anonyme. Prend deux chaînes en entrée et renvoie une liste de chaînes en sortie. Fonctionne en supprimant à plusieurs reprises la première non-instance du caractère.
la source
FixedPointList
.PHP,
88848685828178 octets1 octet enregistré grâce à @IsmaelMiguel, 3 octets grâce à @ user59178, 3 octets inspiré de @ user59178
prend les arguments de la ligne de commande; courir avec
php -r <code> '<string>' <character>
Cela ajoute
5 à4 octets de code, mais enregistre sur la sortie et un supplémentaireecho$a;
.la source
$argv[1]."\n"
peut être écrit comme"$argv[1]\n"
$b
que la nouvelle ligne est ajoutée, elle sera toujours vraie si elle a une longueur> = 1. En tant que telle, elle""<
est inutile.substr()
plutôt que d’attribuer$b
.substr
résultat à la fois pour l'état et leprint
; donc je devrais l'assigner quelque part. Mais tu m'as inspiré.for(;$b=substr($b?:".$argv[1]\n",1);)
mais ce que vous avez encore mieux maintenant.05AB1E,
262423 octetsMerci @Kade pour 2 octets!
Merci @ Emigna pour 1 octet!
Utilise le codage CP-1252 . Essayez-le en ligne!
y²k0Ê
pourrait êtrey²Ê
mais le"
bousille.Cela pourrait probablement être plus joué au golf parce que
«
se répète deux fois. S'il vous plaît laissez un commentaire si vous avez des suggestions ou des moyens de jouer plus bas.la source
Java 10,
155140139124 octetsEssayez-le en ligne.
Explication:
Ancien réponse récursive de 139 octets:
-1 octet grâce à @Eugene . (La prochaine fois, faites un commentaire au lieu de modifier le post de quelqu'un d'autre, s'il vous plaît.)
Essayez-le en ligne.
Explication:
la source
C #,
122117112 octetsUngolfed:
Renvoie une collection de chaînes.
la source
c
. Dans ce cas, la boucle tentera de fonctionner pour toujours.TSQL, 127 octets (à l'exclusion des définitions de variables)
Formaté:
la source
patindex
, mais l'alphabet
exemple ne semble pas tout à fait correct, il s'affiche enaaphabet
basaaa
. Il convient également de mentionner que cette opération doit être exécutée sur un serveur ou une base de données avec un classement sensible à la casse, sinon l'upperCASE
exemple échoue également et s'afficheueE
sur sa dernière ligne.C #,
135138 :(137 octetsGolfé:
Ungolfed:
La fonction retourne la collection de chaînes.
EDIT1: @psycho a remarqué que l’algorithme n’était pas implémenté correctement.
EDIT2: Variable créée pour
s.Length
. Un octet enregistré grâce à @TheLethalCoder.la source
codeegolf e
donneraitce
au lieu decee
.if
avecwhile
et cela fonctionne.s.Length
sauvegarder un octet:int i=1,l;for(;;){yield return s;l=s.Length;while(i<l&&s[i]==c)i++;if(i>=l)break;s=s.Remove(i,1);}}
Python 2 -
6573 octetsEt une solution récursive de 76 octets , car même si elle est plus longue que la première, je l’aime mieux:
la source
Raquette 194 octets
Ungolfed:
Essai:
Sortie:
la source
JavaScript (ES6), 64
69Renvoyer une seule chaîne avec des nouvelles lignes
la source
.map
était cumulative. J'ai vu le.map().filter()
et j'ai pensé "Cela ferait une grande compréhension de tableaux!", Mais le manque d'index dans les compréhensions de tableaux l'a tué et il s'est retrouvé à la même longueur:s=>c=>[for(x of(i=0,z=[...s]))if(--i&&x!=c)(z[~i]=~i?'':x,z.join``)]
(au fait, je compte 68 octets pour tout cela.)([...z],c,i=0)=>[for(x of z)if(--i&&x!=c)(z[~i]=~i?'':x,z.join``)]
Swift 3 -
151147 octetsSwift n'est pas la langue idéale pour le golf, en particulier en ce qui concerne l'indexation des cordes. C'est le mieux que j'ai pu faire:
Malheureusement, Swift a besoin d'espace
!=
(mais pas pour==
), et Swift 3 a abandonné l'++
opérateur. L'astuce pour ces deux méthodes consiste à convertir en un tableau de caractères permettant l'indexation d'entiers et l'utilisation de l'interpolation de chaîne d'un caractère pour reconvertir enString
("\(c)"
).Ungolfed:
Solution précédente, non récursive
la source
while
espaces nécessaires à compiler. J'ai aussi joué avec le dactylographieString
et essayer de réglerprint
, mais ils n'ont pas économisé de place.Pyke,
261917 octetsEssayez-le ici!
la source
Mathematica, 78 octets
Bon sang Martin Ender, j'étais presque premier: p
Fonction non nommée; mise en œuvre simple avec une
While
boucle et quelques variables temporaires.la source
JavaScript ES6, 89 octets
Je pensais que ce serait un défi facile, mais je suis à peu près sûr que je manque quelque chose ici ..
Utilise la récursivité et renvoie un tableau de chaînes
la source
Groovy, 34 octets
la source