Zamiana „dobra” i „zła”


17

Opis wyzwania:

Napisz program, który prosi użytkownika o wprowadzenie danych. Użytkownik wprowadzi Goodlub Bad. Nie musisz obsługiwać żadnych innych danych wejściowych. Jeśli użytkownik wejdzie Good, wydrukuj Badi odwrotnie (na standardowe wyjście itp.).

Uwagi:

1) Nie możesz użyć żadnej innej pary dwóch słów.

2) Twój program musi zapytać i wydrukować tylko raz.

3) Nie musisz wyświetlać ciągu znaków zachęty.

4) Dane wyjściowe muszą wyglądać na oddzielone od danych wejściowych w jakikolwiek sposób.

5) Niedozwolona jest funkcja akceptująca wartość i zwracająca wynik; Użytkownik musi wchodzić w interakcje z programem.

Powodzenia!


9
Czy możemy napisać funkcję, która pobiera dane wejściowe jako argument zamiast pytać o nie?
Adám

8
Edytuj pytanie dotyczące tego, czy funkcja jest dozwolona, ​​czy nie. Gorąco polecam, aby nie ograniczać wprowadzania danych do STDIN, chyba że masz bardzo dobry powód (i nie widzę żadnego)
Jo King,

2
pyta użytkownika o dane wejściowe (standardowe wejście itp.) pokazuje, że dozwolone jest tylko STDIN lub wejście interaktywne. Zmień to na wszystkie domyślne metody We / Wy
MilkyWay90

1
„Pyta użytkownika o dane wejściowe”, czy powinno to być jakieś wyraźne pytanie? Ponieważ pusty monit CLI tak naprawdę nie prosi o nic…
user0721090601

5
Jaki jest cel tego ograniczenia? Żadna funkcja nie jest akceptowana i zwracająca wynik; Użytkownik musi współdziałać z programem
mbomb007

Odpowiedzi:


46

Python 3 ,  32  31 bajtów

exit('GBoaodd'['G'<input()::2])

Wypróbuj online!

W jaki sposób?

Sprawdza, czy dane wejściowe są 'Good'porównywane 'G'<input().

Wykorzystuje fakt, że w Pythonie False==0i True==1użyć wynik jako startwskaźnik plasterek 'GBoaodd'użyciu niezdefiniowany stopi stepod 2z 'GBoaodd'[start:stop:step].

Drukuje do STDERR (zapisywanie bajtu exitzamiast zamiast print).


Co za sztuczka! Nie mogę zrozumieć, jak to działa.
Ishaq Khan

Czy możesz użyć lambda, aby skrócić bajty?
MilkyWay90

@ MilkyWay90 Zgodnie z pytaniem musi to być program akceptujący dane wejściowe.
Jonathan Allan,

@A__ domyślnie tak, chociaż istnieje komentarz OP, który sugeruje, że można go tutaj pominąć.
Jonathan Allan

4
Szkoda, że ​​„Dobry” i „Zły” dzielą „d”, lub możesz to zrobić, 'GoodBad'.strip(input())co jest bajtem krótszym.
xnor

15

APL (Dyalog Unicode) , 13 bajtów SBCS

Pełny program pytający o wejście ze standardowego wejścia i drukujący na standardowe wyjście.

'GooBad'1↓⍞

Wypróbuj online!

 monit o podanie danych ze standardowego wejścia; GoodlubBad

¯1↓ upuść ostatni znak ( d); GoolubBa

'GooBad'~ multiset odejmij od nich te znaki; BadlubGood


5
Dlaczego downvote‽
Adám

1
Czy kod ma GooBadlub GoodBad?
NoOneIsHere

Myślę, że tak powinno być GooBad, ponieważ dodanie znaku `` d '' spowoduje, że post ten będzie miał 14 bajtów.

@NoOneIsHere Dzięki. Naprawiony.
Adám

12

Maszyna Turinga, ale gorzej , 405 bajtów

