Наполягайте на відповіді


31

Під час виконання виконайте запит на рядок введення, поки користувач не введе щось (крім порожнього нового рядка), тобто не просто натисне Enterабо OK. Результат або результат не вимагається і не забороняється.

Псевдокод 1

myform = new form("GUI")
myform.mytxt = new editfield("")
myform.ok = new button("OK")
repeat
  waitfor(myform.ok,"click")
until myform.mytxt.content <> ""

Псевдокод 2

LET TEXT = ""
WHILE TEXT = "" DO
  TEXT = PROMPT("")
ENDWHILE

Приклад 1

Програма запускається і відразу спливає форму з одним текстовим полем і OKкнопкою.
Користувач натискає OKкнопку.
Нічого не відбувається.
Користувач вставляє "привіт світ" у текстове поле та натискає OKкнопку.
Програма припиняється.

Приклад 2

Функція викликається і одразу відображає порожній рядок та миготливий курсор.
Користувач тисне Enter.
Курсор рухається вниз по одній лінії.
Користувач тисне Enter.
Курсор рухається вниз по одній лінії.
Користувач натискає PPCGEnter
функцію повертається.


чи дозволяється вважати рядки, що містять пробіл, як порожні?
12431234123412341234123

@ 12431234123412341234123 №
Adám

Чи потрібно чекати повного рядка, як тільки користувач почне вводити дані?
Маттео Італія

Гаразд, з коментаря до видаленої відповіді @ CodyGray здається, що це заборонено.
Маттео Італія

@MatteoItalia Так, правильно; рядок введення .
Адам

Відповіді:


16

TI-BASIC, 2 байти

:Prompt X

TI-BASIC робить це автоматично. Після введення даних він закриється.

Ось GIF:

введіть тут опис зображення

Слідкуйте за підрахунком enterклавіші в історії історії клавіш. Створено за допомогою TI- SmartView CE та ezgif.com .


1
Хм .. це 2 байти?
Geeky I


І це не знадобиться Enter для відповіді? Чи є десь перевірити це в Інтернеті?
Адам

@ Adám Відповідь не знадобиться. Наскільки мені відомо, немає жодного місця, куди можна зайти в Інтернет, не маючи зображення TI ROM. Я можу опублікувати .gif, коли повернусь додому.
Скотт Мілнер

1
@ Adám Незаконне тестування TI-BASIC в Інтернеті не має власного ПЗУ.
Ерік Аутгольфер



15

JavaScript, 37 22 17 байт

while(!prompt());

while(!prompt());

Пояснення

whileКлючове слово починає whileцикл. В умові циклу !prompt()запитує введення та перевіряє, надається він чи ні. Якщо це не дано, виконується тіло циклу, яке в нашому випадку порожнє, то інтерпретатор повертається до умови циклу. Той самий процес повторюється знову і знову, поки користувач не введе вклад.


while(""==prompt(""));
Адам

@ Adám Wow. Я просто думав про те, як зробити рішення меншим, і ви придумали відповідь спасибі!
Арджун

Це здавалося очевидним. Однак моя консоль браузера відмовляється виконуватись без закінчення ;, тоді як ваш початковий вираз спрацював без цього ;. Будь-яка ідея чому?
Адам

Ні, Chrome. Тож якщо будь-який механізм JavaScript може впоратися з пропуском поточного виразу ;, ви можете зберегти цей байт :-)
Adám

1
@ Adám Щойно з'ясував справжню причину помилки, виданої після видалення крапки з комою з вихідного коду. Причина, чому це трапляється, полягає в тому, що цикл очікує, що після циклу цикл твердження (або група висловлювань) буде тілом циклу. Додавання крапки з комою змушує думати, що тіло петлі закінчено. Однак видалення крапки з комою змушує очікувати наступного твердження як тіла циклу. Але в нашому випадку ніяких нових тверджень не виникає після умови циклу. Отже, це кидає помилку. Я сподіваюся, що це зараз зрозуміло. Я жахливо пояснюю речі !! : p
Арджун

9

Java, 55 байт

void f()throws Exception{while(System.in.read()==10);}}

Якщо я правильно пам’ятаю (минулий час я працював на PPCG), моя програма може бути просто функцією.

Це специфічно для системи; він працює лише в системах, де символ кінця рядка - це один новий рядок. Якщо в кінці-лінії символ замість повернення каретки, замініть 10з 13. У Windows це не працює, як і в кінці строки для Windows \r\n.

