Distributore automatico Emoji


23

Non riesci a vedere le emoji? Clicca qui .

Simulerai un distributore automatico. Gli elementi sono 56 emoji diversi, che possono essere rappresentati come due caratteri surrogati UTF-8, da: ๐Ÿ… (U + D83C U + DF45) a ๐Ÿผ (U + D83C U + DF7C). In HTML questi emoji possono essere rappresentati in forma UTF-16 come da & # x1F345 a & # x1F37C . Nella base 10 il primo carattere UTF-8 ha valore 55356 . Il valore del secondo carattere varia da 57157 a 57212 .Ecco un programma CJam che genera tutti gli emoji rilevanti. Per evitare confusione, questa sfida verrร  segnata in caratteri, non in byte . Alcuni emoji sono di 2 caratteri, altri di 3. http://www.lettercount.com ti darร  un conteggio accurato per questa sfida.

Prezzi ๐Ÿ’ต๐Ÿ’ต๐Ÿ’ต

Esistono 8 diverse categorie di prezzo:

  • $ 1,00: ๐Ÿ…๐Ÿ†๐Ÿ‡๐Ÿˆ๐Ÿ‰๐ŸŠ๐Ÿ‹
  • $ 1,50: ๐ŸŒ๐Ÿ๐ŸŽ๐Ÿ๐Ÿ๐Ÿ‘๐Ÿ’
  • $ 2,00: ๐Ÿ“๐Ÿ”๐Ÿ•๐Ÿ–๐Ÿ—๐Ÿ˜๐Ÿ™
  • $ 2,50: ๐Ÿš๐Ÿ›๐Ÿœ๐Ÿ๐Ÿž๐ŸŸ๐Ÿ 
  • $ 3,00: ๐Ÿก๐Ÿข๐Ÿฃ๐Ÿค๐Ÿฅ๐Ÿฆ๐Ÿง
  • $ 3,50: ๐Ÿจ๐Ÿฉ๐Ÿช๐Ÿซ๐Ÿฌ๐Ÿญ๐Ÿฎ
  • $ 4,00: ๐Ÿฏ๐Ÿฐ๐Ÿฑ๐Ÿฒ๐Ÿณ๐Ÿด๐Ÿต
  • $ 4,50: ๐Ÿถ๐Ÿท๐Ÿธ๐Ÿน๐Ÿบ๐Ÿป๐Ÿผ

Visualizzazione del distributore automatico

Questo รจ ciรฒ che l'utente vede all'avvio del programma e dopo aver effettuato un acquisto. Puoi usare numeri regolari invece di numeri emoji, ma i numeri emoji hanno il vantaggio di avere la stessa larghezza di altri emoji. Se usi numeri di emoji puoi sottrarre 14 caratteri dal tuo punteggio, perchรฉ i numeri di emoji sono 3 caratteri ciascuno.

  1๏ธโƒฃ2๏ธโƒฃ3๏ธโƒฃ4๏ธโƒฃ5๏ธโƒฃ6๏ธโƒฃ7๏ธโƒฃ
A ๐Ÿ…๐Ÿ†๐Ÿ‡๐Ÿˆ๐Ÿ‰๐ŸŠ๐Ÿ‹
B ๐ŸŒ๐Ÿ๐ŸŽ๐Ÿ๐Ÿ๐Ÿ‘๐Ÿ’
C ๐Ÿ“๐Ÿ”๐Ÿ•๐Ÿ–๐Ÿ—๐Ÿ˜๐Ÿ™
D ๐Ÿš๐Ÿ›๐Ÿœ๐Ÿ๐Ÿž๐ŸŸ๐Ÿ 
E ๐Ÿก๐Ÿข๐Ÿฃ๐Ÿค๐Ÿฅ๐Ÿฆ๐Ÿง
F ๐Ÿจ๐Ÿฉ๐Ÿช๐Ÿซ๐Ÿฌ๐Ÿญ๐Ÿฎ
G ๐Ÿฏ๐Ÿฐ๐Ÿฑ๐Ÿฒ๐Ÿณ๐Ÿด๐Ÿต
H ๐Ÿถ๐Ÿท๐Ÿธ๐Ÿน๐Ÿบ๐Ÿป๐Ÿผ 