0 0 0 1 1 0 0
1 1 1 1 2 0 0
0 2 0 1 3 0 0
0 3 0 1 4 0 0
0 4 0 1 5 0 0
1 5 0 1 6 0 0
0 5 1 1 h 0 0
1 6 1 1 7 0 0
1 7 0 1 8 1 0
0 8 0 1 9 0 0
1 9 1 1 9 0 0
0 9 0 1 a 0 0
1 a 0 1 a 0 0
0 a 0 0 b 0 0
0 b 1 1 c 1 0
0 c 0 0 d 0 0
1 d 0 0 e 0 0
0 e 0 0 f 0 0
0 f 1 1 g 1 1
1 h 1 1 i 0 0
0 i 1 1 j 1 0
0 j 0 1 k 0 0
1 k 1 1 k 0 0
0 k 0 1 l 0 0
0 l 1 1 l 0 0
1 l 1 0 m 1 0
1 m 1 1 n 1 0
1 n 1 1 o 0 0
0 o 0 1 p 1 1

Wypróbuj online!

Zajęło to trochę czasu.

NIEKOŃCZONE WYJAŚNIENIE :

0 0 0 1 1 0 0 Start going to the sixth bit
1 1 1 1 2 0 0
0 2 0 1 3 0 0
0 3 0 1 4 0 0
0 4 0 1 5 0 0 End going to the sixth bit
1 5 0 1 6 0 0 If the sixth bit is 1, then it is Good. Start transforming "G" to "B" and go to state 6
0 5 1 1 h 0 0 Else, it is Bad. Start transforming "B" to "G" and go to state h
1 6 1 1 7 0 0 Keep on transforming "G" to "B"
1 7 0 1 8 1 0 End transforming and print "B"
0 8 0 1 9 0 0 We are in the first "o" in "Good". Start moving into the 5th bit.
1 9 1 1 9 0 0
0 9 0 1 a 0 0
1 a 0 1 a 0 0 Do some looping magic and start transforming "o" to "a"
0 a 0 0 b 0 0 End looping magic
0 b 1 1 c 1 0 End transforming and print "a"
0 c 0 0 d 0 0 
1 d 0 0 e 0 0 Start transforming "a" to "d"
0 e 0 0 f 0 0 
0 f 1 1 g 1 1 Stop transforming, print "d", and terminate
1 h 1 1 i 0 0 Continue transforming "B" to "G"
0 i 1 1 j 1 0 Stop transforming and print out "G"
0 j 0 1 k 0 0 Start going into position to print out "oo"
1 k 1 1 k 0 0
0 k 0 1 l 0 0 Move more efficiently using LOOPING MAGIC1!1111111 
0 l 1 1 l 0 0 looping magic end, start transforming
1 l 1 0 m 1 0 end transforming and print out out "o"
1 m 1 1 n 1 0 print out "o" again
1 n 1 1 o 0 0 get into the "d" byte
0 o 0 1 p 1 1 print "d" and execute YOU HAVE BEEN TERMINATED

4
„Turing-Machine-But-Way-Goorse” to bez wątpienia mój nowy ulubiony esolang.
MikeTheLiar

@MikeTheLiar Thanks!
MilkyWay90

@A__favorite/disliked/"Turing-Machine-But-Way-Worse" is, without a doubt, my new favorite esolang.
MilkyWay90

„ZAKOŃCZYŁEŚ SIĘ” ArnoldC, prawda?
TemporalWolf

@TemporalWolf It is I, ArnoldC!
MilkyWay90


8

8088 Montaż, IBM PC DOS, 25 bajtów

Niezmontowane:

BA 0110     MOV  DX, OFFSET GB  ; point DX to 'Good','Bad' string 
D1 EE       SHR  SI, 1          ; point SI to DOS PSP (80H) 
02 04       ADD  AL, [SI]       ; add input string length to AL, set parity flag 
7B 02       JNP  DISP           ; if odd parity, input was 'Bad' so jump to display 'Good'
02 D0       ADD  DL, AL         ; otherwise add string length as offset for 'Bad' string 
        DISP: 
B4 09       MOV  AH, 9          ; DOS display string function 
CD 21       INT  21H            ; call DOS API, write string to console 
C3          RET                 ; return to DOS 
        GB  DB  'Good$','Bad$'

Wyjaśnienie:

Sprawdza długość ciągu wejściowego (plus spację wiodącą), którą DOS przechowuje pod adresem pamięci 80H, i dodaje go AL(początkowo 0 przez DOS ). Jeśli 1w binarnej reprezentacji długości ciągu znajduje się nieparzysta liczba bitów, flaga parzystości procesora jest ustawiona na nieparzystą i odwrotnie. Więc ' Bad'długość łańcucha wejściowego 4( 0000 0100), to parzystość nieparzysta, a łańcuch wejściowy ' Good'to 5( 0000 0101) to parzystość parzysta.

DXjest początkowo ustawiony tak, aby wskazywał na łańcuch 'Good$Bad$', a jeśli parzystość jest parzysta (co oznacza, że ​​wprowadzono dane wejściowe ' Good'), przesuń wskaźnik łańcucha o tę długość ( 5), aby teraz wskazywał 'Bad$'. Jeśli parzystość jest nieparzysta, nie rób nic, ponieważ już wskazuje na 'Good$'. Następnie użyj DOS API, aby wyświetlić $zakończony ciąg do konsoli.

Przykład:

wprowadź opis zdjęcia tutaj

Pobierz i przetestuj GOODBAD.COM lub skompiluj ze xxdzrzutu:

0000000: ba10 01d1 ee02 047b 0202 d0b4 09cd 21c3  .......{......!.
0000010: 476f 6f64 2442 6164 24                   Good$Bad$

7

Galaretka , 8 bajtów

“Ċ³ṫ³»œṣ

Wypróbuj online!

Pełny program oczekujący jako argument argumentu sformatowanego w języku Python

W jaki sposób?

“Ċ³ṫ³»œṣ - Main Link: list of characters, S
“Ċ³ṫ³»   - compression of dictionary words "Good"+"Bad" = ['G','o','o','d','B','a','d']
      œṣ - split on sublists equal to S
         - implicit, smashing print

1
Wygląda na to, że OP odpowiedział, dane wejściowe nie są ograniczone do STDIN.
Erik the Outgolfer

6

Python 3, 38 37 34 33 bajty

exit("C">input()and"Good"or"Bad")

Wypróbuj online!

exit() : zwraca kod wyjścia jako wynik

"C">input(): Sprawdza, czy dane wejściowe są większe niż ciąg Cw kolejności alfabetycznej

and"Good": Jeśli wynikiem jest True, to zwraca za pomocąGood

or"Bad" : W przeciwnym razie zwraca za pomocą Bad



2
exit(input()[3:]and"Bad"or"Good")działa również dla tej samej liczby bajtów.
Neil


5

pieprzenie mózgu , 72 bajty

,>+++++>,>,>,>,[<<<<[-<->>---<]<.>>+.>>.>>>]<[<<<[-<+>>+++<]<.>>-..>.>>]

Wypróbuj online!

Objaśnienie:,> +++++>,>,>,>,

Odczytaj: „G”, 5, „o”, „o”, „d” lub „B”, 5, „a”, „d”, 0

[<<<< [- <->> --- <] <. >> +. >>. >>>] Jeśli ostatni znak nie jest zero:

Odejmij 5 z pierwszej komórki raz, a trzy razy z trzeciej komórki. Komórka przyrostowa 3

Komórki wyjściowe 1, 3, 5.

<[<<< [- <+ >> +++ <] <. >> - ..>. >>]

W przeciwnym razie dodaj raz 5 do pierwszej komórki i do trzeciej komórki trzy razy.

Komórka dekrementacyjna 3

Komórki wyjściowe 1, 3, 3, 4


To miłe rozwiązanie. Możesz go trochę skrócić, nie wprowadzając nowego wiersza na wejściu. ,> +++++>,>,>, [<<< [- <->> --- <] <. >> +. >>. >>] <[<< [- <+ >> +++ <] <. >> - ..>.>]
Dorian

Tak, zdałem sobie sprawę, że coś jest nie w celu optymalizacji tam, ale okazało się, że trudno jest zinterpretować to, co jest konieczne do wykonania Zasada 4
Helena


4

R , 42 37 35 32 bajtów

-10 dzięki Giuseppe i AkselA!

`if`(scan(,'')>'C','Bad','Good')

Wypróbuj online!


1
Nie ma problemu. Rozpoznaję wiele nazwisk innych golfistów R, więc często klikam posty, jeśli widzę ich nazwisko jako najnowsze. :-)
Giuseppe

