Sono un ingegnere?


42

Recentemente, un ingegnere elettrico che studiava i tempi del semaforo è stato multato di $ 500 dallo stato dell'Oregon per essersi riferito a se stesso come ingegnere.

Data una stringa di 2 lettere come input, che rappresenta uno stato USA, output:

  • I am not an engineerse lo stato è Oregon ( OR)
  • I am an engineer se lo stato è qualsiasi altro stato degli Stati Uniti
  • What is an engineer? dato qualsiasi altro input

Uscita non può contenere alcun leader spazi bianchi, ma può contenere fino trailing spazi bianchi come si desidera.

Si può presumere che l'input sarà sempre di 2 lettere maiuscole.

Ecco un elenco di tutte le 50 abbreviazioni degli Stati Uniti:

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

punteggio

Questo è , quindi vince il minor numero di byte in ogni lingua !


Posso avere uno spazio finale nell'output?
Business Cat,

@BusinessCat sì, aggiornerà le specifiche per dire che
Skidsdev il

4
Nota a margine: se concatenate l'intera stringa insieme, otterrete "... OKOR PARIS CSDTN ..." ;-)
Mateen Ulhaq,

Anche Mats Järlström non avrebbe potuto presentarsi come ingegnere in Texas.
Ben Voigt,

Risposte:


17

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

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?";

Provalo online!

Salvato 2 byte aggiungendo lo spazio prima anab

-69 (huehue) -72 byte grazie a TheLethalCoder

-15 byte grazie alla stringa di stati geniali di TotallyHuman

-38 byte per una maggiore compressione delle stringhe

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}?";
        }
    }
}

Usa ..."+binvece di stringhe interpolate, if..else if...elsepassa a return s=="OR"? ....: System.Arr ... `ovvero usa un ternario. Usa u.Containsinvece di Array.Exists. Penso che se usi gli spazi anziché le virgole, allora .Split()senza parametri funzionerà.
TheLethalCoder il

dichiarare b e u nella stessa riga e anche se è necessario utilizzare una stringa di tipo esplicito, è comunque necessario risparmiare un byte
LiefdeWen

@StefanDelport uè un array non una stringa. Tuttavia, è possibile salvare byte impostandoli ucome stringa e utilizzandoli .Contains.
TheLethalCoder

240 byte: 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}?";};. Penso di aver rimosso tutto lo spazio bianco rilevante. (Non testato)
TheLethalCoder

1
Puoi giocare a golf definendo "un ingegnere" come una variabile separata per salvare alcuni byte.
OldBunny2800,

11

JavaScript (ES6), 182 byte

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

dimostrazione


3
Non ad esempio LA: /
Christoph

@Christoph Dovrebbe essere OK ora. Grazie per aver segnalato questo!
Arnauld,

Ho pensato che mancasse O per il momento - sciocco!
Chas Brown,


8

C, 215 208 190 byte

-7 grazie a 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"?"

Usata la "stringa del genere" di @humanhuman.

Come funziona:

  • "string"zsi concatena automaticamente "string"con z( " an engineer"). Sì, lo fa C.
  • !strcmp(s,"OR") confronta la stringa con "OR".
  • ?"I am not"zrestituisce "Non sono un ingegnere" se vero. Altrimenti...
  • :strstr(...,s) controlla se la stringa geniale di @holdhuman contiene la stringa fornita.
  • ?"I am"z restituisce "I am a engineer" in tal caso, e ...
  • :"What is"z"?")restituisce "Che cos'è un ingegnere?" altrimenti.

Provalo online!


1
206 byte:#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,

@CoolGuy Che non funzionerà per "Cos'è un ingegnere?" Ma l'ho fatto funzionare in 209 byte. Grazie!
MD XF,

Puoi restituire la stringa invece di stamparla
l4m2

@ l4m2 Ha fatto qualcosa di simile.
MD XF,


5

Python 2 , 192 186 182 178 176 176 byte

Probabilmente potrebbe comprimere di più la stringa di stato.

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

Provalo online!


2
Puoi usarlo solo uin if s in unota, puoi usarlo direttamente invece di dichiararlo?
TheLethalCoder il

1
@totallyhuman che la compressione delle stringhe è piuttosto sorprendente, bella!
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 WYè il più piccolo che posso farcela
Skidsdev il

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
Spiacenti, mi dispiace che ci sia voluto così tanto tempo. Sembra che abbia perso copiando quella stringa non rende la mia risposta migliore di quella che la usa. Smetti di votare questo e vota l'altra risposta migliore.
totalmente umano il

5

Java (JDK 10) , 184 byte

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")

Provalo online!

