Suis-je un ingénieur?


42

L’ état de l’Oregon a récemment infligé une amende de 500 dollars à un ingénieur électricien qui étudie les horaires des feux de signalisation pour s’être qualifié d’ingénieur.

Avec une chaîne de 2 lettres en entrée représentant un état américain, les résultats suivants sont générés:

  • I am not an engineersi l'état est Oregon ( OR)
  • I am an engineer si l'État est un autre État américain
  • What is an engineer? compte tenu de toute autre entrée

Sortie ne peut contenir aucun leader des espaces, mais peut contenir autant de fuite des espaces que vous le souhaitez.

Vous pouvez supposer que l'entrée sera toujours 2 lettres majuscules.

Voici une liste de toutes les abréviations des 50 états américains:

AL, AK, AZ, AR, CA, CO, CT, DE, FL, GA, HI, ID, IL, IN, IA, KS, KY, LA, ME,
MD, MA, MI, MN, MS, MO, MT, NE, NV, NH, NJ, NM, NY, NC, ND, OH, OK, OR, PA,
RI, SC, SD, TN, TX, UT, VT, VA, WA, WV, WI, WY

Notation

C'est du , donc le moins d'octets dans chaque langue gagne!


Puis-je avoir un espace de fin dans la sortie?
Business Cat

@BusinessCat oui, mettra à jour les spécifications pour dire cela
Skidsdev

4
Note latérale: Si vous concaténez toute la chaîne, vous obtenez "... OKOR PARIS CSDTN ..." ;-)
Mateen Ulhaq

Mats Järlström n'aurait pas le droit de se présenter en tant qu'ingénieur au Texas.
Ben Voigt

Réponses:


17

C #, 311 309 240 237 222 195 184 184 183 octets

s=>s=="OR"?"I am not an engineer":"MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH RIA UT WVT WIL WY".Contains(s)?"I am an engineer":"What is an engineer?";

Essayez-le en ligne!

Enregistré 2 octets en ajoutant l'espace avant andeb

-69 (huehue) -72 octets grâce à TheLethalCoder

-15 octets grâce à la chaîne générique d'états de génie de TotallyHuman

-38 octets moins de compression de chaîne

Ungolfed:

public static string a(string s)
{
    var b = " an engineer";
    if (s == "OR")
    {
        return "I am not" + b;
    }
    else
    {
        if ("MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH RIA UT WVT WIL WY".Contains(s))
        {
            return "I am" + b;
        }
        else
        {
            return $"What is{b}?";
        }
    }
}

Utilisez ..."+bplutôt que des chaînes interpolées, remplacez-le if..else if...elsepar return s=="OU"? ....: System.Arr ... `c’est-à-dire utilisez un ternaire. Utilisez u.Containsau lieu de Array.Exists. Je pense que si vous utilisez des espaces à la place des virgules, .Split()aucun paramètre ne fonctionnera.
TheLethalCoder

déclarer b et u dans la même ligne et même si vous devez utiliser un type explicite, chaine devrait tout de même vous sauver un octet
LiefdeWen

@StefanDelport uest un tableau et non une chaîne. Cependant, vous pouvez enregistrer des octets en définissant uune chaîne et en l'utilisant .Contains.
TheLethalCoder

240 octets: s=>{var b=" an engineer";return s=="OR"?"I am not"+b:"AL AK AZ AR CA CO CT DE FL GA HI ID IL IN IA KS KY LA ME MD MA MI MN MS MO MT NE NV NH NJ NM NY NC ND OH OK PA RI SC SD TN TX UT VT VA WA WV WI WY".Contains(s)?"I am"+b:$"What is{b}?";};. Pensez que j'ai supprimé tous les espaces pertinents. (Non testé)
TheLethalCoder

1
Vous pouvez jouer cela en définissant "un ingénieur" en tant que variable distincte pour enregistrer certains octets.
OldBunny2800

11

JavaScript (ES6), 182 octets

s=>['I am'+(x=' an engineer'),`What is${x}?`,'I am not'+x][s=='OR'?2:'MNNMLATNAKALARAZCACOCTDEFLGAHIIAIDILINKSKYMAMDMEMIMOMSMTNCNDNENHNJNVNYOHOKPARISCSDTXUTVAVTWAWIWVWY'.search(s)&1]