Це використовує той факт, що я можу читати безпосередньо з System.in.


2
Ласкаво просимо назад, якби тільки на цю відповідь! : D
Conor O'Brien

3
Ласкаво просимо @Justin!
Цифрова травма

1
Не планує бути активним; просто заїжджаючи на запитання тут і там
Джастін

Щоб уникнути проблеми "не працює в Windows", хіба ви не можете просто протестувати перший символ і побачити, чи є він \r, на відміну від тестування всієї рядка, а потім зіткнулися з проблемами того, що є 2 символи EOL?
Коді Грей

@CodyGray Ні. Я читаю по 1 знаку одночасно; це все, що System.inми зробимо безпосередньо (ну, ви одночасно читаєте масив знаків). Моє тіло циклу (порожнє) виконується для кожної картки на вводі
Джастін

9

HTML5, 33 22 байти

<form><input required>

<form><input required>

Пояснення

requiredАтрибут на <input>змушує браузер , щоб повідомити користувачеві «це поле потрібно» -sort-оф-повідомлень, якщо вони не входять у вартість. Однак, коли вони вводять значення, значення надсилається до URL-адреси actionатрибута <form>(який у нашому випадку є самим поточним файлом, оскільки ми жодне значення не вказали прямо).

Це було протестовано на останній версії Google Chrome (версія 55.0). Може працювати в інших браузерах та версіях.


action=/може працювати в деяких браузерах.
Ніл

1
Ви, ймовірно, могли actionвзагалі скинути атрибут.
Кудлатий

1
@Arjun Це action=y.pне обов'язково, оскільки більшість агентів користувача надсилатиметься до того самого місця, якщо не actionвказано жодного
MayorMonty

@Arjun Я спробував <form><input required>останню версію Google Chrome і працює за призначенням. А якщо ви скептично налаштовані, просто використовуйте action=#. Це економить 2 байти.
Ісмаїл Мігель

3
@Arjun Це жахлива ідея для кодового гольфу. Я не можу сказати про кожен браузер, оскільки я не володію Android 1.0, 1.6, 2.0, 2.1, 3.0, 3.1, 4.xx, 5.x, 6.x, ..., iPhone 2 - 7, кожен випуск Google Chrome, Firefox 3.0+ та новіших версій та ввімкнення та вперед ... Насправді, не всі браузери HTML5 реалізують цей requiredатрибут! Крім того, #чи доступний шлях з HTML 1.0, якщо я прав. І додавання "ні" actionдо вашої форми - це те саме action=".", що і сам файл.
Ісмаїл Мігель

8

Желе , 3 байти

ɠṆ¿

Боюсь, не дуже дивитись на TIO.

Спробуйте в Інтернеті!

Як це працює

Це niladic програма, це означає, що вона не бере ніяких вхідних аргументів. Неявний аргумент і значення повернення в цьому випадку є 0 .

¿(в той час) - швидкий, який вискакує два посилання зі стека посилань: умова ( ) та тіло.

є монадичним атомом: плоский логічний НЕ. Якщо попереднє повернене значення є хибним (тут 0 або порожній рядок), воно повертає 1 і тіло викликається.

ɠ- атом ніладика; він читає необроблений рядок зі STDIN і повертає результат.

Як тільки ɠзчитується не порожній рядок, повертається 0 і ми вириваємося з циклу.


Це швидко, так? Ах, добре.
Адам



5

Perl 5, 8 + 1 (-p або -n прапор) байтів

/./&&die

Здійснює введення від stdin і вмирає, як тільки регулярний вираз відповідає будь-якому, крім нового рядка.


5

C, 52 байти , 33 байти , 29 байт

-19 байт завдяки Джастіну

-4 байти завдяки Крістофу

main(){while(getchar()==10);}

10 дорівнює "\ n" - Якщо це не очевидно.


1
Ви можете грати в гольф це 1 напівкоксу, використовуючи ;замість {}для циклу While
Джастін

1
Хоча це і не відповідає стандартам, ви можете видалити , #include<stdio.h>якщо ви перейдіть на while(getchar()==10): int main(){while(getchar()==10);}.
Джастін

2
@Justin main(){while(getchar()==10);}недостатньо необхідності в int за замовчуванням.
Крістоф