Chiedo scusa per il riutilizzo della stringa compressa: non sono riuscito a trovare niente di meglio da solo ... :(


4

05AB1E , 104 103, 101 byte

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

Provalo online!

Vecchia versione da 104 byte nel caso in cui sia più facilmente migliorabile.

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

Non contento della compressione né del caso speciale per ?.


OK cos'è questo? Hai appena riordinato gli stati o qualcosa del genere?
Erik the Outgolfer,

@EriktheOutgolfer: la versione da 104 byte è solo una compressione dei numeri corrispondenti alle posizioni dei caratteri dell'alfabeto (A=1,C=3 ...). La versione da 103 byte fa lo stesso per alcuni stati e unisce alcuni stati che terminano nella stessa lettera con cui inizia un nuovo stato. Sono sicuro che questo può ancora essere migliorato e aggiungerò una spiegazione migliore quando avrò giocato di più.
Emigna,

1
Bella risposta! Mi piace quello .•~Zµ∞/'—¶[@øl•Œ2ùche hai usato per alcuni stati, invece di comprimere tutti gli stati e fare il . E un approccio gradevole nel complesso. (Sono contento di aver visto la tua risposta prima di provare qualcosa da solo, perché sicuramente non sarebbe stato così breve ..)
Kevin Cruijssen,

4

F # , 222 byte

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

Provalo online!

Allargato:

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

Dato uno stato di due lettere v passato alla funzione f , crea una tupla (a, b) che rappresenta la testa e la coda della frase "ingegnere".

Sentiti libero di usare liberamente la "stringa di stato compressa"; è un intero byte più corto di quello MINCALA ...



3

Japt , 136 135 131 129 128 byte

Ulteriori risparmi potrebbero essere disponibili sperimentando l'ordine delle abbreviazioni statali - ci tornerò tra un po '.

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

Provalo online


Spiegazione

  • Prendiamo una stringa compressa delle abbreviazioni in minuscolo, la decomprimiamo e la dividiamo in una matrice di 2 stringhe di caratteri usando il òmetodo.
  • Quindi utilizziamo il ømetodo per vedere se l'array contiene Uv, ovvero la stringa di input convertita in minuscolo.
  • In tal caso, costruiamo la nostra stringa di output, a partire da "I am "
  • Verifica se la stringa di input ¥(è uguale a) "OR"ci consente di aggiungere una "not "o la variabile stringa vuota P.
  • E quindi decomprimiamo e aggiungiamo la stringa compressa "an engineer".
  • Se l'input non è stato trovato nell'array, viene emessa la decompressione della stringa compressa "What is an engineer?".

3

Python 3 , 180 179 178 byte

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+"?"

Provalo online!


Sì, è corretto: provalo online!
int6h,

166 byte . Sono sicuro che la stringa può anche essere rafforzata un po 'di più riutilizzando gli stati
Jo King,

Grazie @JoKing. Assomiglia troppo alla risposta di Python 2 a questo punto IMO :). Ho cercato di comprimere la stringa, ma il più breve che potessi ottenere era 92 simboli. Ho scritto un breve script per farlo, ma può solo ridurlo a 94 caratteri e non si comprime in modo ottimale. Penso anche che in questa sfida particolare la stringa magica stessa non debba essere inclusa nel conteggio dei byte.
int6h

2

CJam , 143 byte

"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"\

Provalo online! o come suite di test

Spiegazione

"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.

Poiché Oregon ( OR) è all'inizio della stringa, trovare il segno dell'indice dell'input in questo sarà -1 se non trovato, 0 se OR, 1 se qualsiasi altro stato. Quale stringa stampare può essere decisa da quella.


2

PHP, 188 byte

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

Provalo online!


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

@Christoph non funziona per un Input, ad esempio di Los Angeles
Jörg Hülsermann,

Hm giusto: / forse possiamo riordinare un po 'la stringa .. Ci proverò. Invalida anche la risposta js tra l'altro.
Christoph,

_NMMNINTNRIHIMIWISCNCCTMTUTVTWVNVFLILCAALGAIAMAPAVAWACOLAMOAKARKSMSNHOHOKORAZDEIDKYMEMDNENJNYNDSDTXWYopere
Christoph

@Christoph O anche il mio ordine funziona.
Jörg Hülsermann,

2

C #, 178 byte

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");

Esegui in C # Pad

Golf basato sulla soluzione di Mayube ; nuovo qui, quindi non ho abbastanza rappresentante per commentare.


Potrebbe voler modificare in un collegamento alla sua soluzione :) Se fai clic su Condividi sulla sua soluzione, ti dà un collegamento direttamente ad essa.
Stephen,