Démo


3
Échec pour, par exemple LA: /
Christoph

@Christoph devrait être OK maintenant. Merci d'avoir signalé cela!
Arnauld

Je pensais qu'il manquait OU pour l'instant - idiot!
Chas Brown


8

C, 215 208 190 octets

-7 grâce à Cool Guy

#define z" an engineer"
#define f(s)!strcmp(s,"OR")?"I am not"z:strstr("MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH RIA UT WVT WIL WY",s)?"I am"z:"What is"z"?"

Utilisé par @totunhumhuman "genre string".

Comment ça marche:

  • "string"zconcatène automatiquement "string"avec z( " an engineer"). Oui, C fait ça.
  • !strcmp(s,"OR") compare la chaîne à "OU".
  • ?"I am not"zrenvoie "je ne suis pas un ingénieur" si vrai. Autrement...
  • :strstr(...,s) vérifie si la chaîne de génie de @ totallyhuman contient la chaîne fournie.
  • ?"I am"z retourne "je suis un ingénieur" si oui, et ...
  • :"What is"z"?")retourne "Qu'est-ce qu'un ingénieur?" autrement.

Essayez-le en ligne!


1
206 octets:#define z " an engineer" f(char*s){!strcmp(s,"OR")?puts("I am not"z):strstr("MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH RIA UT WVT WIL WY",s)?puts("I am"z):puts("What is"z);}
Spikatrix le

@CoolGuy Cela ne fonctionnera pas pour "Qu'est-ce qu'un ingénieur?" Mais je l'ai fait fonctionner dans 209 octets. Merci!
MD XF

Vous pouvez retourner la chaîne au lieu de l’imprimer
l4m2

@ l4m2 a fait quelque chose de similaire.
MD XF


5

Python 2 , 192 186 182 178 176 octets

Pourrait probablement compresser davantage la chaîne d'état.

lambda s,e=' an engineer':'I am'+' not'*(s=='OR')+e if s in'MINCALAZ SCT FL GA WIAKSD ME MD MA MNMS MOKY MTNE NVTX NH NJ NY ND COHIDE OR PARIL UT VA WA WV WY'else'What is%s?'%e

Essayez-le en ligne!


2
Vous utilisez uniquement uen if s in upouvez-vous noter l'utiliser directement au lieu de le déclarer?
TheLethalCoder

1
@totallyhuman cette compression de chaîne est assez incroyable, belle!
Skidsdev

2
@totallyhuman VALA WAZ NCA COH CTX SDE FL GA HID WIL MIN IAKSC KY ME MD MA MNMS MOK MTNE NH NJ NY ND PARI UT NVT WV WYest le plus petit que je puisse faire
Skidsdev

2
'MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH ORIA UT WVT WIL WY'
Felipe Nardi Batista

2
Oups, désolé cela m'a pris si longtemps. On dirait que j'ai perdu car copier cette chaîne ne rend pas ma réponse meilleure que celle qui l'utilise. S'il vous plaît, arrêtez de voter pour cela et votez mieux pour l'autre réponse.
totalement humain

5

Java (JDK 10) , 184 octets

s->s.format(s.equals("OR")?"I am not%s":"MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH RIA UT WVT WIL WY".contains(s)?"I am%s":"What is%s?"," an engineer")

Essayez-le en ligne!

Je m'excuse d'avoir réutilisé la chaîne compressée: je n'ai rien trouvé de mieux par moi-même ... :(


4

05AB1E , 104 103 101 octets

„€À€ˆ„I€Ü‚.•~Zµ∞/'—¶[@øl•Œ2ù.•9₆\|&׃Ω#àöF},cΓ páe;ð²∍₆jÌn#dÅ?DvĆ8A•2ôìuIå©è¹„ORQi'€–}„€¤©É)ðýª'?®_×J

Essayez-le en ligne!

Ancienne version de 104 octets au cas où cela serait plus facilement amélioré.