Se l'utente inserisce G5quella seleziona ๐Ÿณ. L'immissione E6seleziona ๐Ÿฆ.

Aggiunta di contanti ๐Ÿ’ธ๐Ÿ’ธ๐Ÿ’ธ

Per aggiungere denaro, l'utente deve inserire /e quindi il codice per una moneta o fattura. Le monete sono (N) ickel ($ 0,05), (D) ime ($ 0,10) e (Q) piรน alti ($ 0,25). Le fatture sono (O) ne ($ 1,00), (F) ive ($ 5,00), (T) en ($ 10,00). Ogni volta che l'utente aggiunge un conto o una moneta, il programma dovrebbe essere emesso Balance: [New Balance]. รˆ possibile aggiungere una sola banconota o moneta ogni volta. Ecco un esempio contenente tre righe di input:

/D
Balance: $0.10
/Q
Balance: $0.35
/F
Balance: $5.35

Selezione di articoli

L'utente seleziona un articolo inserendo il codice articolo, come B2o C3. Se l'utente non ha aggiunto denaro, il programma dovrebbe produrre Item Cost: [Cost of Item]. Se l'utente ha aggiunto denaro, ma non รจ sufficiente acquistare l'oggetto, l'output dovrebbe essere Insufficient Funds. Item Cost: [Cost of Item]. Se l'utente ha aggiunto abbastanza denaro, il programma dovrebbe produrre:Item at [Item Location] Purchased. Remaining Balance: [Balance - Cost of Item] . Quindi sulla sua stessa linea, stampa le emoji dell'articolo acquistato. Quindi stampare l'intero distributore automatico (vedere "Visualizzazione del distributore automatico") con l'articolo acquistato sostituito con ๐Ÿšซ (U + D83D U + DEAB) Base 10: (55357 57003).

Terminare il programma

Se l'utente acquista un oggetto che porta il suo saldo a $ 0,00, il programma dovrebbe terminare automaticamente. In alternativa, se l'utente inserisce "Fine" in qualsiasi momento, il programma deve fornire all'utente il saldo residuo nel resto. Il cambiamento deve essere solo in Nichel, Dimes e Quarters e deve essere il minor numero possibile di monete. Ad esempio, se il saldo rimanente รจ $ 1,45, l'output dovrebbe essere QQQQQDD.

Esecuzione del campione