@StephenS Grazie per il suggerimento!
Arthur Rump,

2

Haskell , 220 214 210 209 byte

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++"?"

Provalo online!


altrimenti = Vero, 1<2è ancora più breve
BlackCap

Facepalm , grazie!
bartavelle,

Hai incluso ORnella stringa lunga nella seconda definizione di i
BlackCap il

Ho rubato la lunga corda dalle altre risposte. O comunque non ne fa parte?
bartavelle,

1
No, non più :)
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
Ottimizzazione puras=>(!(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

@4m2 bello, questa è la mia risposta.
martin

1

AWK, 189 byte

/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?"}

Se l'input corrisponde a una regex contenente tutte le abbreviazioni di stato, stampa "I am a engineer" con un "non" inserito nel mezzo se lo stato è Oregon, quindi esci.

Se l'input non corrisponde alla regex, non deve essere un'abbreviazione dello stato USA.


1

Python 3, 238 byte

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*'?'

Spiegazione

Nessuna tecnica di compressione utilizzata.

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 * '?'

È l'Oregon, non l'Ohio.
L3viathan,

1
@ L3viathan Non sono sicuro di come mi sbaglio dopo aver visto l'Oregon dappertutto a causa di Life is Strange ... ¯ \ _ (ツ) _ / ¯
Mateen Ulhaq

1

Java, 173 byte

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
Benvenuti in PPCG! Tutte le voci devono essere un programma completo o una funzione; Credo che puoi trasformarlo in un'espressione lambda valida (e quindi funzione) aggiungendo s->all'inizio.
ETHproductions

1

Stax , 100 byte

Questa lingua postdatizza la sfida. Ma l'autore (io) non l'ho visto fino ad ora.

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

Esegui ed esegui il debug


1

JavaScript ES6, 175 171 byte

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)]

Si è unito molto bene

O 152 byte con codifica ISO

Generatore:

'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,'/')))

Potrebbe essere possibile riorganizzare la stringa in modo da utilizzare btoa per espandere
l4m2

1

C (gcc) , 0 + 176 byte

-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

Provalo online!

tradurre puro


1

Powershell, 175 byte

(('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 di prova:

$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"
}

Produzione:

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 byte

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'

Provalo online!

TIO contiene casi di test per tutti gli stati.
-54 byte grazie alla compressione della stringa


È possibile utilizzare la compressione della stringa dalle altre risposte per salvare i byte
TheLethalCoder il

1
MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH ORIA UT WVT WIL WYè una compressione migliore
Skidsdev il

0

q / kdb +, 174 byte

Soluzione:

{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]}

Spiegazione:

  {
  // 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]
  }

Gli appunti:

Ha usato la stringa "compressa" da altre risposte, lottando per trovare un modo per portarla in una sola riga per evitare l'assegnazione della avariabile (e ancora aggiungere il ?quando l'input non è uno stato.


0

Retina , 175 byte

..
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

Provalo online! Spero di aver preso la migliore lista di stati. Spiegazione:

..
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

Inizia a costruire il risultato. Inoltre, inserisci l'elenco degli stati da utilizzare nella fase successiva.

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

Se è uno dei 49 stati, elimina lo stato e l'elenco.

OR~.*
not ~

Se è Oregon, sostituisci lo stato con noted elimina l'elenco.

I am ..~.*
What is ~?

Se è qualcos'altro, sostituisci tutto con l'altro output.

~
an engineer

Aggiungi queste parole per ultimo per evitare la ripetizione.


0

Cristallo, 232 207 205 byte

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

Provalo online . (leggermente modificato a causa di un problema di ARGV)


0

Fattore, 135 byte

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

Più leggibile e denominato:

: 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 ] dipe x swapsono equivalenti a effetto camino, ma il primo è più corto solo quando annidato: [ [ [ x ] dip ] dip ] dip.


0

Python 2, 213 211 194 byte

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

Provalo online

Roba, sto lavorando sull'accorciamento:

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

Aggiornare:

  • Salvato 2 byte sostituendo s=not rcons=r^1
  • Intestazione e piè di pagina separati del codice

0

Rubino, 164 byte

->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}

Utilizza una codifica di lunghezza di esecuzione, pertanto la stringa magica è lunga 50 byte, una per stato. Per costruire questo, è stato prima necessario mettere i codici di stato in ordine alfabetico del codice di stato, piuttosto che il nome dello stato. Sfortunatamente sono necessari 7 byte per convertire la rappresentazione base36 di jda uno statecode minuscolo in uno statecode maiuscolo.

Non registrato nel programma di 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]]}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.