1
main(){scanf("%s");}Було б також спрацьовувати, якщо рядки, що містять лише пробіл, можуть вважатися порожніми.
12431234123412341234123

1
@DanielEarwicker Ви праві. Мені це не здалося зрозумілим у перший раз, коли я читав питання, але тепер бачу, що ви говорите. У цьому випадку існує багато невідповідних відповідей на це питання.
Джастін

5

Bash, 51 байт (39 без "#! / Bin / bash")

Я вперше беру участь у PPCG, тому не будьте грубими; D

#!/bin/bash
read a
while [ -z "$a" ]
do
read a
done

1
Ласкаво просимо до PPCG.
Адам

3
Ласкаво просимо в PPCG!, Якщо ви плануєте на використання Bash як мову гольфу ви могли б знайти This Post цікаво, є купа порад для створення програм Баша як малі , як по- людськи можливо, є також Детальніше Загальна версія ви можете скупіться теж.
colsw

@ConnorLSW Ого, спасибі, що Пост мені дуже допоможе. Я спробую скоріше відредагувати свою відповідь за допомогою нових порад.
Ніколя Фішер

4
вам не потрібно#!/bin/bash
12431234123412341234123

Ну, і в перший раз для мене :) Але ви могли б , можливо , використовувати рекурсію: [ -z `line` ] && $0або якщо засуджується lineне на вашому системі: [ -z `head -n1` ] && $0. Це має бути 20 або 24 байт.
Єті

4

Java , 128 126 байт

2 байти завдяки Kevin Cruijssen.

import java.util.*;class a{public static void main(String[]a){for(Scanner s=new Scanner(System.in);s.nextLine().isEmpty(););}}

Спробуйте в Інтернеті!


1
Ви можете пограти в гольф двома байтами: змініть whileна "a" forі покладіть його Scanner s=new Scanner(System.in);всередину. І змінити .equals("")на .isEmpty().
Кевін Круїссен

Я впевнений, що ви зможете видалити імпорт, якщо ввімкнете використання сканера; майже впевнений, що витік сканера працює чудово:while(new java.util.Scanner(System.in).nextLine().isEmpty());
Джастін

4

C # (.NET Core) , 66 байт

class C{static void Main(){for(;System.Console.ReadLine()!="";);}}

Спробуйте в Інтернеті!

-6 байт завдяки рознагулу.


1
Ви можете зберегти 6 байт, записавши System.Console.ReadLIneбезпосередньо та відпустивши using-Statement.
raznagul

whileПетля буде такою ж кількістю байт, але мені здається більш идиоматическим способом написання коду , ніж forцикл.
Коді Грей

ви можете зберегти 24 байти, записавши його як лямбда у вигляді () => {}
Ceshion

або ж 7, зробивши його методом екземпляра
Ceshion

4

QBasic 4,5, 15 байт

INPUT a$:IF a$=""THEN RUN

Запрошує введення, а потім перевіряє, чи було дано таке. Якщо ні, RUNперезавантажте програму.


2
Не знав про це RUN. +1. (Це теж римується; RUN та PLUS ONE :))
Арджун


4

R, 27 24 23 22 байт

while(!sum(scan()^0))t

Візьміть введення з stdin і повторіть, поки вхід має довжину 0. Відріжте кілька байтів завдяки Ярко Дуббелдам і МікіТ. Замінено {}з , tщоб зберегти інші байти.


Я думаю, ви можете опустити це ,'', оскільки ні введення (рядок чи числовий), ні спосіб закінчення не вказано в виклику.
JAD

@JarkoDubbeldam: хороший улов! Я не розумів, що помилки були дійсним припиненням.
rturnbull

while(!sum(scan()^0)){}працювали б також?
MickyT

@MickyT Здається, працює. Мабуть, навіть Inf ^ 0 дорівнює 1. Хороший улов з sum(). Шкода, що ^0потрібно обробляти 0як вхід.
JAD

@MickyT Це чудова знахідка із використанням sum, дякую! Я оновив відповідь.
rturnbull

3

PHP, 18 байт

while(!readline())

Чи перевіряється, чи рядок тексту не порожній?
Даніель Ервікер

1
Так, як тільки рядок не порожній readline()повертає щось інше, ніж порожній рядок. Порожні рядки оцінюються trueв php - принаймні, більшість з них. "0", здається, є винятком, коли я щойно читав у документах. Я гадаю, моя відповідь зараз неправильна.
Скайнет