(L'ingresso inizia con "-")

  1๏ธโƒฃ2๏ธโƒฃ3๏ธโƒฃ4๏ธโƒฃ5๏ธโƒฃ6๏ธโƒฃ7๏ธโƒฃ
A ๐Ÿ…๐Ÿ†๐Ÿ‡๐Ÿˆ๐Ÿ‰๐ŸŠ๐Ÿ‹
B ๐ŸŒ๐Ÿ๐ŸŽ๐Ÿ๐Ÿ๐Ÿ‘๐Ÿ’
C ๐Ÿ“๐Ÿ”๐Ÿ•๐Ÿ–๐Ÿ—๐Ÿ˜๐Ÿ™
D ๐Ÿš๐Ÿ›๐Ÿœ๐Ÿ๐Ÿž๐ŸŸ๐Ÿ 
E ๐Ÿก๐Ÿข๐Ÿฃ๐Ÿค๐Ÿฅ๐Ÿฆ๐Ÿง
F ๐Ÿจ๐Ÿฉ๐Ÿช๐Ÿซ๐Ÿฌ๐Ÿญ๐Ÿฎ
G ๐Ÿฏ๐Ÿฐ๐Ÿฑ๐Ÿฒ๐Ÿณ๐Ÿด๐Ÿต
H ๐Ÿถ๐Ÿท๐Ÿธ๐Ÿน๐Ÿบ๐Ÿป๐Ÿผ  
-E1
Item Cost: $3.00
-/F
Balance: $5.00
-E1
Item at E1 Purchased. Remaining Balance: $2.00
๐Ÿก 
  1๏ธโƒฃ2๏ธโƒฃ3๏ธโƒฃ4๏ธโƒฃ5๏ธโƒฃ6๏ธโƒฃ7๏ธโƒฃ
A ๐Ÿ…๐Ÿ†๐Ÿ‡๐Ÿˆ๐Ÿ‰๐ŸŠ๐Ÿ‹
B ๐ŸŒ๐Ÿ๐ŸŽ๐Ÿ๐Ÿ๐Ÿ‘๐Ÿ’
C ๐Ÿ“๐Ÿ”๐Ÿ•๐Ÿ–๐Ÿ—๐Ÿ˜๐Ÿ™
D ๐Ÿš๐Ÿ›๐Ÿœ๐Ÿ๐Ÿž๐ŸŸ๐Ÿ 
E ๐Ÿšซ๐Ÿข๐Ÿฃ๐Ÿค๐Ÿฅ๐Ÿฆ๐Ÿง
F ๐Ÿจ๐Ÿฉ๐Ÿช๐Ÿซ๐Ÿฌ๐Ÿญ๐Ÿฎ
G ๐Ÿฏ๐Ÿฐ๐Ÿฑ๐Ÿฒ๐Ÿณ๐Ÿด๐Ÿต
H ๐Ÿถ๐Ÿท๐Ÿธ๐Ÿน๐Ÿบ๐Ÿป๐Ÿผ
-Done
QQQQQQQQ

Codici non validi

  • Se l'input inizia con /ma non รจ un input di denaro valido, output Money not Accepted.
  • Se l'input รจ un articolo che รจ giร  stato acquistato, output Item out of stock
  • Se l'input รจ una combinazione cifra-lettera che non rientra nell'intervallo (come A0o J2, genera "Codice non valido"
  • Per tutti gli altri input non validi, output "Errore"

Bonus (-15%): Jam

Quando vendi un articolo, c'รจ una probabilitร  del 10% che la macchina si inceppi e l'oggetto si blocca. Uscita JAM!!!una volta. In questo caso l'utente deve inserire "punch" o "kick". Ogni volta che l'utente lo fa, c'รจ una probabilitร  del 20% che l'articolo si stacchi e si venda normalmente. Fino all'eliminazione dell'inceppamento, gli unici input riconosciuti sono "punch" e "kick". Tutti gli altri input non fanno nulla. Ecco un esempio:

-A4
Item at A4 purchased. Remaining Balance: $1.00
JAM!!!
-punch
-kick
-kick
-punch
-punch
๐Ÿš

(L'inceppamento รจ stato eliminato. Riprendi normalmente.)

Bonus (-10%): ID

Se l'utente tenta di acquistare una bevanda alcolica (qualsiasi articolo nell'ultima riga tranne il biberon), รจ necessario richiedere la prova dell'etร . Per fare ciรฒ, chiedi all'utente di moltiplicare due numeri casuali tra 13 e 19 (incluso). Uscita ID required: [13-19]x[13-19] = ?. Se l'utente risponde correttamente, l'acquisto puรฒ essere eseguito. In caso contrario, stampa ๐Ÿ”ž (U + D83D U + DD1E) base 10: (55357 56606)

Sfida alternativa: Minecraft

Questa sfida sembra qualcosa di possibile in Minecraft. Per creare correttamente una versione di Minecraft di questo programma, il giocatore deve

  • Avere una griglia 8x7 per selezionare tra 56 oggetti unici
  • Essere in grado di aggiungere denaro al saldo (forse utilizzare diversi tipi di pietre per le diverse denominazioni sopra descritte.)
  • Fornisci all'utente l'oggetto che seleziona se ha messo abbastanza "denaro"
  • Restituire all'utente la quantitร  appropriata di modifica alla fine.

Modalitร  di compatibilitร 

  • Posso solo inserire input all'inizio del programma

    • Non preoccuparti, puoi creare un programma che prenda in considerazione tutti gli input. Se il programma non รจ stato terminato dopo aver valutato tutti gli input, supporre che alla fine venga chiamato "Fine". Se segui questo metodo, non avrai diritto a nessun bonus.
  • Non riesco a visualizzare / emettere emoji

    • Puoi copiare e incollare i tuoi input e output in questo frammento di stack (o qui ). Puรฒ comprendere sia emoji unicode che codici HTML per emoji. Se l'output sembra corretto in questa pagina, il programma passa. Prova a incollare alcuni degli input / output di esempio per vedere come appare.

function parse() {
var o = document.getElementById("output");
var text = document.getElementById("in").value;
o.innerHTML = text.replace(/\n/g,"<br/>").replace(/ /g,"&nbsp");
twemoji.parse(o);
}
<head>
<script src="//twemoji.maxcdn.com/twemoji.min.js"></script>  
</head>
<body>
<h1>Emoji to Image</h1>
<textarea id="in" rows="10" cols="50"></textarea>
<input type="submit" onclick="parse()">
<div id="output"></div>
</body>

Ecco una versione abbreviata della modalitร  di compatibilitร  del display del distributore automatico che puoi testare nello snippet dello stack:

   &#x31&#x20E3&#x32&#x20E3&#x33&#x20E3&#x34&#x20E3&#x35&#x20E3...
A&#x1F345&#x1F346&#x1F347&#x1F348&#x1F349...
B 
...
  • Posso emettere emoji, ma non su STDOUT.

    • Apparentemente, il Terminale di Mac OS X รจ l'unico in grado di emettere emoji. Se non sei in grado di emettere emoji nel tuo terminale, le altre opzioni sono
      • Invia tutto l'output a un file.
      • Visualizza tutto l'output in una finestra.
      • Usa la tecnica descritta in "Non riesco a visualizzare / produrre emoji".

5
$ can be replaced with your local currencynon ha molto senso se si richiede che le monete siano (N) ickels (D) imes e (Q) uarters. Ti suggerisco di rimuoverlo perchรฉ aggiunge confusione.
Level River St

@steveverrill Un buon punto. L'ho cambiato. La mia domanda รจ: le tastiere non statunitensi hanno un pulsante $ o esiste un codice?
geokavel,

il $simbolo fa parte del set di caratteri ASCII, quindi รจ sicuro supporre che quasi tutte le tastiere e le lingue possano gestirlo. รˆ l'unico simbolo di valuta nel set di caratteri ASCII a 7 bit. Di conseguenza, altri simboli come il simbolo GBP o il simbolo EUR โ‚ฌ possono essere erroneamente resi a causa di codifiche di stringa incompatibili, ma praticamente non succede mai $.
Level River St

@steveverrill So che possono gestirlo, ma esiste un pulsante fisico per la tastiera?
geokavel,

Le mie tastiere britanniche e spagnole lo hanno in aggiunta ai relativi simboli di valuta locale, e penso che lo facciano anche gli altri. Oltre ad essere il simbolo di valuta piรน utilizzato al mondo (incluso per molte valute che non si chiamano dollari), il$ simbolo ha un significato speciale nella maggior parte dei linguaggi di programmazione, quindi non averlo disponibile sulla tastiera sarebbe una seria limitazione. Sto scrivendo questo sulla mia tastiera spagnola ed รจ in realtร  piรน facile ottenere $ (maiusc + 4) rispetto a โ‚ฌ (alt gr + E) in modo da poter vedere che quest'ultimo simbolo รจ stato aggiunto come ripensamento.
Level River St

Risposte:


8

PHP, (1295-14) - 25% = 960,75 caratteri

Vecchi punteggi 1315 1351 1361 1295 989 977

รˆ stato divertente, ed รจ la prima risposta - sรฌ.

$i=[A=>[๐Ÿ…,๐Ÿ†,๐Ÿ‡,๐Ÿˆ,๐Ÿ‰,๐ŸŠ,๐Ÿ‹],B=>[๐ŸŒ,๐Ÿ,๐ŸŽ,๐Ÿ,๐Ÿ,๐Ÿ‘,๐Ÿ’],C=>[๐Ÿ“,๐Ÿ”,๐Ÿ•,๐Ÿ–,๐Ÿ—,๐Ÿ˜,๐Ÿ™],D=>[๐Ÿš,๐Ÿ›,๐Ÿœ,๐Ÿ,๐Ÿž,๐ŸŸ,๐Ÿ ],E=>[๐Ÿก,๐Ÿข,๐Ÿฃ,๐Ÿค,๐Ÿฅ,๐Ÿฆ,๐Ÿง],F=>[๐Ÿจ,๐Ÿฉ,๐Ÿช,๐Ÿซ,๐Ÿฌ,๐Ÿญ,๐Ÿฎ],G=>[๐Ÿฏ,๐Ÿฐ,๐Ÿฑ,๐Ÿฒ,๐Ÿณ,๐Ÿด,๐Ÿต],H=>[๐Ÿถ,๐Ÿท,๐Ÿธ,๐Ÿน,๐Ÿบ,๐Ÿป,๐Ÿผ]];$p=[A=>1,B=>1.5,C=>2,D=>2.5,E=>3,F=>3.5,G=>4,H=>4.5];$v=[N=>.05,D=>0.1,Q=>.25,O=>1,F=>5,T=>10];a:$m='';$w=$x=0;$q=$c[0];$r=$c[1];$f=fgets;$n=rand;$u=number_format;if('Done'==$c&&$e=1)foreach([Q,D,N]as$_)while($b&&round($b-$v[$_],2)>=0&&$m.=$_)$b-=$v[$_];elseif('/'==$q){$v[$r]?$b+=$v[$r]:$m="Money not accepted
";$m.="Balance: $".$u($b,2);}elseif(in_array($q,range(A,Z))){if(0<$r&&8>$r--&&($_=$p[$q])){$b&&$b<$_?$m="Insufficient funds. ":0;if($b<$_)$m.="Item cost: $".$u($_,2);elseif(๐Ÿ‘พ==$i[$q][$r])$m="Item out of stock.";else{$t=0;if(H==$q&&$r<6){$t=$n(13,19);$s=$n(13,19);echo"ID required: {$t}x$s = ?
";if($f(STDIN)!=$t*$s)$m=๐Ÿ”ž;else$t=0;}if(!$t){$b-=$_;if(1>$n(0,9)){$w=1;}$x=$i[$q][$r];$m="Item at $c purchased. Remaining balance: $".$u($b,2).($w?"":"
$x");$i[$q][$r]=๐Ÿ‘พ;if(!$b)$e=1;}}}else$m="Invalid code";}if($c&&!$m&&!$e)$m=Error;system(clear);echo"  1๏ธโƒฃ 2๏ธโƒฃ 3๏ธโƒฃ 4๏ธโƒฃ 5๏ธโƒฃ 6๏ธโƒฃ 7๏ธโƒฃ";foreach($i as$k=>$_){echo"
$k ";foreach($_ as$_)echo"$_ ";}echo"
$m
";if($w){echo"JAM!!!
";for(;$c!=kick&&$c!=punch||7>$n(0,9);$c=trim($f(STDIN)));echo"$x
";}$e?exit:$c=trim($f(STDIN));goto a;

Come i distributori automatici mi ricordano gli anni '90 che ho usato gotoe per gli articoli acquistati viene mostrato Space Invader ๐Ÿ‘พ . La macchina viene ridisegnata dopo ogni comando.

Ungolfed (in qualche modo)

$i=[A=>[๐Ÿ…,๐Ÿ†,๐Ÿ‡,๐Ÿˆ,๐Ÿ‰,๐ŸŠ,๐Ÿ‹],B=>[๐ŸŒ,๐Ÿ,๐ŸŽ,๐Ÿ,๐Ÿ,๐Ÿ‘,๐Ÿ’],C=>[๐Ÿ“,๐Ÿ”,๐Ÿ•,๐Ÿ–,๐Ÿ—,๐Ÿ˜,๐Ÿ™],D=>[๐Ÿš,๐Ÿ›,๐Ÿœ,๐Ÿ,๐Ÿž,๐ŸŸ,๐Ÿ ],E=>[๐Ÿก,๐Ÿข,๐Ÿฃ,๐Ÿค,๐Ÿฅ,๐Ÿฆ,๐Ÿง],F=>[๐Ÿจ,๐Ÿฉ,๐Ÿช,๐Ÿซ,๐Ÿฌ,๐Ÿญ,๐Ÿฎ],G=>[๐Ÿฏ,๐Ÿฐ,๐Ÿฑ,๐Ÿฒ,๐Ÿณ,๐Ÿด,๐Ÿต],H=>[๐Ÿถ,๐Ÿท,๐Ÿธ,๐Ÿน,๐Ÿบ,๐Ÿป,๐Ÿผ]];
$p=[A=>1,B=>1.5,C=>2,D=>2.5,E=>3,F=>3.5,G=>4,H=>4.5];
$v=[N=>.05,D=>0.1,Q=>.25,O=>1,F=>5,T=>10];

a:
$m='';
$w=$x=0;
$q=$c[0];
$r=$c[1];
$f=fgets;
$n=rand;
$u=number_format;

if('Done'==$c&&$e=1)
    foreach([Q,D,N]as$_)
        while($b&&round($b-$v[$_],2)>=0&&$m.=$_)
            $b-=$v[$_];
elseif('/'==$q){
    $v[$r]?$b+=$v[$r]:$m="Money not accepted
";
    $m.="Balance: $".$u($b,2);
}elseif(in_array($q,range(A,Z))){
    if(0<$r&&8>$r--&&($_=$p[$q])){
        $b&&$b<$_?$m="Insufficient funds. ":0;
        if($b<$_)$m.="Item cost: $".$u($_,2);
            elseif(๐Ÿ‘พ==$i[$q][$r])
                $m="Item out of stock.";
            else{
                $t=0;
                if(H==$q&&$r<6){
                    $t=$n(13,19);
                    $s=$n(13,19);
                    echo"ID required: {$t}x$s = ?
";
                    if($f(STDIN)!=$t*$s)
                        $m=๐Ÿ”ž;
                    else
                        $t=0;
                }
                if(!$t){
                    $b-=$_;
                    if(1>$n(0,9)){
                        $w=1;
                    }
                    $x=$i[$q][$r];
                    $m="Item at $c purchased. Remaining balance: $".$u($b,2).($w?"":"
$x");
                    $i[$q][$r]=๐Ÿ‘พ;
                    if(!$b)$e=1;
                }
            }
    }else
        $m="Invalid code";
}

if($c&&!$m&&!$e)$m=Error;

system(clear);
echo"  1๏ธโƒฃ 2๏ธโƒฃ 3๏ธโƒฃ 4๏ธโƒฃ 5๏ธโƒฃ 6๏ธโƒฃ 7๏ธโƒฃ";
foreach($i as$k=>$_){
    echo"
$k ";
    foreach($_ as$_)
        echo"$_ ";
}
echo"
$m
";

if($w){
    echo"JAM!!!
";
    for(;$c!=kick&&$c!=punch||7>$n(0,9);$c=trim($f(STDIN)));
    echo"$x
";
}

$e?exit:$c=trim($f(STDIN));
goto a;

๐Ÿ‘พ Testato su OS X con PHP 5.5 e 5.6 ๐Ÿ‘พ


Le modifiche

  • Aggiunti 12 byte . Risolto il Doneproblema con l' uscita e il golf di alcune stringhe.
  • Aggiunti 306 byte . Risolti uno o due bug e aggiunto il supporto per i bonus. Con i bonus ora รจ piรน corto di quasi 15 byte .
  • aggiunto 66 byte . Ho dovuto formattare i soldi in modo diverso, ho anche dovuto accettare piรน valori ( [A-Z][0-9]) per Invalid code.
  • Salvato 10 byte . Trovato uno spazio bianco e trasformato alcuni .=in =applicabili.
  • Salvato 36 byte causa di alcuni refactoring.
  • Salvato 20 byte refactoring di alcuni loop e assegnazioni.

Wow, รจ stato molto divertente da giocare! L'unico problema che ho notato: รจ necessario formattare i prezzi come 3 e 3,5 in $ 3,00 e $ 3,50.
geokavel,

Inoltre, quando digito J5dovrei ricevere il messaggio: "Codice non valido".
geokavel,

@geokavel Grazie per il tuo feedback. Ho aggiunto il formato di denaro corretto e per Invalid codeora accetta anche piรน varianti . รˆ una sfida divertente - anche se ha molte opzioni ... 1K personaggi parlano da soli ... :)
insertusernamehere

Congratulazioni, con un margine limitato, sei il vincitore! Grazie ad entrambi i giocatori per essere stati degni concorrenti e aver ferventemente cercato di giocarci a vicenda!
geokavel,

@geokavel รˆ stata una sfida divertente e un bel ping pong tra Stephan e me. Se in futuro qualcuno troverร  una soluzione piรน breve, io sarรฒ lรฌ. ;)
insertusernamehere

5

C # 6 (.Net Framework 4.6), 1356 1324 1304 1311 1307 1238 1235 1231 1220 lettere - 14 lettere (numeri Emoji) - (Bonus Jam del 15% + Bonus ID del 10%) = 1017 993 978 972,75 969,75 918 915,75 904,5

using h=System.Console;class c{static void Main(){double b=0,z,p,x=0,i=57157,j,n,r,c,m;var a=1==0;var d=new System.Collections.Hashtable();for(;i<57213;)d.Add(x++,""+(char)55356+(char)i++);for(var e=new System.Random();;){for(w("  1๏ธโƒฃ 2๏ธโƒฃ 3๏ธโƒฃ 4๏ธโƒฃ 5๏ธโƒฃ 6๏ธโƒฃ 7๏ธโƒฃ"),x=0;x<8;x++,w(""))for(h.Write((char)('A'+x)),i=0;i<7;)h.Write(" "+d[x*7+i++]);for(;;){var k=h.ReadLine();if(k[0]==47){var l=k[1];z=b;b+=l=='N'?.05:l=='D'?.1:l=='Q'?.25:l=='O'?1:l=='F'?5:l=='T'?10:0;a=a|z!=b;w(z!=b?$"Balance {b:0.00}":"Money not Accepted");}else{if(k=="Done"){for(;b/.25>=1;b-=.25)h.Write("Q");for(;b/.1>=1;b-=.1)h.Write("D");for(;b/.05>=1;b-=.05)h.Write("N");return;}r=k[0]-65;c=k[1]-49;if(r<0|r>7|c<0|c>6)w("Invalid code");else{p=1+r/2;if(!a|p>b)w($"{(a&p>b?"Insufficient Funds. ":"")}Item Cost: ${p:0.00}");else{m=r*7+c;if(d[m]=="๐Ÿšซ")w("Item out of stock");else{if(r>6&c<6){j=e.Next(13,20);n=e.Next(13,20);w($"ID required: {j}x{n} = ?");if(int.Parse(h.ReadLine())!=j*n){w("๐Ÿ”ž");break;}}b-=p;w($"Item at {k} Purchased. Remaining Balance: ${b:0.00}");if(e.Next(10)==1)for(w("Jam!!!");;){var f=h.ReadLine();if((f=="punch"|f=="kick")&e.Next(10)<2)break;}w(""+d[m]);d[m]="๐Ÿšซ";if(b==0)return;break;}}}}}}}static void w(string s)=>h.WriteLine(s);}

leggermente piรน non golfato per l'uso in LinqPad 5 (C # 6). Usa h = System.Console in F4.

void Main()
{
    double b=0,z,p,x=0,i=57157,j,n,r,c,m;
    var a = 1==0;
    var d = new Hashtable();
    for (; i < 57213;) d.Add(x++, ""+(char)55356 + (char)i++);
    for (var e = new Random(); ;)
    {
        for (w("  1๏ธโƒฃ 2๏ธโƒฃ 3๏ธโƒฃ 4๏ธโƒฃ 5๏ธโƒฃ 6๏ธโƒฃ 7๏ธโƒฃ"), x = 0; x < 8; x++, w(""))
            for (h.Write((char)('A' + x)), i = 0; i < 7;)
                h.Write(" " + d[x * 7 + i++]);

        for (; ;)
        {
            var k = h.ReadLine();
            if (k[0] == 47)
            {
                var l = k[1];
                z = b;
                b += l == 'N' ? .05 : l == 'D' ? .1 : l == 'Q' ? .25 : l == 'O' ? 1 : l == 'F' ? 5 : l == 'T' ? 10 : 0;
                a = a|z!=b;
                w(z != b ? $"Balance {b:0.00}" : "Money not Accepted");
            }
            else
            {
                if (k == "Done")
                {
                    for (; b / .25 >= 1; b -= .25) h.Write("Q");
                    for (; b / .1 >= 1; b -= .1) h.Write("D");
                    for (; b / .05 >= 1; b -= .05) h.Write("N");
                    return;
                }
                r = k[0] - 65;
                c = k[1] - 49;
                if(r<0|r>7|c<0|c>6)w("Invalid code");
                else
                {
                    p = 1 + r / 2;
                    if (!a | p > b) w($"{(a&p>b?"Insufficient Funds. ":"")}Item Cost: ${p:0.00}");
                    else
                    {
                        m = r * 7 + c;
                        if (d[m] == "๐Ÿšซ")
                            w("Item out of stock");
                        else
                        {
                            if (r > 6 & c < 6)
                            {
                                j = e.Next(13, 20);
                                n = e.Next(13, 20);
                                w($"ID required: {j}x{n} = ?");
                                if (int.Parse(h.ReadLine()) != j * n)
                                {
                                    w("๐Ÿ”ž");
                                    break;
                                }
                            }

                            b -= p;
                            w($"Item at {k} Purchased. Remaining Balance: ${b:0.00}");
                            if (e.Next(10) == 1)
                                for (w("Jam!!!"); ;)
                                {
                                    var f = h.ReadLine();
                                    if ((f == "punch" | f == "kick") & e.Next(10) < 2)
                                        break;
                                }
                            w(""+d[m]);
                            d[m] = "๐Ÿšซ";
                            if (b == 0) return;
                            break;
                        }
                    }
                }
            }
        }
    }
}

void w(string s)=>h.WriteLine(s);

modifica: grazie per il suggerimento per (;;);)

modifica: Strike !! Meglio di PHP ;-)