1
użycie "C"zamiast pierwszego, "Bad"jak w tej odpowiedzi, pozwoli zaoszczędzić kolejne kilka bajtów.
Giuseppe

1
Czy z ciekawości może `if`(readline()>"C","Bad","Good")być ważna odpowiedź? Jestem nowy w tej grze i jej zasadach.
AkselA

2
@AkselA tak, ale sugerowałbym również użycie scan(,"")zamiast readline(). Zachęcamy do odwiedzenia golfR , pokoju do gry w golfa R, jeśli masz jakieś pytania dotyczące R :-)
Giuseppe

2
@AkselA zobacz także Wskazówki dotyczące gry w golfa w R, aby uzyskać określone wskazówki; są tam ukryte klejnoty, jeśli je przeczytasz :-)
Giuseppe,


3

JavaScript 31 bajtów

Podoba mi się odpowiedź Arnaulda, ale chciałbym, aby akceptowała dane wejściowe użytkownika i mogła być uruchamiana na StackExchange w ten sposób:

alert(prompt()[3]?'Bad':'Good')



3

Ruby , 22 bajty

->n{n>?F?"Bad":"Good"}

Wypróbuj online!


Pytanie brzmi: „prosi użytkownika o dane wejściowe”, ale najkrótszym sposobem na to jest zastąpienie lambda, p getsa więc ma taką samą długość. (mój oryginalny komentarz powiedział, że możesz zapisać 2 bajty, ale nie wziąłem pod uwagę drukowania wyniku)
DaveMongoose

3
Jeśli rzeczywiście będziemy mówić o pełnym programie proszącym użytkownika o wprowadzenie danych, użycie -pflagi dałoby najbardziej efektywną odpowiedź: $_=$_>?F?:Bad:"Good"wynosi 20 bajtów. Wypróbuj online!
Wartość tuszu

3

05AB1E , 10 9 bajtów

”‚¿‰±”áIK

-1 bajt dzięki @Emigna .

Wypróbuj online lub sprawdź oba przypadki testowe .

Wyjaśnienie:

”‚¿‰±”     # Push dictionary string "Good Bad"
      á    # Only keep letters (to remove the space)
       IK  # Remove the input
           # (output the result implicitly)

Zobacz moją wskazówkę 05AB1E (sekcja Jak korzystać ze słownika? ) , Aby zrozumieć, dlaczego tak ”‚¿‰±”jest "Good Bad".


Widzę wiele alternatywnych odmian tego, ale wszystkie kończą na tej samej liczbie bajtów :(
Emigna

1
W rzeczywistości możesz zapisać bajt za pomocą á.
Emigna,

@Emigna Ach, oczywiście, genialne. Teraz, kiedy widzę, ánie mogę uwierzyć, że o tym nie myślałem, ale jednocześnie wiem, że nigdy bym o tym nie pomyślał. ;) Dzięki! (I tak, miałem też kilka 10-bajtowych alternatyw).
Kevin Cruijssen

1
Nawet nie potrzebujesz á, ”‚¿Bad”IKjest także 9.
Grimmy

3

Java (JDK) , 124 bajty

interface G{static void main(String[]a){System.out.print(new java.util.Scanner(System.in).next().length()>3?"Bad":"Good");}}

Wypróbuj online!

Najprawdopodobniej jest jeszcze miejsce na ulepszenia, ale jestem zupełnie nowy w golfie kodowym.


2
Witamy! Zastanów się nad dodaniem wyjaśnienia i / lub linku do tłumacza online, w którym możesz uruchomić swój kod. (Zobacz przykłady innych odpowiedzi.) Odpowiedzi tylko w kodzie są zwykle oznaczane jako niskiej jakości.
mbomb007

4
Część długości może być po prostu!="Bad"
Jo King


3

Rubinowy, 30 28 bajtów

puts %w|Good Bad|-gets.split

Nie najbardziej golfowy, ale lubię nadużycie podziału, aby usunąć końcowy znak nowej linii i przekonwertować na tablicę w jednym wywołaniu.

EDYCJA -2 bajtów dzięki sugestii Value Ink!