3

AWK , 8 11 байт

NF{exit}

Зачекайте на введення. Якщо кількість полів для введення більше 0, вийдіть.

Редагувати:

Я щойно зрозумів, що це не працює лише для введення символів, що містять пробіли. IFS потрібно встановити на порожній рядок, використовуючи -F ""параметр командного рядка. Тому +3 байт.

Спробуйте в Інтернеті!


Насправді ви могли б замінити NFна 1. Тоді не потрібно встановлювати IFS. І нарікайте, що ви побили мене і AWKвирішити.
Роберт Бенсон

1
@RobertBenson я спробував замінити NFна 1. У цьому випадку вихід з програми з урахуванням будь-якого введення, в тому числі і порожнього рядка.
Максим Михайлов

Я пропустив цю частину специфікації.
Роберт Бенсон

3

SpecBAS - 34 байти

1 DO : INPUT a$: LOOP UNTIL a$<>""

Просто петлі, поки не буде введено порожню рядок.



3

Haskell, 19 17 байт

f=do""<-getLine;f

Визначає функцію, fяка, якщо вона читає порожній рядок, дзвонить собі ще раз. Під час читання непустого рядка виникає виняток і припиняється рекурсія.

Редагувати: @Laikoni замінив параметр на відповідність шаблону та зберег 2 байти. Спасибі!


Не думав, що код IO Haskell може бути таким коротким!
Geeky I

17 байт:f=do""<-getLine;f
Лайконі

@Laikoni: приємний улов. Спасибі!
німі

3

Ацето , 9 5 4 байти

read значення, заперечуйте його ( !; імпліцитне введення в булеве значення) та дзеркально горизонтально, якщо значення truthy ( |).

!
r|

Зачекайте, Aceto біжить ** вгору **‽ І вони кажуть, що APL дивно для бігу справа наліво…
Adám

3
@ Adám Aceto проходить по 2D кривій Гільберта.
L3viathan

3

Java, 66 64 60 байт

int a(){return!System.console().readLine().isEmpty()?0:a();}

Моя перша відповідь на Java, дуже хотіла б поради!


Можливо, ви можете видалити пробіл між returnі !. .equals("")== .isEmpty(). Ви можете повернути Int замість String. OTOH, повернення недійсним, але while(System...)абоif(System...)a();
Джастін

ви можете зробити int a(){..?0:a();}, економить 3 байти
Khaled.K

@ Khaled.K насправді 4!
OldBunny2800

@Justin та Khaled.K, дякую за пораду!
OldBunny2800

2

Braingolf , 8 байт [неконкуренто]

1[{?:+|]

Не змагається, тому що {, який читає вхід зі STDIN, було додано до braingolf після дати публікації цього виклику.

Пояснення:

1         Pushes 1 to the stack
 [        Begins while loop
  {       Reads from STDIN, returns -1 if no input given
   ?      Checks if last item in stack is > 0
    :     Else
     +    Adds the last 2 items together, however there is only 1 item, so add it to itself
      |   Endif
       ]  End While, decrement first item in stack, or exit if first item is 0

Ха-ха, ви внесли вклад через годину після опублікування виклику
лише ASCII

@ ASCII-тільки довелося це зробити врешті-решт, ха-ха
Скідсдев


2

05AB1E , 5 байт

[IõÊ#

Пояснення:

[     Start infinite loop
 I    One line of input
   Ê  Not equal to
  õ   Empty string
    # Break if true

Спробуйте в Інтернеті!


Це 5 кодів коду Unicode, а не 5 байт; вони складають 7 байт у UTF-8, 10 байт у UTF-16 або 20 байт у UTF-32.
Маттео Італія

@MatteoItalia 05AB1E використовує власне кодування , тому кожен з цих символів має 1 байт.
Okx

Ах, вибачте, я виправлений!
Маттео Італія

2

PowerShell, 20 байт

for(;!(read-host)){}

запускає цикл,

read-host запити на введення

якщо хост читання не повертає нічого, це не відповідає false, тому ми інвертуємо це !(...)і використовуємо це як перевірку кінця циклу.

набагато коротше, ніж будь-яке do{$a=read-host}while($a-eq"")типове рішення, що включає змінні.



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.