„€À€ˆ„I€Ü‚.•ÂkXñ…ΓVt€Ïè∍‡Λi„2¶’að=–½6™oÑþÁāõgO·ð~
λ†₃›;â&ÄFv¾‡1~ǝQa«;cS•u2ôIå©è¹„ORQi'€–}„€¤©É)ðýª'?®_×J

Pas content avec la compression ni le cas particulier pour ?.


OK qu'est-ce que c'est? Avez-vous juste ré-ordonner les états ou quelque chose?
Erik the Outgolfer

@EriktheOutgolfer: La version de 104 octets est simplement une compression des nombres correspondant aux positions des caractères dans l'alphabet (A=1,C=3 ...). La version de 103 octets fait la même chose pour certains États et fusionne certains États qui se terminent par la même lettre qu'un début. Je suis sûr que cela peut encore être amélioré et je vais ajouter une meilleure explication quand je l'ai joué au golf davantage.
Emigna

1
Bonne réponse! J'aime ce que .•~Zµ∞/'—¶[@øl•Œ2ùvous avez utilisé pour certains états, au lieu de simplement compresser tous les états et de le faire . Et belle approche globale. (Heureux d' avoir vu votre réponse avant d' essayer quelque chose de moi - même, car il aurait certainement pas été aussi court ..)
Kevin Cruijssen

4

F # , 222 octets

let f v=let (a,b)=if ("WALAKSCARINMNVTNCTX NHIDE MOHIL COKY MSD PAZ WIA WVA FL GA MA MD ME MI MT NE ND NJ NY UT WY").Contains v then ("I am",".") elif "OR"=v then ("I am not",".") else ("What is","?") in a+" an engineer"+b

Essayez-le en ligne!

Étendu:

let f v =
    let (a, b) =
        if ("WALAKSCARINMNVTNCTX NHIDE MOHIL COKY MSD PAZ WIA WVA FL GA MA MD ME MI MT NE ND NJ NY UT WY").Contains v then ("I am", ".")
        elif "OR" = v then ("I am not", ".")
        else ("What is", "?")
    a + " an engineer" + b

Dans un état à deux lettres v passé à la fonction f , construisez un tuple (a, b) représentant la tête et la queue de la phrase "ingénieur".

N'hésitez pas à utiliser la "chaîne d'état compressée" librement; c'est un octet entier plus court que celui de MINCALA ...



3

Japt , 136 135 131 129 128 octets

Il est possible que des économies supplémentaires soient disponibles en testant l'ordre des abréviations d'état. J'y reviendrai dans un moment.

`mnnmlãGLÏz¯¬ct¸flgaá[9¨kyµmçpCijmsmtnhnvnyn¬kpÂÉcsdk¡x©vavt°±wvwy`ò øUv)?"I am {¥"OR"?"not ":P}"+` à¨\ `:`Wt   à¨\?

Essayez-le en ligne


Explication

  • Nous prenons une chaîne comprimée des abréviations minuscules, la décompressons et la scindons en un tableau de 2 chaînes de caractères à l'aide de la òméthode.
  • Nous utilisons ensuite la øméthode pour voir si le tableau contient Uv, qui est la chaîne d'entrée convertie en minuscule.
  • Si nous le faisons, nous construisons notre chaîne de sortie, en commençant par "I am "
  • Vérifier si la chaîne d'entrée ¥(est égale à) "OR"nous permet d'ajouter "not "ou la variable de chaîne vide P.
  • Et puis nous décompressons et ajoutons la chaîne compressée "an engineer".
  • Si l'entrée n'a pas été trouvée dans le tableau, alors nous générons la décompression de la chaîne compressée "What is an engineer?".

3

Python 3 , 180 179 178 octets

def f(s):e=" not"*(s=="OR")+" an engineer";return"I am"+e if s in"PALAKSCAZ CTNMINCOR FL GA MDE ME MND MA MSD MOKY NE NH NJ NY WA OHID UTX MTNVARIA WIL WVT WY"else"What is"+e+"?"

Essayez-le en ligne!


Oui, c'est correct: essayez-le en ligne!
Int6h

166 octets . Je suis sûr que la ficelle peut aussi être un peu plus serrée en réutilisant des Etats
Jo King

Merci @JoKing. Cela ressemble trop à la réponse de Python 2 à ce stade, IMO :). J'ai essayé de compresser la chaîne, mais le plus court que j'ai pu obtenir était de 92 symboles. J'ai écrit un court script pour le faire, mais il ne peut être réduit qu'à 94 caractères et il ne se compresse pas de manière optimale. Je pense aussi que dans ce défi particulier, la chaîne magique elle-même ne devrait pas être incluse dans le nombre d'octets.
Int6h

2

CJam , 143 octets

"ORIA MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH UT WVT WIL WY"q#g"I am not 
I am 
What is?"N/=)" an engineer"\

Essayez-le en ligne! ou comme une suite de tests

Explication

"ORIA...."       e# Push a string in which every state is a substring, but no non-state is
                 e# a substring.
q                e# Read the input.
#                e# Find the index of the input in the string. (-1 if not found)
g                e# Signum of the index: -1 for negative, 0 for 0, 1 for positive.
"I am.... "      e# Push this string. Note the trailing space on the first two lines of it.
N/               e# Split it on newlines.
=                e# Get the string at index given by the signum.
)                e# Pull out the last character.
" an engineer"\  e# Push " an engineer" and bring the other character to the TOS.
                 e# Implicit output.

Puisque Oregon ( OR) est au début de la chaîne, trouver le signum de l'index de l'entrée sera -1 si non trouvé, 0 si OR, 1 si aucun autre état. Quelle chaîne à imprimer peut être décidé par cela.


2

PHP, 188 octets

$e=" an engineer";echo strpos(_TNNMLAALAKAZARCACOCTDEFLGAHIIDILINIAKSKYMEMDMAMIMNMSMOMTNENVNHNJNYNCNDOHOKORPARISCSDTXUTVTVAWAWVWIWY,$argn)&1?"I am".($argn!="OR"?"":" not").$e:"What is$e?";

Essayez-le en ligne!


in_array(...)à strpos(_AKALARAZCACOCTDEFLGAHIIAIDILINKSKYLAMAMDMEMIMNMOMSMTNCNDNENHNJNMNVNYOHOKPARISCSDTNTXUTVAVTWAWIWVWY,$argn)&1.
Christoph

@Christoph ne travaille pas pour une entrée par exemple de LA
Jörg Hülsermann

Hm à droite: / peut-être que nous pouvons réorganiser un peu la chaîne .. Je vais essayer. Invalide également la réponse js btw.
Christoph

_NMMNINTNRIHIMIWISCNCCTMTUTVTWVNVFLILCAALGAIAMAPAVAWACOLAMOAKARKSMSNHOHOKORAZDEIDKYMEMDNENJNYNDSDTXWYœuvres
Christoph

@Christoph Ou ma commande fonctionne aussi.
Jörg Hülsermann

2

C #, 178 octets

s=>(s=="OR"?"I am notx":"MINCALA MSCTNMNVAKY WAZ PARIA FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH UT WVT WIL WY".Contains(s)?"I amx":"What isx?").Replace("x"," an engineer");

Courir en C # Pad

Golf basé sur la solution de Mayube ; nouveau ici, donc je n'ai pas assez de rep pour commenter.


Peut-être voudrez-vous éditer un lien vers sa solution :) Si vous cliquez sur Partager sur sa solution, cela vous donnera un lien directement.
Stephen

@StephenS Merci pour le tuyau!
Arthur Rump

2

Haskell , 220 214 210 209 octets

s(a:b:c)=[a,b]:s(b:c)
s _=[]
a="I am "
e="an engineer "
i"OR"=a++"not "++e
i x|x`elem`s"MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH RIA UT WVT WIL WY"=a++e
i _="What is "++e++"?"

Essayez-le en ligne!


sinon = True, 1<2est encore plus court
BlackCap

Facepalm , merci!
bartavelle

Vous avez inclus ORdans la longue chaîne de la deuxième définition de i
BlackCap

J'ai volé la longue ficelle des autres réponses. OU n'en fait-il pas partie?
bartavelle

1
Non, pas plus :)
BlackCap

1

Javascript 204

s=>{h=/^(A[LKZR]|C[AOT]|DE|FL|[GPLV]A|[HR]I|I[DLNA]|K[SY]|M[EDAINSOT]|N[EVHJMYCD]|O[HK]|S[CD]|T[NX]|[VU]T|W[AVIY]|(OR))$/.exec(s);return(!h?"What is ":"I am "+(h[2]?"not ":""))+"an engineer"+(!h?'?':'')}

1
Pure optimisers=>(!(h=/(A[LKZR]|C[AOT]|DE|FL|[GPLV]A|[HR]I|I[DLNA]|K[SY]|M[EDAINSOT]|N[EVHJMYCD]|O[HKR]|S[CD]|T[NX]|[VU]T|W[AVIY])/.test(s))?"What is":"I am"+(s=='OR'?" not":""))+" an engineer"+['?'[+h]]
l4m2

@ l4m2 nice, ma réponse a été battue.
martin

1

AWK, 189 octets

/A[LKZR]|C[AOT]|DE|FL|[GPV]A|HI|I[DLNA]|KS|KY|LA|M[EDAINSOT]|N[EVHJMYCD]|O[HKR]|RI|SC|SD|TN|TX|UT|VT|W[AVIY]/{print"I am "($0~OR?"not ":"")"an engineer";exit}
{print"What is an engineer?"}

Si l'entrée correspond à une expression rationnelle contenant toutes les abréviations de l'état, écrivez "Je suis un ingénieur" avec un "pas" inséré au milieu si l'état est Oregon, puis quittez.

Si l'entrée ne correspond pas à l'expression régulière, il ne doit pas s'agir d'une abréviation d'état US.


1

Python 3, 238 octets

def f(x):s=x in('ALAKAZARCACOCTDEFLGAHIIDILINIAKSKYLAMEMDMAMIMNMSMOMTNENVNHNJNMNYNCNDOHOKORPARISCSDTNTXUTVTVAWAWVWIWY'[i:i+2]for i in range(0,100,2));o=x=='OR';q=(1-o)*(1-s);return q*'What is'+(1-q)*('I am'+o*' not')+' an engineer'+q*'?'

Explication

Aucune technique de compression utilisée.

def f(x):
    # Check if State
    s = x in ('ALAK...WIWY'[i:i+2]
              for i in range(0, 100, 2))

    # Check if Oregon
    o = x == 'OR'

    # Check if neither Oregon nor State
    q = (1-o) * (1-s)

    # Construct output string
    return q * 'What is' + \
        (1-q) * ('I am' + o * ' not') + \
        ' an engineer' + \
        q * '?'

C'est l'Oregon, pas l'Ohio.
L3viathan

1
@ L3viathan Je ne sais pas comment je louper ça après avoir vu l' Oregon partout en raison de la vie est étrange ... ¯ \ _ (ツ) _ / ¯
Mateen Ulhaq

1

Java, 173 octets

s->(!"MINCALARIA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH UT WVT WIL WY OR".contains(s)?"What is":"I am"+(s.equals("OR")?" not":""))+" an engineer"

3
Bienvenue chez PPCG! Toutes les entrées doivent être un programme complet ou une fonction; Je crois que vous pouvez transformer cela en une expression lambda valide (et donc une fonction) en ajoutant s->au début.
ETHproductions

1

Stax , 100 octets

Cette langue postdate le défi. Mais l'auteur (moi) ne l'a pas vu jusqu'à présent.

éë&W≈#W¬π█▐╜╣╟◙√a☻∞ZrπU♫ÿô♠▌⌠Që≡AûpI⌡ÄNA綵↑╝╣òøΩ.¬É]╩Æ↓d∩é¡2ŲeB┼¼▬5∟┤sW♠♂↑q▐WMï╝|Ñ↑╫+3¼↔îûvlLΩ∟┬oë

Exécuter et déboguer


1

JavaScript ES6, 175 171 octets

x=>[`What is${e=" an engineer"}?`,`I am${x=="OR"?" not"+e:e}`][+!!'MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH ORIA UT WVT WIL WY'.match(x)]

Rejoint beaucoup de bons

Ou 152 octets sur le codage ISO

Générateur:

'x=>[`What is${e=" an engineer"}?`,`I am${x=="OR"?" not"+e:e}`][+!!btoa`*`.match(x)]'.replace('*',atob('MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH ORIA UT WVT WIL WY '.replace(/ /g,'/')))

Il serait peut-être possible de réorganiser la chaîne de manière à utiliser btoa pour l'agrandir
l4m2

1

C (gcc) , 0 + 176 octets

-Dz"=an engineer" -Df(s)*s-79|1[s]-82?strstr("MINCALA=MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH RIA UT WVT WIL WY",s)?"I am"z:"What is"z"?":"I am not"z

Essayez-le en ligne!

traduction pure


1

Powerhell, 175 octets

(('I am'+' not'*!($i='ORIA MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH UT WVT WIL WY'.IndexOf($args))+($e=' an engineer')),"What is$e`?")[!++$i]