To drukuje "Good"lub "Bad"(z cytatami); Nie jestem pewien, czy to dozwolone.
Jordan

1
Nadużywaj faktu, że putsdrukuje każdy element tablicy w osobnej linii. Jest o 3 bajty droższy niż p, ale wyrównuje się, ponieważ wyjmujesz, [0]a następnie oszczędzasz 2 bajty, nie potrzebując już parenów. Wypróbuj online!
Wartość tuszu

@ValueInk dzięki! Problem Jordana również zostaje rozwiązany przez tę zmianę, więc jest to korzystne dla obu stron.
DaveMongoose

3

Język programowania Szekspira , 582 bajty

(Dodano białe znaki dla czytelności)

G.Ajax,.Puck,.Act I:.Scene I:.[Enter Ajax and Puck]Ajax:
Open mind.Be you nicer the sum ofa big cat the cube ofa big big cat?If solet usScene V.
You is the sum ofthe sum ofyou a big big cat a cat.Speak thy.You is the sum ofyou twice twice twice the sum ofa big big cat a cat.Speak thy.Speak thy.You is the square oftwice the sum ofa big big cat a cat.Let usScene X.
Scene V:.Ajax:
You is the sum ofthe sum ofyou a big big pig a pig.Speak thy.You is the sum ofyou the sum ofa big big big big big cat a pig.Speak thy.You is the sum ofyou the sum ofa big cat a cat.
Scene X:.Ajax:Speak thy.

Wypróbuj online!

Dostaję pierwszą literę wejścia za pomocą Open mind. Następnie muszę ustalić, co to jest. Ze wszystkich liczb pomiędzy B= 66 a G= 71, mój brutalny forcer mówi, że 66 jest najkrótszy do napisania ( the sum ofa big cat the cube ofa big big cat), więc porównuję pierwszą literę wejścia z 66. Scena I kontynuuje drukowanie Goodlub Scena V drukuje Bad.


2

Retina 0.8.2 , 20 bajtów

oo
o
T`G\oaB`Ro
o
oo

Wypróbuj online! Link zawiera pakiet testowy. Wyjaśnienie:

oo
o

Zamień się Goodw God.

T`G\oaB`Ro

Transpozycji litery GoaBz odwrocie tej liście, więc wymieniając Gz Bi oz a, czyli wymianę Godz Bad.

o
oo

Zamień się Godw Good.


1
17 bajtów , ale mniej kreatywnych
pbeentje


2

Excel, 24 bajty

=IF(A1>"C","Bad","Good")

Korzystanie z <Csugestii @ MilkyWay90 .



2

Galaretka , 9 bajtów

“GooBa”œ^

Wypróbuj online!

Wyjaśnienie

Wielosetowa symetryczna różnica między wejściem a łańcuchem “GooBa”.


@JonathanAllan Thanks. Edytowane
Luis Mendo,

Nie widzę żadnych oznak, że dane wejściowe muszą przechodzić przez STDIN ...
Erik Outgolfer

@EriktheOutgolfer Niestety cały sposób pisania pytania oznacza, że ​​musimy mieć program, który po uruchomieniu prosi o podanie danych wejściowych (nawet jeśli nie trzeba wyświetlać monitu). Zobacz także własną odpowiedź PO. Jeśli chcesz, aby je zmienić to idź do niego (choć należy pamiętać, że nie odpowiedział pierwszy, podobnie choć nieco inaczej, pytanie w komentarzach)
Jonathan Allan

Wygląda na to, że OP odpowiedział, dane wejściowe nie są ograniczone do STDIN.
Erik the Outgolfer

@EriktheOutgolfer Thanks! Wycofano
Luis Mendo,


2

Beczka , 22 bajty

?^_^_o=[^aB^_|^ooG^]

2

pieprzenie mózgu , 52 bajty

,>,,<<,[>-----.<---.+++.<<]>[+++++.+[-<-->]<-..>>.>]

Wypróbuj online!

Polega na tym, że Zła jest o jedną literę krótsza niż Dobra, więc ostatnie wejście jest puste.

Wyjaśnienie:

,>,,<<,       Get input into the first three cells
[             If the last letter was not empty (i.e. Good)
 >-----.      Decrement 'G' to 'B' and print
 <---.        Decrement 'd' to 'a' and print
 +++.         Increment back to 'd' and print
>>]           End loop
>[            If it is Bad instead
 +++++.       Increment 'B' to 'G' and print
 +[-<-->]<-.. Manipulate into  'o' and print twice
 >>.          Print 'd'
>]            End loop


2

Boolfuck , 47 bajtów

+>,+;>,;,+;>;;;+;+;+[;<;;;,;+;;+;<];;+;+;;+;;+;

Wypróbuj online!

Wykorzystuje fakt, że możesz po prostu wprowadzić dane wejściowe jako bity, a następnie odwrócić niektóre bity, aby przekształcić je w przeciwną literę.

Wyjaśnienie:

+>,+;>,;,+;>;;;+;+;+    Print the first letter by inverting the first and third bits of the input
                        'B' = 01000010
                        'G' = 11100010
                        This leaves the tape as
                            1 1 1 1' in the case of Bad
                            1 0 0 1' in the case of Good
                        By making the center cells the inverted bits
[;<;;;,;+;;+;<]         Print the center letters by looping over the two pairs of cells
                        0 1' results in 'a' = 10000110
                        1 1' results in 'o' = 11110110 by printing the 1 in the 2-4th places
                        1 1 1 1' loops twice, while 1 0 0 1' only loops once
;;+;+;;+;;+;            Finally print 'd' = 00100110


2

Keg , -rt 20 17 15 13 8 7 bajtów (SBCS)

-᠀‘5ƳP↫

Transpozycje do:

from KegLib import *
from Stackd import Stack
stack = Stack()
printed = False
iterable(stack, 'GoodBad')
string_input(stack)
maths(stack, '-')

if not printed:
    printing = ""
    for item in stack:
        if type(item) in [str, Stack]:
            printing += str(item)
        elif type(item) == Coherse.char:
            printing += item.v

        elif item < 10 or item > 256:
            printing += str(item)
        else:
            printing += chr(item)
    print(printing)

Jest to port odpowiedzi 05AB1E. Zasadniczo:

  • Popycha sznurek "GoodBad"
  • Pobiera dane wejściowe jako ciąg
  • Odejmuje dane wejściowe od wypychanego ciągu. Działa to poprzez zastąpienie pierwszego wystąpienia wejścia wewnątrz GoodBadniczym.
  • Niejawnie drukuje wynikowy ciąg.
  • -rtFlaga mówi Keg czytać znaki od prawej do lewej.

Historia odpowiedzi

?G=[øBad|ø‘5Ƴ

Transpozycje do następujących:

from KegLib import *
from Stackd import Stack
stack = Stack()
printed = False
Input(stack)
character(stack, 'G')
comparative(stack, '=')
if bool(stack.pop()):
    empty(stack)
    character(stack, 'B')
    character(stack, 'a')
    character(stack, 'd')

else:
    empty(stack)
    iterable(stack, 'Good')

if not printed:
    printing = ""
    for item in stack:
        if type(item) is Stack:
            printing += str(item)

        elif type(item) is str:
            printing += custom_format(item)
        elif type(item) == Coherse.char:
            printing += item.v

        elif item < 10 or item > 256:
            printing += str(item)
        else:
            printing += chr(item)
    print(printing)

Wyjaśnienie

?G=[øBad|ø‘5Ƴ

?            #Get input from user
 G=          #If the first letter is "G"
   [øBad     #Clear the stack and push "Bad"
        |    #Else,
         ø‘5Ƴ#Clear the stack and push the compressed string "Good"

1
Cudownie, nie mogłem grać w golfa aż tak długo ... Poparłem twoją odpowiedź.

@A__ tak jak ja głosowałem za waszym
Lyxal

Moja odpowiedź jest znacznie gorsza niż twoja. Nie powinieneś głosować za moją odpowiedzią ...

Czy istnieje aktualna dokumentacja beczki?
EdgyNerd,

@EdgyNerd nie bardzo. Minęło trochę czasu, odkąd zaktualizowałem dokumenty. Większość informacji o nowych rzeczach można znaleźć na czacie / tutaj
Lyxal,

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.