modifica: rimosse 24 lettere. Rimane ancora qualcosa per php.

modifica: rimosse 20 lettere passando dal decimale al doppio.

modifica: rimosse 7 lettere passando ai numeri Emoji

modifica: rimosse 4 lettere cambiando tutto in doppio invece di un mix di doppio e ints.

modifica: Rimosse 69 lettere - trovato codice morto o_O Migliore voce C #: D

modifica: Rimosse 3 lettere - cambiata l'ultima istruzione if-else

modifica: Rimosse 4 lettere - passate da operatori di cortocircuito (&& e ||) a normali & e |

modifica: Rimosse 11 lettere - passate da h.WriteLine a w () con una stringa condizionale condizionale.


Sembra buono. Sono stato in grado di testarlo qui con input statico. C'รจ un modo per testarlo online o su Mac con input dinamico?
geokavel,

Puoi testarlo con input dinamico qui , anche se gli emoji appaiono come ??.
geokavel,

L'unico problema che ho riscontrato con il tuo รจ che "Codice non valido" dovrebbe apparire solo per una combinazione di numeri che non rientra nell'intervallo. Tutti gli errori non specificati devono generare "Errore".
geokavel,

sulla mia strada @inserireusernamehere: D
Stephan Schinkel il

ehi .... ho capito bene sotto php :) @inserireusernamehere
Stephan Schinkel l'
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.