Script de test:

$f = {

$e=' an engineer'
$i='ORIA MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH UT WVT WIL WY'.IndexOf($args)
(('I am'+' not'*!$i+$e),"What is$e`?")[!++$i]

# Important! OR is a first state in the modified @totallyhuman's genuis string

}

@(
    ,('OR', 'I am not an engineer')
    ,('AL', 'I am an engineer')
    ,('IL', 'I am an engineer')
    ,('ZZ', 'What is an engineer?')
) | % {
    $s,$e = $_
    $r = &$f $s
    "$($r-eq$e): $r"
}

Sortie:

True: I am not an engineer
True: I am an engineer
True: I am an engineer
True: What is an engineer?

0

Python 3 , 236 182 181 octets

lambda s:'I am not'+e if s=='OR'else'I am'+e if s in'MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH RIA UT WVT WIL WY'else'What is%s?'%e
e=' an engineer'

Essayez-le en ligne!

TIO contient des cas de test pour tous les états.
-54 octets grâce à la compression de chaîne


Vous pouvez utiliser la compression de chaîne des autres réponses pour sauvegarder des octets
TheLethalCoder

1
MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH ORIA UT WVT WIL WYest meilleure compression
Skidsdev

0

q / kdb +, 174 octets

Solution:

{a:" an engineer?";$[(#:)l:ss["ORIA MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH UT WVT WIL WY";x];-1_"I am",$[l~(),0;" not";""],a;"What is",a]}

Explication:

  {
  // save string into variable a
  a:" an engineer?";
  // try to find the input x in the condensed string, save location in variable l, $ is a if/else
  $[(#:)l:ss["ORIA MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH UT WVT WIL WY";x];
  // found a match, check if it was at index 0 ('OR') and inject " not" if so, drop the '?' off the end
  -1_"I am",$[l~(),0;" not";""],a;
  // otherwise return 'What is an engineer?'
  "What is",a]
  }

Remarques:

Utilisé la chaîne 'compressée' à partir d'autres réponses, s'efforçant de trouver un moyen de la mettre sur une seule ligne afin d'éviter l'affectation de la avariable (tout en ajoutant ?quand l'entrée n'est pas un état.


0

Retina , 175 octets

..
I am $&~MINCALAZ SCT FL GA WIAKSD ME MD MA MNMS MOKY MTNE NVTX NH NJ NY ND COHIDE PARIL UT VA WA WV WY
(..)~.*\1.*
~
OR~.*
not ~
I am ..~.*
What is ~?
~
an engineer

Essayez-le en ligne! J'espère que je me suis approprié la liste des meilleurs états. Explication:

..
I am $&~MINCALAZ SCT FL GA WIAKSD ME MD MA MNMS MOKY MTNE NVTX NH NJ NY ND COHIDE PARIL UT VA WA WV WY

Commencez à construire le résultat. En outre, insérez la liste d'état à utiliser pour l'étape suivante.

(..)~.*\1.*
~

Si c'est l'un des 49 états, supprimez l'état et la liste.

OR~.*
not ~

S'il s'agit de l'Oregon, remplacez l'état par notet supprimez la liste.

I am ..~.*
What is ~?

S'il s'agit de quelque chose d'autre, remplacez tout par l'autre sortie.

~
an engineer

Ajoutez ces mots en dernier pour éviter les répétitions.


0

Crystal, 232 207 205 octets

i="ORALAKAZARCACOCTDEFLGAHIIDILINIAKSKYLAMEMDMAMIMNMSMOMTNENVNHNJNMNYNCNDOHOKPARISCSDTNTXUTVTVAWAWVWIWY".split(/(..)/).index ARGV[0];p (i ?"I am ": "What is ")+(i==1 ?"not ": "")+"an engineer"+(i ?"": "?")

Essayez-le en ligne . (légèrement modifié en raison d'un numéro d'ARGV)


0

Facteur, 135 octets

USE: usa-cities [ " an engineer"swap [ "I am"swap string>state OR = 
[ " not"append ] when ""] [ 2drop "What is" "?"] recover surround ]

Plus lisible et nommé:

: engineer? ( state-name -- str ) 
  [ " an engineer" ] dip ! put this below the input on the stack 
  [ 
    [ "I am" ] dip       ! put this below the input too but above the other 
    string>state OR =    ! string>state throws on a non-state name 
    [ " not" append ] when ""  ! otherwise and if it is OR, append this 
  ] 
  [ 2drop "What is" "?" ] recover surround ; ! catch error, surround string

[ x ] dipet x swapsont équivalentes en vigueur de la pile , mais la première est plus courte que si imbriqué: [ [ [ x ] dip ] dip ] dip.


0

Python 2, 213 211 194 octets

c="uTXnMSCORIDEwVAKYmTNHILfLAZpALmNEmOKSDwINCARmEwAnJnDmAmIAgAwYcTnVToHnYmD"
r=(lambda x:x in c or x[0].lower()+x[1]in c)(i)^1
u="What is "*r+("I am "+"not "*(i=="OR"))*(r^1)+"an engineer"+"?"*r

Essayez-le en ligne

Stuff je travaille sur le raccourcissement:

  • (i=="OR")
  • or x[0].lower()+x[1]in c

Mise à jour:

  • 2 octets sauvegardés en les remplaçant s=not rpars=r^1
  • En-tête et pied de code séparés

0

Ruby, 164 octets

->s{r="What is an engineer?"
j=379
"##(*Q0'7q;N>%*$o(.F%#&'#&#5##%$%+%5%)5r@#P,B353*/%".bytes{|i|s==(j+=i-34).to_s(36).upcase&&r="I am not"[0,i==41?8:4]+r[7,12]}
r}

Utilise un codage de longueur d'exécution, donc la chaîne magique a 50 octets de long, un par état. Afin de construire cela, il était d'abord nécessaire de mettre les codes d'état dans l'ordre alphabétique du code d'état, plutôt que le nom de l'état. Malheureusement, il faut 7 octets pour convertir la représentation base36 d' jun code de code en minuscule en un code de code en majuscule.

Programme non testé

f=->s{                                                  #s is the input string.
  r="What is an engineer?"                              #Set r to "What is an engineer?"
  j=379                                                 #Set j to one less than 380, which in base36 becomes AK, the first statecode alphabetically
  "##(*Q0'7q;N>%*$o(.F%#&'#&#5##%$%+%5%)5r@#P,B353*/%". #Iterate through the run length encoded string 
  bytes{|i|                                             #(each character represents how far in base 36 each state code is from the previous one)
    s==(j+=i-34).to_s(36).upcase&&                      #take the ascii value of the character and subtract 34 (example #=35-34=1) and add to j. Convert j to base36 to get a state code.
      r="I am not"[0,i==41?8:4]+r[7,12]                 #if the state code matches s, modify r. Take the first 4 characters of "I am not" (first 8 in the case of OR where i==41) 
  }                                                     #and add r[7,12]==" an engineer" (12 characters of the existing value of r, starting at character 7 
r}                                                      #return r

%w{AL AK AZ AR CA CO CT DE FL GA HI ID IL IN IA KS KY LA ME MD MA MI MN MS MO MT NE NV NH NJ NM NY NC ND OH OK OR PA RI SC SD TN TX UT VT VA WA WV WI WY XX}.map{|i|p [i,f[i]]}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.